1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: PartSetPlugin_Part.cxx
4 // Created: 27 Mar 2014
5 // Author: Mikhail PONIKAROV
7 #include "PartSetPlugin_Part.h"
8 #include "ModelAPI_Session.h"
9 #include "ModelAPI_Document.h"
10 #include "ModelAPI_Data.h"
11 #include "ModelAPI_AttributeDocRef.h"
12 #include <ModelAPI_ResultPart.h>
13 #include <ModelAPI_Events.h>
15 PartSetPlugin_Part::PartSetPlugin_Part()
19 void PartSetPlugin_Part::initAttributes()
20 { // all is in part result
23 void PartSetPlugin_Part::execute()
25 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
27 aResult = document()->createPart(data());
29 // do not activate part by simple execution if it is not loaded yet: it must be explicitly
31 if (!ModelAPI_Session::get()->isLoadByDemand(aResult->data()->name())) {
32 // On undo/redo creation of the part result the Object Browser must get creation event
33 // earlier that activation of this part event (otherwise the crash is produced)
34 // So, send a creation event earlier, without any grouping
35 static Events_ID aCreateID = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
36 ModelAPI_EventCreator::get()->sendUpdated(aResult, aCreateID, false);
40 } else { // execute is called for result update anyway
41 aResult->updateShape();
45 const std::string& PartSetPlugin_Part::documentToAdd()
47 // part must be added only to the module document
48 return ModelAPI_Session::get()->moduleDocument()->kind();
51 std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::addFeature(std::string theID)
53 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
55 DocumentPtr aDoc = aResult->partDoc();
56 if (aDoc.get() && aDoc->isOpened())
57 return aDoc->addFeature(theID);
62 int PartSetPlugin_Part::numberOfSubs(bool forTree) const
64 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
66 DocumentPtr aDoc = aResult->partDoc();
67 if (aDoc.get() && aDoc->isOpened())
68 return aDoc->numInternalFeatures();
73 std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::subFeature(const int theIndex, bool forTree)
75 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
77 DocumentPtr aDoc = aResult->partDoc();
78 if (aDoc.get() && aDoc->isOpened()) {
79 return aDoc->internalFeature(theIndex);
85 int PartSetPlugin_Part::subFeatureId(const int theIndex) const
87 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
89 DocumentPtr aDoc = aResult->partDoc();
90 if (aDoc.get() && aDoc->isOpened()) {
91 return aDoc->object(ModelAPI_Feature::group(), theIndex)->data()->featureId();
97 bool PartSetPlugin_Part::isSub(ObjectPtr theObject) const
99 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
101 DocumentPtr aDoc = aResult->partDoc();
102 return theObject->document() == aDoc;
107 void PartSetPlugin_Part::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)