}
}
+ // Mirrored entities are placed out-of-group by default, due to they are copies.
+ // Place them into current group manually.
+ std::vector<EntityWrapperPtr>::iterator aMirIt = theMirrorEntities.begin();
+ for (; aMirIt != theMirrorEntities.end(); ++aMirIt)
+ (*aMirIt)->setGroup(myGroupID);
+
if (theBaseEntities.size() > theMirrorEntities.size())
myErrorMsg = SketchSolver_Error::NOT_INITIALIZED();
}
std::vector<EntityWrapperPtr>::iterator aBIt = aBaseList.begin();
std::vector<EntityWrapperPtr>::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());
- }
aNewConstraints = aBuilder->createConstraint(
myBaseConstraint, myGroupID, mySketchID, aConstrType,
0.0, *aBIt, *aMIt, aMirrorLine);
aMirConstrList.insert(aMirConstrList.end(), aNewConstraints.begin(), aNewConstraints.end());
}
+ // update mirrored features to be in the current group
+ for (aMIt = aMirrorList.begin(); aMIt != aMirrorList.end(); ++aMIt)
+ myStorage->update((*aMIt)->baseFeature(), myGroupID);
myStorage->addConstraint(myBaseConstraint, aMirConstrList);
+
+ adjustConstraint();
}
void SketchSolver_ConstraintMirror::update()
{
cleanErrorMsg();
- AttributeRefListPtr aMirroredRefList = std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
- myBaseConstraint->attribute(SketchPlugin_Constraint::ENTITY_C()));
- if (aMirroredRefList->size() != myNumberOfObjects) {
- remove();
- process();
- return;
- }
- adjustConstraint();
+ remove();
+ process();
}
void SketchSolver_ConstraintMirror::adjustConstraint()