Salome HOME
bos #29482 Export of colors and names to STEP.
[modules/shaper.git] / src / ExchangePlugin / Test / TestStep1.py
1 # Copyright (C) 2014-2022  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 email : webmaster.salome@opencascade.com
18 #
19
20 from salome.shaper import model
21
22 from SketchAPI import *
23
24 model.begin()
25 partSet = model.moduleDocument()
26
27 ### Create Part
28 Part_1 = model.addPart(partSet)
29 Part_1_doc = Part_1.document()
30 model.addParameter(Part_1_doc, "LGX", '3.0')
31 model.addParameter(Part_1_doc, "LGY", '2.825')
32 model.addParameter(Part_1_doc, "HTR", '1.2')
33
34 ### Create Sketch
35 Sketch_1 = model.addSketch(Part_1_doc, model.standardPlane("YOZ"))
36
37 ### Create SketchLine
38 SketchLine_1 = Sketch_1.addLine(0, 0, 1.165, 0)
39
40 ### Create SketchProjection
41 SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
42 SketchPoint_1 = SketchProjection_1.createdFeature()
43 Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchPoint_1.result())
44
45 ### Create SketchProjection
46 SketchProjection_2 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OY"), False)
47 SketchLine_2 = SketchProjection_2.createdFeature()
48 Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.result())
49
50 ### Create SketchLine
51 SketchLine_3 = Sketch_1.addLine(1.165, 0, 1.165, 0.5)
52 Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_3.startPoint())
53 Sketch_1.setVertical(SketchLine_3.result())
54
55 ### Create SketchLine
56 SketchLine_4 = Sketch_1.addLine(1.165, 0.5, 1.665, 0.5)
57 Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
58 Sketch_1.setHorizontal(SketchLine_4.result())
59
60 ### Create SketchLine
61 SketchLine_5 = Sketch_1.addLine(1.665, 0.5, 1.665, 0)
62 Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint())
63 Sketch_1.setVertical(SketchLine_5.result())
64
65 ### Create SketchLine
66 SketchLine_6 = Sketch_1.addLine(1.665, 0, 2.825, 0)
67 Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_6.startPoint())
68 Sketch_1.setHorizontal(SketchLine_6.result())
69
70 ### Create SketchLine
71 SketchLine_7 = Sketch_1.addLine(2.825, 0, 2.825, 1.2)
72 Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_7.startPoint())
73 Sketch_1.setVertical(SketchLine_7.result())
74
75 ### Create SketchLine
76 SketchLine_8 = Sketch_1.addLine(2.825, 1.2, 0, 1.2)
77 Sketch_1.setCoincident(SketchLine_7.endPoint(), SketchLine_8.startPoint())
78
79 ### Create SketchProjection
80 SketchProjection_3 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OZ"), False)
81 SketchLine_9 = SketchProjection_3.createdFeature()
82 Sketch_1.setCoincident(SketchLine_8.endPoint(), SketchLine_9.result())
83 Sketch_1.setHorizontal(SketchLine_8.result())
84
85 ### Create SketchLine
86 SketchLine_10 = Sketch_1.addLine(0, 1.2, 0, 0)
87 Sketch_1.setCoincident(SketchLine_8.endPoint(), SketchLine_10.startPoint())
88 Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_10.endPoint())
89 Sketch_1.setLength(SketchLine_8.result(), "LGY")
90 Sketch_1.setLength(SketchLine_10.result(), "HTR")
91 Sketch_1.setLength(SketchLine_3.result(), "HTR/1.2*0.5")
92 Sketch_1.setLength(SketchLine_4.result(), "LGY/2.825*0.5")
93 Sketch_1.setLength(SketchLine_1.result(), "LGY/2.825*1.165")
94 Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_2.result())
95 model.do()
96
97 ### Create Face
98 Face_1 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_1")])
99
100 ### Create Sketch
101 Sketch_2 = model.addSketch(Part_1_doc, model.standardPlane("XOZ"))
102
103 ### Create SketchLine
104 SketchLine_11 = Sketch_2.addLine(0, 0, 0.9999999999999999, 0)
105
106 ### Create SketchProjection
107 SketchProjection_4 = Sketch_2.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_10_EndVertex"), False)
108 SketchPoint_2 = SketchProjection_4.createdFeature()
109 Sketch_2.setCoincident(SketchLine_11.startPoint(), SketchPoint_2.result())
110
111 ### Create SketchProjection
112 SketchProjection_5 = Sketch_2.addProjection(model.selection("EDGE", "PartSet/OX"), False)
113 SketchLine_12 = SketchProjection_5.createdFeature()
114 Sketch_2.setCoincident(SketchLine_11.endPoint(), SketchLine_12.result())
115
116 ### Create SketchLine
117 SketchLine_13 = Sketch_2.addLine(0.9999999999999999, 0, 1, 0.95)
118 Sketch_2.setCoincident(SketchLine_11.endPoint(), SketchLine_13.startPoint())
119 Sketch_2.setVertical(SketchLine_13.result())
120
121 ### Create SketchLine
122 SketchLine_14 = Sketch_2.addLine(1, 0.95, 2.25, 0.95)
123 Sketch_2.setCoincident(SketchLine_13.endPoint(), SketchLine_14.startPoint())
124 Sketch_2.setHorizontal(SketchLine_14.result())
125
126 ### Create SketchLine
127 SketchLine_15 = Sketch_2.addLine(2.25, 0.95, 2.25, 0)
128 Sketch_2.setCoincident(SketchLine_14.endPoint(), SketchLine_15.startPoint())
129 Sketch_2.setCoincident(SketchLine_15.endPoint(), SketchLine_12.result())
130
131 ### Create SketchLine
132 SketchLine_16 = Sketch_2.addLine(2.25, 0, 3, 0)
133 Sketch_2.setCoincident(SketchLine_15.endPoint(), SketchLine_16.startPoint())
134 Sketch_2.setCoincident(SketchLine_16.endPoint(), SketchLine_12.result())
135
136 ### Create SketchLine
137 SketchLine_17 = Sketch_2.addLine(3, 0, 3, 1.2)
138 Sketch_2.setCoincident(SketchLine_16.endPoint(), SketchLine_17.startPoint())
139
140 ### Create SketchLine
141 SketchLine_18 = Sketch_2.addLine(3, 1.2, 0, 1.2)
142 Sketch_2.setCoincident(SketchLine_17.endPoint(), SketchLine_18.startPoint())
143
144 ### Create SketchProjection
145 SketchProjection_6 = Sketch_2.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_10_StartVertex"), False)
146 SketchPoint_3 = SketchProjection_6.createdFeature()
147 Sketch_2.setCoincident(SketchLine_18.endPoint(), SketchPoint_3.result())
148 Sketch_2.setHorizontal(SketchLine_18.result())
149 Sketch_2.setVertical(SketchLine_17.result())
150 Sketch_2.setVertical(SketchLine_15.result())
151 Sketch_2.setLength(SketchLine_11.result(), "LGX/3.")
152 Sketch_2.setLength(SketchLine_14.result(), "LGX/3.*1.25")
153 Sketch_2.setLength(SketchLine_18.result(), "LGX")
154 Sketch_2.setLength(SketchLine_13.result(), "HTR/1.2*0.95")
155
156 ### Create SketchLine
157 SketchLine_19 = Sketch_2.addLine(0, 1.2, 0, 0)
158 Sketch_2.setCoincident(SketchLine_18.endPoint(), SketchLine_19.startPoint())
159 Sketch_2.setCoincident(SketchLine_11.startPoint(), SketchLine_19.endPoint())
160 model.do()
161
162 ### Create Face
163 Face_2 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_2")])
164
165 ### Create Sketch
166 Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "Face_1_1"))
167
168 ### Create SketchLine
169 SketchLine_20 = Sketch_3.addLine(1.325, 0, 0, 0)
170 Sketch_3.setHorizontal(SketchLine_20.result())
171
172 ### Create SketchProjection
173 SketchProjection_7 = Sketch_3.addProjection(model.selection("VERTEX", "Face_1_1/Modified_Vertex&Sketch_1/SketchLine_10_EndVertex&Sketch_1/SketchLine_1_StartVertex"), False)
174 SketchPoint_4 = SketchProjection_7.createdFeature()
175 Sketch_3.setCoincident(SketchLine_20.endPoint(), SketchPoint_4.result())
176
177 ### Create SketchLine
178 SketchLine_21 = Sketch_3.addLine(0, 0, 0, 1.2)
179 Sketch_3.setVertical(SketchLine_21.result())
180
181 ### Create SketchLine
182 SketchLine_22 = Sketch_3.addLine(0, 1.2, 1.325, 1.2)
183 Sketch_3.setHorizontal(SketchLine_22.result())
184 Sketch_3.setLength(SketchLine_22.result(), "LGY/2.825*1.325")
185
186 ### Create SketchLine
187 SketchLine_23 = Sketch_3.addLine(1.325, 1.2, 1.325, 0)
188 Sketch_3.setCoincident(SketchLine_23.endPoint(), SketchLine_20.startPoint())
189 Sketch_3.setCoincident(SketchLine_20.endPoint(), SketchLine_21.startPoint())
190 Sketch_3.setCoincident(SketchLine_21.endPoint(), SketchLine_22.startPoint())
191 Sketch_3.setCoincident(SketchLine_22.endPoint(), SketchLine_23.startPoint())
192 Sketch_3.setVertical(SketchLine_23.result())
193
194 ### Create SketchProjection
195 SketchProjection_8 = Sketch_3.addProjection(model.selection("EDGE", "Face_1_1/Modified_Edge&Sketch_1/SketchLine_8"), False)
196 SketchLine_24 = SketchProjection_8.createdFeature()
197 Sketch_3.setCoincident(SketchLine_22.endPoint(), SketchLine_24.result())
198 model.do()
199
200 ### Create Face
201 Face_3 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_3")])
202
203 ### Create Translation
204 Translation_1 = model.addTranslation(Part_1_doc, [model.selection("COMPOUND", "all-in-Face_3")], axis = model.selection("EDGE", "PartSet/OX"), distance = "LGX", keepSubResults = True)
205
206 ### Create Plane
207 Plane_4 = model.addPlane(Part_1_doc, model.selection("VERTEX", "Sketch_2/SketchLine_17_EndVertex"), model.selection("VERTEX", "Translation_1_1_1/MV:Translated&Sketch_3/SketchLine_22_EndVertex&Sketch_3/SketchLine_23_StartVertex"), model.selection("VERTEX", "Face_1_1/Modified_Vertex&Sketch_1/SketchLine_8_StartVertex&Sketch_1/SketchLine_7_EndVertex"))
208
209 ### Create Sketch
210 Sketch_4 = model.addSketch(Part_1_doc, model.selection("FACE", "Plane_1"))
211
212 ### Create SketchLine
213 SketchLine_25 = Sketch_4.addLine(0, 0, 3, 0)
214
215 ### Create SketchProjection
216 SketchProjection_9 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_3/SketchLine_21_EndVertex"), False)
217 SketchPoint_5 = SketchProjection_9.createdFeature()
218 Sketch_4.setCoincident(SketchLine_25.startPoint(), SketchPoint_5.result())
219
220 ### Create SketchProjection
221 SketchProjection_10 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_2/SketchLine_17_EndVertex"), False)
222 SketchPoint_6 = SketchProjection_10.createdFeature()
223 Sketch_4.setCoincident(SketchLine_25.endPoint(), SketchPoint_6.result())
224
225 ### Create SketchLine
226 SketchLine_26 = Sketch_4.addLine(3, 0, 3, 1.325)
227 Sketch_4.setCoincident(SketchLine_25.endPoint(), SketchLine_26.startPoint())
228
229 ### Create SketchProjection
230 SketchProjection_11 = Sketch_4.addProjection(model.selection("VERTEX", "Translation_1_1_1/MV:Translated&Sketch_3/SketchLine_22_EndVertex&Sketch_3/SketchLine_23_StartVertex"), False)
231 SketchPoint_7 = SketchProjection_11.createdFeature()
232 Sketch_4.setCoincident(SketchLine_26.endPoint(), SketchPoint_7.result())
233
234 ### Create SketchLine
235 SketchLine_27 = Sketch_4.addLine(3, 1.325, 0, 2.825)
236 Sketch_4.setCoincident(SketchLine_26.endPoint(), SketchLine_27.startPoint())
237
238 ### Create SketchProjection
239 SketchProjection_12 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_7_EndVertex"), False)
240 SketchPoint_8 = SketchProjection_12.createdFeature()
241 Sketch_4.setCoincident(SketchLine_27.endPoint(), SketchPoint_8.result())
242
243 ### Create SketchLine
244 SketchLine_28 = Sketch_4.addLine(0, 2.825, 0, 0)
245 Sketch_4.setCoincident(SketchLine_27.endPoint(), SketchLine_28.startPoint())
246 Sketch_4.setCoincident(SketchLine_25.startPoint(), SketchLine_28.endPoint())
247 model.do()
248
249 ### Create Face
250 Face_4 = model.addFace(Part_1_doc, [model.selection("FACE", "Sketch_4/Face-SketchLine_25r-SketchLine_26f-SketchLine_27f-SketchLine_28f")])
251
252 ### Create Sketch
253 Sketch_5 = model.addSketch(Part_1_doc, model.selection("FACE", "Face_4_1"))
254
255 ### Create SketchLine
256 SketchLine_29 = Sketch_5.addLine(1.5, 0, 1.5, 1.6)
257
258 ### Create SketchProjection
259 SketchProjection_13 = Sketch_5.addProjection(model.selection("EDGE", "Face_4_1/Modified_Edge&Sketch_4/SketchLine_25"), False)
260 SketchLine_30 = SketchProjection_13.createdFeature()
261 Sketch_5.setCoincident(SketchLine_29.startPoint(), SketchLine_30.result())
262 Sketch_5.setVertical(SketchLine_29.result())
263 Sketch_5.setLength(SketchLine_29.result(), "LGY/2.825*1.6")
264 Sketch_5.setHorizontalDistance(SketchAPI_Line(SketchLine_30).startPoint(), SketchLine_29.startPoint(), "LGX*0.5")
265 model.do()
266
267 ### Create Partition
268 Partition_1_objects = [model.selection("FACE", "Face_1_1"),
269                        model.selection("FACE", "Face_2_1"),
270                        model.selection("COMPOUND", "Translation_1_1"),
271                        model.selection("FACE", "Face_4_1")]
272 Partition_1 = model.addPartition(Part_1_doc, Partition_1_objects, keepSubResults = True)
273
274 ### Create Extrusion
275 Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Partition_1_1_4")], model.selection(), "HTR", 0, "Faces|Wires")
276
277 ### Create Recover
278 Recover_1 = model.addRecover(Part_1_doc, Extrusion_1, [Partition_1.result()], True)
279
280 ### Create Extrusion
281 Extrusion_2_objects = [model.selection("VERTEX", "Recover_1_1_3/Modified_Vertex&Sketch_3/SketchLine_20_StartVertex&Sketch_3/SketchLine_23_EndVertex"),
282                        model.selection("VERTEX", "[Recover_1_1_2/Modified_Edge&Sketch_2/SketchLine_16]e[Recover_1_1_2/Modified_Edge&Sketch_3/SketchLine_21&Sketch_2/SketchLine_17]e"),
283                        model.selection("VERTEX", "[Recover_1_1_1/Modified_Edge&Sketch_1/SketchLine_1]e[Recover_1_1_1/Modified_Edge&Sketch_2/SketchLine_19&Sketch_1/SketchLine_10]e"),
284                        model.selection("VERTEX", "Recover_1_1_1/Modified_Vertex&Sketch_1/SketchLine_7_StartVertex&Sketch_1/SketchLine_6_EndVertex")]
285 Extrusion_2 = model.addExtrusion(Part_1_doc, Extrusion_2_objects, model.selection("EDGE", "PartSet/OZ"), 0, "HTR")
286
287 ### Create Partition
288 Partition_2_objects = [model.selection("COMPOUND", "all-in-Extrusion_1"),
289                        model.selection("COMPOUND", "all-in-Recover_1"),
290                        model.selection("COMPOUND", "all-in-Extrusion_2")]
291 Partition_2 = model.addPartition(Part_1_doc, Partition_2_objects, keepSubResults = True)
292 Partition_2.result().setName("Structure")
293 Partition_2.result().subResult(0).setName("Hangar")
294 Partition_2.result().subResult(0).setColor(170, 0, 0)
295 Partition_2.result().subResult(1).setName("Mur_1")
296 Partition_2.result().subResult(2).setName("Mur_2")
297 Partition_2.result().subResult(3).setName("Mur_3")
298 Partition_2.result().subResult(4).setName("Poteau_1")
299 Partition_2.result().subResult(5).setName("Poteau_2")
300 Partition_2.result().subResult(6).setName("Poteau_3")
301 Partition_2.result().subResult(7).setName("Poteau_4")
302
303 file_name = model.getTmpFileName('teststep1', '.stp')
304
305 ### Export to STEP format
306 Export_1 = model.exportToFile(Part_1_doc, file_name,
307                               [model.selection("COMPOUND", "Structure")])
308
309 ### Import from step
310 Import_1 = model.addImportSTEP(Part_1_doc, file_name, True, True, True)
311
312 model.end()
313
314 # Check the imported names and colors correspond to the exported ones
315 res = Import_1.result()
316 assert(file_name.find(res.name()[:-3]) > 0) # the higher level compound name equals to the file name
317 assert(res.subResult(0).name() == "Hangar")
318 assert(res.subResult(1).name() == "Mur_1")
319 assert(res.subResult(2).name() == "Mur_2")
320 assert(res.subResult(3).name() == "Mur_3")
321 assert(res.subResult(4).name() == "Poteau_1")
322 assert(res.subResult(5).name() == "Poteau_2")
323 assert(res.subResult(6).name() == "Poteau_3")
324 assert(res.subResult(7).name() == "Poteau_4")
325 # get color of "Hangar": 3 components in the array attribute
326 hangarBody = model.modelAPI_ResultBody(Import_1.feature().firstResult()).subResult(0)
327 assert(hangarBody.data().intArray("Color").size() == 3)
328 assert(hangarBody.data().intArray("Color").value(0) == 170)
329 assert(hangarBody.data().intArray("Color").value(1) == 0)
330 assert(hangarBody.data().intArray("Color").value(2) == 0)