Salome HOME
updated copyright message
[modules/shaper.git] / src / CollectionPlugin / Test / TestGroup.py
1 # Copyright (C) 2014-2023  CEA, EDF
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 email : webmaster.salome@opencascade.com
18 #
19
20 """
21       TestBoolean.py
22       Unit test of FeaturesPlugin_Group class
23
24       class FeaturesPlugin_Group
25         static const std::string MY_GROUP_ID("Group");
26         static const std::string MY_GROUP_LIST_ID("group_list");
27
28         data()->addAttribute(FeaturesPlugin_Group::LIST_ID(), ModelAPI_AttributeSelectionList::typeId());
29 """
30 #=========================================================================
31 # Initialization of the test
32 #=========================================================================
33 from ModelAPI import *
34 from GeomDataAPI import *
35 from GeomAlgoAPI import *
36 from GeomAPI import *
37
38 __updated__ = "2014-12-16"
39
40 aSession = ModelAPI_Session.get()
41 # Create a part for extrusions & boolean
42 aSession.startOperation()
43 aPartFeature = aSession.moduleDocument().addFeature("Part")
44 aSession.finishOperation()
45 aPart = aSession.activeDocument()
46 #=========================================================================
47 # Create a sketch with triangle and extrude it
48 #=========================================================================
49 aSession.startOperation()
50 aTriangleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
51 origin = geomDataAPI_Point(aTriangleSketchFeature.attribute("Origin"))
52 origin.setValue(0, 0, 0)
53 dirx = geomDataAPI_Dir(aTriangleSketchFeature.attribute("DirX"))
54 dirx.setValue(1, 0, 0)
55 norm = geomDataAPI_Dir(aTriangleSketchFeature.attribute("Norm"))
56 norm.setValue(0, 0, 1)
57 aSketchLineA = aTriangleSketchFeature.addFeature("SketchLine")
58 aSketchLineB = aTriangleSketchFeature.addFeature("SketchLine")
59 aSketchLineC = aTriangleSketchFeature.addFeature("SketchLine")
60 aLineAStartPoint = geomDataAPI_Point2D(aSketchLineA.attribute("StartPoint"))
61 aLineAEndPoint = geomDataAPI_Point2D(aSketchLineA.attribute("EndPoint"))
62 aLineBStartPoint = geomDataAPI_Point2D(aSketchLineB.attribute("StartPoint"))
63 aLineBEndPoint = geomDataAPI_Point2D(aSketchLineB.attribute("EndPoint"))
64 aLineCStartPoint = geomDataAPI_Point2D(aSketchLineC.attribute("StartPoint"))
65 aLineCEndPoint = geomDataAPI_Point2D(aSketchLineC.attribute("EndPoint"))
66 aLineAStartPoint.setValue(-100., 0.)
67 aLineAEndPoint.setValue(100., 0.)
68 aLineBStartPoint.setValue(100., 0.)
69 aLineBEndPoint.setValue(0., 173.2)
70 aLineCStartPoint.setValue(0., 173.2)
71 aLineCEndPoint.setValue(-100., 0.)
72 aSession.finishOperation()
73 # Build sketch faces
74 aSession.startOperation()
75 aSketchResult = modelAPI_ResultConstruction(aTriangleSketchFeature.firstResult())
76 # Create extrusion on them
77 anExtrusionFt = aPart.addFeature("Extrusion")
78 anExtrusionFt.selectionList("base").append(aSketchResult, aSketchResult.face(0))
79 anExtrusionFt.string("CreationMethod").setValue("BySizes")
80 anExtrusionFt.real("to_size").setValue(50)
81 anExtrusionFt.real("from_size").setValue(50)
82 anExtrusionFt.execute()
83 aSession.finishOperation()
84 anExtrusionBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
85 #=========================================================================
86 # Create group of vertex
87 #=========================================================================
88 aSession.startOperation()
89 aGroupFeature = aSession.activeDocument().addFeature("Group")
90 aSelectionListAttr = aGroupFeature.selectionList("group_list")
91 aSelectionListAttr.setSelectionType("vertex")
92 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/To_Face]")
93 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/To_Face]")
94 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/To_Face]")
95 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/From_Face]")
96 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/From_Face]")
97 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/From_Face]")
98 aSession.finishOperation()
99 #=========================================================================
100 # Check results
101 #=========================================================================
102 assert(aSelectionListAttr.size() == 6)
103 aGroupResult = aGroupFeature.firstResult()
104 assert(aGroupResult)
105 #=========================================================================
106 # Create group of edges
107 #=========================================================================
108 aSession.startOperation()
109 aGroupFeature = aSession.activeDocument().addFeature("Group")
110 aSelectionListAttr = aGroupFeature.selectionList("group_list")
111 aSelectionListAttr.setSelectionType("edge")
112 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3]")
113 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2]")
114 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3]")
115 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/From_Face]")
116 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/To_Face]")
117 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1/From_Face]")
118 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/To_Face]")
119 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_2][Extrusion_1_1/From_Face]")
120 aSelectionListAttr.append("[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_1][Extrusion_1_1/To_Face]")
121 aSession.finishOperation()
122 #=========================================================================
123 # Check results
124 #=========================================================================
125 assert(aSelectionListAttr.size() == 9)
126 aGroupResult = aGroupFeature.firstResult()
127 assert(aGroupResult)
128 #=========================================================================
129 # Create group of faces
130 #=========================================================================
131 aSession.startOperation()
132 aGroupFeature = aSession.activeDocument().addFeature("Group")
133 aSelectionListAttr = aGroupFeature.selectionList("group_list")
134 aSelectionListAttr.setSelectionType("face")
135 aShapeExplorer = GeomAPI_ShapeExplorer(anExtrusionBody.shape(), GeomAPI_Shape.FACE)
136 while aShapeExplorer.more():
137   aSelectionListAttr.append(anExtrusionBody, aShapeExplorer.current())
138   aShapeExplorer.next();
139 aSession.finishOperation()
140 #=========================================================================
141 # Check results
142 #=========================================================================
143 assert(aSelectionListAttr.size() == 5)
144 aGroupResult = aGroupFeature.firstResult()
145 assert(aGroupResult)
146 #=========================================================================
147 # Create group of solids
148 #=========================================================================
149 aSession.startOperation()
150 aGroupFeature = aSession.activeDocument().addFeature("Group")
151 aSelectionListAttr = aGroupFeature.selectionList("group_list")
152 aSelectionListAttr.setSelectionType("face")
153 aSelectionListAttr.append(anExtrusionBody, None)
154 aSession.finishOperation()
155 #=========================================================================
156 # Check results
157 #=========================================================================
158 assert(aSelectionListAttr.size() == 1)
159 aGroupResult = aGroupFeature.firstResult()
160 assert(aGroupResult)
161
162 #=========================================================================
163 # Create group of face
164 #=========================================================================
165 aSession.startOperation()
166 aGroupFeature = aSession.activeDocument().addFeature("Group")
167 aSelectionListAttr = aGroupFeature.selectionList("group_list")
168 aSelectionListAttr.setSelectionType("face")
169 aSelectionListAttr.append("Extrusion_1_1/To_Face")
170 aSession.finishOperation()
171 #=========================================================================
172 # Check results
173 #=========================================================================
174 assert(aSelectionListAttr.size() == 1)
175 aGroupResult = aGroupFeature.firstResult()
176 assert(aGroupResult)
177
178 #=========================================================================
179 # Create a sketch circle to extrude
180 #=========================================================================
181 aSession.startOperation()
182 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
183 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
184 origin.setValue(0, 0, 0)
185 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
186 dirx.setValue(1, 0, 0)
187 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
188 norm.setValue(0, 0, 1)
189 # Create circle
190 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
191 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
192 aCircleRadius = aSketchCircle.real("circle_radius")
193 anCircleCentr.setValue(0., 57.74)
194 aCircleRadius.setValue(50.)
195 aSession.finishOperation()
196 #=========================================================================
197 # Make extrusion on circle
198 #=========================================================================
199 # Build shape from sketcher results
200 aCircleSketchResult = modelAPI_ResultConstruction(aCircleSketchFeature.firstResult())
201 assert(aCircleSketchResult.facesNum() > 0)
202 # Create extrusion
203 aSession.startOperation()
204 anExtrusionFt = aPart.addFeature("Extrusion")
205 assert (anExtrusionFt.getKind() == "Extrusion")
206 # selection type FACE=4
207 anExtrusionFt.selectionList("base").append(aCircleSketchResult, aCircleSketchResult.face(0))
208 anExtrusionFt.string("CreationMethod").setValue("BySizes")
209 anExtrusionFt.real("to_size").setValue(50)
210 anExtrusionFt.real("from_size").setValue(50)
211 anExtrusionFt.execute()
212 aSession.finishOperation()
213 aCylinderBody = modelAPI_ResultBody(anExtrusionFt.firstResult())
214
215 #=========================================================================
216 # Create a cut
217 #=========================================================================
218 aSession.startOperation()
219 aBooleanFt = aPart.addFeature("Cut")
220 aBooleanFt.selectionList("main_objects").append(anExtrusionBody, None)
221 aBooleanFt.selectionList("tool_objects").append(aCylinderBody, None)
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())