+ // Clear list of objects
+ AttributeRefListPtr aRefListOfRotated = reflist(SketchPlugin_Constraint::ENTITY_B());
+ std::list<ObjectPtr> aTargetList = aRefListOfRotated->list();
+ std::list<ObjectPtr>::iterator aTargetIter = aTargetList.begin();
+ std::set<FeaturePtr> aFeaturesToBeRemoved;
+ while (aTargetIter != aTargetList.end()) {
+ aTargetIter++;
+ for (int i = 0; i < aNbCopies && aTargetIter != aTargetList.end(); i++, aTargetIter++) {
+ aRefListOfRotated->remove(*aTargetIter);
+ // remove the corresponding feature from the sketch
+ FeaturePtr aFeature = ModelAPI_Feature::feature(*aTargetIter);
+ if (aFeature)
+ aFeaturesToBeRemoved.insert(aFeature);
+ }
+ }
+ ModelAPI_Tools::removeFeaturesAndReferences(aFeaturesToBeRemoved);
+
+ aRefListOfRotated->clear();
+ reflist(SketchPlugin_Constraint::ENTITY_A())->clear();
+ }
+ }
+ else if (!isUpdatingAngle && real(ANGLE_ID())->isInitialized())
+ {
+ isUpdatingAngle = true;
+ AttributeDoublePtr anAngle = real(ANGLE_ID());
+ if (theID == ANGLE_TYPE() && integer(NUMBER_OF_OBJECTS_ID())->isInitialized()) {
+ if (string(ANGLE_TYPE())->value() != "SingleAngle")
+ anAngle->setValue(anAngle->value() * (integer(NUMBER_OF_OBJECTS_ID())->value() - 1));
+ else
+ {
+ int aNbSplits = integer(NUMBER_OF_OBJECTS_ID())->value();
+ if (anAngle->value() < PERIOD - ANGLETOL)
+ aNbSplits -= 1;
+ anAngle->setValue(anAngle->value() / aNbSplits);
+ }
+ }
+ else if (theID == ANGLE_ID()) {
+ if (anAngle->value() > PERIOD + ANGLETOL || anAngle->value() < -ANGLETOL)
+ anAngle->setValue(anAngle->value() + PERIOD * ceil(-anAngle->value() / PERIOD));
+ if (fabs(anAngle->value() - PERIOD) < ANGLETOL)
+ anAngle->setValue(PERIOD);
+ else if (fabs(anAngle->value()) < ANGLETOL)
+ anAngle->setValue(0.);
+ }
+ isUpdatingAngle = false;
+ }
+}