Salome HOME
Merge branch 'Dev_1.1.1' of newgeom:newgeom into Dev_1.2.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 LIST_ID("base");
8         static const std::string MY_TO_SIZE_ID("to_size");
9         static const std::string MY_FROM_SIZE_ID("from_size");
10         static const std::string MY_TO_OBJECT_ID("to_object");
11         static const std::string MY_FROM_OBJECT_ID("from_object");
12
13         data()->addAttribute(FeaturesPlugin_Extrusion::LIST_ID(), ModelAPI_AttributeSelection::typeId());
14         data()->addAttribute(FeaturesPlugin_Extrusion::FROM_SIZE_ID(), ModelAPI_AttributeDouble::typeId());
15         data()->addAttribute(FeaturesPlugin_Extrusion::TO_SIZE_ID(), ModelAPI_AttributeDouble::typeId());
16         data()->addAttribute(FeaturesPlugin_Extrusion::FROM_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
17         data()->addAttribute(FeaturesPlugin_Extrusion::TO_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
18 """
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from ModelAPI import *
23 from GeomDataAPI import *
24 from GeomAlgoAPI import *
25 from GeomAPI import *
26 import math
27
28 __updated__ = "2014-12-16"
29
30 aSession = ModelAPI_Session.get()
31 aDocument = aSession.moduleDocument()
32 # Create a part for extrusion
33 aSession.startOperation()
34 aPartFeature = aDocument.addFeature("Part")
35 aSession.finishOperation()
36 assert (len(aPartFeature.results()) == 1)
37 # Another way is:
38 # aPart = aSession.activeDocument()
39 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
40 aPart = aPartResult.partDoc()
41 #=========================================================================
42 # Create a sketch circle to extrude
43 #=========================================================================
44 aSession.startOperation()
45 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
46 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
47 origin.setValue(0, 0, 0)
48 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
49 dirx.setValue(1, 0, 0)
50 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
51 norm.setValue(0, 0, 1)
52 # Create circle
53 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
54 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
55 aCircleRadius = aSketchCircle.real("CircleRadius")
56 anCircleCentr.setValue(50., 50)
57 aCircleRadius.setValue(20.)
58 aSession.finishOperation()
59 #=========================================================================
60 # Make extrusion on circle
61 #=========================================================================
62 # Build shape from sketcher results
63 aCircleSketchResult = aCircleSketchFeature.firstResult()
64 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
65 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
66 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
67 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
68 aCircleSketchFaces = ShapeList()
69 GeomAlgoAPI_SketchBuilder.createFaces(
70     origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
71 assert (len(aCircleSketchFaces) > 0)
72 assert (aCircleSketchFaces[0] is not None)
73 # Create extrusion
74 aSession.startOperation()
75 anExtrusionFt = aPart.addFeature("Extrusion")
76 assert (anExtrusionFt.getKind() == "Extrusion")
77 # selection type FACE=4
78 anExtrusionFt.selectionList("base").append(
79     aCircleSketchResult, aCircleSketchFaces[0])
80 anExtrusionFt.real("from_size").setValue(0)
81 anExtrusionFt.real("to_size").setValue(50)
82 anExtrusionFt.execute()
83 aSession.finishOperation()
84 assert (anExtrusionFt.real("to_size").value() == 50.0)
85
86 # Check extrusion results
87 assert (len(anExtrusionFt.results()) > 0)
88 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
89 assert (anExtrusionResult is not None)
90
91 #=========================================================================
92 # Test extrusion between bounding planes
93 #=========================================================================
94 # Create from plane
95 aSession.startOperation()
96 aFromPlaneFeature = aPart.addFeature("Plane")
97 aFromPlaneFeature.string("CreationMethod").setValue("PlaneByGeneralEquation")
98 aFromPlaneFeature.real("A").setValue(0.)
99 aFromPlaneFeature.real("B").setValue(0.)
100 aFromPlaneFeature.real("C").setValue(1.)
101 aFromPlaneFeature.real("D").setValue(30.)
102 aSession.finishOperation()
103
104 # Create to plane
105 aSession.startOperation()
106 aToPlaneFeature = aPart.addFeature("Plane")
107 aToPlaneFeature.string("CreationMethod").setValue("PlaneByGeneralEquation")
108 aToPlaneFeature.real("A").setValue(0.)
109 aToPlaneFeature.real("B").setValue(0.)
110 aToPlaneFeature.real("C").setValue(1.)
111 aToPlaneFeature.real("D").setValue(-30.)
112 aSession.finishOperation()
113
114 # Create extrusion
115 aSession.startOperation()
116 anExtrusionFt = aPart.addFeature("Extrusion")
117 assert (anExtrusionFt.getKind() == "Extrusion")
118 # selection type FACE=4
119 anExtrusionFt.selectionList("base").append(
120     aCircleSketchResult, aCircleSketchFaces[0])
121 aFromResult = aFromPlaneFeature.firstResult()
122 aFromShape = modelAPI_ResultConstruction(aFromResult).shape()
123 anExtrusionFt.selection("from_object").setValue(aFromResult, aFromShape)
124 anExtrusionFt.real("from_size").setValue(10)
125 aToResult = aToPlaneFeature.firstResult()
126 aToShape = modelAPI_ResultConstruction(aToResult).shape()
127 anExtrusionFt.selection("to_object").setValue(aToResult, aToShape)
128 anExtrusionFt.real("to_size").setValue(10)
129 anExtrusionFt.execute()
130 aSession.finishOperation()
131
132 # Check extrusion results
133 assert (len(anExtrusionFt.results()) > 0)
134 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
135 assert (anExtrusionResult is not None)
136
137 # Check extrusion volume
138 aRefVolume = 100530.96491487337
139 aResVolume = GeomAlgoAPI_ShapeProps_volume(anExtrusionResult.shape())
140 assert (math.fabs(aResVolume - aRefVolume) < 10 ** -5)
141
142 #=========================================================================
143 # Test extrusion between bounding faces from other sketch result
144 #=========================================================================
145 aSession.startOperation()
146 aClampSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
147 origin = geomDataAPI_Point(aClampSketchFeature.attribute("Origin"))
148 origin.setValue(0, 0, 0)
149 dirx = geomDataAPI_Dir(aClampSketchFeature.attribute("DirX"))
150 dirx.setValue(1, 0, 0)
151 norm = geomDataAPI_Dir(aClampSketchFeature.attribute("Norm"))
152 norm.setValue(0, 1, 0)
153 # Create clamp
154 aSketchLineA = aClampSketchFeature.addFeature("SketchLine")
155 aSketchLineB = aClampSketchFeature.addFeature("SketchLine")
156 aSketchLineC = aClampSketchFeature.addFeature("SketchLine")
157 aSketchLineD = aClampSketchFeature.addFeature("SketchLine")
158 aSketchLineE = aClampSketchFeature.addFeature("SketchLine")
159 aLineAStartPoint = geomDataAPI_Point2D(aSketchLineA.attribute("StartPoint"))
160 aLineAEndPoint = geomDataAPI_Point2D(aSketchLineA.attribute("EndPoint"))
161 aLineBStartPoint = geomDataAPI_Point2D(aSketchLineB.attribute("StartPoint"))
162 aLineBEndPoint = geomDataAPI_Point2D(aSketchLineB.attribute("EndPoint"))
163 aLineCStartPoint = geomDataAPI_Point2D(aSketchLineC.attribute("StartPoint"))
164 aLineCEndPoint = geomDataAPI_Point2D(aSketchLineC.attribute("EndPoint"))
165 aLineDStartPoint = geomDataAPI_Point2D(aSketchLineD.attribute("StartPoint"))
166 aLineDEndPoint = geomDataAPI_Point2D(aSketchLineD.attribute("EndPoint"))
167 aLineEStartPoint = geomDataAPI_Point2D(aSketchLineE.attribute("StartPoint"))
168 aLineEEndPoint = geomDataAPI_Point2D(aSketchLineE.attribute("EndPoint"))
169 aLineAStartPoint.setValue(0., -50.)
170 aLineAEndPoint.setValue(0., 50.)
171 aLineBStartPoint.setValue(0., 50.)
172 aLineBEndPoint.setValue(100., 50.)
173 aLineCStartPoint.setValue(100., 50.)
174 aLineCEndPoint.setValue(10., 0.)
175 aLineDStartPoint.setValue(10., 0.)
176 aLineDEndPoint.setValue(100., -50.)
177 aLineEStartPoint.setValue(100., -50.)
178 aLineEEndPoint.setValue(0., -50.)
179 aSession.finishOperation()
180
181 # Extrude clamp
182 aClampSketchResult = aClampSketchFeature.firstResult()
183 aClampSketchEdges = modelAPI_ResultConstruction(aClampSketchResult).shape()
184 origin = geomDataAPI_Point(aClampSketchFeature.attribute("Origin")).pnt()
185 dirX = geomDataAPI_Dir(aClampSketchFeature.attribute("DirX")).dir()
186 norm = geomDataAPI_Dir(aClampSketchFeature.attribute("Norm")).dir()
187 aClampSketchFaces = ShapeList()
188 GeomAlgoAPI_SketchBuilder.createFaces(
189     origin, dirX, norm, aClampSketchEdges, aClampSketchFaces)
190 aSession.startOperation()
191 aClampExtrusionFt = aPart.addFeature("Extrusion")
192 assert (aClampExtrusionFt.getKind() == "Extrusion")
193 # selection type FACE=4
194 aClampExtrusionFt.selectionList("base").append(
195     aClampSketchResult, aClampSketchFaces[0])
196 aClampExtrusionFt.real("from_size").setValue(0)
197 aClampExtrusionFt.real("to_size").setValue(70)
198 aClampExtrusionFt.execute()
199 aSession.finishOperation()
200
201 # Check extrusion results
202 assert (len(aClampExtrusionFt.results()) > 0)
203 anExtrusionResult = modelAPI_ResultBody(aClampExtrusionFt.firstResult())
204 assert (anExtrusionResult is not None)
205
206 # Extrude circle
207 aSession.startOperation()
208 anExtrusionFt = aPart.addFeature("Extrusion")
209 assert (anExtrusionFt.getKind() == "Extrusion")
210 # selection type FACE=4
211 anExtrusionFt.selectionList("base").append(
212     aCircleSketchResult, aCircleSketchFaces[0])
213 aClampResult = aClampExtrusionFt.firstResult()
214 anExtrusionFt.selection("from_object").selectSubShape("face", "Extrusion_3/LateralFace_1")
215 anExtrusionFt.real("from_size").setValue(0)
216 anExtrusionFt.selection("to_object").selectSubShape("face", "Extrusion_3/LateralFace_2")
217 anExtrusionFt.real("to_size").setValue(0)
218 anExtrusionFt.execute()
219 aSession.finishOperation()
220
221 # Check extrusion results
222 assert (len(anExtrusionFt.results()) > 0)
223 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
224 assert (anExtrusionResult is not None)
225
226 #=========================================================================
227 # End of test
228 #=========================================================================