From 520ec2c095784e80f434ef1eb163be88d0946b40 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 16 Oct 2017 15:31:04 +0200 Subject: [PATCH] issue #0002613: Create symmetric geometry with conic --- src/Mod/Sketcher/App/SketchObject.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 909f1ef5c8..1c77d2f3d4 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -2243,8 +2243,6 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, else if(geosym->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId()){ Part::GeomArcOfEllipse *geosymaoe = static_cast(geosym); Base::Vector3d cp = geosymaoe->getCenter(); - Base::Vector3d sp = geosymaoe->getStartPoint(true); - Base::Vector3d ep = geosymaoe->getEndPoint(true); Base::Vector3d majdir = geosymaoe->getMajorAxisDir(); double majord=geosymaoe->getMajorRadius(); @@ -2254,16 +2252,20 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, Base::Vector3d sf1 = f1+2.0*(f1.Perpendicular(refGeoLine->getStartPoint(),vectline)-f1); Base::Vector3d scp = cp+2.0*(cp.Perpendicular(refGeoLine->getStartPoint(),vectline)-cp); - Base::Vector3d ssp = sp+2.0*(sp.Perpendicular(refGeoLine->getStartPoint(),vectline)-sp); - Base::Vector3d sep = ep+2.0*(ep.Perpendicular(refGeoLine->getStartPoint(),vectline)-ep); geosymaoe->setMajorAxisDir(sf1-scp); geosymaoe->setCenter(scp); double theta1,theta2; - geosymaoe->closestParameter(sep,theta1); - geosymaoe->closestParameter(ssp,theta2); + geosymaoe->getRange(theta1,theta2,true); + theta1 = 2.0*M_PI - theta1; + theta2 = 2.0*M_PI - theta2; + std::swap(theta1, theta2); + if (theta1 < 0) { + theta1 += 2.0*M_PI; + theta2 += 2.0*M_PI; + } geosymaoe->setRange(theta1,theta2,true); isStartEndInverted.insert(std::make_pair(*it, true)); @@ -2506,8 +2508,6 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, else if(geosym->getTypeId() == Part::GeomArcOfEllipse::getClassTypeId()){ Part::GeomArcOfEllipse *geosymaoe = static_cast(geosym); Base::Vector3d cp = geosymaoe->getCenter(); - Base::Vector3d sp = geosymaoe->getStartPoint(true); - Base::Vector3d ep = geosymaoe->getEndPoint(true); Base::Vector3d majdir = geosymaoe->getMajorAxisDir(); double majord=geosymaoe->getMajorRadius(); @@ -2517,18 +2517,10 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, Base::Vector3d sf1 = f1 + 2.0*(refpoint-f1); Base::Vector3d scp = cp + 2.0*(refpoint-cp); - Base::Vector3d ssp = sp + 2.0*(refpoint-sp); - Base::Vector3d sep = ep + 2.0*(refpoint-ep); geosymaoe->setMajorAxisDir(sf1-scp); geosymaoe->setCenter(scp); - - double theta1,theta2; - geosymaoe->closestParameter(ssp,theta1); - geosymaoe->closestParameter(sep,theta2); - - geosymaoe->setRange(theta1,theta2,true); isStartEndInverted.insert(std::make_pair(*it, false)); } else if(geosym->getTypeId() == Part::GeomArcOfHyperbola::getClassTypeId()){