Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
[modules/shaper.git] / src / FeaturesPlugin / Test / TestExtrusion.py
1 """
2       TestExtrusion.py
3       Unit test of FeaturesPlugin_Extrusion class
4       
5       class FeaturesPlugin_Extrusion : public ModelAPI_Feature
6         static const std::string MY_EXTRUSION_ID("Extrusion");
7         static const std::string MY_FACE_ID("base");
8         static const std::string MY_SIZE_ID("size");
9         static const std::string MY_REVERSE_ID("reverse");
10           
11         data()->addAttribute(FeaturesPlugin_Extrusion::FACE_ID(), ModelAPI_AttributeSelection::typeId());
12         data()->addAttribute(FeaturesPlugin_Extrusion::SIZE_ID(), ModelAPI_AttributeDouble::typeId());
13         data()->addAttribute(FeaturesPlugin_Extrusion::REVERSE_ID(), ModelAPI_AttributeBoolean::typeId());
14 """
15 #=========================================================================
16 # Initialization of the test
17 #=========================================================================
18 from ModelAPI import *
19 from GeomDataAPI import *
20 from GeomAlgoAPI import *
21 from GeomAPI import *
22
23 __updated__ = "2014-12-16"
24
25 aSession = ModelAPI_Session.get()
26 aDocument = aSession.moduleDocument()
27 # Create a part for extrusion
28 aSession.startOperation()
29 aPartFeature = aDocument.addFeature("Part")
30 aSession.finishOperation()
31 assert (len(aPartFeature.results()) == 1)
32 # Another way is:
33 # aPart = aSession.activeDocument()
34 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
35 aPart = aPartResult.partDoc()
36 #=========================================================================
37 # Create a sketch circle to extrude
38 #=========================================================================
39 aSession.startOperation()
40 aSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
41 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
42 origin.setValue(0, 0, 0)
43 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
44 dirx.setValue(1, 0, 0)
45 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
46 norm.setValue(0, 0, 1)
47 # Create circle
48 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
49 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
50 aCircleRadius = aSketchCircle.real("CircleRadius")
51 anCircleCentr.setValue(50., 50)
52 aCircleRadius.setValue(20.)
53 aSession.finishOperation()
54 #=========================================================================
55 # Make extrusion on circle
56 #=========================================================================
57 # Build shape from sketcher results
58 aSketchResult = aSketchFeature.firstResult()
59 aSketchEdges = modelAPI_ResultConstruction(aSketchResult).shape()
60 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin")).pnt()
61 dirX = geomDataAPI_Dir(aSketchFeature.attribute("DirX")).dir()
62 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm")).dir()
63 aSketchFaces = ShapeList()
64 GeomAlgoAPI_SketchBuilder.createFaces(
65     origin, dirX, norm, aSketchEdges, aSketchFaces)
66 assert (len(aSketchFaces) > 0)
67 assert (aSketchFaces[0] is not None)
68 # Create extrusion
69 aSession.startOperation()
70 anExtrusionFt = aPart.addFeature("Extrusion")
71 assert (anExtrusionFt.getKind() == "Extrusion")
72 # selection type FACE=4
73 anExtrusionFt.selectionList("base").append(
74     aSketchResult, aSketchFaces[0])
75 anExtrusionFt.real("size").setValue(50)
76 anExtrusionFt.boolean("reverse").setValue(False)
77 anExtrusionFt.execute()
78 aSession.finishOperation()
79 assert (anExtrusionFt.real("size").value() == 50.0)
80 assert (anExtrusionFt.boolean("reverse").value() == False)
81
82 # Check extrusion results
83 assert (len(anExtrusionFt.results()) > 0)
84 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
85 assert (anExtrusionResult is not None)
86 #=========================================================================
87 # End of test
88 #=========================================================================