From b845bc7e412bda11d2766b140672d83fb4e6f9b8 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Sat, 3 Dec 2016 13:37:48 -0500 Subject: [PATCH] Fix DrawViewDetail behaviour near object edge --- src/Mod/TechDraw/App/DrawViewDetail.cpp | 3 +- src/Mod/TechDraw/Gui/QGIMatting.cpp | 52 ++++++++++++------------- src/Mod/TechDraw/Gui/QGIMatting.h | 3 +- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 7 +--- 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewDetail.cpp b/src/Mod/TechDraw/App/DrawViewDetail.cpp index a1b32abab..983f99b99 100644 --- a/src/Mod/TechDraw/App/DrawViewDetail.cpp +++ b/src/Mod/TechDraw/App/DrawViewDetail.cpp @@ -103,7 +103,6 @@ DrawViewDetail::DrawViewDetail() ADD_PROPERTY_TYPE(Reference ,("1"),dgroup,App::Prop_None,"An identifier for this detail"); getParameters(); - } DrawViewDetail::~DrawViewDetail() @@ -235,7 +234,7 @@ App::DocumentObjectExecReturn *DrawViewDetail::execute(void) gp_Pnt inputCenter; try { - inputCenter = TechDrawGeometry::findCentroid(detail, + inputCenter = TechDrawGeometry::findCentroid(tool, Direction.getValue()); TopoDS_Shape mirroredShape = TechDrawGeometry::mirrorShape(detail, inputCenter, diff --git a/src/Mod/TechDraw/Gui/QGIMatting.cpp b/src/Mod/TechDraw/Gui/QGIMatting.cpp index f6dd69799..d6502b31d 100644 --- a/src/Mod/TechDraw/Gui/QGIMatting.cpp +++ b/src/Mod/TechDraw/Gui/QGIMatting.cpp @@ -23,9 +23,6 @@ #include "PreCompiled.h" #ifndef _PreComp_ #include -//#include -//#include -//#include #include #include #endif @@ -55,16 +52,18 @@ QGIMatting::QGIMatting() : setFlag(QGraphicsItem::ItemIsSelectable, false); setFlag(QGraphicsItem::ItemIsMovable, false); - m_mat = new QGraphicsPathItem(); //QGIPrimPath?? + m_mat = new QGraphicsPathItem(); addToGroup(m_mat); m_border = new QGraphicsPathItem(); addToGroup(m_border); m_pen.setColor(Qt::white); - m_brush.setColor(Qt::white); - m_brush.setStyle(Qt::SolidPattern); // m_pen.setColor(Qt::black); // m_pen.setStyle(Qt::DashLine); + m_brush.setColor(Qt::white); +// m_brush.setColor(Qt::black); + m_brush.setStyle(Qt::SolidPattern); +// m_brush.setStyle(Qt::CrossPattern); // m_brush.setStyle(Qt::NoBrush); m_penB.setColor(Qt::black); m_brushB.setStyle(Qt::NoBrush); @@ -77,29 +76,14 @@ QGIMatting::QGIMatting() : setZValue(ZVALUE::MATTING); } -void QGIMatting::centerAt(QPointF centerPos) -{ - QRectF box = boundingRect(); - double width = box.width(); - double height = box.height(); - double newX = centerPos.x() - width/2.; - double newY = centerPos.y() - height/2.; - setPos(newX,newY); -} - -void QGIMatting::centerAt(double cX, double cY) -{ - QRectF box = boundingRect(); - double width = box.width(); - double height = box.height(); - double newX = cX - width/2.; - double newY = cY - height/2.; - setPos(newX,newY); -} - void QGIMatting::draw() { - QRectF outline(-m_width/2.0,-m_height/2.0,m_width,m_height); + prepareGeometryChange(); + double radiusFudge = 1.15; //keep slightly larger than fudge in App/DVDetail to prevent bleed through + double outerRadius = m_radius * radiusFudge; + m_width = outerRadius; + m_height = outerRadius; + QRectF outline(-m_width,-m_height,2.0 * m_width,2.0 * m_height); QPainterPath ppOut; ppOut.addRect(outline); QPainterPath ppCut; @@ -107,13 +91,15 @@ void QGIMatting::draw() QRectF roundCutout (-m_radius,-m_radius,2.0 * m_radius,2.0 * m_radius); ppCut.addEllipse(roundCutout); } else { - double squareSize = m_radius / 1.4142; //fit within radius + double squareSize = m_radius/ 1.4142; //fit just within radius QRectF squareCutout (-squareSize,-squareSize,2.0 * squareSize,2.0 * squareSize); ppCut.addRect(squareCutout); } ppOut.addPath(ppCut); m_mat->setPath(ppOut); m_border->setPath(ppCut); + m_mat->setZValue(ZVALUE::MATTING); + m_border->setZValue(ZVALUE::MATTING); } int QGIMatting::getHoleStyle() @@ -124,9 +110,19 @@ int QGIMatting::getHoleStyle() return style; } +//need this because QQGIG only updates BR when items added/deleted. +QRectF QGIMatting::boundingRect() const +{ + QRectF result ; + result = childrenBoundingRect().adjusted(-1,-1,1,1); + return result; +} + void QGIMatting::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) { QStyleOptionGraphicsItem myOption(*option); myOption.state &= ~QStyle::State_Selected; + //painter->drawRect(boundingRect().adjusted(-2.0,-2.0,2.0,2.0)); + QGraphicsItemGroup::paint (painter, &myOption, widget); } diff --git a/src/Mod/TechDraw/Gui/QGIMatting.h b/src/Mod/TechDraw/Gui/QGIMatting.h index 054b5eaa5..e24ec978b 100644 --- a/src/Mod/TechDraw/Gui/QGIMatting.h +++ b/src/Mod/TechDraw/Gui/QGIMatting.h @@ -49,8 +49,7 @@ public: int type() const { return Type;} virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 ); - virtual void centerAt(QPointF centerPos); - virtual void centerAt(double cX, double cY); + virtual QRectF boundingRect() const; virtual void setSize(double w, double h) {m_height = h; m_width = w;} //virtual void setHoleStyle(int hs) {m_holeStyle = hs;} diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 09b310340..4e49dc45a 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -310,8 +310,8 @@ void QGIViewPart::updateView(bool update) void QGIViewPart::draw() { drawViewPart(); - drawBorder(); drawMatting(); + drawBorder(); } void QGIViewPart::drawViewPart() @@ -625,11 +625,8 @@ void QGIViewPart::drawMatting() double radius = dvd->Radius.getValue() * scale; QGIMatting* mat = new QGIMatting(); addToGroup(mat); - mat->setPos(0.0,0.0); mat->setRadius(radius); - QRectF displayArea = customChildrenBoundingRect(); - mat->setSize(displayArea.width(),displayArea.height()); - //mat->setHoleStyle(dvd->getMattingStyle()); + mat->setPos(0.0,0.0); mat->draw(); mat->show(); }