diff --git a/src/Mod/Part/App/Tools.cpp b/src/Mod/Part/App/Tools.cpp index b7f2b489c6..c29ead7a6d 100644 --- a/src/Mod/Part/App/Tools.cpp +++ b/src/Mod/Part/App/Tools.cpp @@ -25,6 +25,7 @@ # include # include # include +# include # include # include # include @@ -724,3 +725,16 @@ void Part::Tools::getNormal(const TopoDS_Face& face, double u, double v, if (face.Orientation() == TopAbs_REVERSED) dir.Reverse(); } + +TopLoc_Location Part::Tools::fromPlacement(const Base::Placement& plm) +{ + Base::Rotation r = plm.getRotation(); + double q1, q2, q3, q4; + r.getValue(q1, q2, q3, q4); + Base::Vector3d t = plm.getPosition(); + + gp_Trsf trf; + trf.SetTranslation(gp_Vec(t.x, t.y, t.z)); + trf.SetRotation(gp_Quaternion(q1, q2, q3, q4)); + return {trf}; +} diff --git a/src/Mod/Part/App/Tools.h b/src/Mod/Part/App/Tools.h index 9cfae6ed6b..0a5e050bb4 100644 --- a/src/Mod/Part/App/Tools.h +++ b/src/Mod/Part/App/Tools.h @@ -25,6 +25,7 @@ #define PART_TOOLS_H #include +#include #include #include #include @@ -206,7 +207,7 @@ public: * \param done */ static void getNormal(const Handle(Geom_Surface)& surf, double u, double v, const Standard_Real tol, gp_Dir& dir, Standard_Boolean& done); - /* \brief getNormal + /*! \brief getNormal * Returns the normal at the given parameters on the face and the state of the calculation. * The orientation is taken into account * \param face @@ -217,6 +218,12 @@ public: * \param done */ static void getNormal(const TopoDS_Face& face, double u, double v, const Standard_Real tol, gp_Dir& dir, Standard_Boolean& done); + /*! + * \brief fromPlacement + * Converts a placement into a TopLoc_Location + * \return TopLoc_Location + */ + static TopLoc_Location fromPlacement(const Base::Placement&); }; } //namespace Part