From 61fe4bcaeec743b64ef9e04f992ff41355a6764b Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Wed, 21 Dec 2016 16:25:19 +0100 Subject: [PATCH] Sketcher: Parabola Arc rules solver constraint --- src/Mod/Sketcher/App/Sketch.cpp | 4 ++-- src/Mod/Sketcher/App/planegcs/GCS.cpp | 6 ++++++ src/Mod/Sketcher/App/planegcs/GCS.h | 3 ++- src/Mod/Sketcher/App/planegcs/Geo.cpp | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Mod/Sketcher/App/Sketch.cpp b/src/Mod/Sketcher/App/Sketch.cpp index f5fafeff5..a2f034cb0 100644 --- a/src/Mod/Sketcher/App/Sketch.cpp +++ b/src/Mod/Sketcher/App/Sketch.cpp @@ -639,8 +639,8 @@ int Sketch::addArcOfParabola(const Part::GeomArcOfParabola ¶bolaSegment, boo Geoms.push_back(def); // arcs require an ArcRules constraint for the end points - //if (!fixed) - // GCSsys.addConstraintArcOfParabolaRules(a); + if (!fixed) + GCSsys.addConstraintArcOfParabolaRules(a); // return the position of the newly added geometry return Geoms.size()-1; diff --git a/src/Mod/Sketcher/App/planegcs/GCS.cpp b/src/Mod/Sketcher/App/planegcs/GCS.cpp index 312830ec7..289bfe9d5 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/planegcs/GCS.cpp @@ -604,6 +604,12 @@ int System::addConstraintArcOfHyperbolaRules(ArcOfHyperbola &a, int tagId) return addConstraintCurveValue(a.end,a,a.endAngle, tagId); } +int System::addConstraintArcOfParabolaRules(ArcOfParabola &a, int tagId) +{ + addConstraintCurveValue(a.start,a,a.startAngle, tagId); + return addConstraintCurveValue(a.end,a,a.endAngle, tagId); +} + int System::addConstraintPointOnArc(Point &p, Arc &a, int tagId) { return addConstraintP2PDistance(p, a.center, a.rad, tagId); diff --git a/src/Mod/Sketcher/App/planegcs/GCS.h b/src/Mod/Sketcher/App/planegcs/GCS.h index e6ee58ac4..981e766f6 100644 --- a/src/Mod/Sketcher/App/planegcs/GCS.h +++ b/src/Mod/Sketcher/App/planegcs/GCS.h @@ -184,7 +184,8 @@ namespace GCS int addConstraintPointOnHyperbolicArc(Point &p, ArcOfHyperbola &e, int tagId=0); int addConstraintArcOfEllipseRules(ArcOfEllipse &a, int tagId=0); int addConstraintCurveValue(Point &p, Curve &a, double *u, int tagId=0); - int addConstraintArcOfHyperbolaRules(ArcOfHyperbola &a, int tagId=0); + int addConstraintArcOfHyperbolaRules(ArcOfHyperbola &a, int tagId=0); + int addConstraintArcOfParabolaRules(ArcOfParabola &a, int tagId=0); int addConstraintPointOnArc(Point &p, Arc &a, int tagId=0); int addConstraintPerpendicularLine2Arc(Point &p1, Point &p2, Arc &a, int tagId=0); diff --git a/src/Mod/Sketcher/App/planegcs/Geo.cpp b/src/Mod/Sketcher/App/planegcs/Geo.cpp index 5662cfb07..7671e86fa 100644 --- a/src/Mod/Sketcher/App/planegcs/Geo.cpp +++ b/src/Mod/Sketcher/App/planegcs/Geo.cpp @@ -539,9 +539,9 @@ DeriVector2 Parabola::Value(double u, double du, double* derivparam) f = fv.length(df); DeriVector2 xdir = fv.getNormalized(); - DeriVector2 ydir = xdir.rotate90ccw(); + DeriVector2 ydir = xdir.rotate90cw(); - DeriVector2 dirx = xdir.multD(u,du).multD(u,du).multD(0.25*f,0.5*df); + DeriVector2 dirx = xdir.multD(u,du).multD(u,du).divD(4*f,4*df); DeriVector2 diry = ydir.multD(u,du); DeriVector2 dir = dirx.sum(diry);