123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #include "drawobject.h"
- DrawObject::DrawObject(QObject* parent) : QObject(parent)
- {
- }
- void DrawObject::reSetPoints(QPoint& pt1, QPoint& pt2)
- {
- int x1 = pt1.x();
- int y1 = pt1.y();
- int x2 = pt2.x();
- int y2 = pt2.y();
- if (x1 > x2)
- {
- int x = x1;
- x1 = x2;
- x2 = x;
- }
- if (y1 > y2)
- {
- int y = y1;
- y1 = y2;
- y2 = y;
- }
- pt1 = QPoint(x1, y1);
- pt2 = QPoint(x2, y2);
- }
- int DrawObject::pointsXDistance(QPoint& pt1, QPoint& pt2)
- {
- return abs(pt1.x() - pt2.x());
- }
- int DrawObject::pointsYDistance(QPoint& pt1, QPoint& pt2)
- {
- return abs(pt1.y() - pt2.y());
- }
- int DrawObject::distance(QPoint pt1, QPoint pt2)
- {
- int n = sqrt((pt1.x() - pt2.x()) * (pt1.x() - pt2.x()) + (pt1.y() - pt2.y()) * (pt1.y() - pt2.y()));
- return n;
- }
- double DrawObject::distanced(QPoint pt1, QPoint pt2)
- {
- double n = sqrt((pt1.x() - pt2.x()) * (pt1.x() - pt2.x()) + (pt1.y() - pt2.y()) * (pt1.y() - pt2.y()));
- return n;
- }
- void DrawObject::drawRect(QPainter& painter, QPoint& pt1, QPoint& pt2)
- {
- QPoint p1 = pt1;
- QPoint p2 = pt2;
- reSetPoints(p1, p2);
- painter.drawLine(pt1.x(), pt1.y(), pt2.x(), pt1.y());
- painter.drawLine(pt1.x(), pt1.y(), pt1.x(), pt2.y());
- painter.drawLine(pt1.x(), pt2.y(), pt2.x(), pt2.y());
- painter.drawLine(pt2.x(), pt1.y(), pt2.x(), pt2.y());
- }
- void DrawObject::drawRect(QPainter& painter, int startX, int startY, QRect rc)
- {
- QRect newRc = QRect(startX + rc.x(), startY + rc.y(), rc.width(), rc.height());
- painter.drawRect(newRc);
- }
- void DrawObject::drawRect(QPainter& painter, int startX, int startY, QPoint center, int width, int height)
- {
- QRect rc = QRect(startX + center.x() - width / 2, startY + center.y() - height / 2, width, height);
- painter.drawRect(rc);
- }
- void DrawObject::drawPixmap(QPainter& painter, int startX, int startY, QRect rc, QPixmap& pix)
- {
- QRect newRc = QRect(startX + rc.x(), startY + rc.y(), rc.width(), rc.height());
- painter.drawPixmap(newRc, pix, pix.rect());
- }
- void DrawObject::drawPixmap(QPainter& painter, int startX, int startY, QPoint center, int width, int height, QPixmap& pix)
- {
- QRect rc = QRect(startX + center.x() - width / 2, startY + center.y() - height / 2, width, height);
- painter.drawPixmap(rc, pix, pix.rect());
- }
- void DrawObject::drawPixmap(QPainter& painter, double angle, int startX, int startY, QPoint center, int width, int height, QPixmap& pix)
- {
- painter.translate(startX + center.x(), startY + center.y());
- painter.rotate(angle);
- QRect rc = QRect(- width / 2, - height / 2, width, height);
- painter.drawPixmap(rc, pix, pix.rect());
- }
- void DrawObject::drawLine(QPainter& painter, int startX, int startY, QPoint pt1, QPoint pt2)
- {
- QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
- QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
- painter.drawLine(p1, p2);
- }
- bool DrawObject::pointInLine(QPoint pt1, QPoint pt2, QPoint pt)
- {
- if ((distance(pt1, pt) + distance(pt2, pt)) == distance(pt1, pt2))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- void DrawObject::drawStraightLine(QPainter& painter, QPoint& pt1, QPoint pt2)
- {
- int x = abs(pt1.x() - pt2.x());
- int y = abs(pt1.y() - pt2.y());
- if (x > y)
- {
- painter.drawLine(pt1.x(), pt1.y(), pt2.x(), pt1.y());
- }
- else
- {
- painter.drawLine(pt1.x(), pt1.y(), pt1.x(), pt2.y());
- }
- }
- QPoint DrawObject::getStraightLineEndPoint(QPoint& pt1, QPoint pt2)
- {
- int x = abs(pt1.x() - pt2.x());
- int y = abs(pt1.y() - pt2.y());
- if (x > y)
- {
- return QPoint(pt2.x(), pt1.y());
- }
- else
- {
- return QPoint(pt1.x(), pt2.y());
- }
- }
- QPoint DrawObject::getTwoPointsCenter(QPoint& pt1, QPoint pt2)
- {
- return QPoint((pt1.x() + pt2.x()) / 2, (pt1.y() + pt2.y()) / 2);
- }
- bool DrawObject::rectContainsPoint(int startX, int startY, QRect& rc, QPoint& pt)
- {
- QRect newRc = QRect(rc.left() + startX, rc.top() + startY, rc.width(), rc.height());
- return newRc.contains(pt);
- }
- bool DrawObject::pointInLine(int startX, int startY, QPoint pt1, QPoint pt2, QPoint& pt)
- {
- QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
- QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
- if (abs(distance(p1, pt) + distance(p2, pt) - distance(p1, p2)) <= 1)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- bool DrawObject::pointInLined(int startX, int startY, QPoint pt1, QPoint pt2, QPoint& pt)
- {
- QPoint p1 = QPoint(pt1.x() + startX, pt1.y() + startY);
- QPoint p2 = QPoint(pt2.x() + startX, pt2.y() + startY);
- if (abs(distanced(p1, pt) + distanced(p2, pt) - distanced(p1, p2)) <= 0.05)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- int DrawObject::rectAreaSize(QRect& rect)
- {
- return rect.width() * rect.height();
- }
- void DrawObject::resetRect(QRect& rc, QPoint center, int width, int height)
- {
- rc = QRect(center.x() - width / 2, center.y() - height / 2, width, height);
- }
- double DrawObject::radianToAngle(double d)
- {
- return d * (180 / 3.141592653);
- }
- double DrawObject::angleToRadian(double d)
- {
- return d * (3.141592653 / 180);
- }
- QRect DrawObject::getRect(QPoint pt1, QPoint pt2)
- {
- return QRect(pt1.x(), pt1.y(), abs(pt1.x() - pt2.x()), abs(pt1.y() - pt2.y()));
- }
- double DrawObject::getLineRadian(QPoint pt1, QPoint pt2)
- {
- return atan2(pt2.y() - pt1.y(), pt2.x() - pt1.x());
- }
- double DrawObject::getLineAngle(QPoint pt1, QPoint pt2)
- {
- return atan2(pt2.y() - pt1.y(), pt2.x() - pt1.x()) * (180 / 3.141592653);
- }
|