X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Document.cpp;h=ec0c236f6f0389ab60177023a65ab8e30a399696;hb=6a7e53a3d3b52f1f798b7e3aa3c48de9c870d92b;hp=71019bc6d50f4baa503565c0b455b7da4773e737;hpb=33b3a43ad2266cb044e4232c902344842adbba7c;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.cpp b/src/Model/Model_Document.cpp index 71019bc6d..ec0c236f6 100644 --- a/src/Model/Model_Document.cpp +++ b/src/Model/Model_Document.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -404,13 +405,13 @@ void Model_Document::abortOperation() myDoc->Undo(); myDoc->ClearRedos(); } - // references may be changed because they are set in attributes on the fly - synchronizeFeatures(true, true, isRoot()); - // abort for all subs + // abort for all subs, flushes will be later, in the end of root abort const std::set aSubs = subDocuments(true); std::set::iterator aSubIter = aSubs.begin(); for (; aSubIter != aSubs.end(); aSubIter++) subDoc(*aSubIter)->abortOperation(); + // references may be changed because they are set in attributes on the fly + synchronizeFeatures(true, true, isRoot()); } bool Model_Document::isOperation() const @@ -556,12 +557,18 @@ FeaturePtr Model_Document::addFeature(std::string theID) { TDF_Label anEmptyLab; FeaturePtr anEmptyFeature; - FeaturePtr aFeature = ModelAPI_Session::get()->createFeature(theID); + std::shared_ptr aSession = + std::dynamic_pointer_cast(ModelAPI_Session::get()); + FeaturePtr aFeature = aSession->createFeature(theID, this); if (!aFeature) return aFeature; Model_Document* aDocToAdd; - if (aFeature->documentToAdd().get()) { // use the customized document to add - aDocToAdd = std::dynamic_pointer_cast(aFeature->documentToAdd()).get(); + if (!aFeature->documentToAdd().empty()) { // use the customized document to add + if (aFeature->documentToAdd() != kind()) { // the root document by default + aDocToAdd = std::dynamic_pointer_cast(aSession->moduleDocument()).get(); + } else { + aDocToAdd = this; + } } else { // if customized is not presented, add to "this" document aDocToAdd = this; } @@ -984,9 +991,9 @@ void Model_Document::synchronizeFeatures( FeaturePtr aFeature; if (!myObjs.IsBound(aFeatureLabel)) { // a new feature is inserted // create a feature - aFeature = ModelAPI_Session::get()->createFeature( + aFeature = std::dynamic_pointer_cast(ModelAPI_Session::get())->createFeature( TCollection_AsciiString(Handle(TDataStd_Comment)::DownCast(aLabIter.Value())->Get()) - .ToCString()); + .ToCString(), this); if (!aFeature) { // somethig is wrong, most probably, the opened document has invalid structure Events_Error::send("Invalid type of object in the document"); aLabIter.Value()->Label().ForgetAllAttributes(); @@ -1234,7 +1241,7 @@ std::shared_ptr Model_Document::createParameter( aResult = std::dynamic_pointer_cast(anOldObject); } if (!aResult) { - aResult = std::shared_ptr(new ModelAPI_ResultParameter); + aResult = std::shared_ptr(new Model_ResultParameter); storeResult(theFeatureData, aResult, theIndex); } return aResult;