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 Borwser must get creation event
35 // earlier that activation of this part event (otherwise the crash is producted)
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();
59 return aDoc->addFeature(theID);
64 int PartSetPlugin_Part::numberOfSubs() const
66 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
68 DocumentPtr aDoc = aResult->partDoc();
70 return aDoc->size(ModelAPI_Feature::group());
75 std::shared_ptr<ModelAPI_Feature> PartSetPlugin_Part::subFeature(const int theIndex) const
77 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
79 DocumentPtr aDoc = aResult->partDoc();
81 return std::dynamic_pointer_cast<ModelAPI_Feature>(
82 aDoc->object(ModelAPI_Feature::group(), theIndex));
88 int PartSetPlugin_Part::subFeatureId(const int theIndex) const
90 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
92 DocumentPtr aDoc = aResult->partDoc();
94 return aDoc->object(ModelAPI_Feature::group(), theIndex)->data()->featureId();
100 bool PartSetPlugin_Part::isSub(ObjectPtr theObject) const
102 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
104 DocumentPtr aDoc = aResult->partDoc();
105 return document() == aDoc;
110 void PartSetPlugin_Part::removeFeature(std::shared_ptr<ModelAPI_Feature> theFeature)
112 ResultPartPtr aResult = std::dynamic_pointer_cast<ModelAPI_ResultPart>(firstResult());
114 DocumentPtr aDoc = aResult->partDoc();
116 aDoc->removeFeature(theFeature);