From ee0bcc095c42c2b4bf07b91fb59c988e46c33bcf Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sun, 8 Sep 2019 15:56:38 -0400 Subject: [PATCH] [TD]Check first/last geom points exist --- src/Mod/TechDraw/App/Geometry.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/Mod/TechDraw/App/Geometry.cpp b/src/Mod/TechDraw/App/Geometry.cpp index d34eeb9bbf..bf5cde8abf 100644 --- a/src/Mod/TechDraw/App/Geometry.cpp +++ b/src/Mod/TechDraw/App/Geometry.cpp @@ -227,11 +227,15 @@ std::vector BaseGeom::findEndPoints() { std::vector result; - gp_Pnt p = BRep_Tool::Pnt(TopExp::FirstVertex(occEdge)); - result.push_back(Base::Vector3d(p.X(),p.Y(), p.Z())); - p = BRep_Tool::Pnt(TopExp::LastVertex(occEdge)); - result.push_back(Base::Vector3d(p.X(),p.Y(), p.Z())); - + if (!occEdge.IsNull()) { + gp_Pnt p = BRep_Tool::Pnt(TopExp::FirstVertex(occEdge)); + result.push_back(Base::Vector3d(p.X(),p.Y(), p.Z())); + p = BRep_Tool::Pnt(TopExp::LastVertex(occEdge)); + result.push_back(Base::Vector3d(p.X(),p.Y(), p.Z())); + } else { + //TODO: this should throw something + Base::Console().Message("Geometry::findEndPoints - OCC edge not found\n"); + } return result; } @@ -239,13 +243,27 @@ std::vector BaseGeom::findEndPoints() Base::Vector3d BaseGeom::getStartPoint() { std::vector verts = findEndPoints(); - return verts[0]; + if (!verts.empty()) { + return verts[0]; + } else { + //TODO: this should throw something + Base::Console().Message("Geometry::getStartPoint - start point not found!\n"); + Base::Vector3d badResult(0.0, 0.0, 0.0); + return badResult; + } } Base::Vector3d BaseGeom::getEndPoint() { std::vector verts = findEndPoints(); + + if (verts.size() != 2) { + //TODO: this should throw something + Base::Console().Message("Geometry::getEndPoint - end point not found!\n"); + Base::Vector3d badResult(0.0, 0.0, 0.0); + return badResult; + } return verts[1]; }