From d27480556793eddb0bd8befec44d72e55cc90b76 Mon Sep 17 00:00:00 2001 From: Aapo Date: Fri, 20 Nov 2020 23:43:54 +0200 Subject: [PATCH 1/3] [TD] Add Balloon property EndTypeScale for scaling line end decorations (arrows etc). --- src/Mod/TechDraw/App/DrawViewBalloon.cpp | 3 +++ src/Mod/TechDraw/App/DrawViewBalloon.h | 17 +++++++++-------- src/Mod/TechDraw/Gui/QGIViewBalloon.cpp | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.cpp b/src/Mod/TechDraw/App/DrawViewBalloon.cpp index b58c3328fd..2b8950b73c 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.cpp +++ b/src/Mod/TechDraw/App/DrawViewBalloon.cpp @@ -105,6 +105,9 @@ DrawViewBalloon::DrawViewBalloon(void) ADD_PROPERTY_TYPE(ShapeScale,(1.0),"",(App::PropertyType)(App::Prop_None),"Balloon shape scale"); ShapeScale.setConstraints(&SymbolScaleRange); + ADD_PROPERTY_TYPE(EndTypeScale,(1.0),"",(App::PropertyType)(App::Prop_None),"EndType shape scale"); + ShapeScale.setConstraints(&SymbolScaleRange); + ADD_PROPERTY_TYPE(TextWrapLen,(-1),"",(App::PropertyType)(App::Prop_None),"Text wrap length; -1 means no wrap"); ADD_PROPERTY_TYPE(KinkLength,(prefKinkLength()),"",(App::PropertyType)(App::Prop_None), diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.h b/src/Mod/TechDraw/App/DrawViewBalloon.h index a039ca2398..ac72ae8699 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.h +++ b/src/Mod/TechDraw/App/DrawViewBalloon.h @@ -49,15 +49,16 @@ public: DrawViewBalloon(); virtual ~DrawViewBalloon(); - App::PropertyLink SourceView; - App::PropertyString Text; - App::PropertyEnumeration EndType; - App::PropertyEnumeration BubbleShape; + App::PropertyLink SourceView; + App::PropertyString Text; + App::PropertyEnumeration EndType; + App::PropertyEnumeration BubbleShape; App::PropertyFloatConstraint ShapeScale; - App::PropertyDistance OriginX; - App::PropertyDistance OriginY; - App::PropertyFloat TextWrapLen; - App::PropertyDistance KinkLength; + App::PropertyFloatConstraint EndTypeScale; + App::PropertyDistance OriginX; + App::PropertyDistance OriginY; + App::PropertyFloat TextWrapLen; + App::PropertyDistance KinkLength; short mustExecute() const override; diff --git a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp index 9b590d6b03..c0be4e63bb 100644 --- a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp @@ -717,14 +717,14 @@ void QGIViewBalloon::draw() double yAdj = 0.0; int endType = balloon->EndType.getValue(); double arrowAdj = QGIArrow::getOverlapAdjust(endType, - QGIArrow::getPrefArrowSize()); + balloon->EndTypeScale.getValue()*QGIArrow::getPrefArrowSize()); if (endType == ArrowType::NONE) { arrow->hide(); } else { arrow->setStyle(endType); - arrow->setSize(QGIArrow::getPrefArrowSize()); + arrow->setSize(balloon->EndTypeScale.getValue()*QGIArrow::getPrefArrowSize()); arrow->draw(); Base::Vector3d arrowTipPos(arrowTipX, arrowTipY, 0.0); From 6670197fad2b12e252dfa977103a97c1fa4f04b9 Mon Sep 17 00:00:00 2001 From: Aapo Date: Sat, 21 Nov 2020 00:26:49 +0200 Subject: [PATCH 2/3] [TD] Add Balloon property LineVisible for making the Balloon line visible or hidden. --- src/Mod/TechDraw/App/DrawViewBalloon.cpp | 2 ++ src/Mod/TechDraw/App/DrawViewBalloon.h | 1 + src/Mod/TechDraw/Gui/QGIViewBalloon.cpp | 7 ++++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.cpp b/src/Mod/TechDraw/App/DrawViewBalloon.cpp index 2b8950b73c..9f8a397c39 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.cpp +++ b/src/Mod/TechDraw/App/DrawViewBalloon.cpp @@ -113,6 +113,8 @@ DrawViewBalloon::DrawViewBalloon(void) ADD_PROPERTY_TYPE(KinkLength,(prefKinkLength()),"",(App::PropertyType)(App::Prop_None), "Distance from symbol to leader kink"); + ADD_PROPERTY_TYPE(LineVisible,(true),"",(App::PropertyType)(App::Prop_None),"Balloon line visible or hidden"); + SourceView.setScope(App::LinkScope::Global); Rotation.setStatus(App::Property::Hidden,true); Caption.setStatus(App::Property::Hidden,true); diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.h b/src/Mod/TechDraw/App/DrawViewBalloon.h index ac72ae8699..0892aac32a 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.h +++ b/src/Mod/TechDraw/App/DrawViewBalloon.h @@ -59,6 +59,7 @@ public: App::PropertyDistance OriginY; App::PropertyFloat TextWrapLen; App::PropertyDistance KinkLength; + App::PropertyBool LineVisible; short mustExecute() const override; diff --git a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp index c0be4e63bb..d8404d9619 100644 --- a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp @@ -738,7 +738,7 @@ void QGIViewBalloon::draw() float arAngle = atan2(dirballoonLinesLine.y, dirballoonLinesLine.x) * 180 / M_PI; arrow->setPos(arrowTipX, arrowTipY); - if ( (endType == ArrowType::FILLED_TRIANGLE) && + if ( (endType == ArrowType::FILLED_TRIANGLE) && (prefOrthoPyramid()) ) { if (arAngle < 0.0) { arAngle += 360.0; @@ -765,6 +765,11 @@ void QGIViewBalloon::draw() dLinePath.lineTo(arrowTipX - xAdj, arrowTipY - yAdj); balloonLines->setPath(dLinePath); + if (!balloon->LineVisible.getValue()) { + arrow->hide(); + balloonLines->setPath(QPainterPath()); + } + // redraw the Balloon and the parent View if (hasHover && !isSelected()) { setPrettyPre(); From a421a35f1f5f8a72ca06ba8311641917cbfdb766 Mon Sep 17 00:00:00 2001 From: Aapo Date: Mon, 7 Dec 2020 23:48:28 +0200 Subject: [PATCH 3/3] [TD] Add a comment about QGIViewBalloon.cpp draw() function needing refactoring. --- src/Mod/TechDraw/Gui/QGIViewBalloon.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp index d8404d9619..1b7b062a0e 100644 --- a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp @@ -765,6 +765,7 @@ void QGIViewBalloon::draw() dLinePath.lineTo(arrowTipX - xAdj, arrowTipY - yAdj); balloonLines->setPath(dLinePath); + // This overwrites the previously created QPainterPath with empty one, in case it should be hidden. Should be refactored. if (!balloon->LineVisible.getValue()) { arrow->hide(); balloonLines->setPath(QPainterPath());