From 44b7c8e34b8a8a1f8cd275ab2079aa4233d3f016 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Tue, 3 Sep 2024 18:01:47 -0400 Subject: [PATCH] [TD]fix initial balloon placement on rotated view (fix #16234) --- src/Mod/TechDraw/Gui/QGSPage.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGSPage.cpp b/src/Mod/TechDraw/Gui/QGSPage.cpp index 218bea47db..b91c144d9a 100644 --- a/src/Mod/TechDraw/Gui/QGSPage.cpp +++ b/src/Mod/TechDraw/Gui/QGSPage.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -533,7 +534,6 @@ QGIView* QGSPage::addDrawViewImage(TechDraw::DrawViewImage* imageFeat) QGIView* QGSPage::addViewBalloon(TechDraw::DrawViewBalloon* balloonFeat) { - // Base::Console().Message("QGSP::addViewBalloon(%s)\n", balloonFeat->getNameInDocument()); auto vBalloon(new QGIViewBalloon); addItem(vBalloon); @@ -552,7 +552,6 @@ QGIView* QGSPage::addViewBalloon(TechDraw::DrawViewBalloon* balloonFeat) void QGSPage::addBalloonToParent(QGIViewBalloon* balloon, QGIView* parent) { - // Base::Console().Message("QGSP::addBalloonToParent()\n"); assert(balloon); assert(parent);//blow up if we don't have Dimension or Parent QPointF posRef(0., 0.); @@ -562,10 +561,9 @@ void QGSPage::addBalloonToParent(QGIViewBalloon* balloon, QGIView* parent) balloon->setZValue(ZVALUE::DIMENSION); } -//origin is in scene coordinates from QGViewPage +// origin is in scene coordinates from QGVPage widget void QGSPage::createBalloon(QPointF origin, DrawView* parent) { - // Base::Console().Message("QGSP::createBalloon(%s)\n", DrawUtil::formatVector(origin).c_str()); std::string featName = getDrawPage()->getDocument()->getUniqueObjectName("Balloon"); std::string pageName = getDrawPage()->getNameInDocument(); @@ -584,18 +582,20 @@ void QGSPage::createBalloon(QPointF origin, DrawView* parent) Command::doCommand(Command::Doc, "App.activeDocument().%s.SourceView = (App.activeDocument().%s)", featName.c_str(), parent->getNameInDocument()); + + // convert from scene coords to parent DrawView's coords, unscaled, unrotated QGIView* qgParent = getQGIVByName(parent->getNameInDocument()); - //convert from scene coords to qgParent coords and unscale - QPointF parentOrigin = qgParent->mapFromScene(origin) / parent->getScale(); + auto parentOrigin = DU::toVector3d(qgParent->mapFromScene(origin)); // from scene to view + parentOrigin = Rez::appX(parentOrigin) / parent->getScale(); // unrez & unscale + parentOrigin = DrawUtil::invertY(parentOrigin); // +Y up + auto parentRotationDeg = parent->Rotation.getValue(); + parentOrigin.RotateZ(Base::toRadians(-parentRotationDeg)); // unrotated + balloon->setOrigin(parentOrigin); - //convert origin to App side coords - QPointF appOrigin = Rez::appPt(parentOrigin); - appOrigin = DrawUtil::invertY(appOrigin); - balloon->OriginX.setValue(appOrigin.x()); - balloon->OriginY.setValue(appOrigin.y()); + double textOffset = 20.0 / parent->getScale(); - balloon->X.setValue(appOrigin.x() + textOffset); - balloon->Y.setValue(appOrigin.y() + textOffset); + balloon->setPosition(parentOrigin.x + textOffset, + parentOrigin.y + textOffset); int idx = getDrawPage()->getNextBalloonIndex(); balloon->Text.setValue(std::to_string(idx).c_str());