From 39c4e2e600490ffb81a0695651c6230144f60c6d Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Wed, 7 Aug 2024 15:53:34 +0200 Subject: [PATCH] Assembly: Fix distance joints --- src/Mod/Assembly/App/AssemblyObject.cpp | 18 +++++++++--------- src/Mod/Assembly/App/AssemblyObject.h | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Mod/Assembly/App/AssemblyObject.cpp b/src/Mod/Assembly/App/AssemblyObject.cpp index 1dd739d3c3..3064404178 100644 --- a/src/Mod/Assembly/App/AssemblyObject.cpp +++ b/src/Mod/Assembly/App/AssemblyObject.cpp @@ -947,8 +947,8 @@ std::shared_ptr AssemblyObject::makeMbdJointDistance(App::DocumentObj { DistanceType type = getDistanceType(joint); - const char* elt1 = getElementFromProp(joint, "Reference1"); - const char* elt2 = getElementFromProp(joint, "Reference2"); + std::string elt1 = getElementFromProp(joint, "Reference1"); + std::string elt2 = getElementFromProp(joint, "Reference2"); auto* obj1 = getLinkedObjFromRef(joint, "Reference1"); auto* obj2 = getLinkedObjFromRef(joint, "Reference2"); @@ -1740,13 +1740,13 @@ bool AssemblyObject::isFaceType(App::DocumentObject* obj, return false; } -double AssemblyObject::getFaceRadius(App::DocumentObject* obj, const char* elt) +double AssemblyObject::getFaceRadius(App::DocumentObject* obj, std::string& elt) { auto base = static_cast(obj); const PartApp::TopoShape& TopShape = base->Shape.getShape(); // Check for valid face types - TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(elt)); + TopoDS_Face face = TopoDS::Face(TopShape.getSubShape(elt.c_str())); BRepAdaptor_Surface sf(face); if (sf.GetType() == GeomAbs_Cylinder) { @@ -1759,13 +1759,13 @@ double AssemblyObject::getFaceRadius(App::DocumentObject* obj, const char* elt) return 0.0; } -double AssemblyObject::getEdgeRadius(App::DocumentObject* obj, const char* elt) +double AssemblyObject::getEdgeRadius(App::DocumentObject* obj, std::string& elt) { auto base = static_cast(obj); const PartApp::TopoShape& TopShape = base->Shape.getShape(); // Check for valid face types - TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(elt)); + TopoDS_Edge edge = TopoDS::Edge(TopShape.getSubShape(elt.c_str())); BRepAdaptor_Curve sf(edge); if (sf.GetType() == GeomAbs_Circle) { @@ -2145,7 +2145,7 @@ std::vector AssemblyObject::splitSubName(const std::string& sub) return subNames; } -const char* AssemblyObject::getElementFromProp(App::DocumentObject* obj, const char* pName) +std::string AssemblyObject::getElementFromProp(App::DocumentObject* obj, const char* pName) { std::vector names = getSubAsList(obj, pName); @@ -2153,14 +2153,14 @@ const char* AssemblyObject::getElementFromProp(App::DocumentObject* obj, const c return ""; } - return names.back().c_str(); + return names.back(); } std::string AssemblyObject::getElementTypeFromProp(App::DocumentObject* obj, const char* propName) { // The prop is going to be something like 'Edge14' or 'Face7'. We need 'Edge' or 'Face' std::string elementType; - for (char ch : std::string(getElementFromProp(obj, propName))) { + for (char ch : getElementFromProp(obj, propName)) { if (std::isalpha(ch)) { elementType += ch; } diff --git a/src/Mod/Assembly/App/AssemblyObject.h b/src/Mod/Assembly/App/AssemblyObject.h index cd25217d66..438a0c524d 100644 --- a/src/Mod/Assembly/App/AssemblyObject.h +++ b/src/Mod/Assembly/App/AssemblyObject.h @@ -250,8 +250,8 @@ public: static bool isEdgeType(App::DocumentObject* obj, std::string& elName, GeomAbs_CurveType type); static bool isFaceType(App::DocumentObject* obj, std::string& elName, GeomAbs_SurfaceType type); - static double getFaceRadius(App::DocumentObject* obj, const char* elName); - static double getEdgeRadius(App::DocumentObject* obj, const char* elName); + static double getFaceRadius(App::DocumentObject* obj, std::string& elName); + static double getEdgeRadius(App::DocumentObject* obj, std::string& elName); static DistanceType getDistanceType(App::DocumentObject* joint); @@ -261,7 +261,7 @@ public: static double getJointDistance(App::DocumentObject* joint); static double getJointDistance2(App::DocumentObject* joint); static JointType getJointType(App::DocumentObject* joint); - static const char* getElementFromProp(App::DocumentObject* obj, const char* propName); + static std::string getElementFromProp(App::DocumentObject* obj, const char* propName); static std::string getElementTypeFromProp(App::DocumentObject* obj, const char* propName); static App::DocumentObject* getObjFromProp(App::DocumentObject* joint, const char* propName); static App::DocumentObject* getObjFromRef(App::PropertyXLinkSub* prop);