-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
std::shared_ptr<ModelAPI_Feature> SketchPlugin_Sketch::addFeature(std::string theID)
{
+ // It is necessary to keep and restore the current feature in the document,
+ // if the sketch is updated from Python API. Because in that case, the current feature
+ // may be a non-sketch feature, so it is required to set it back, after adding a sketch feature,
+ // to keep the sequence of non-sketch features within the document.
+ FeaturePtr aCurFeature = document()->currentFeature(false);
+ std::shared_ptr<SketchPlugin_Feature> aCurSketchFeature =
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(aCurFeature);
+ std::shared_ptr<SketchPlugin_Sketch> aCurSketch =
+ std::dynamic_pointer_cast<SketchPlugin_Sketch>(aCurFeature);
+ if ((aCurSketch && aCurSketch.get() == this) ||
+ (aCurSketchFeature && aCurSketchFeature->sketch() == this))
+ aCurFeature = FeaturePtr(); // no need to restore feature if it is from the current sketch
+
// Set last feature of the sketch as current feature.
// Reason: Changing of parameter through Python API may lead to creation of new features
// (e.g. changing number of copies in MultiRotation). If the sketch is not the last
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
- document()->setCurrentFeature(aNew, false);
+
+ // set as current also after it becomes sub to set correctly enabled for other sketch subs
+ // or restore the previous current feature
+ document()->setCurrentFeature(aCurFeature ? aCurFeature : aNew, false);
return aNew;
}
{
FeaturePtr aNewFeature = theSketch->addFeature(theFeature->getKind());
// addFeature generates a unique name for the feature, it caches the name
- std::string aUniqueFeatureName = aNewFeature->data()->name();
+ std::wstring aUniqueFeatureName = aNewFeature->data()->name();
// all attribute values are copied\pasted to the new feature, name is not an exception
theFeature->data()->copyTo(aNewFeature->data());
// external state should not be copied as a new object is an object of the current sketch
return;
DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- ObjectPtr anOX = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), "OX");
- ObjectPtr anOY = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), "OY");
- ObjectPtr anOZ = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), "OZ");
+ ObjectPtr anOX = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), L"OX");
+ ObjectPtr anOY = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), L"OY");
+ ObjectPtr anOZ = aRootDoc->objectByName(ModelAPI_ResultConstruction::group(), L"OZ");
AttributeSelectionPtr anExtFeature;
if (aFeature->getKind() == SketchPlugin_Projection::ID())