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>
17 PartSetPlugin_Part::PartSetPlugin_Part()
21 void PartSetPlugin_Part::initAttributes()
22 { // all is in part result
25 void PartSetPlugin_Part::execute()
27 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
29 aResult = document()->createPart(data());
31 // do not activate part by simple execution if it is not loaded yet: it must be explicitly
33 if (!ModelAPI_Session::get()->isLoadByDemand(aResult->data()->name())) {
34 // On undo/redo creation of the part result the Object Browser must get creation event
35 // earlier that activation of this part event (otherwise the crash is produced)
36 // So, send a creation event earlier, without any grouping
37 static Events_ID aCreateID = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
38 ModelAPI_EventCreator::get()->sendUpdated(aResult, aCreateID, false);
42 } else { // execute is called for result update anyway
43 aResult->updateShape();
47 const std::string& PartSetPlugin_Part::documentToAdd()
49 // part must be added only to the module document
50 return ModelAPI_Session::get()->moduleDocument()->kind();
53 std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::addFeature(std::string theID)
55 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
57 DocumentPtr aDoc = aResult->partDoc();
58 if (aDoc.get() && aDoc->isOpened())
59 return aDoc->addFeature(theID);
64 int PartSetPlugin_Part::numberOfSubs(bool forTree) const
66 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
68 DocumentPtr aDoc = aResult->partDoc();
69 if (aDoc.get() && aDoc->isOpened())
70 return aDoc->numInternalFeatures();
75 std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::subFeature(const int theIndex, bool forTree)
77 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
79 DocumentPtr aDoc = aResult->partDoc();
80 if (aDoc.get() && aDoc->isOpened()) {
81 return aDoc->internalFeature(theIndex);
87 int PartSetPlugin_Part::subFeatureId(const int theIndex) const
89 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
91 DocumentPtr aDoc = aResult->partDoc();
92 if (aDoc.get() && aDoc->isOpened()) {
93 return aDoc->object(ModelAPI_Feature::group(), theIndex)->data()->featureId();
99 bool PartSetPlugin_Part::isSub(ObjectPtr theObject) const
101 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
103 DocumentPtr aDoc = aResult->partDoc();
104 return theObject->document() == aDoc;
109 void PartSetPlugin_Part::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)
111 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
113 DocumentPtr aDoc = aResult->partDoc();
114 if (aDoc.get() && aDoc->isOpened())
115 aDoc->removeFeature(theFeature);