Skip to content
This repository was archived by the owner on Mar 1, 2025. It is now read-only.

Commit 1ce8f2c

Browse files
committed
AssemblyObject: Use std::unordered_set instead of vector.
1 parent 024fee7 commit 1ce8f2c

File tree

2 files changed

+17
-22
lines changed

2 files changed

+17
-22
lines changed

src/Mod/Assembly/App/AssemblyObject.cpp

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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
375375
bool 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

950945
void 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;

src/Mod/Assembly/App/AssemblyObject.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,16 @@ class AssemblyExport AssemblyObject: public App::Part
157157
std::vector<App::DocumentObject*> getJointsOfPart(App::DocumentObject* part);
158158
App::DocumentObject* getJointOfPartConnectingToGround(App::DocumentObject* part,
159159
std::string& name);
160-
std::vector<App::DocumentObject*> getGroundedParts();
161-
std::vector<App::DocumentObject*> fixGroundedParts();
160+
std::unordered_set<App::DocumentObject*> getGroundedParts();
161+
std::unordered_set<App::DocumentObject*> fixGroundedParts();
162162
void fixGroundedPart(App::DocumentObject* obj, Base::Placement& plc, std::string& jointName);
163163

164164
bool isJointConnectingPartToGround(App::DocumentObject* joint, const char* partPropName);
165165
bool isJointTypeConnecting(App::DocumentObject* joint);
166166

167167
bool isObjInSetOfObjRefs(App::DocumentObject* obj, const std::vector<ObjRef>& pairs);
168168
void removeUnconnectedJoints(std::vector<App::DocumentObject*>& joints,
169-
std::vector<App::DocumentObject*> groundedObjs);
169+
std::unordered_set<App::DocumentObject*> groundedObjs);
170170
void traverseAndMarkConnectedParts(App::DocumentObject* currentPart,
171171
std::vector<ObjRef>& connectedParts,
172172
const std::vector<App::DocumentObject*>& joints);

0 commit comments

Comments
 (0)