diff --git a/src/Mod/TechDraw/Gui/QGIDatumLabel.cpp b/src/Mod/TechDraw/Gui/QGIDatumLabel.cpp index 176f1491e6..ad6b34f7f6 100644 --- a/src/Mod/TechDraw/Gui/QGIDatumLabel.cpp +++ b/src/Mod/TechDraw/Gui/QGIDatumLabel.cpp @@ -52,8 +52,6 @@ namespace TechDrawGui { QGIDatumLabel::QGIDatumLabel() : m_dragState(DragState::NoDrag) { verticalSep = false; - posX = 0; - posY = 0; parent = nullptr; @@ -121,7 +119,6 @@ QVariant QGIDatumLabel::itemChange(GraphicsItemChange change, const QVariant& va snapPosition(newPos); } - setLabelCenter(); m_dragState = DragState::Dragging; Q_EMIT dragging(m_ctrl); } @@ -343,6 +340,11 @@ void QGIDatumLabel::updateFrameRect() { m_frame->setRect(tightBoundingRect()); } +void QGIDatumLabel::boundingRectChanged() +{ + setTransformOriginPoint(tightBoundingRect().center()); +} + void QGIDatumLabel::setLineWidth(double lineWidth) { QPen pen = m_frame->pen(); @@ -371,20 +373,17 @@ void QGIDatumLabel::paint(QPainter* painter, const QStyleOptionGraphicsItem* opt void QGIDatumLabel::setPosFromCenter(const double& xCenter, const double& yCenter) { - prepareGeometryChange(); - auto* qgivd = dynamic_cast(parentItem()); - if (!qgivd) { - return; - } - const auto dim(dynamic_cast(qgivd->getViewObject())); - if (!dim) { - return; - } - //set label's Qt position(top, left) given boundingRect center point - Base::Vector2d vec = getPosToCenterVec(); - setPos(xCenter - vec.x, yCenter - vec.y); + Base::Vector2d centerOffset = getPosToCenterVec(); + double xTopLeft = xCenter - centerOffset.x; + double yTopLeft = yCenter - centerOffset.y; + setPos(xTopLeft, yTopLeft); + updateChildren(); +} +void QGIDatumLabel::updateChildren() +{ + prepareGeometryChange(); QString uText = m_unitText->toPlainText(); if ((uText.size() > 0) && (uText.at(0) != QChar::fromLatin1(' '))) { QString vText = m_dimText->toPlainText(); @@ -415,18 +414,9 @@ void QGIDatumLabel::setPosFromCenter(const double& xCenter, const double& yCente m_tolTextUnder->justifyLeftAt(tolLeft + tol_adj.x(), middle + overBox.height() + tol_adj.y()/2.0, false); } -void QGIDatumLabel::setLabelCenter() -{ - //save label's bRect center (posX, posY) given Qt position (top, left) - Base::Vector2d vec = getPosToCenterVec(); - posX = x() + vec.x; - posY = y() + vec.y; -} - -Base::Vector2d QGIDatumLabel::getPosToCenterVec() +Base::Vector2d QGIDatumLabel::getPosToCenterVec() const { QPointF center = tightBoundingRect().center(); - return Base::Vector2d(center.x(), center.y()); } @@ -442,6 +432,7 @@ void QGIDatumLabel::setFont(QFont font) m_tolTextOver->setFont(tFont); m_tolTextUnder->setFont(tFont); updateFrameRect(); + boundingRectChanged(); } void QGIDatumLabel::setDimString(QString text, qreal maxWidth) @@ -450,6 +441,7 @@ void QGIDatumLabel::setDimString(QString text, qreal maxWidth) m_dimText->setPlainText(text); m_dimText->setTextWidth(maxWidth); updateFrameRect(); + boundingRectChanged(); } void QGIDatumLabel::setToleranceString() @@ -473,6 +465,7 @@ void QGIDatumLabel::setToleranceString() m_tolTextOver->setPlainText(QString()); m_tolTextUnder->setPlainText(QString()); updateFrameRect(); + boundingRectChanged(); return; } @@ -511,6 +504,7 @@ void QGIDatumLabel::setToleranceString() } updateFrameRect(); + boundingRectChanged(); } diff --git a/src/Mod/TechDraw/Gui/QGIDatumLabel.h b/src/Mod/TechDraw/Gui/QGIDatumLabel.h index 8dc03f8bbf..3df40007a0 100644 --- a/src/Mod/TechDraw/Gui/QGIDatumLabel.h +++ b/src/Mod/TechDraw/Gui/QGIDatumLabel.h @@ -52,9 +52,9 @@ public: QWidget *widget = nullptr ) override; void setLabelCenter(); void setPosFromCenter(const double &xCenter, const double &yCenter); - double X() const { return posX; } - double Y() const { return posY; } //minus posY? - Base::Vector2d getPosToCenterVec(); + double X() const { return x() + getPosToCenterVec().x; } + double Y() const { return y() + getPosToCenterVec().y; } + Base::Vector2d getPosToCenterVec() const; void setFont(QFont font); QFont getFont() const { return m_dimText->font(); } @@ -97,6 +97,8 @@ protected: void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override; void updateFrameRect(); + void updateChildren(); + void boundingRectChanged(); int getPrecision(); @@ -122,9 +124,6 @@ private: QColor m_colNormal; bool m_ctrl; - double posX; - double posY; - DragState m_dragState; private: diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index 5be1fb8d5c..6bc127547d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -192,12 +192,6 @@ void QGIViewDimension::setViewPartFeature(TechDraw::DrawViewDimension* obj) setViewFeature(static_cast(obj)); dvDimension = obj; - // Set the QGIGroup Properties based on the DrawView - float x = Rez::guiX(obj->X.getValue()); - float y = Rez::guiX(-obj->Y.getValue()); - - datumLabel->setPosFromCenter(x, y); - setNormalColorAll(); setPrettyNormal(); @@ -248,23 +242,19 @@ void QGIViewDimension::updateView(bool update) return; } + updateDim(); + if (update || dim->X.isTouched() || dim->Y.isTouched()) { float x = Rez::guiX(dim->X.getValue()); float y = Rez::guiX(dim->Y.getValue()); datumLabel->setPosFromCenter(x, -y); - updateDim(); } - else if (vp->Fontsize.isTouched() || vp->Font.isTouched()) { - updateDim(); - } - else if (vp->LineWidth.isTouched()) { - m_lineWidth = vp->LineWidth.getValue(); - updateDim(); - } - else { - updateDim(); + if (vp->LineWidth.isTouched()) { + m_lineWidth = Rez::guiX(vp->LineWidth.getValue()); } + updateDim(); + // needs Phase 2 of autocorrect to be useful // if (dim->hasGoodReferences()) { // m_refFlag->hide(); @@ -304,7 +294,6 @@ void QGIViewDimension::updateDim() prepareGeometryChange(); datumLabel->setDimString(labelText); datumLabel->setToleranceString(); - datumLabel->setPosFromCenter(datumLabel->X(), datumLabel->Y()); datumLabel->setFramed(dim->TheoreticalExact.getValue()); datumLabel->setLineWidth(m_lineWidth); @@ -380,7 +369,6 @@ void QGIViewDimension::draw() return; } - m_lineWidth = Rez::guiX(vp->LineWidth.getValue()); datumLabel->setRotation(0.0); datumLabel->show(); @@ -1308,7 +1296,6 @@ void QGIViewDimension::drawDistanceExecutive(const Base::Vector2d& startPoint, } } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(distancePath); @@ -1521,7 +1508,6 @@ void QGIViewDimension::drawDistanceOverride(const Base::Vector2d& startPoint, } } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(distancePath); @@ -1733,7 +1719,6 @@ void QGIViewDimension::drawRadiusExecutive(const Base::Vector2d& centerPoint, standardStyle); } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(radiusPath); @@ -1806,7 +1791,6 @@ void QGIViewDimension::drawAreaExecutive(const Base::Vector2d& centerPoint, doub standardStyle); } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(areaPath); @@ -2008,7 +1992,6 @@ void QGIViewDimension::drawDiameter(TechDraw::DrawViewDimension* dimension, standardStyle); } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(diameterPath); @@ -2237,7 +2220,6 @@ void QGIViewDimension::drawAngle(TechDraw::DrawViewDimension* dimension, } } - datumLabel->setTransformOriginPoint(datumLabel->boundingRect().center()); datumLabel->setRotation(toQtDeg(labelAngle)); dimLines->setPath(anglePath);