X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Sketch.cpp;h=12ec6c4f9711c03d16e1a47dc66342d22c6a12ae;hb=8476d5e088f7b1b5a414fa5e33ce99d6131929eb;hp=972c956933dabe339a0c71183b85a6f8bf307003;hpb=1116f47521cb50f318407a8fd0b845b580ed16bf;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index 972c95693..12ec6c4f9 100644 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -133,7 +133,12 @@ std::shared_ptr SketchPlugin_Sketch::addFeature(std::string th { std::shared_ptr aNew = document()->addFeature(theID, false); if (aNew) { - std::dynamic_pointer_cast(aNew)->setSketch(this); + // the sketch cannot be specified for the macro-features defined in python + // like SketchRectangle, so we need to check the type of new feature + std::shared_ptr aSketchFeature = + std::dynamic_pointer_cast(aNew); + if (aSketchFeature) + aSketchFeature->setSketch(this); data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->append(aNew); } // set as current also after it becomes sub to set correctly enabled for other sketch subs @@ -145,9 +150,15 @@ void SketchPlugin_Sketch::removeFeature(std::shared_ptr theFea { if (!data()->isValid()) // sketch is already removed (case on undo of sketch), sync is not needed return; - // to keep the persistent sub-elements indexing, do not remove elements from list, - // but substitute by nulls - reflist(SketchPlugin_Sketch::FEATURES_ID())->substitute(theFeature, ObjectPtr()); + 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()); + } } int SketchPlugin_Sketch::numberOfSubs(bool forTree) const @@ -291,7 +302,8 @@ void SketchPlugin_Sketch::createPoint2DResult(ModelAPI_Feature* theFeature, } FeaturePtr SketchPlugin_Sketch::addUniqueNamedCopiedFeature(FeaturePtr theFeature, - SketchPlugin_Sketch* theSketch) + SketchPlugin_Sketch* theSketch, + const bool theIsCopy) { FeaturePtr aNewFeature = theSketch->addFeature(theFeature->getKind()); // addFeature generates a unique name for the feature, it caches the name @@ -301,7 +313,12 @@ FeaturePtr SketchPlugin_Sketch::addUniqueNamedCopiedFeature(FeaturePtr theFeatur // as a name for the feature, the generated unique name is set aNewFeature->data()->setName(aUniqueFeatureName); // text expressions could block setValue of some attributes - clearExpressions(aNewFeature); + SketchPlugin_Tools::clearExpressions(aNewFeature); + // Set copy attribute + AttributeBooleanPtr anAttr = aNewFeature->data()->boolean(SketchPlugin_SketchEntity::COPY_ID()); + if(anAttr.get()) { + anAttr->setValue(theIsCopy); + } return aNewFeature; } @@ -319,3 +336,9 @@ std::shared_ptr SketchPlugin_Sketch::plane(SketchPlugin_Sketch* the return std::shared_ptr(new GeomAPI_Ax3(anOrigin->pnt(), aDirX->dir(), aNorm->dir())); } + +void SketchPlugin_Sketch::exchangeIDs( + std::shared_ptr theFeature1, std::shared_ptr theFeature2) +{ + reflist(SketchPlugin_Sketch::FEATURES_ID())->exchange(theFeature1, theFeature2); +}