diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 7b59be2d7..deffe1024 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -947,6 +947,13 @@ bool Application::activateWorkbench(const char* name) // import the matching module first Py::Callable activate(handler.getAttr(std::string("Initialize"))); activate.apply(args); + + // Dependent on the implementation of a workbench handler the type + // can be defined after the call of Initialize() + if (type.empty()) { + Py::String result(method.apply(args)); + type = result.as_std_string(); + } } // does the Python workbench handler have changed the workbench? diff --git a/src/Mod/Sketcher/App/freegcs/Constraints.h b/src/Mod/Sketcher/App/freegcs/Constraints.h index 6a9369ab2..17abd3106 100644 --- a/src/Mod/Sketcher/App/freegcs/Constraints.h +++ b/src/Mod/Sketcher/App/freegcs/Constraints.h @@ -276,7 +276,7 @@ namespace GCS bool internal; public: ConstraintTangentCircumf(Point &p1, Point &p2, - double *rad1, double *rad2, bool internal_=false); + double *rd1, double *rd2, bool internal_=false); virtual ConstraintType getTypeId(); virtual void rescale(double coef=1.); virtual double error(); diff --git a/src/Mod/Sketcher/App/freegcs/GCS.cpp b/src/Mod/Sketcher/App/freegcs/GCS.cpp index 2d7c0eba3..29705fde2 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.cpp +++ b/src/Mod/Sketcher/App/freegcs/GCS.cpp @@ -407,9 +407,9 @@ int System::addConstraintTangentCircle2Arc(Circle &c, Arc &a, int tagId) double dx = *(a.start.x) - *(c.center.x); double dy = *(a.start.y) - *(c.center.y); if (dx * cos(*(a.startAngle)) + dy * sin(*(a.startAngle)) > 0) - addConstraintP2PAngle(c.center, a.start, a.startAngle, 0, tagId); + return addConstraintP2PAngle(c.center, a.start, a.startAngle, 0, tagId); else - addConstraintP2PAngle(c.center, a.start, a.startAngle, M_PI, tagId); + return addConstraintP2PAngle(c.center, a.start, a.startAngle, M_PI, tagId); } int System::addConstraintTangentArc2Circle(Arc &a, Circle &c, int tagId) @@ -418,9 +418,9 @@ int System::addConstraintTangentArc2Circle(Arc &a, Circle &c, int tagId) double dx = *(a.end.x) - *(c.center.x); double dy = *(a.end.y) - *(c.center.y); if (dx * cos(*(a.endAngle)) + dy * sin(*(a.endAngle)) > 0) - addConstraintP2PAngle(c.center, a.end, a.endAngle, 0, tagId); + return addConstraintP2PAngle(c.center, a.end, a.endAngle, 0, tagId); else - addConstraintP2PAngle(c.center, a.end, a.endAngle, M_PI, tagId); + return addConstraintP2PAngle(c.center, a.end, a.endAngle, M_PI, tagId); } int System::addConstraintTangentArc2Arc(Arc &a1, bool reverse1, Arc &a2, bool reverse2, @@ -433,9 +433,9 @@ int System::addConstraintTangentArc2Arc(Arc &a1, bool reverse1, Arc &a2, bool re double *angle1 = reverse1 ? a1.startAngle : a1.endAngle; double *angle2 = reverse2 ? a2.endAngle : a2.startAngle; if (cos(*angle1) * cos(*angle2) + sin(*angle1) * sin(*angle2) > 0) - addConstraintEqual(angle1, angle2, tagId); + return addConstraintEqual(angle1, angle2, tagId); else - addConstraintP2PAngle(p2, a2.center, angle1, 0, tagId); + return addConstraintP2PAngle(p2, a2.center, angle1, 0, tagId); } int System::addConstraintCircleRadius(Circle &c, double *radius, int tagId) diff --git a/src/Mod/Sketcher/App/freegcs/GCS.h b/src/Mod/Sketcher/App/freegcs/GCS.h index 3c8538348..9df5a0123 100644 --- a/src/Mod/Sketcher/App/freegcs/GCS.h +++ b/src/Mod/Sketcher/App/freegcs/GCS.h @@ -101,7 +101,7 @@ namespace GCS int addConstraintMidpointOnLine(Line &l1, Line &l2, int tagId=0); int addConstraintMidpointOnLine(Point &l1p1, Point &l1p2, Point &l2p1, Point &l2p2, int tagId=0); - int addConstraintTangentCircumf(Point &p1, Point &p2, double *rad1, double *rad2, + int addConstraintTangentCircumf(Point &p1, Point &p2, double *rd1, double *rd2, bool internal=false, int tagId=0); // derived constraints