[TD]fix initial balloon placement on rotated view (fix #16234)
This commit is contained in:
committed by
Yorik van Havre
parent
f9b0ab73b4
commit
44b7c8e34b
@@ -34,6 +34,7 @@
|
||||
#include <App/Document.h>
|
||||
#include <Base/Console.h>
|
||||
#include <Base/Parameter.h>
|
||||
#include <Base/Tools.h>
|
||||
#include <Gui/Command.h>
|
||||
#include <Gui/Document.h>
|
||||
#include <Gui/Selection.h>
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user