- // If specified group is empty, no need to merge
- if (theGroup.isEmpty())
- return;
-
- std::set<ObjectPtr> aConstraints;
- ConstraintConstraintMap::const_iterator aConstrIter = theGroup.myConstraints.begin();
- for (; aConstrIter != theGroup.myConstraints.end(); aConstrIter++)
- aConstraints.insert(aConstrIter->first);
-
- std::list<FeaturePtr> aSortedConstraints = selectApplicableFeatures(aConstraints);
- std::list<FeaturePtr>::iterator aSCIter = aSortedConstraints.begin();
- for (; aSCIter != aSortedConstraints.end(); ++aSCIter) {
- ConstraintPtr aConstr = std::dynamic_pointer_cast<SketchPlugin_Constraint>(*aSCIter);
- if (!aConstr)
- continue;
- changeConstraint(aConstr);
- }
-}
-
-// ============================================================================
-// Function: splitGroup
-// Class: SketchSolver_Group
-// Purpose: divide the group into several subgroups
-// ============================================================================
-void SketchSolver_Group::splitGroup(std::list<SketchSolver_Group*>& theCuts)
-{
- // New storage will be used in trimmed way to store the list of constraint interacted together.
- StoragePtr aNewStorage = SketchSolver_Manager::instance()->builder()->createStorage(getId());
- std::list<ConstraintWrapperPtr> aDummyVec; // empty vector to avoid creation of solver's constraints
-
- // Obtain constraints, which should be separated
- std::list<ConstraintPtr> anUnusedConstraints;
- ConstraintConstraintMap::iterator aCIter = myConstraints.begin();
- for ( ; aCIter != myConstraints.end(); aCIter++) {
- if (aNewStorage->isInteract(FeaturePtr(aCIter->first)))
- aNewStorage->addConstraint(aCIter->first, aDummyVec);
- else
- anUnusedConstraints.push_back(aCIter->first);
- }
-
- // Check the unused constraints once again, because they may become interacted with new storage since adding constraints
- std::list<ConstraintPtr>::iterator aUnuseIt = anUnusedConstraints.begin();
- while (aUnuseIt != anUnusedConstraints.end()) {
- if (aNewStorage->isInteract(FeaturePtr(*aUnuseIt))) {
- aNewStorage->addConstraint(*aUnuseIt, aDummyVec);
- anUnusedConstraints.erase(aUnuseIt);
- aUnuseIt = anUnusedConstraints.begin();
- continue;
- }
- aUnuseIt++;
- }
+ std::ostringstream aDoFMsg;
+ int aDoF = mySketchSolver->dof();
+ /// "DoF = 0" content of string value is used in PartSet by Sketch edit
+ /// If it is changed, it should be corrected also there
+ if (aDoF == 0)
+ aDoFMsg << "Sketch is fully fixed (DoF = 0)";
+ else
+ aDoFMsg << "DoF (degrees of freedom) = " << aDoF;
+ mySketch->string(SketchPlugin_Sketch::SOLVER_DOF())->setValue(aDoFMsg.str());