diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index 62ed70945c..85ccc7786d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -102,6 +102,7 @@ QVariant QGIViewPart::itemChange(GraphicsItemChange change, const QVariant &valu return QGIView::itemChange(change, value); } +//obs? void QGIViewPart::tidy() { //Delete any leftover items @@ -249,21 +250,6 @@ void QGIViewPart::updateView(bool update) viewPart->ShowHiddenLines.isTouched() || viewPart->ShowSmoothLines.isTouched() || viewPart->ShowSeamLines.isTouched() ) { - // Remove all existing graphical representations (QGIxxxx) otherwise BRect only grows, never shrinks? - // is this where selection messes up? - prepareGeometryChange(); - QList items = childItems(); - for(QList::iterator it = items.begin(); it != items.end(); ++it) { - if (dynamic_cast (*it) || - dynamic_cast(*it) || - dynamic_cast(*it)) { - removeFromGroup(*it); - scene()->removeItem(*it); - - // We store these and delete till later to prevent rendering crash ISSUE - deleteItems.append(*it); - } - } draw(); } else if (update || viewPart->LineWidth.isTouched() || @@ -302,6 +288,7 @@ void QGIViewPart::drawViewPart() float lineWidthHid = viewPart->HiddenWidth.getValue() * lineScaleFactor; prepareGeometryChange(); + removePrimitives(); //clean the slate #if MOD_TECHDRAW_HANDLE_FACES // Draw Faces @@ -344,7 +331,7 @@ void QGIViewPart::drawViewPart() if (showEdge) { item = new QGIEdge(i); addToGroup(item); //item is at scene(0,0), not group(0,0) - item->setPos(0.0,0.0); + item->setPos(0.0,0.0); //now at group(0,0) item->setPath(drawPainterPath(*itEdge)); item->setStrokeWidth(lineWidth); item->setZValue(ZVALUE::EDGE); @@ -405,6 +392,21 @@ QGIFace* QGIViewPart::drawFace(TechDrawGeometry::Face* f, int idx) return gFace; } +//! Remove all existing QGIPrimPath items(Vertex,Edge,Face) +void QGIViewPart::removePrimitives() +{ + QList children = childItems(); + for (auto& c:children) { + QGIPrimPath* prim = dynamic_cast(c); + if (prim) { + removeFromGroup(prim); + scene()->removeItem(prim); +// deleteItems.append(prim); //pretty sure we could just delete here since not in scene anymore + delete prim; + } + } +} + // As called by arc of ellipse case: // pathArc(path, geom->major, geom->minor, geom->angle, geom->largeArc, geom->cw, // geom->endPnt.fX, geom->endPnt.fY, diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.h b/src/Mod/TechDraw/Gui/QGIViewPart.h index 40670583d6..b968c40950 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.h +++ b/src/Mod/TechDraw/Gui/QGIViewPart.h @@ -85,6 +85,7 @@ protected: TechDraw::DrawHatch* faceIsHatched(int i,std::vector hatchObjs) const; void dumpPath(const char* text,QPainterPath path); + void removePrimitives(void); private: QList deleteItems;