3 Unit test of FeaturesPlugin_Extrusion class
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");
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());
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from ModelAPI import *
23 from GeomDataAPI import *
24 from GeomAlgoAPI import *
28 __updated__ = "2014-12-16"
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)
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)
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)
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)
86 # Check extrusion results
87 assert (len(anExtrusionFt.results()) > 0)
88 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
89 assert (anExtrusionResult is not None)
91 #=========================================================================
92 # Test extrusion between bounding planes
93 #=========================================================================
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()
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()
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()
132 # Check extrusion results
133 assert (len(anExtrusionFt.results()) > 0)
134 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
135 assert (anExtrusionResult is not None)
137 # Check extrusion volume
138 aRefVolume = 100530.96491487337
139 aResVolume = GeomAlgoAPI_ShapeProps_volume(anExtrusionResult.shape())
140 assert (math.fabs(aResVolume - aRefVolume) < 10 ** -5)
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)
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()
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()
201 # Check extrusion results
202 assert (len(aClampExtrusionFt.results()) > 0)
203 anExtrusionResult = modelAPI_ResultBody(aClampExtrusionFt.firstResult())
204 assert (anExtrusionResult is not None)
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()
221 # Check extrusion results
222 assert (len(anExtrusionFt.results()) > 0)
223 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
224 assert (anExtrusionResult is not None)
226 #=========================================================================
228 #=========================================================================