Salome HOME
6fe6afe903899dd5d1a69f4661d8fdda08515369
[modules/shaper.git] / src / SketchPlugin / Test / TestMovementComplex.py
1 ## Copyright (C) 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     Test moving the entities in the complex sketch by the example of a clamp
23 """
24
25 from salome.shaper import model
26 from SketchAPI import *
27 from GeomAPI import *
28 import math
29
30 TOLERANCE = 1.e-7
31
32 model.begin()
33 partSet = model.moduleDocument()
34 Part_1 = model.addPart(partSet)
35 Part_1_doc = Part_1.document()
36
37 # Create sketch representing main part of clamp
38 Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
39 SketchLine_1 = Sketch_1.addLine(20, 165, 175, 165)
40 SketchLine_2 = Sketch_1.addLine(175, 165, 175, 120)
41 SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
42 SketchLine_3 = Sketch_1.addLine(175, 120, 80, 20)
43 SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint())
44 SketchLine_4 = Sketch_1.addLine(80, 20, 20, 20)
45 SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
46 SketchLine_5 = Sketch_1.addLine(20, 20, 20, 165)
47 SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint())
48 SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_5.endPoint())
49 SketchConstraintLength_1 = Sketch_1.setLength(SketchLine_1.result(), 155)
50 SketchConstraintHorizontal_1 = Sketch_1.setHorizontal(SketchLine_1.result())
51 SketchConstraintPerpendicular_1 = Sketch_1.setPerpendicular(SketchLine_2.result(), SketchLine_1.result())
52 SketchConstraintParallel_1 = Sketch_1.setParallel(SketchLine_1.result(), SketchLine_4.result())
53 SketchConstraintVertical_1 = Sketch_1.setVertical(SketchLine_5.result())
54 SketchConstraintLength_2 = Sketch_1.setLength(SketchLine_2.result(), 45)
55 SketchConstraintDistance_1 = Sketch_1.setDistance(SketchLine_4.startPoint(), SketchLine_1.result(), 145)
56 SketchConstraintDistanceHorizontal_1 = Sketch_1.setHorizontalDistance(SketchLine_4.startPoint(), SketchLine_3.startPoint(), 95)
57 SketchPoint_1 = Sketch_1.addPoint(model.selection("VERTEX", "PartSet/Origin"))
58 SketchConstraintDistanceHorizontal_2 = Sketch_1.setHorizontalDistance(SketchPoint_1.coordinates(), SketchLine_5.endPoint(), 20)
59 SketchConstraintDistanceVertical_1 = Sketch_1.setVerticalDistance(SketchPoint_1.coordinates(), SketchLine_5.endPoint(), 165)
60 model.do()
61
62 # =============================================================================
63 # Test 1. Create fillet and move fillet arc
64 # =============================================================================
65 Sketch_1.setFillet(SketchLine_5.startPoint())
66 SketchArc_1 = SketchAPI_Arc(model.lastSubFeature(Sketch_1, "SketchArc"))
67 model.do()
68 anArcCenter = [SketchArc_1.center().x(), SketchArc_1.center().y()]
69 anArcStart  = [SketchArc_1.startPoint().x(), SketchArc_1.startPoint().y()]
70 anArcEnd    = [SketchArc_1.endPoint().x(), SketchArc_1.endPoint().y()]
71 # move arc dragging center
72 delta = [1., 1.]
73 for i in range(1, 10):
74     anArcCenter = [anArcCenter[0] + delta[0], anArcCenter[1] + delta[1]]
75     Sketch_1.move(SketchArc_1.center(), anArcCenter[0], anArcCenter[1])
76     model.do()
77     model.assertArcValidity(SketchArc_1)
78     model.assertPoint(SketchArc_1.center(), anArcCenter)
79     assert(SketchArc_1.startPoint().x() == anArcStart[0])
80     assert(SketchArc_1.endPoint().y() == anArcEnd[1])
81     if i == 5:
82         delta = [-1., -1.]
83 # move arc dragging start point
84 delta = [1., 1.]
85 aPosition = anArcStart
86 for i in range(1, 10):
87     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
88     Sketch_1.move(SketchArc_1.startPoint(), aPosition[0], aPosition[1])
89     model.do()
90     model.assertArcValidity(SketchArc_1)
91     assert(SketchArc_1.startPoint().x() == anArcStart[0])
92     assert(SketchArc_1.endPoint().y() == anArcEnd[1])
93     if i == 5:
94         delta = [-1., -1.]
95 # move arc dragging end point
96 delta = [1., 1.]
97 aPosition = anArcEnd
98 for i in range(1, 10):
99     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
100     Sketch_1.move(SketchArc_1.endPoint(), aPosition[0], aPosition[1])
101     model.do()
102     model.assertArcValidity(SketchArc_1)
103     assert(SketchArc_1.startPoint().x() == anArcStart[0])
104     assert(SketchArc_1.endPoint().y() == anArcEnd[1])
105     if i == 5:
106         delta = [-1., -1.]
107
108 # =============================================================================
109 # Test 2. Create circle and move it near its potential position
110 # =============================================================================
111 aCircleCenter = [0, 0]
112 aCircleRadius = 5
113 SketchCircle_1 = Sketch_1.addCircle(aCircleCenter[0], aCircleCenter[1], aCircleRadius)
114 model.do()
115 # move center
116 delta = [3., 2.]
117 for i in range(1, 15):
118     aCircleCenter = [aCircleCenter[0] + delta[0], aCircleCenter[1] + delta[1]]
119     Sketch_1.move(SketchCircle_1.center(), aCircleCenter[0], aCircleCenter[1])
120     model.do()
121     model.assertPoint(SketchCircle_1.center(), aCircleCenter)
122     assert(SketchCircle_1.radius().value() == aCircleRadius)
123 # move circle by dragging edge
124 aPosition = [aCircleCenter[0] + aCircleRadius, aCircleCenter[1]]
125 delta = [1., 1.]
126 for i in range(1, 10):
127     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
128     Sketch_1.move(SketchCircle_1.defaultResult(), aPosition[0], aPosition[1])
129     model.do()
130     model.assertPoint(SketchCircle_1.center(), aCircleCenter)
131     assert(math.fabs(SketchCircle_1.radius().value() - model.distancePointPoint(aPosition, aCircleCenter)) < TOLERANCE)
132
133 # =============================================================================
134 # Test 3. Constrain center of circle and move it again
135 # =============================================================================
136 SketchConstraintDistanceHorizontal_3 = Sketch_1.setHorizontalDistance(SketchCircle_1.center(), SketchArc_1.startPoint(), -30)
137 model.do()
138 # move center
139 delta = [1., 1.]
140 aCircleCenter = [SketchCircle_1.center().x(), SketchCircle_1.center().y()]
141 aPosition = aCircleCenter
142 for i in range(1, 10):
143     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
144     Sketch_1.move(SketchCircle_1.center(), aPosition[0], aPosition[1])
145     model.do()
146     assert(SketchCircle_1.center().x() == aCircleCenter[0])
147     if i == 5:
148         delta = [-1., -1.]
149 # move circle by dragging edge
150 aCircleCenter = [SketchCircle_1.center().x(), SketchCircle_1.center().y()]
151 aPosition = [aCircleCenter[0] + aCircleRadius, aCircleCenter[1]]
152 delta = [1., 1.]
153 for i in range(1, 10):
154     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
155     Sketch_1.move(SketchCircle_1.defaultResult(), aPosition[0], aPosition[1])
156     model.do()
157     model.assertPoint(SketchCircle_1.center(), aCircleCenter)
158     assert(math.fabs(SketchCircle_1.radius().value() - model.distancePointPoint(aPosition, aCircleCenter)) < TOLERANCE)
159 # set radius of the circle
160 aCircleRadius = 17.5
161 SketchConstraintRadius_1 = Sketch_1.setRadius(SketchCircle_1.results()[1], aCircleRadius)
162 model.do()
163 # move center
164 delta = [1., 1.]
165 aCircleCenter = [SketchCircle_1.center().x(), SketchCircle_1.center().y()]
166 aPosition = aCircleCenter
167 for i in range(1, 10):
168     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
169     Sketch_1.move(SketchCircle_1.center(), aPosition[0], aPosition[1])
170     model.do()
171     assert(SketchCircle_1.center().x() == aCircleCenter[0])
172     assert(SketchCircle_1.radius().value() == aCircleRadius)
173     if i == 5:
174         delta = [-1., -1.]
175 # move circle by dragging edge
176 aCircleCenter = [SketchCircle_1.center().x(), SketchCircle_1.center().y()]
177 aPosition = [aCircleCenter[0] + aCircleRadius, aCircleCenter[1]]
178 delta = [1., 1.]
179 for i in range(1, 10):
180     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
181     Sketch_1.move(SketchCircle_1.defaultResult(), aPosition[0], aPosition[1])
182     model.do()
183     assert(SketchCircle_1.center().x() == aCircleCenter[0])
184     assert(SketchCircle_1.radius().value() == aCircleRadius)
185
186 # =============================================================================
187 # Test 4. Set centers of circle and arc coincident and move circle
188 # =============================================================================
189 SketchConstraintCoincidence_6 = Sketch_1.setCoincident(SketchCircle_1.center(), SketchArc_1.center())
190 model.do()
191 assert(model.dof(Sketch_1) == 0)
192 # move circle
193 aCircleCenter = [SketchCircle_1.center().x(), SketchCircle_1.center().y()]
194 aPosition = [aCircleCenter[0], aCircleCenter[1] + aCircleRadius]
195 delta = [0., 1.]
196 for i in range(1, 10):
197     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
198     Sketch_1.move(SketchCircle_1.defaultResult(), aPosition[0], aPosition[1])
199     model.do()
200     model.assertPoint(SketchCircle_1.center(), aCircleCenter)
201     assert(SketchCircle_1.radius().value() == aCircleRadius)
202 assert(model.dof(Sketch_1) == 0)
203
204 # Extrude main part of clamp
205 Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2r-SketchLine_3r-SketchLine_4r-SketchLine_5r-SketchArc_1_2f-SketchCircle_1_2r")], model.selection(), 10, 0)
206 model.do()
207
208
209 # Create sketch representing orthogonal part of clamp
210 Sketch_2 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))
211 SketchRectangle_1 = Sketch_2.addRectangle(20, 0, 100, 50)
212 [SketchLine_6, SketchLine_7, SketchLine_8, SketchLine_9] = SketchRectangle_1.lines()
213 SketchProjection_1 = Sketch_2.addProjection(model.selection("EDGE", "Sketch_1/Edge-SketchLine_1"))
214 SketchLine_10 = SketchProjection_1.createdFeature()
215 SketchConstraintCoincidence_7 = Sketch_2.setCoincident(SketchAPI_Line(SketchLine_7).startPoint(), SketchAPI_Line(SketchLine_10).startPoint())
216 SketchConstraintEqual_1 = Sketch_2.setEqual(SketchLine_8.result(), SketchLine_10.result())
217 SketchConstraintLength_3 = Sketch_2.setLength(SketchLine_7.result(), 80)
218 model.do()
219 assert(model.dof(Sketch_2) == 0)
220
221 # Create auxiliary lines for further holes
222 SketchLine_11 = Sketch_2.addLine(20, 10, 175, 10)
223 SketchLine_11.setAuxiliary(True)
224 SketchConstraintCoincidence_8 = Sketch_2.setCoincident(SketchLine_11.startPoint(), SketchLine_7.result())
225 SketchConstraintCoincidence_9 = Sketch_2.setCoincident(SketchLine_11.endPoint(), SketchLine_9.result())
226 SketchConstraintParallel_2 = Sketch_2.setParallel(SketchLine_11.result(), SketchLine_8.result())
227 SketchLine_12 = Sketch_2.addLine(150, 0, 150, 80)
228 SketchLine_12.setAuxiliary(True)
229 SketchConstraintCoincidence_10 = Sketch_2.setCoincident(SketchLine_12.startPoint(), SketchLine_6.result())
230 SketchConstraintCoincidence_11 = Sketch_2.setCoincident(SketchLine_12.endPoint(), SketchLine_8.result())
231 SketchConstraintPerpendicular_2 = Sketch_2.setPerpendicular(SketchLine_11.result(), SketchLine_12.result())
232 model.do()
233 assert(model.dof(Sketch_2) == 2)
234
235 # =============================================================================
236 # Test 5. Create circular hole and move it
237 # =============================================================================
238 SketchCircle_2 = Sketch_2.addCircle(50, 10, 10)
239 SketchConstraintCoincidence_12 = Sketch_2.setCoincident(SketchCircle_2.center(), SketchLine_11.result())
240 model.do()
241 # move center
242 delta = [2., 1.]
243 aCircleCenter = [SketchCircle_2.center().x(), SketchCircle_2.center().y()]
244 aCircleRadius = SketchCircle_2.radius().value()
245 for i in range(1, 10):
246     aCircleCenter = [aCircleCenter[0] + delta[0], aCircleCenter[1] + delta[1]]
247     Sketch_2.move(SketchCircle_2.center(), aCircleCenter[0], aCircleCenter[1])
248     model.do()
249     model.assertPoint(SketchCircle_2.center(), aCircleCenter)
250     assert(aCircleRadius == SketchCircle_2.radius().value())
251 # move circle by dragging edge
252 aCircleCenter = [SketchCircle_2.center().x(), SketchCircle_2.center().y()]
253 aPosition = [aCircleCenter[0] + aCircleRadius, aCircleCenter[1]]
254 delta = [0., 1.]
255 for i in range(1, 10):
256     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
257     Sketch_1.move(SketchCircle_2.defaultResult(), aPosition[0], aPosition[1])
258     model.do()
259     model.assertPoint(SketchCircle_2.center(), aCircleCenter)
260     assert(math.fabs(SketchCircle_2.radius().value() - model.distancePointPoint(aPosition, aCircleCenter)) < TOLERANCE)
261
262 SketchConstraintDistanceHorizontal_4 = Sketch_2.setHorizontalDistance(SketchLine_11.startPoint(), SketchCircle_2.center(), 21.5)
263 model.do()
264 assert(model.dof(Sketch_2) == 3)
265
266 # =============================================================================
267 # Test 6. Create oval hole and move it
268 # =============================================================================
269 anArcRadius = 5
270 anArcCenter = [SketchLine_11.endPoint().x() + anArcRadius, SketchCircle_2.center().y()]
271 SketchArc_2 = Sketch_2.addArc(anArcCenter[0], anArcCenter[1], anArcCenter[0], anArcCenter[1] + anArcRadius, anArcCenter[0], anArcCenter[1] - anArcRadius, True)
272 SketchConstraintCoincidence_13 = Sketch_2.setCoincident(SketchArc_2.center(), SketchLine_11.result())
273 SketchLine_13 = Sketch_2.addLine(anArcCenter[0], anArcCenter[1] + anArcRadius, SketchLine_12.startPoint().x(), anArcCenter[1] + anArcRadius)
274 SketchConstraintCoincidence_14 = Sketch_2.setCoincident(SketchArc_2.startPoint(), SketchLine_13.startPoint())
275 SketchConstraintCoincidence_15 = Sketch_2.setCoincident(SketchLine_13.endPoint(), SketchLine_12.result())
276 SketchConstraintPerpendicular_3 = Sketch_2.setPerpendicular(SketchLine_13.result(), SketchLine_12.result())
277 SketchLine_14 = Sketch_2.addLine(anArcCenter[0], anArcCenter[1] - anArcRadius, SketchLine_12.startPoint().x(), anArcCenter[1] - anArcRadius)
278 SketchConstraintCoincidence_16 = Sketch_2.setCoincident(SketchArc_2.endPoint(), SketchLine_14.startPoint())
279 SketchConstraintCoincidence_17 = Sketch_2.setCoincident(SketchLine_14.endPoint(), SketchLine_12.result())
280 SketchConstraintPerpendicular_4 = Sketch_2.setPerpendicular(SketchLine_14.result(), SketchLine_12.result())
281 SketchConstraintTangent_1 = Sketch_2.setTangent(SketchArc_2.results()[1], SketchLine_13.result())
282 SketchConstraintTangent_2 = Sketch_2.setTangent(SketchArc_2.results()[1], SketchLine_14.result())
283 model.do()
284 assert(model.dof(Sketch_2) == 5)
285 # move center of arc
286 delta = [-2., 1.]
287 anArcCenter = [SketchArc_2.center().x(), SketchArc_2.center().y()]
288 for i in range(1, 10):
289     anArcCenter = [anArcCenter[0] + delta[0], anArcCenter[1] + delta[1]]
290     Sketch_2.move(SketchArc_2.center(), anArcCenter[0], anArcCenter[1])
291     model.do()
292     model.assertArc(SketchArc_2, anArcCenter, [], [])
293
294 # Complete the oval hole
295 SketchConstraintMirror_1_objects = [SketchLine_13.result(), SketchArc_2.results()[1], SketchLine_14.result()]
296 SketchConstraintMirror_1 = Sketch_2.addMirror(SketchLine_12.result(), SketchConstraintMirror_1_objects)
297 [SketchLine_15, SketchArc_3, SketchLine_16] = SketchConstraintMirror_1.mirrored()
298 model.do()
299
300 # =============================================================================
301 # Test 7. Set arc and circle equal radii and move arc
302 # =============================================================================
303 SketchConstraintEqual_2 = Sketch_2.setEqual(SketchCircle_2.results()[1], SketchArc_2.results()[1])
304 model.do()
305 # move center of arc
306 delta = [-1., -1.]
307 anArcCenter = [SketchArc_2.center().x(), SketchArc_2.center().y()]
308 aCircleCenter = [SketchCircle_2.center().x(), SketchCircle_2.center().y()]
309 for i in range(1, 10):
310     anArcCenter = [anArcCenter[0] + delta[0], anArcCenter[1] + delta[1]]
311     Sketch_2.move(SketchArc_2.center(), anArcCenter[0], anArcCenter[1])
312     model.do()
313     model.assertArc(SketchArc_2, anArcCenter, [], [])
314     model.assertPoint(SketchCircle_2.center(), [aCircleCenter[0], anArcCenter[1]])
315     anArcRadius = model.distancePointPoint(SketchArc_2.center(), SketchArc_2.startPoint())
316     assert(math.fabs(SketchCircle_2.radius().value() - anArcRadius) < TOLERANCE)
317 # move arc by dragging edge
318 aCircleCenter = [SketchCircle_2.center().x(), SketchCircle_2.center().y()]
319 anArcCenter = [SketchArc_2.center().x(), SketchArc_2.center().y()]
320 aPosition = [anArcCenter[0] + anArcRadius, anArcCenter[1]]
321 delta = [1., 1.]
322 for i in range(1, 10):
323     aPosition = [aPosition[0] + delta[0], aPosition[1] + delta[1]]
324     Sketch_2.move(SketchArc_2.defaultResult(), aPosition[0], aPosition[1])
325     model.do()
326     model.assertArc(SketchArc_2, anArcCenter, [], [])
327     model.assertPoint(SketchCircle_2.center(), aCircleCenter)
328     anArcRadius = model.distancePointPoint(SketchArc_2.center(), SketchArc_2.startPoint())
329     assert(math.fabs(SketchCircle_2.radius().value() - anArcRadius) < TOLERANCE)
330     if i == 5:
331         delta = [-1., -1.]
332
333 # Fix all DOF in Sketch_2
334 SketchConstraintDistance_2 = Sketch_2.setDistance(SketchArc_2.center(), SketchLine_9.result(), 21.5)
335 SketchConstraintLength_4 = Sketch_2.setLength(SketchLine_13.result(), 3.5)
336 SketchConstraintRadius_2 = Sketch_2.setRadius(SketchCircle_2.results()[1], 6.5)
337 SketchConstraintDistance_3 = Sketch_2.setDistance(SketchCircle_2.center(), SketchLine_8.result(), 30)
338 model.do()
339
340 Extrusion_2 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_2/Face-SketchLine_6r-SketchLine_7r-SketchLine_8r-SketchLine_9r-SketchCircle_2_2r-SketchArc_2_2r-SketchLine_13r-SketchLine_14f-SketchLine_15f-SketchArc_3_2r-SketchLine_16r")], model.selection(), -165, 155)
341 Boolean_1 = model.addFuse(Part_1_doc, [model.selection("SOLID", "Extrusion_1_1")], [model.selection("SOLID", "Extrusion_2_1")])
342
343 Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "Boolean_1_1/Modified_8"))
344 SketchLine_17 = Sketch_3.addLine(145, 0, 165, 0)
345 SketchPoint_2 = Sketch_3.addPoint(model.selection("VERTEX", "Boolean_1_1/Modified_7&Boolean_1_1/Modified_6&Boolean_1_1/Modified_2"))
346 SketchConstraintCoincidence_23 = Sketch_3.setCoincident(SketchLine_17.endPoint(), SketchPoint_2.result())
347 SketchLine_18 = Sketch_3.addLine(165, 0, 165, -20)
348 SketchLine_19 = Sketch_3.addLine(165, -20, 145, -20)
349 SketchLine_20 = Sketch_3.addLine(145, -20, 145, 0)
350 SketchConstraintCoincidence_24 = Sketch_3.setCoincident(SketchLine_20.endPoint(), SketchLine_17.startPoint())
351 SketchConstraintCoincidence_25 = Sketch_3.setCoincident(SketchLine_17.endPoint(), SketchLine_18.startPoint())
352 SketchConstraintCoincidence_26 = Sketch_3.setCoincident(SketchLine_18.endPoint(), SketchLine_19.startPoint())
353 SketchConstraintCoincidence_27 = Sketch_3.setCoincident(SketchLine_19.endPoint(), SketchLine_20.startPoint())
354 SketchConstraintHorizontal_4 = Sketch_3.setHorizontal(SketchLine_17.result())
355 SketchConstraintVertical_4 = Sketch_3.setVertical(SketchLine_18.result())
356 SketchConstraintHorizontal_5 = Sketch_3.setHorizontal(SketchLine_19.result())
357 SketchConstraintVertical_5 = Sketch_3.setVertical(SketchLine_20.result())
358 SketchArc_4 = Sketch_3.addArc(145, -20, 165, -20, 145, 0, False)
359 SketchConstraintCoincidence_28 = Sketch_3.setCoincident(SketchLine_19.endPoint(), SketchArc_4.center())
360 SketchConstraintCoincidence_29 = Sketch_3.setCoincident(SketchLine_18.endPoint(), SketchArc_4.startPoint())
361 SketchConstraintCoincidence_30 = Sketch_3.setCoincident(SketchArc_4.endPoint(), SketchLine_20.endPoint())
362 SketchConstraintRadius_3 = Sketch_3.setRadius(SketchArc_4.results()[1], 20)
363 SketchArc_5 = Sketch_3.addArc(145, -20, 155, -20, 145, -10, False)
364 SketchConstraintCoincidence_31 = Sketch_3.setCoincident(SketchLine_19.endPoint(), SketchArc_5.center())
365 SketchConstraintCoincidence_32 = Sketch_3.setCoincident(SketchLine_20.result(), SketchArc_5.endPoint())
366 SketchConstraintCoincidence_33 = Sketch_3.setCoincident(SketchArc_5.startPoint(), SketchLine_19.result())
367 SketchLine_21 = Sketch_3.addLine(model.selection("EDGE", "Boolean_1_1/Modified_12&Boolean_1_1/Modified_11"))
368 SketchConstraintTangent_5 = Sketch_3.setTangent(SketchArc_5.results()[1], SketchLine_21.result())
369 model.do()
370
371 ExtrusionCut_1 = model.addExtrusionCut(Part_1_doc, [model.selection("FACE", "Sketch_3/Face-SketchLine_17r-SketchLine_18r-SketchArc_4_2r")], model.selection(), model.selection("FACE", "Boolean_1_1/Modified_5"), 0, model.selection(), 0, [model.selection("SOLID", "Boolean_1_1")])
372 ExtrusionFuse_1 = model.addExtrusionFuse(Part_1_doc, [model.selection("FACE", "Sketch_3/Face-SketchLine_19r-SketchLine_20r-SketchArc_4_2f-SketchArc_5_2r")], model.selection(), model.selection("FACE", "ExtrusionCut_1_1/Modfied_7"), 0, model.selection(), 0, [model.selection("SOLID", "ExtrusionCut_1_1")])
373 model.do()
374
375 model.end()
376
377 model.testNbResults(ExtrusionFuse_1, 1)
378 model.testNbSubShapes(ExtrusionFuse_1, GeomAPI_Shape.SOLID, [1])
379 model.testNbSubShapes(ExtrusionFuse_1, GeomAPI_Shape.FACE, [30])
380 model.testNbSubShapes(ExtrusionFuse_1, GeomAPI_Shape.EDGE, [140])
381 model.testNbSubShapes(ExtrusionFuse_1, GeomAPI_Shape.VERTEX, [280])
382 model.testResultsVolumes(ExtrusionFuse_1, [260653.824775497108930721879005432])
383
384 assert(model.checkPythonDump())