]> SALOME platform Git repositories - modules/shaper.git/blob - src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp
Salome HOME
0e997edafe6fe27d0eda36920a0cdb026c80a0e9
[modules/shaper.git] / src / FeaturesPlugin / FeaturesPlugin_Extrusion.cpp
1 // File:        FeaturesPlugin_Extrusion.cpp
2 // Created:     30 May 2014
3 // Author:      Vitaly SMETANNIKOV
4
5 #include "FeaturesPlugin_Extrusion.h"
6 #include <ModelAPI_Session.h>
7 #include <ModelAPI_Document.h>
8 #include <ModelAPI_Data.h>
9 #include <ModelAPI_ResultConstruction.h>
10 #include <ModelAPI_ResultBody.h>
11 #include <ModelAPI_AttributeDouble.h>
12 #include <ModelAPI_AttributeSelection.h>
13 #include <ModelAPI_AttributeBoolean.h>
14
15 #include <GeomAlgoAPI_Extrusion.h>
16
17 using namespace std;
18
19 FeaturesPlugin_Extrusion::FeaturesPlugin_Extrusion()
20 {
21 }
22
23 void FeaturesPlugin_Extrusion::initAttributes()
24 {
25   data()->addAttribute(FeaturesPlugin_Extrusion::FACE_ID(), ModelAPI_AttributeSelection::type());
26   data()->addAttribute(FeaturesPlugin_Extrusion::SIZE_ID(), ModelAPI_AttributeDouble::type());
27   data()->addAttribute(FeaturesPlugin_Extrusion::REVERSE_ID(), ModelAPI_AttributeBoolean::type());
28 }
29
30 void FeaturesPlugin_Extrusion::execute()
31 {
32   boost::shared_ptr<ModelAPI_AttributeSelection> aFaceRef = boost::dynamic_pointer_cast<
33       ModelAPI_AttributeSelection>(data()->attribute(FeaturesPlugin_Extrusion::FACE_ID()));
34   if (!aFaceRef)
35     return;
36   boost::shared_ptr<GeomAPI_Shape> aFace = 
37     boost::dynamic_pointer_cast<GeomAPI_Shape>(aFaceRef->value());
38   if (!aFace)
39     return;
40
41   double aSize = data()->real(FeaturesPlugin_Extrusion::SIZE_ID())->value();
42   if (data()->boolean(FeaturesPlugin_Extrusion::REVERSE_ID())->value())
43     aSize = -aSize;
44
45   boost::shared_ptr<ModelAPI_ResultBody> aResult = document()->createBody(data());
46   aResult->store(GeomAlgoAPI_Extrusion::makeExtrusion(aFace, aSize));
47   setResult(aResult);
48 }