@@ -159,7 +159,7 @@ int AssemblyObject::solve(bool enableRedo, bool updateJCS)
159159 objectPartMap.clear ();
160160 motions.clear ();
161161
162- std::vector<App::DocumentObject*> groundedObjs = fixGroundedParts ();
162+ auto groundedObjs = fixGroundedParts ();
163163 if (groundedObjs.empty ()) {
164164 // If no part fixed we can't solve.
165165 return -6 ;
@@ -202,7 +202,7 @@ int AssemblyObject::generateSimulation(App::DocumentObject* sim)
202202
203203 motions = getMotionsFromSimulation (sim);
204204
205- std::vector<App::DocumentObject*> groundedObjs = fixGroundedParts ();
205+ auto groundedObjs = fixGroundedParts ();
206206 if (groundedObjs.empty ()) {
207207 // If no part fixed we can't solve.
208208 return -6 ;
@@ -375,7 +375,7 @@ Base::Placement AssemblyObject::getMbdPlacement(std::shared_ptr<ASMTPart> mbdPar
375375bool AssemblyObject::validateNewPlacements ()
376376{
377377 // First we check if a grounded object has moved. It can happen that they flip.
378- std::vector<App::DocumentObject*> groundedParts = getGroundedParts ();
378+ auto groundedParts = getGroundedParts ();
379379 for (auto * obj : groundedParts) {
380380 auto * propPlacement =
381381 dynamic_cast <App::PropertyPlacement*>(obj->getPropertyByName (" Placement" ));
@@ -775,11 +775,11 @@ std::vector<App::DocumentObject*> AssemblyObject::getJointsOfPart(App::DocumentO
775775 return jointsOf;
776776}
777777
778- std::vector <App::DocumentObject*> AssemblyObject::getGroundedParts ()
778+ std::unordered_set <App::DocumentObject*> AssemblyObject::getGroundedParts ()
779779{
780780 std::vector<App::DocumentObject*> groundedJoints = getGroundedJoints ();
781781
782- std::vector <App::DocumentObject*> groundedObjs ;
782+ std::unordered_set <App::DocumentObject*> groundedSet ;
783783 for (auto gJoint : groundedJoints) {
784784 if (!gJoint ) {
785785 continue ;
@@ -791,10 +791,7 @@ std::vector<App::DocumentObject*> AssemblyObject::getGroundedParts()
791791 if (propObj) {
792792 App::DocumentObject* objToGround = propObj->getValue ();
793793 if (objToGround) {
794- if (std::find (groundedObjs.begin (), groundedObjs.end (), objToGround)
795- == groundedObjs.end ()) {
796- groundedObjs.push_back (objToGround);
797- }
794+ groundedSet.insert (objToGround);
798795 }
799796 }
800797 }
@@ -812,21 +809,19 @@ std::vector<App::DocumentObject*> AssemblyObject::getGroundedParts()
812809 continue ;
813810 }
814811 }
815- if (std::find (groundedObjs.begin (), groundedObjs.end (), obj) == groundedObjs.end ()) {
816- groundedObjs.push_back (obj);
817- }
812+ groundedSet.insert (obj);
818813 }
819814 }
820815
821816 // Origin is not in Group so we add it separately
822- groundedObjs. push_back (Origin.getValue ());
817+ groundedSet. insert (Origin.getValue ());
823818
824- return groundedObjs ;
819+ return groundedSet ;
825820}
826821
827- std::vector <App::DocumentObject*> AssemblyObject::fixGroundedParts ()
822+ std::unordered_set <App::DocumentObject*> AssemblyObject::fixGroundedParts ()
828823{
829- std::vector<App::DocumentObject*> groundedParts = getGroundedParts ();
824+ auto groundedParts = getGroundedParts ();
830825
831826 for (auto obj : groundedParts) {
832827 if (!obj) {
@@ -948,7 +943,7 @@ bool AssemblyObject::isObjInSetOfObjRefs(App::DocumentObject* obj, const std::ve
948943}
949944
950945void AssemblyObject::removeUnconnectedJoints (std::vector<App::DocumentObject*>& joints,
951- std::vector <App::DocumentObject*> groundedObjs)
946+ std::unordered_set <App::DocumentObject*> groundedObjs)
952947{
953948 std::vector<ObjRef> connectedParts;
954949
@@ -1040,7 +1035,7 @@ bool AssemblyObject::isPartGrounded(App::DocumentObject* obj)
10401035 return false ;
10411036 }
10421037
1043- std::vector<App::DocumentObject*> groundedObjs = getGroundedParts ();
1038+ auto groundedObjs = getGroundedParts ();
10441039
10451040 for (auto * groundedObj : groundedObjs) {
10461041 if (groundedObj->getFullName () == obj->getFullName ()) {
@@ -1057,7 +1052,7 @@ bool AssemblyObject::isPartConnected(App::DocumentObject* obj)
10571052 return false ;
10581053 }
10591054
1060- std::vector<App::DocumentObject*> groundedObjs = getGroundedParts ();
1055+ auto groundedObjs = getGroundedParts ();
10611056 std::vector<App::DocumentObject*> joints = getJoints (false );
10621057
10631058 std::vector<ObjRef> connectedParts;
0 commit comments