drawobject.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include "drawobject.h"
  2. DrawObject::DrawObject(QObject* parent) : QObject(parent)
  3. {
  4. }
  5. void DrawObject::reSetPoints(QPoint& pt1, QPoint& pt2)
  6. {
  7. int x1 = pt1.x();
  8. int y1 = pt1.y();
  9. int x2 = pt2.x();
  10. int y2 = pt2.y();
  11. if (x1 > x2)
  12. {
  13. int x = x1;
  14. x1 = x2;
  15. x2 = x;
  16. }
  17. if (y1 > y2)
  18. {
  19. int y = y1;
  20. y1 = y2;
  21. y2 = y;
  22. }
  23. pt1 = QPoint(x1, y1);
  24. pt2 = QPoint(x2, y2);
  25. }
  26. int DrawObject::pointsXDistance(QPoint& pt1, QPoint& pt2)
  27. {
  28. return abs(pt1.x() - pt2.x());
  29. }
  30. int DrawObject::pointsYDistance(QPoint& pt1, QPoint& pt2)
  31. {
  32. return abs(pt1.y() - pt2.y());
  33. }
  34. int DrawObject::distance(QPoint pt1, QPoint pt2)
  35. {
  36. int n = sqrt((pt1.x() - pt2.x()) * (pt1.x() - pt2.x()) + (pt1.y() - pt2.y()) * (pt1.y() - pt2.y()));
  37. return n;
  38. }
  39. double DrawObject::distanced(QPoint pt1, QPoint pt2)
  40. {
  41. double n = sqrt((pt1.x() - pt2.x()) * (pt1.x() - pt2.x()) + (pt1.y() - pt2.y()) * (pt1.y() - pt2.y()));
  42. return n;
  43. }
  44. void DrawObject::drawRect(QPainter& painter, QPoint& pt1, QPoint& pt2)
  45. {
  46. QPoint p1 = pt1;
  47. QPoint p2 = pt2;
  48. reSetPoints(p1, p2);
  49. painter.drawLine(pt1.x(), pt1.y(), pt2.x(), pt1.y());
  50. painter.drawLine(pt1.x(), pt1.y(), pt1.x(), pt2.y());
  51. painter.drawLine(pt1.x(), pt2.y(), pt2.x(), pt2.y());
  52. painter.drawLine(pt2.x(), pt1.y(), pt2.x(), pt2.y());
  53. }
  54. void DrawObject::drawRect(QPainter& painter, int startX, int startY, QRect rc)
  55. {
  56. QRect newRc = QRect(startX + rc.x(), startY + rc.y(), rc.width(), rc.height());
  57. painter.drawRect(newRc);
  58. }
  59. void DrawObject::drawRect(QPainter& painter, int startX, int startY, QPoint center, int width, int height)
  60. {
  61. QRect rc = QRect(startX + center.x() - width / 2, startY + center.y() - height / 2, width, height);
  62. painter.drawRect(rc);
  63. }
  64. void DrawObject::drawPixmap(QPainter& painter, int startX, int startY, QRect rc, QPixmap& pix)
  65. {
  66. QRect newRc = QRect(startX + rc.x(), startY + rc.y(), rc.width(), rc.height());
  67. painter.drawPixmap(newRc, pix, pix.rect());
  68. }
  69. void DrawObject::drawPixmap(QPainter& painter, int startX, int startY, QPoint center, int width, int height, QPixmap& pix)
  70. {
  71. QRect rc = QRect(startX + center.x() - width / 2, startY + center.y() - height / 2, width, height);
  72. painter.drawPixmap(rc, pix, pix.rect());
  73. }
  74. void DrawObject::drawPixmap(QPainter& painter, double angle, int startX, int startY, QPoint center, int width, int height, QPixmap& pix)
  75. {
  76. painter.translate(startX + center.x(), startY + center.y());
  77. painter.rotate(angle);
  78. QRect rc = QRect(- width / 2, - height / 2, width, height);
  79. painter.drawPixmap(rc, pix, pix.rect());
  80. }
  81. void DrawObject::drawLine(QPainter& painter, int startX, int startY, QPoint pt1, QPoint pt2)
  82. {
  83. QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
  84. QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
  85. painter.drawLine(p1, p2);
  86. }
  87. bool DrawObject::pointInLine(QPoint pt1, QPoint pt2, QPoint pt)
  88. {
  89. if ((distance(pt1, pt) + distance(pt2, pt)) == distance(pt1, pt2))
  90. {
  91. return true;
  92. }
  93. else
  94. {
  95. return false;
  96. }
  97. }
  98. void DrawObject::drawStraightLine(QPainter& painter, QPoint& pt1, QPoint pt2)
  99. {
  100. int x = abs(pt1.x() - pt2.x());
  101. int y = abs(pt1.y() - pt2.y());
  102. if (x > y)
  103. {
  104. painter.drawLine(pt1.x(), pt1.y(), pt2.x(), pt1.y());
  105. }
  106. else
  107. {
  108. painter.drawLine(pt1.x(), pt1.y(), pt1.x(), pt2.y());
  109. }
  110. }
  111. QPoint DrawObject::getStraightLineEndPoint(QPoint& pt1, QPoint pt2)
  112. {
  113. int x = abs(pt1.x() - pt2.x());
  114. int y = abs(pt1.y() - pt2.y());
  115. if (x > y)
  116. {
  117. return QPoint(pt2.x(), pt1.y());
  118. }
  119. else
  120. {
  121. return QPoint(pt1.x(), pt2.y());
  122. }
  123. }
  124. QPoint DrawObject::getTwoPointsCenter(QPoint& pt1, QPoint pt2)
  125. {
  126. return QPoint((pt1.x() + pt2.x()) / 2, (pt1.y() + pt2.y()) / 2);
  127. }
  128. bool DrawObject::rectContainsPoint(int startX, int startY, QRect& rc, QPoint& pt)
  129. {
  130. QRect newRc = QRect(rc.left() + startX, rc.top() + startY, rc.width(), rc.height());
  131. return newRc.contains(pt);
  132. }
  133. bool DrawObject::pointInLine(int startX, int startY, QPoint pt1, QPoint pt2, QPoint& pt)
  134. {
  135. QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
  136. QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
  137. if (abs(distance(p1, pt) + distance(p2, pt) - distance(p1, p2)) <= 1)
  138. {
  139. return true;
  140. }
  141. else
  142. {
  143. return false;
  144. }
  145. }
  146. bool DrawObject::pointInLined(int startX, int startY, QPoint pt1, QPoint pt2, QPoint& pt)
  147. {
  148. QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
  149. QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
  150. if (abs(distanced(p1, pt) + distanced(p2, pt) - distanced(p1, p2)) <= 0.05)
  151. {
  152. return true;
  153. }
  154. else
  155. {
  156. return false;
  157. }
  158. }
  159. int DrawObject::rectAreaSize(QRect& rect)
  160. {
  161. return rect.width() * rect.height();
  162. }
  163. void DrawObject::resetRect(QRect& rc, QPoint center, int width, int height)
  164. {
  165. rc = QRect(center.x() - width / 2, center.y() - height / 2, width, height);
  166. }
  167. double DrawObject::radianToAngle(double d)
  168. {
  169. return d * (180 / 3.141592653);
  170. }
  171. double DrawObject::angleToRadian(double d)
  172. {
  173. return d * (3.141592653 / 180);
  174. }
  175. QRect DrawObject::getRect(QPoint pt1, QPoint pt2)
  176. {
  177. return QRect(pt1.x(), pt1.y(), abs(pt1.x() - pt2.x()), abs(pt1.y() - pt2.y()));
  178. }
  179. double DrawObject::getLineRadian(QPoint pt1, QPoint pt2)
  180. {
  181. return atan2(pt2.y() - pt1.y(), pt2.x() - pt1.x());
  182. }
  183. double DrawObject::getLineAngle(QPoint pt1, QPoint pt2)
  184. {
  185. return atan2(pt2.y() - pt1.y(), pt2.x() - pt1.x()) * (180 / 3.141592653);
  186. }