From 5cea2f83bc7cd54d899d00b9957ff486442211bd Mon Sep 17 00:00:00 2001 From: wandererfan Date: Tue, 4 Jun 2019 08:46:25 -0400 Subject: [PATCH] Fix "trails" on dim lines when zoomed in --- src/Mod/TechDraw/Gui/QGIDimLines.cpp | 10 ++++++++++ src/Mod/TechDraw/Gui/QGIDimLines.h | 1 + src/Mod/TechDraw/Gui/QGIViewDimension.cpp | 13 +++++++++++-- src/Mod/TechDraw/Gui/QGIViewDimension.h | 7 ++++--- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 10 ++++++++++ src/Mod/TechDraw/Gui/QGIViewPart.h | 3 +++ 6 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGIDimLines.cpp b/src/Mod/TechDraw/Gui/QGIDimLines.cpp index a5ed16dc39..564108a9d9 100644 --- a/src/Mod/TechDraw/Gui/QGIDimLines.cpp +++ b/src/Mod/TechDraw/Gui/QGIDimLines.cpp @@ -50,11 +50,21 @@ void QGIDimLines::draw() { } +QRectF QGIDimLines::boundingRect() const +{ + return shape().boundingRect().adjusted(-2, -2, 2, 2); //room for 0.5 line widths? needs Rez::guiX?? +// return childrenBoundingRect().adjusted(-2,-2,2,2); +} + //probably don't need this paint void QGIDimLines::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QStyleOptionGraphicsItem myOption(*option); myOption.state &= ~QStyle::State_Selected; +// painter->drawRect(boundingRect()); //good for debugging + QGIPrimPath::paint (painter, &myOption, widget); } + + diff --git a/src/Mod/TechDraw/Gui/QGIDimLines.h b/src/Mod/TechDraw/Gui/QGIDimLines.h index 2599e15f7e..24c0362aeb 100644 --- a/src/Mod/TechDraw/Gui/QGIDimLines.h +++ b/src/Mod/TechDraw/Gui/QGIDimLines.h @@ -41,6 +41,7 @@ public: enum {Type = QGraphicsItem::UserType + 175}; int type() const { return Type;} + QRectF boundingRect() const; public: void draw(); diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index fa5caf1ac5..120c1d63af 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -1268,8 +1268,9 @@ void QGIViewDimension::draw() ccwInner = false; } - double dimLineAdjust = Rez::guiX(QGIArrow::getOverlapAdjust(QGIArrow::getPrefArrowStyle(), - QGIArrow::getPrefArrowSize())); + //TODO: figure out the math for adjusting the arc so the tip doesn't overlap the arrowhead. +// double dimLineAdjust = Rez::guiX(QGIArrow::getOverlapAdjust(QGIArrow::getPrefArrowStyle(), +// QGIArrow::getPrefArrowSize())); QRectF mappedRect = mapRectFromItem(datumLabel, datumLabel->boundingRect()); lblCenter = Base::Vector3d(mappedRect.center().x(), mappedRect.center().y(), 0.0); @@ -1473,6 +1474,8 @@ void QGIViewDimension::paint ( QPainter * painter, const QStyleOptionGraphicsIte } else { setPens(); } +// painter->drawRect(boundingRect()); //good for debugging + QGIView::paint (painter, &myOption, widget); setPens(); } @@ -1589,4 +1592,10 @@ double QGIViewDimension::getDefaultTextVerticalOffset() const return textMult*Rez::guiX(vp->Fontsize.getValue()) + TextOffsetFudge; } +QRectF QGIViewDimension::boundingRect() const +{ + return childrenBoundingRect().adjusted(-3,-3,3,3); +} + + #include diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.h b/src/Mod/TechDraw/Gui/QGIViewDimension.h index 7e4556263a..bdd4b63817 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.h +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.h @@ -130,12 +130,13 @@ public: void setViewPartFeature(TechDraw::DrawViewDimension *obj); int type() const override { return Type;} - - virtual void drawBorder() override; - virtual void updateView(bool update = false) override; + QRectF boundingRect() const; virtual void paint( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ) override; + + virtual void drawBorder() override; + virtual void updateView(bool update = false) override; virtual QColor getNormalColor(void) override; QString getLabelText(void); diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 0ec0c2e420..ea21c0b6e7 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -1058,6 +1058,16 @@ QRectF QGIViewPart::boundingRect() const return QGIView::boundingRect(); } +void QGIViewPart::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { + QStyleOptionGraphicsItem myOption(*option); + myOption.state &= ~QStyle::State_Selected; + +// painter->drawRect(boundingRect()); //good for debugging + + QGIView::paint (painter, &myOption, widget); +} + + //QGIViewPart derived classes do not need a rotate view method as rotation is handled on App side. void QGIViewPart::rotateView(void) { diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.h b/src/Mod/TechDraw/Gui/QGIViewPart.h index 51bff1994f..eff897915d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.h +++ b/src/Mod/TechDraw/Gui/QGIViewPart.h @@ -51,6 +51,9 @@ public: enum {Type = QGraphicsItem::UserType + 102}; int type() const override { return Type;} + virtual void paint( QPainter * painter, + const QStyleOptionGraphicsItem * option, + QWidget * widget = 0 ) override; void toggleCache(bool state) override;