1 // File: FeaturesPlugin_Boolean.cpp
2 // Created: 02 Sept 2014
3 // Author: Vitaly SMETANNIKOV
5 #include "FeaturesPlugin_Boolean.h"
7 #include <ModelAPI_Data.h>
8 #include <ModelAPI_Document.h>
9 #include <ModelAPI_AttributeReference.h>
10 #include <ModelAPI_AttributeInteger.h>
11 #include <ModelAPI_ResultBody.h>
12 #include <GeomAlgoAPI_Boolean.h>
16 FeaturesPlugin_Boolean::FeaturesPlugin_Boolean()
20 void FeaturesPlugin_Boolean::initAttributes()
22 data()->addAttribute(FeaturesPlugin_Boolean::TYPE_ID(), ModelAPI_AttributeInteger::type());
23 data()->addAttribute(FeaturesPlugin_Boolean::OBJECT_ID(), ModelAPI_AttributeReference::type());
24 data()->addAttribute(FeaturesPlugin_Boolean::TOOL_ID(), ModelAPI_AttributeReference::type());
27 boost::shared_ptr<GeomAPI_Shape> FeaturesPlugin_Boolean::getShape(const std::string& theAttrName)
29 boost::shared_ptr<ModelAPI_AttributeReference> aObjRef = boost::dynamic_pointer_cast<
30 ModelAPI_AttributeReference>(data()->attribute(theAttrName));
32 boost::shared_ptr<ModelAPI_ResultBody> aConstr = boost::dynamic_pointer_cast<
33 ModelAPI_ResultBody>(aObjRef->value());
35 return aConstr->shape();
37 return boost::shared_ptr<GeomAPI_Shape>();
41 void FeaturesPlugin_Boolean::execute()
43 boost::shared_ptr<ModelAPI_AttributeInteger> aTypeAttr = boost::dynamic_pointer_cast<
44 ModelAPI_AttributeInteger>(data()->attribute(FeaturesPlugin_Boolean::TYPE_ID()));
47 int aType = aTypeAttr->value();
49 boost::shared_ptr<GeomAPI_Shape> aObject = this->getShape(FeaturesPlugin_Boolean::OBJECT_ID());
53 boost::shared_ptr<GeomAPI_Shape> aTool = this->getShape(FeaturesPlugin_Boolean::TOOL_ID());
57 boost::shared_ptr<ModelAPI_ResultBody> aResult = document()->createBody(data());
60 aResult->store(GeomAlgoAPI_Boolean::makeCut(aObject, aTool));
63 aResult->store(GeomAlgoAPI_Boolean::makeFuse(aObject, aTool));
66 aResult->store(GeomAlgoAPI_Boolean::makeCommon(aObject, aTool));