From 4c9073eeb62140f8b2a71e85de98b2775b87fbab Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sun, 19 Feb 2017 23:33:54 +0100 Subject: [PATCH] Sketcher: SketchObject convert to NURBS support for External Geometry --- src/Mod/Sketcher/App/SketchObject.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 09083b35e..a8e21d709 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -3768,18 +3768,18 @@ int SketchObject::DeleteUnusedInternalGeometry(int GeoId, bool delgeoid) bool SketchObject::ConvertToNURBS(int GeoId) { - if (GeoId < 0 || GeoId > getHighestCurveIndex()) - return -1; + if ( GeoId > getHighestCurveIndex() || ( GeoId < 0 && -GeoId > int(ExternalGeo.size())) || GeoId == -1 || GeoId == -2) + return false; const Part::Geometry *geo = getGeometry(GeoId); if(geo->getTypeId() == Part::GeomPoint::getClassTypeId()) - return -1; + return false; const Part::GeomCurve *geo1 = static_cast(geo); Part::GeomBSplineCurve* bspline; - + try { bspline = geo1->toNurbs(geo1->getFirstParameter(), geo1->getLastParameter()); @@ -3798,14 +3798,22 @@ bool SketchObject::ConvertToNURBS(int GeoId) const std::vector< Part::Geometry * > &vals = getInternalGeometry(); - std::vector< Part::Geometry * > newVals(vals); + std::vector< Part::Geometry * > newVals(vals); - newVals[GeoId] = bspline; + if (GeoId < 0) { // external geometry + newVals.push_back(bspline); + } + else { // normal geometry + + newVals[GeoId] = bspline; + } Geometry.setValues(newVals); Constraints.acceptGeometry(getCompleteGeometry()); rebuildVertexIndex(); + delete bspline; + return true; }