X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSolveSpaceSolver%2FSolveSpaceSolver_Storage.cpp;fp=src%2FSketchSolver%2FSolveSpaceSolver%2FSolveSpaceSolver_Storage.cpp;h=bcec0c314dac2d0ef9b463dfedfd1e3d248a4820;hb=c8425aa48535e2d3b94f2a7d008875565a3b10f9;hp=5a27467d98e9d414ba89b476740a3cbfc0996189;hpb=58ed04fa9426f8dd99fcf76a1f3ef9e60c5f3b9b;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SolveSpaceSolver/SolveSpaceSolver_Storage.cpp b/src/SketchSolver/SolveSpaceSolver/SolveSpaceSolver_Storage.cpp index 5a27467d9..bcec0c314 100644 --- a/src/SketchSolver/SolveSpaceSolver/SolveSpaceSolver_Storage.cpp +++ b/src/SketchSolver/SolveSpaceSolver/SolveSpaceSolver_Storage.cpp @@ -21,7 +21,6 @@ #include #include #include -#include /** \brief Search the entity/parameter with specified ID in the list of elements * \param[in] theEntityID unique ID of the element @@ -215,7 +214,8 @@ bool SolveSpaceSolver_Storage::update(ParameterWrapperPtr theParameter) void SolveSpaceSolver_Storage::storeWorkplane(EntityWrapperPtr theSketch) { - myWorkplaneID = (Slvs_hEntity)theSketch->id(); + mySketchID = theSketch->id(); + myWorkplaneID = (Slvs_hEntity)mySketchID; // Update sub-entities of the sketch std::list aSubEntities = theSketch->subEntities(); @@ -889,122 +889,6 @@ void SolveSpaceSolver_Storage::initializeSolver(SolverPtr theSolver) } -bool SolveSpaceSolver_Storage::removeCoincidence(ConstraintWrapperPtr theConstraint) -{ - std::list aPoints = theConstraint->entities(); - std::list::const_iterator aPIt; - - CoincidentPointsMap::iterator aPtPtIt = myCoincidentPoints.begin(); - for (; aPtPtIt != myCoincidentPoints.end(); ++aPtPtIt) { - for (aPIt = aPoints.begin(); aPIt != aPoints.end(); ++aPIt) - if (aPtPtIt->first == *aPIt || - aPtPtIt->second.find(*aPIt) != aPtPtIt->second.end()) - break; - if (aPIt != aPoints.end()) - break; - } - - if (aPtPtIt == myCoincidentPoints.end()) - return true; // already removed - - // Create new copies of coincident points - BuilderPtr aBuilder = SolveSpaceSolver_Builder::getInstance(); - std::list aNewPoints; - for (aPIt = aPoints.begin(); aPIt != aPoints.end(); ++aPIt) - aNewPoints.push_back(aBuilder->createAttribute( - (*aPIt)->baseAttribute(), myGroupID, myWorkplaneID)); - - // Find all points fallen out of group of coincident points - std::map aNotCoinc; - aNotCoinc[aPtPtIt->first] = EntityWrapperPtr(); - std::set::const_iterator aTempIt = aPtPtIt->second.begin(); - for (; aTempIt != aPtPtIt->second.end(); ++aTempIt) - aNotCoinc[*aTempIt] = EntityWrapperPtr(); - std::map >::iterator - aConstrIt = myConstraintMap.begin(); - for (; aConstrIt != myConstraintMap.end(); ++aConstrIt) - if (aConstrIt->first->getKind() == SketchPlugin_ConstraintCoincidence::ID()) { - AttributeRefAttrPtr aRefAttrA = std::dynamic_pointer_cast( - aConstrIt->first->attribute(SketchPlugin_Constraint::ENTITY_A())); - AttributeRefAttrPtr aRefAttrB = std::dynamic_pointer_cast( - aConstrIt->first->attribute(SketchPlugin_Constraint::ENTITY_B())); - AttributePtr anAttrA, anAttrB; - if (aConstrIt->first->data()->isValid()) { - if (!aRefAttrA || !aRefAttrB || aRefAttrA->isObject() || aRefAttrB->isObject()) - continue; - anAttrA = aRefAttrA->attr(); - anAttrB = aRefAttrB->attr(); - } else { - // obtain attributes from the constraint wrapper - ConstraintWrapperPtr aWrapper = aConstrIt->second.front(); - anAttrA = aWrapper->entities().front()->baseAttribute(); - anAttrB = aWrapper->entities().back()->baseAttribute(); - } - std::map::iterator - aFound = myAttributeMap.find(anAttrA); - if (aFound != myAttributeMap.end()) - aNotCoinc.erase(aFound->second); - aFound = myAttributeMap.find(anAttrB); - if (aFound != myAttributeMap.end()) - aNotCoinc.erase(aFound->second); - } - if (aNotCoinc.empty()) - return false; - std::list::const_iterator aNewPIt; - for (aPIt = aPoints.begin(), aNewPIt = aNewPoints.begin(); - aPIt != aPoints.end(); ++aPIt, ++aNewPIt) { - if (aNotCoinc.find(*aPIt) != aNotCoinc.end()) - aNotCoinc[*aPIt] = *aNewPIt; - } - - // Find all features and constraints uses coincident points - std::map::iterator aNotCIt; - std::set anUpdFeatures; - std::map::iterator aFIt = myFeatureMap.begin(); - for (; aFIt != myFeatureMap.end(); ++aFIt) { - if (!aFIt->second) - continue; // avoid not completed arcs - for (aNotCIt = aNotCoinc.begin(); aNotCIt != aNotCoinc.end(); ++aNotCIt) { - if (!aNotCIt->second || !aFIt->second->isUsed(aNotCIt->first->baseAttribute())) - continue; - std::list aSubs = aFIt->second->subEntities(); - std::list::iterator aSIt = aSubs.begin(); - bool isUpd = false; - for (; aSIt != aSubs.end(); ++aSIt) - if (*aSIt == aNotCIt->first) { - *aSIt = aNotCIt->second; - isUpd = true; - } - if (isUpd) { - aFIt->second->setSubEntities(aSubs); - anUpdFeatures.insert(aFIt->second); - } - } - } - // update features - std::set::iterator anUpdIt = anUpdFeatures.begin(); - for (; anUpdIt != anUpdFeatures.end(); ++anUpdIt) - update(EntityWrapperPtr(*anUpdIt)); - - // remove not coincident points - for (aNotCIt = aNotCoinc.begin(); aNotCIt != aNotCoinc.end(); ++aNotCIt) { - if (aPtPtIt->second.size() <= 1) { - myCoincidentPoints.erase(aPtPtIt); - break; - } - if (aPtPtIt->first == aNotCIt->first) { - std::set aSlaves = aPtPtIt->second; - EntityWrapperPtr aNewMaster = *aSlaves.begin(); - aSlaves.erase(aSlaves.begin()); - myCoincidentPoints.erase(aPtPtIt); - myCoincidentPoints[aNewMaster] = aSlaves; - aPtPtIt = myCoincidentPoints.find(aNewMaster); - } else - aPtPtIt->second.erase(aNotCIt->first); - } - return true; -} - bool SolveSpaceSolver_Storage::remove(ConstraintWrapperPtr theConstraint) { std::shared_ptr aConstraint =