Salome HOME
Merge branch 'Pre_2.8.0_development'
[modules/shaper.git] / src / CollectionPlugin / Test / TestGroup.py
1 ## Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 ##
3 ## This library is free software; you can redistribute it and/or
4 ## modify it under the terms of the GNU Lesser General Public
5 ## License as published by the Free Software Foundation; either
6 ## version 2.1 of the License, or (at your option) any later version.
7 ##
8 ## This library is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 ## Lesser General Public License for more details.
12 ##
13 ## You should have received a copy of the GNU Lesser General Public
14 ## License along with this library; if not, write to the Free Software
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 ##
17 ## See http:##www.salome-platform.org/ or
18 ## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 ##
20
21 """
22       TestBoolean.py
23       Unit test of FeaturesPlugin_Group class
24
25       class FeaturesPlugin_Group
26         static const std::string MY_GROUP_ID("Group");
27         static const std::string MY_GROUP_LIST_ID("group_list");
28
29         data()->addAttribute(FeaturesPlugin_Group::LIST_ID(), ModelAPI_AttributeSelectionList::typeId());
30 """
31 #=========================================================================
32 # Initialization of the test
33 #=========================================================================
34 from ModelAPI import *
35 from GeomDataAPI import *
36 from GeomAlgoAPI import *
37 from GeomAPI import *
38
39 __updated__ = "2014-12-16"
40
41 aSession = ModelAPI_Session.get()
42 # Create a part for extrusions & boolean
43 aSession.startOperation()
44 aPartFeature = aSession.moduleDocument().addFeature("Part")
45 aSession.finishOperation()
46 aPart = aSession.activeDocument()
47 #=========================================================================
48 # Create a sketch with triangle and extrude it
49 #=========================================================================
50 aSession.startOperation()
51 aTriangleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
52 origin = geomDataAPI_Point(aTriangleSketchFeature.attribute("Origin"))
53 origin.setValue(0, 0, 0)
54 dirx = geomDataAPI_Dir(aTriangleSketchFeature.attribute("DirX"))
55 dirx.setValue(1, 0, 0)
56 norm = geomDataAPI_Dir(aTriangleSketchFeature.attribute("Norm"))
57 norm.setValue(0, 0, 1)
58 aSketchLineA = aTriangleSketchFeature.addFeature("SketchLine")
59 aSketchLineB = aTriangleSketchFeature.addFeature("SketchLine")
60 aSketchLineC = aTriangleSketchFeature.addFeature("SketchLine")
61 aLineAStartPoint = geomDataAPI_Point2D(aSketchLineA.attribute("StartPoint"))
62 aLineAEndPoint = geomDataAPI_Point2D(aSketchLineA.attribute("EndPoint"))
63 aLineBStartPoint = geomDataAPI_Point2D(aSketchLineB.attribute("StartPoint"))
64 aLineBEndPoint = geomDataAPI_Point2D(aSketchLineB.attribute("EndPoint"))
65 aLineCStartPoint = geomDataAPI_Point2D(aSketchLineC.attribute("StartPoint"))
66 aLineCEndPoint = geomDataAPI_Point2D(aSketchLineC.attribute("EndPoint"))
67 aLineAStartPoint.setValue(-100., 0.)
68 aLineAEndPoint.setValue(100., 0.)
69 aLineBStartPoint.setValue(100., 0.)
70 aLineBEndPoint.setValue(0., 173.2)
71 aLineCStartPoint.setValue(0., 173.2)
72 aLineCEndPoint.setValue(-100., 0.)
73 aSession.finishOperation()
74 # Build sketch faces
75 aSession.startOperation()
76 aSketchResult = aTriangleSketchFeature.firstResult()
77 aSketchEdges = modelAPI_ResultConstruction(aSketchResult).shape()
78 origin = geomDataAPI_Point(aTriangleSketchFeature.attribute("Origin")).pnt()
79 dirX = geomDataAPI_Dir(aTriangleSketchFeature.attribute("DirX")).dir()
80 norm = geomDataAPI_Dir(aTriangleSketchFeature.attribute("Norm")).dir()
81 aSketchFaces = ShapeList()
82 GeomAlgoAPI_SketchBuilder.createFaces(origin, dirX, norm, aSketchEdges, aSketchFaces)
83 # Create extrusion on them
84 anExtrusionFt = aPart.addFeature("Extrusion")
85 anExtrusionFt.selectionList("base").append(aSketchResult, aSketchFaces[0])
86 anExtrusionFt.string("CreationMethod").setValue("BySizes")
87 anExtrusionFt.real("to_size").setValue(50)
88 anExtrusionFt.real("from_size").setValue(50)
89 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
90 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
91 anExtrusionFt.execute()
92 aSession.finishOperation()
93 anExtrusionBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
94 #=========================================================================
95 # Create group of vertex
96 #=========================================================================
97 aSession.startOperation()
98 aGroupFeature = aSession.activeDocument().addFeature("Group")
99 aSelectionListAttr = aGroupFeature.selectionList("group_list")
100 aSelectionListAttr.setSelectionType("vertex")
101 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
102 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2&Extrusion_1_1/To_Face_1_1")
103 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
104 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
105 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2&Extrusion_1_1/From_Face_1_1")
106 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
107 aSession.finishOperation()
108 #=========================================================================
109 # Check results
110 #=========================================================================
111 assert(aSelectionListAttr.size() == 6)
112 aGroupResult = aGroupFeature.firstResult()
113 assert(aGroupResult)
114 #=========================================================================
115 # Create group of edges
116 #=========================================================================
117 aSession.startOperation()
118 aGroupFeature = aSession.activeDocument().addFeature("Group")
119 aSelectionListAttr = aGroupFeature.selectionList("group_list")
120 aSelectionListAttr.setSelectionType("edge")
121 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/Generated_Face_1")
122 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_2")
123 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/Generated_Face_1")
124 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/From_Face_1_1")
125 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_1&Extrusion_1_1/To_Face_1_1")
126 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_1&Extrusion_1_1/From_Face_1_1")
127 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/To_Face_1_1")
128 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_2&Extrusion_1_1/From_Face_1_1")
129 aSelectionListAttr.append("Extrusion_1_1/Generated_Face_3&Extrusion_1_1/To_Face_1_1")
130 aSession.finishOperation()
131 #=========================================================================
132 # Check results
133 #=========================================================================
134 assert(aSelectionListAttr.size() == 9)
135 aGroupResult = aGroupFeature.firstResult()
136 assert(aGroupResult)
137 #=========================================================================
138 # Create group of faces
139 #=========================================================================
140 aSession.startOperation()
141 aGroupFeature = aSession.activeDocument().addFeature("Group")
142 aSelectionListAttr = aGroupFeature.selectionList("group_list")
143 aSelectionListAttr.setSelectionType("face")
144 aShapeExplorer = GeomAPI_ShapeExplorer(anExtrusionBody.shape(), GeomAPI_Shape.FACE)
145 while aShapeExplorer.more():
146   aSelectionListAttr.append(anExtrusionBody, aShapeExplorer.current())
147   aShapeExplorer.next();
148 aSession.finishOperation()
149 #=========================================================================
150 # Check results
151 #=========================================================================
152 assert(aSelectionListAttr.size() == 5)
153 aGroupResult = aGroupFeature.firstResult()
154 assert(aGroupResult)
155 #=========================================================================
156 # Create group of solids
157 #=========================================================================
158 aSession.startOperation()
159 aGroupFeature = aSession.activeDocument().addFeature("Group")
160 aSelectionListAttr = aGroupFeature.selectionList("group_list")
161 aSelectionListAttr.setSelectionType("face")
162 aSelectionListAttr.append(anExtrusionBody, None)
163 aSession.finishOperation()
164 #=========================================================================
165 # Check results
166 #=========================================================================
167 assert(aSelectionListAttr.size() == 1)
168 aGroupResult = aGroupFeature.firstResult()
169 assert(aGroupResult)
170
171 #=========================================================================
172 # Create group of face
173 #=========================================================================
174 aSession.startOperation()
175 aGroupFeature = aSession.activeDocument().addFeature("Group")
176 aSelectionListAttr = aGroupFeature.selectionList("group_list")
177 aSelectionListAttr.setSelectionType("face")
178 aSelectionListAttr.append("Extrusion_1_1/To_Face_1_1")
179 aSession.finishOperation()
180 #=========================================================================
181 # Check results
182 #=========================================================================
183 assert(aSelectionListAttr.size() == 1)
184 aGroupResult = aGroupFeature.firstResult()
185 assert(aGroupResult)
186
187 #=========================================================================
188 # Create a sketch circle to extrude
189 #=========================================================================
190 aSession.startOperation()
191 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
192 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
193 origin.setValue(0, 0, 0)
194 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
195 dirx.setValue(1, 0, 0)
196 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
197 norm.setValue(0, 0, 1)
198 # Create circle
199 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
200 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
201 aCircleRadius = aSketchCircle.real("circle_radius")
202 anCircleCentr.setValue(0., 57.74)
203 aCircleRadius.setValue(50.)
204 aSession.finishOperation()
205 #=========================================================================
206 # Make extrusion on circle
207 #=========================================================================
208 # Build shape from sketcher results
209 aCircleSketchResult = aCircleSketchFeature.firstResult()
210 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
211 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
212 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
213 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
214 aCircleSketchFaces = ShapeList()
215 GeomAlgoAPI_SketchBuilder.createFaces(origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
216 assert(len(aCircleSketchFaces) > 0)
217 assert(aCircleSketchFaces[0] is not None)
218 # Create extrusion
219 aSession.startOperation()
220 anExtrusionFt = aPart.addFeature("Extrusion")
221 assert (anExtrusionFt.getKind() == "Extrusion")
222 # selection type FACE=4
223 anExtrusionFt.selectionList("base").append(aCircleSketchResult, aCircleSketchFaces[0])
224 anExtrusionFt.string("CreationMethod").setValue("BySizes")
225 anExtrusionFt.real("to_size").setValue(50)
226 anExtrusionFt.real("from_size").setValue(50)
227 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
228 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
229 anExtrusionFt.execute()
230 aSession.finishOperation()
231 aCylinderBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
232
233 #=========================================================================
234 # Create a cut
235 #=========================================================================
236 aSession.startOperation()
237 aBooleanFt = aPart.addFeature("Boolean")
238 aBooleanFt.selectionList("main_objects").append(anExtrusionBody, None)
239 aBooleanFt.selectionList("tool_objects").append(aCylinderBody, None)
240 aBooleanTypeCut = 0
241 aBooleanFt.integer("bool_type").setValue(aBooleanTypeCut)
242 aBooleanFt.execute()
243 aSession.finishOperation()
244
245 #=========================================================================
246 # Move group feature
247 #=========================================================================
248 aSession.startOperation()
249 aPart.moveFeature(aGroupFeature, aBooleanFt)
250 aSession.finishOperation()
251
252 #=========================================================================
253 # Check results
254 #=========================================================================
255 aFactory = ModelAPI_Session.get().validators()
256 assert(aFactory.validate(aGroupFeature))
257 assert(aSelectionListAttr.size() == 1)
258 assert(len(aGroupFeature.results()) > 0)
259 aGroupResult = aGroupFeature.firstResult()
260 assert(aGroupResult)
261 assert(aGroupResult.shape())
262 #=========================================================================
263 # End of test
264 #=========================================================================
265
266 from salome.shaper import model
267 assert(model.checkPythonDump())