diff --git a/src/Mod/TechDraw/App/DrawViewDetail.cpp b/src/Mod/TechDraw/App/DrawViewDetail.cpp index f712e62a8f..d3299f018b 100644 --- a/src/Mod/TechDraw/App/DrawViewDetail.cpp +++ b/src/Mod/TechDraw/App/DrawViewDetail.cpp @@ -248,6 +248,7 @@ App::DocumentObjectExecReturn *DrawViewDetail::execute(void) scale); gp_Ax2 viewAxis = getViewAxis(Base::Vector3d(inputCenter.X(),inputCenter.Y(),inputCenter.Z()),Direction.getValue()); geometryObject = buildGeometryObject(mirroredShape,viewAxis); + geometryObject->pruneVertexGeom(Base::Vector3d(0.0,0.0,0.0),Radius.getValue() * scale); //remove vertices beyond clipradius #if MOD_TECHDRAW_HANDLE_FACES if (handleFaces()) { diff --git a/src/Mod/TechDraw/App/GeometryObject.cpp b/src/Mod/TechDraw/App/GeometryObject.cpp index 96217c8016..70d74a4f5f 100644 --- a/src/Mod/TechDraw/App/GeometryObject.cpp +++ b/src/Mod/TechDraw/App/GeometryObject.cpp @@ -286,7 +286,6 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca edgeGeom.push_back(base); //add vertices of new edge if not already in list - bool skipDetail = false; if (visible) { BaseGeom* lastAdded = edgeGeom.back(); bool v1Add = true, v2Add = true; @@ -296,23 +295,9 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca TechDrawGeometry::Circle* circle = dynamic_cast(lastAdded); TechDrawGeometry::Vertex* c1 = nullptr; if (circle) { - // if this is the center of a detail view, skip it - TechDraw::DrawViewDetail* detail = isParentDetail(); - if (detail != nullptr) { - double scale = m_parent->Scale.getValue(); - if ( ((circle->center - Base::Vector2d(0.0,0.0)).Length() < Precision::Confusion()) && - (DrawUtil::fpCompare(circle->radius, scale * detail->getFudgeRadius())) ) { - skipDetail = true; - } else { - c1 = new TechDrawGeometry::Vertex(circle->center); - c1->isCenter = true; - c1->visible = true; - } - } else { - c1 = new TechDrawGeometry::Vertex(circle->center); - c1->isCenter = true; - c1->visible = true; - } + c1 = new TechDrawGeometry::Vertex(circle->center); + c1->isCenter = true; + c1->visible = true; } std::vector::iterator itVertex = vertexGeom.begin(); @@ -323,7 +308,7 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca if ((*itVertex)->isEqual(v2,Precision::Confusion())) { v2Add = false; } - if (circle && !skipDetail) { + if (circle ) { if ((*itVertex)->isEqual(c1,Precision::Confusion())) { c1Add = false; } @@ -343,7 +328,7 @@ void GeometryObject::addGeomFromCompound(TopoDS_Shape edgeCompound, edgeClass ca delete v2; } - if (circle && !skipDetail) { + if (circle) { if (c1Add) { vertexGeom.push_back(c1); c1->visible = true; @@ -436,6 +421,24 @@ Base::BoundBox3d GeometryObject::calcBoundingBox() const return bbox; } +void GeometryObject::pruneVertexGeom(Base::Vector3d center, double radius) +{ + const std::vector& oldVerts = getVertexGeometry(); + std::vector newVerts; + for (auto& v: oldVerts) { + Base::Vector3d v3 = v->getAs3D(); + double length = (v3 - center).Length(); + if (length < Precision::Confusion()) { + continue; + } else if (length < radius) { + newVerts.push_back(v); + } + } + vertexGeom = newVerts; +} + + + //! does this GeometryObject already have this vertex bool GeometryObject::findVertex(Base::Vector2d v) { diff --git a/src/Mod/TechDraw/App/GeometryObject.h b/src/Mod/TechDraw/App/GeometryObject.h index 5461a4de16..e2c3e5b4aa 100644 --- a/src/Mod/TechDraw/App/GeometryObject.h +++ b/src/Mod/TechDraw/App/GeometryObject.h @@ -93,6 +93,7 @@ public: void clearFaceGeom(); void setIsoCount(int i) { m_isoCount = i; } void setParentName(std::string n); //for debug messages + void pruneVertexGeom(Base::Vector3d center, double radius); protected: //HLR output