- list<ObjectPtr> aSubs = data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->list();
- list<ObjectPtr>::iterator aSubIt = aSubs.begin(), aLastIt = aSubs.end();
- bool isRemoved = false;
- bool aHasEmtpyFeature = false;
- for(; aSubIt != aLastIt && !isRemoved; aSubIt++) {
- std::shared_ptr<ModelAPI_Feature> aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*aSubIt);
- if (aFeature.get() != NULL && aFeature == theFeature) {
- data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->remove(aFeature);
- isRemoved = true;
- }
- else if (aFeature.get() == NULL)
- aHasEmtpyFeature = true;
+ AttributeRefListPtr aList = reflist(SketchPlugin_Sketch::FEATURES_ID());
+ // if the object is last, remove it from the list (needed to skip empty transaction on edit of sketch feature)
+ if (aList->object(aList->size(true) - 1, true) == theFeature) {
+ aList->remove(theFeature);
+ } else {
+ // to keep the persistent sub-elements indexing, do not remove elements from list,
+ // but substitute by nulls
+ aList->substitute(theFeature, ObjectPtr());