#include "MyQGraphicsLineItem.h" MyQGraphicsLineItem::MyQGraphicsLineItem(QObject *parent) : QObject(parent) { } MyQGraphicsLineItem::~MyQGraphicsLineItem() { } bool MyQGraphicsLineItem::JudgeIsFeatruePoint(QPointF& mousePos) { QLineF mySelfScenePosLine = QLineF(this->scenePos().x(),this->scenePos().y(), this->scenePos().x() + (m_secondPoint.x() - m_firstPoint.x()), this->scenePos().y() + (m_secondPoint.y() - m_firstPoint.y())); double angle1 = mySelfScenePosLine.angleTo(m_levelLine); // 自己线和水平线之间的夹角 double angle2 = angle1 - m_rotateAngle; //旋转之后的终点和水平线之间的夹角 double lineLength = this->line().length(); double afterRoateSceneX = lineLength * cos(angle2 * PI_2 / H_ANGLE) + this->scenePos().x(); double afterRotateSceneY = lineLength * sin(angle2 * PI_2 / H_ANGLE) + this->scenePos().y(); //qDebug() << mousePos.x() << " " << afterRoateSceneX<<" " << mousePos.y() << " " << afterRotateSceneY; if (abs(mousePos.x() - afterRoateSceneX) <= FEATURE_POINT_SIZE && abs(mousePos.y() - afterRotateSceneY) <= FEATURE_POINT_SIZE) { return true; } return false; } void MyQGraphicsLineItem::SetLineItemAttr(QPointF& firstPoint, QPointF& secondPoint) { m_firstPoint = firstPoint; m_secondPoint = secondPoint; //设置水平线 m_levelLine.setP1(m_firstPoint); m_levelLine.setP2(QPointF(m_firstPoint.x() + 100, m_firstPoint.y())); //设置当前线位置 setPos(m_firstPoint); //设置ID //m_id = GlobalDefine::GetInstance()->GetItemId(); } void MyQGraphicsLineItem::SetActualCoordAndUpdate(double actualP1DieCoordX, double actualP1DieCoordY, double actualP2DieCoordX, double actualP2DieCoordY) { m_actualP1DieCoordX = actualP1DieCoordX; m_actualP1DieCoordY = actualP1DieCoordY; m_actualP2DieCoordX = actualP2DieCoordX; m_actualP2DieCoordY = actualP2DieCoordY; m_firstPoint.setX(m_actualP1DieCoordX * DIE_SCALE); m_firstPoint.setY(m_actualP1DieCoordY * DIE_SCALE); m_secondPoint.setX(m_actualP2DieCoordX * DIE_SCALE); m_secondPoint.setY(m_actualP2DieCoordY * DIE_SCALE); //如果存在旋转必须归0,不然会存在新线段依然存在旋转 setRotation(0); m_rotateAngle = 0; this->setLine(0,0, m_actualP2DieCoordX * DIE_SCALE - m_actualP1DieCoordX * DIE_SCALE, m_actualP2DieCoordY * DIE_SCALE - m_actualP1DieCoordY * DIE_SCALE); setPos(0, 0); setPos(m_actualP1DieCoordX * DIE_SCALE, m_actualP1DieCoordY * DIE_SCALE); } void MyQGraphicsLineItem::SetLineCoord(double x1, double y1, double x2, double y2, bool isScale) { m_actualP1DieCoordX = x1; m_actualP1DieCoordY = y1; m_actualP2DieCoordX = x2; m_actualP2DieCoordY = y2; if (isScale) { setLine(x1 * DIE_SCALE, y1 * DIE_SCALE, x2 * DIE_SCALE, y2 * DIE_SCALE); } else { setLine(x1, y1, x2, y2); } } double MyQGraphicsLineItem::GetStartAngle() { //qDebug() << m_firstPoint.x()<<" "<< m_firstPoint.y()<setPen(pen); // painter->setBrush(Qt::blue); // double featurePointX = 0.0; // double freaturePointY = 0.0; // line().p2().x() > line().p1().x() ? featurePointX = line().p2().x() - FEATURE_POINT_SIZE / 2 : // featurePointX = line().p2().x() + FEATURE_POINT_SIZE / 2; // line().p2().y() > line().p1().y() ? freaturePointY = line().p2().y() - FEATURE_POINT_SIZE / 2 : // freaturePointY = line().p2().y() + FEATURE_POINT_SIZE / 2; // painter->drawEllipse(QPointF(featurePointX, freaturePointY), FEATURE_POINT_SIZE / 2, FEATURE_POINT_SIZE / 2); //} } void MyQGraphicsLineItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (m_isCoordAxis) { return; } if (event->button() == Qt::LeftButton) { emit signal_select(m_id); m_mousePressDownPos = event->scenePos(); m_isPressDown = true; m_isInFraturePoint = false; if (JudgeIsFeatruePoint(m_mousePressDownPos)) { m_isInFraturePoint = true; } } } //void MyQGraphicsLineItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) //{ // if (m_isCoordAxis) // { // return; // } // if (m_isPressDown) // { // if (m_isInFraturePoint) // { // setTransformOriginPoint(this->scenePos() - this->scenePos()); // // QLineF mouseLine; // mouseLine.setP1(this->scenePos()); // mouseLine.setP2(QPointF(event->scenePos().x(), event->scenePos().y())); // // QLineF mySelfScenePosLine = QLineF(this->scenePos().x(), this->scenePos().y(), // this->scenePos().x() + (m_secondPoint.x() - m_firstPoint.x()), // this->scenePos().y() + (m_secondPoint.y() - m_firstPoint.y())); // // double angleNum = mySelfScenePosLine.angleTo(mouseLine); // m_rotateAngle = angleNum; // setRotation(-angleNum); // } // else // { // setPos(event->scenePos().x() , event->scenePos().y()); // } // } //} //void MyQGraphicsLineItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) //{ // if (m_isCoordAxis) // { // return; // } // // if (event->button() == Qt::LeftButton) // { // m_isPressDown = false; // m_isInFraturePoint = false; // } //}