Salome HOME
a5e078821835a0007080a0cc7eb4be86814adfb4
[modules/shaper.git] / src / CollectionPlugin / Test / TestGroup.py
1 """
2       TestBoolean.py
3       Unit test of FeaturesPlugin_Group class
4
5       class FeaturesPlugin_Group
6         static const std::string MY_GROUP_ID("Group");
7         static const std::string MY_GROUP_LIST_ID("group_list");
8
9         data()->addAttribute(FeaturesPlugin_Group::LIST_ID(), ModelAPI_AttributeSelectionList::typeId());
10 """
11 #=========================================================================
12 # Initialization of the test
13 #=========================================================================
14 from ModelAPI import *
15 from GeomDataAPI import *
16 from GeomAlgoAPI import *
17 from GeomAPI import *
18
19 __updated__ = "2014-12-16"
20
21 aSession = ModelAPI_Session.get()
22 # Create a part for extrusions & boolean
23 aSession.startOperation()
24 aPartFeature = aSession.moduleDocument().addFeature("Part")
25 aSession.finishOperation()
26 aPart = aSession.activeDocument()
27 #=========================================================================
28 # Create a sketch with triangle and extrude it
29 #=========================================================================
30 aSession.startOperation()
31 aTriangleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
32 origin = geomDataAPI_Point(aTriangleSketchFeature.attribute("Origin"))
33 origin.setValue(0, 0, 0)
34 dirx = geomDataAPI_Dir(aTriangleSketchFeature.attribute("DirX"))
35 dirx.setValue(1, 0, 0)
36 norm = geomDataAPI_Dir(aTriangleSketchFeature.attribute("Norm"))
37 norm.setValue(0, 0, 1)
38 aSketchLineA = aTriangleSketchFeature.addFeature("SketchLine")
39 aSketchLineB = aTriangleSketchFeature.addFeature("SketchLine")
40 aSketchLineC = aTriangleSketchFeature.addFeature("SketchLine")
41 aLineAStartPoint = geomDataAPI_Point2D(aSketchLineA.attribute("StartPoint"))
42 aLineAEndPoint = geomDataAPI_Point2D(aSketchLineA.attribute("EndPoint"))
43 aLineBStartPoint = geomDataAPI_Point2D(aSketchLineB.attribute("StartPoint"))
44 aLineBEndPoint = geomDataAPI_Point2D(aSketchLineB.attribute("EndPoint"))
45 aLineCStartPoint = geomDataAPI_Point2D(aSketchLineC.attribute("StartPoint"))
46 aLineCEndPoint = geomDataAPI_Point2D(aSketchLineC.attribute("EndPoint"))
47 aLineAStartPoint.setValue(-100., 0.)
48 aLineAEndPoint.setValue(100., 0.)
49 aLineBStartPoint.setValue(100., 0.)
50 aLineBEndPoint.setValue(0., 173.2)
51 aLineCStartPoint.setValue(0., 173.2)
52 aLineCEndPoint.setValue(-100., 0.)
53 aSession.finishOperation()
54 # Build sketch faces
55 aSession.startOperation()
56 aSketchResult = aTriangleSketchFeature.firstResult()
57 aSketchEdges = modelAPI_ResultConstruction(aSketchResult).shape()
58 origin = geomDataAPI_Point(aTriangleSketchFeature.attribute("Origin")).pnt()
59 dirX = geomDataAPI_Dir(aTriangleSketchFeature.attribute("DirX")).dir()
60 norm = geomDataAPI_Dir(aTriangleSketchFeature.attribute("Norm")).dir()
61 aSketchFaces = ShapeList()
62 GeomAlgoAPI_SketchBuilder.createFaces(origin, dirX, norm, aSketchEdges, aSketchFaces)
63 # Create extrusion on them
64 anExtrusionFt = aPart.addFeature("Extrusion")
65 anExtrusionFt.selectionList("base").append(aSketchResult, aSketchFaces[0])
66 anExtrusionFt.string("CreationMethod").setValue("BySizes")
67 anExtrusionFt.real("to_size").setValue(50)
68 anExtrusionFt.real("from_size").setValue(50)
69 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
70 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
71 anExtrusionFt.execute()
72 aSession.finishOperation()
73 anExtrusionBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
74 #=========================================================================
75 # Create group of vertex
76 #=========================================================================
77 aSession.startOperation()
78 aGroupFeature = aSession.activeDocument().addFeature("Group")
79 aSelectionListAttr = aGroupFeature.selectionList("group_list")
80 aSelectionListAttr.setSelectionType("vertex")
81 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
82 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2&Extrusion_1_1/To_Face_1_1")
83 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
84 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
85 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2&Extrusion_1_1/From_Face_1_1")
86 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
87 aSession.finishOperation()
88 #=========================================================================
89 # Check results
90 #=========================================================================
91 assert(aSelectionListAttr.size() == 6)
92 aGroupResult = aGroupFeature.firstResult()
93 assert(aGroupResult)
94 #=========================================================================
95 # Create group of edges
96 #=========================================================================
97 aSession.startOperation()
98 aGroupFeature = aSession.activeDocument().addFeature("Group")
99 aSelectionListAttr = aGroupFeature.selectionList("group_list")
100 aSelectionListAttr.setSelectionType("edge")
101 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1")
102 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2")
103 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1")
104 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/From_Face_1_1")
105 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
106 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
107 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/To_Face_1_1")
108 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/From_Face_1_1")
109 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/To_Face_1_1")
110 aSession.finishOperation()
111 #=========================================================================
112 # Check results
113 #=========================================================================
114 assert(aSelectionListAttr.size() == 9)
115 aGroupResult = aGroupFeature.firstResult()
116 assert(aGroupResult)
117 #=========================================================================
118 # Create group of faces
119 #=========================================================================
120 aSession.startOperation()
121 aGroupFeature = aSession.activeDocument().addFeature("Group")
122 aSelectionListAttr = aGroupFeature.selectionList("group_list")
123 aSelectionListAttr.setSelectionType("face")
124 aShapeExplorer = GeomAPI_ShapeExplorer(anExtrusionBody.shape(), GeomAPI_Shape.FACE)
125 while aShapeExplorer.more():
126   aSelectionListAttr.append(anExtrusionBody, aShapeExplorer.current())
127   aShapeExplorer.next();
128 aSession.finishOperation()
129 #=========================================================================
130 # Check results
131 #=========================================================================
132 assert(aSelectionListAttr.size() == 5)
133 aGroupResult = aGroupFeature.firstResult()
134 assert(aGroupResult)
135 #=========================================================================
136 # Create group of solids
137 #=========================================================================
138 aSession.startOperation()
139 aGroupFeature = aSession.activeDocument().addFeature("Group")
140 aSelectionListAttr = aGroupFeature.selectionList("group_list")
141 aSelectionListAttr.setSelectionType("face")
142 aSelectionListAttr.append(anExtrusionBody, None)
143 aSession.finishOperation()
144 #=========================================================================
145 # Check results
146 #=========================================================================
147 assert(aSelectionListAttr.size() == 1)
148 aGroupResult = aGroupFeature.firstResult()
149 assert(aGroupResult)
150
151 #=========================================================================
152 # Create group of face
153 #=========================================================================
154 aSession.startOperation()
155 aGroupFeature = aSession.activeDocument().addFeature("Group")
156 aSelectionListAttr = aGroupFeature.selectionList("group_list")
157 aSelectionListAttr.setSelectionType("face")
158 aSelectionListAttr.append("Extrusion_1_1/To_Face_1_1")
159 aSession.finishOperation()
160 #=========================================================================
161 # Check results
162 #=========================================================================
163 assert(aSelectionListAttr.size() == 1)
164 aGroupResult = aGroupFeature.firstResult()
165 assert(aGroupResult)
166
167 #=========================================================================
168 # Create a sketch circle to extrude
169 #=========================================================================
170 aSession.startOperation()
171 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
172 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
173 origin.setValue(0, 0, 0)
174 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
175 dirx.setValue(1, 0, 0)
176 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
177 norm.setValue(0, 0, 1)
178 # Create circle
179 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
180 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
181 aCircleRadius = aSketchCircle.real("circle_radius")
182 anCircleCentr.setValue(0., 57.74)
183 aCircleRadius.setValue(50.)
184 aSession.finishOperation()
185 #=========================================================================
186 # Make extrusion on circle
187 #=========================================================================
188 # Build shape from sketcher results
189 aCircleSketchResult = aCircleSketchFeature.firstResult()
190 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
191 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
192 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
193 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
194 aCircleSketchFaces = ShapeList()
195 GeomAlgoAPI_SketchBuilder.createFaces(origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
196 assert(len(aCircleSketchFaces) > 0)
197 assert(aCircleSketchFaces[0] is not None)
198 # Create extrusion
199 aSession.startOperation()
200 anExtrusionFt = aPart.addFeature("Extrusion")
201 assert (anExtrusionFt.getKind() == "Extrusion")
202 # selection type FACE=4
203 anExtrusionFt.selectionList("base").append(aCircleSketchResult, aCircleSketchFaces[0])
204 anExtrusionFt.string("CreationMethod").setValue("BySizes")
205 anExtrusionFt.real("to_size").setValue(50)
206 anExtrusionFt.real("from_size").setValue(50)
207 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
208 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
209 anExtrusionFt.execute()
210 aSession.finishOperation()
211 aCylinderBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
212
213 #=========================================================================
214 # Create a cut
215 #=========================================================================
216 aSession.startOperation()
217 aBooleanFt = aPart.addFeature("Boolean")
218 aBooleanFt.selectionList("main_objects").append(anExtrusionBody, None)
219 aBooleanFt.selectionList("tool_objects").append(aCylinderBody, None)
220 aBooleanTypeCut = 0
221 aBooleanFt.integer("bool_type").setValue(aBooleanTypeCut)
222 aBooleanFt.execute()
223 aSession.finishOperation()
224
225 #=========================================================================
226 # Move group feature
227 #=========================================================================
228 aSession.startOperation()
229 aPart.moveFeature(aGroupFeature, aBooleanFt)
230 aSession.finishOperation()
231
232 #=========================================================================
233 # Check results
234 #=========================================================================
235 aFactory = ModelAPI_Session.get().validators()
236 assert(aFactory.validate(aGroupFeature))
237 assert(aSelectionListAttr.size() == 1)
238 assert(len(aGroupFeature.results()) > 0)
239 aGroupResult = aGroupFeature.firstResult()
240 assert(aGroupResult)
241 assert(aGroupResult.shape())
242 #=========================================================================
243 # End of test
244 #=========================================================================
245
246 from salome.shaper import model
247 assert(model.checkPythonDump())