+bool SolveSpaceSolver_Storage::findSameConstraint(ConstraintWrapperPtr theConstraint)
+{
+ if (theConstraint->type() == CONSTRAINT_PT_PT_COINCIDENT ||
+ theConstraint->type() == CONSTRAINT_MULTI_ROTATION ||
+ theConstraint->type() == CONSTRAINT_MULTI_TRANSLATION)
+ return false;
+
+ const Slvs_Constraint& aCBase =
+ std::dynamic_pointer_cast<SolveSpaceSolver_ConstraintWrapper>(theConstraint)->constraint();
+
+ std::map<ConstraintPtr, std::list<ConstraintWrapperPtr> >::const_iterator
+ aCIt = myConstraintMap.begin();
+ std::list<ConstraintWrapperPtr>::const_iterator aCWIt;
+ for (; aCIt != myConstraintMap.end(); ++aCIt)
+ for (aCWIt = aCIt->second.begin(); aCWIt != aCIt->second.end(); ++aCWIt) {
+ if ((*aCWIt)->type() == CONSTRAINT_PT_PT_COINCIDENT ||
+ (*aCWIt)->type() == CONSTRAINT_MULTI_ROTATION ||
+ (*aCWIt)->type() == CONSTRAINT_MULTI_TRANSLATION)
+ continue;
+ if ((*aCWIt)->type() == theConstraint->type()) {
+ const Slvs_Constraint& aCComp = std::dynamic_pointer_cast<
+ SolveSpaceSolver_ConstraintWrapper>(*aCWIt)->constraint();
+ if (aCBase.ptA == aCComp.ptA && aCBase.ptB == aCComp.ptB &&
+ aCBase.entityA == aCComp.entityA && aCBase.entityB == aCComp.entityB &&
+ aCBase.entityC == aCComp.entityC && aCBase.entityD == aCComp.entityD &&
+ fabs(aCBase.valA -aCComp.valA) < tolerance) {
+ addSameConstraints(*aCWIt, theConstraint);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+