X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintMirror.cpp;h=c91121d767ff46ea17f319e621e3165a1ae06e4b;hb=4f565b2204d3fba046aa8c851abada2a5a17bf6c;hp=509404940e2f6942b78494e952784e9a028461a8;hpb=e6ca72fa8af99194daf2a31769eb47a69fff7110;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintMirror.cpp b/src/SketchSolver/SketchSolver_ConstraintMirror.cpp index 509404940..c91121d76 100644 --- a/src/SketchSolver/SketchSolver_ConstraintMirror.cpp +++ b/src/SketchSolver/SketchSolver_ConstraintMirror.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + #include #include #include @@ -45,12 +47,12 @@ void SketchSolver_ConstraintMirror::getAttributes( if (!aFeature) continue; - myStorage->update(aFeature/*, myGroupID*/); + myStorage->update(aFeature, GID_UNKNOWN, true); aList->push_back(myStorage->entity(aFeature)); } } - if (theBaseEntities.size() > theMirrorEntities.size()) + if (theBaseEntities.size() > theMirrorEntities.size() || aMirroredList.empty()) myErrorMsg = SketchSolver_Error::NOT_INITIALIZED(); } @@ -79,47 +81,29 @@ void SketchSolver_ConstraintMirror::process() BuilderPtr aBuilder = SketchSolver_Manager::instance()->builder(); std::list aMirConstrList; - std::vector::iterator aBIt = aBaseList.begin(); + // update mirrored features to be in the current group std::vector::iterator aMIt = aMirrorList.begin(); - for (; aBIt != aBaseList.end(); ++aBIt, ++aMIt) { - if ((*aBIt)->type() == ENTITY_ARC) { - // add new points on arcs and mirror them - EntityWrapperPtr aBasePnt = myStorage->calculateMiddlePoint(*aBIt, 0.5); - EntityWrapperPtr aMirrPnt = myStorage->calculateMiddlePoint(*aMIt, 0.5); - // point on base arc - aNewConstraints = aBuilder->createConstraint(myBaseConstraint, myGroupID, mySketchID, - CONSTRAINT_PT_ON_CIRCLE, 0.0, aBasePnt, EntityWrapperPtr(), *aBIt); - aMirConstrList.insert(aMirConstrList.end(), aNewConstraints.begin(), aNewConstraints.end()); - // point on mirrored arc - aNewConstraints = aBuilder->createConstraint(myBaseConstraint, myGroupID, mySketchID, - CONSTRAINT_PT_ON_CIRCLE, 0.0, aMirrPnt, EntityWrapperPtr(), *aMIt); - aMirConstrList.insert(aMirConstrList.end(), aNewConstraints.begin(), aNewConstraints.end()); - // mirror these points - aNewConstraints = aBuilder->createConstraint(myBaseConstraint, myGroupID, mySketchID, - aConstrType, 0.0, aBasePnt, aMirrPnt, aMirrorLine); - aMirConstrList.insert(aMirConstrList.end(), aNewConstraints.begin(), aNewConstraints.end()); - } + for (; aMIt != aMirrorList.end(); ++aMIt) + myStorage->update((*aMIt)->baseFeature(), myGroupID); + + std::vector::iterator aBIt = aBaseList.begin(); + for (aMIt = aMirrorList.begin(); aBIt != aBaseList.end(); ++aBIt, ++aMIt) { aNewConstraints = aBuilder->createConstraint( myBaseConstraint, myGroupID, mySketchID, aConstrType, 0.0, *aBIt, *aMIt, aMirrorLine); aMirConstrList.insert(aMirConstrList.end(), aNewConstraints.begin(), aNewConstraints.end()); } - myStorage->addConstraint(myBaseConstraint, aMirConstrList); + + adjustConstraint(); } void SketchSolver_ConstraintMirror::update() { cleanErrorMsg(); - AttributeRefListPtr aMirroredRefList = std::dynamic_pointer_cast( - myBaseConstraint->attribute(SketchPlugin_Constraint::ENTITY_C())); - if (aMirroredRefList->size() != myNumberOfObjects) { - remove(); - process(); - return; - } - adjustConstraint(); + remove(); + process(); } void SketchSolver_ConstraintMirror::adjustConstraint()