- if (isEmpty()) return true;
- ConstraintPtr aConstraint = std::dynamic_pointer_cast<SketchPlugin_Constraint>(theFeature);
- if (aConstraint)
- return myFeatureStorage->isInteract(aConstraint);
- return myFeatureStorage->isInteract(std::dynamic_pointer_cast<ModelAPI_Feature>(theFeature));
-}
-
-// check the entity is really exists
-static void checkEntity(StoragePtr theStorage, Slvs_hEntity& theEntity)
-{
- if (theEntity == SLVS_E_UNKNOWN)
- return;
- Slvs_Entity anEnt = theStorage->getEntity(theEntity);
- theEntity = anEnt.h;
-}
-
-// ============================================================================
-// Function: getFeatureId
-// Class: SketchSolver_Group
-// Purpose: Find the identifier of the feature, if it already exists in the group
-// ============================================================================
-Slvs_hEntity SketchSolver_Group::getFeatureId(FeaturePtr theFeature) const
-{
- Slvs_hEntity aResult = SLVS_E_UNKNOWN;
- if (!myFeatureStorage)
- return aResult;
- // Obtain regular constraints interacting with the feature and find its ID
- ConstraintConstraintMap::const_iterator aCIter = myConstraints.begin();
- for (; aCIter != myConstraints.end(); ++aCIter) {
- aResult = aCIter->second->getId(theFeature);
- checkEntity(myStorage, aResult);
- if (aResult != SLVS_E_UNKNOWN)
- return aResult;
- }
- // The feature is not found, check it in the temporary constraints
- std::set<SolverConstraintPtr>::iterator aTmpCIter = myTempConstraints.begin();
- for (; aTmpCIter != myTempConstraints.end() && aResult == SLVS_E_UNKNOWN; ++aTmpCIter) {
- aResult = (*aTmpCIter)->getId(theFeature);
- checkEntity(myStorage, aResult);
- }
- return aResult;
-}
-
-// ============================================================================
-// Function: getAttributeId
-// Class: SketchSolver_Group
-// Purpose: Find the identifier of the attribute, if it already exists in the group
-// ============================================================================
-Slvs_hEntity SketchSolver_Group::getAttributeId(AttributePtr theAttribute) const
-{
- Slvs_hEntity aResult = SLVS_E_UNKNOWN;
- if (!myFeatureStorage)
- return aResult;
- // Obtain regular constraints interacting with the attribute and find its ID
- ConstraintConstraintMap::const_iterator aCIter = myConstraints.begin();
- for (; aCIter != myConstraints.end(); ++aCIter) {
- aResult = aCIter->second->getId(theAttribute);
- checkEntity(myStorage, aResult);
- if (aResult != SLVS_E_UNKNOWN)
- return aResult;
- }
- // The attribute is not found, check it in the temporary constraints
- std::set<SolverConstraintPtr>::const_iterator aTmpCIter = myTempConstraints.begin();
- for (; aTmpCIter != myTempConstraints.end() && aResult == SLVS_E_UNKNOWN; ++aTmpCIter) {
- aResult = (*aTmpCIter)->getId(theAttribute);
- checkEntity(myStorage, aResult);
- }
- // Last chance to find attribute in parametric constraints
- std::map<AttributePtr, SolverConstraintPtr>::const_iterator aParIter =
- myParametricConstraints.find(theAttribute);
- if (aParIter != myParametricConstraints.end()) {
- aResult = aParIter->second->getId(theAttribute);
- checkEntity(myStorage, aResult);
- }
- return aResult;