Salome HOME
Merge branch 'master' into gni/evolution
[modules/smesh.git] / src / Tools / blocFissure / materielCasTests / vis.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2020  EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import logging
22
23 import sys
24 import salome
25
26 salome.salome_init()
27
28 import salome_notebook
29 notebook = salome_notebook.notebook
30
31 import os
32 from blocFissure import gmu
33
34 logging.info('start')
35
36 ###
37 ### GEOM component
38 ###
39
40 import GEOM
41 from salome.geom import geomBuilder
42 import math
43 import SALOMEDS
44
45
46 geompy = geomBuilder.New()
47 O = geompy.MakeVertex(0, 0, 0)
48 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
49 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
50 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
51 geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
52 geomObj_2 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
53 sk = geompy.Sketcher2D()
54 sk.addPoint(0.000000, 0.000000)
55 sk.addSegmentAbsolute(10.000000, 0.000000)
56 sk.addSegmentAbsolute(10.000000, 98.750000)
57 sk.addArcAngleRadiusLength(0, -1.250000, 90.000000)
58 sk.addSegmentAbsolute(15.000000, 100.000000)
59 sk.addSegmentAbsolute(15.000000, 120.000000)
60 sk.addSegmentAbsolute(9.945000, 120.000000)
61 sk.addSegmentAbsolute(9.945000, 108.000000)
62 sk.addSegmentAbsolute(0.000000, 105.000000)
63 sk.close()
64 Sketch_1 = sk.wire(geomObj_2)
65 Face_1 = geompy.MakeFaceWires([Sketch_1], 1)
66 Vertex_1 = geompy.MakeVertex(15, 108, 0)
67 Vertex_2 = geompy.MakeVertex(0, 94, 0)
68 Vertex_3 = geompy.MakeVertex(10, 94, 0)
69 Face_1_vertex_17 = geompy.GetSubShape(Face_1, [17])
70 Line_1 = geompy.MakeLineTwoPnt(Vertex_1, Face_1_vertex_17)
71 Face_1_vertex_9 = geompy.GetSubShape(Face_1, [9])
72 Line_2 = geompy.MakeLineTwoPnt(Face_1_vertex_17, Face_1_vertex_9)
73 Face_1_vertex_19 = geompy.GetSubShape(Face_1, [19])
74 Face_1_vertex_7 = geompy.GetSubShape(Face_1, [7])
75 Line_3 = geompy.MakeLineTwoPnt(Face_1_vertex_19, Face_1_vertex_7)
76 Line_4 = geompy.MakeLineTwoPnt(Vertex_2, Vertex_3)
77 coupe_vis = geompy.MakePartition([Face_1], [Line_1, Line_2, Line_3, Line_4], [], [], geompy.ShapeType["FACE"], 0, [], 0)
78 [tige, section, tige_haute, rond, tete, section_tete] = geompy.Propagate(coupe_vis)
79 conge = geompy.CreateGroup(coupe_vis, geompy.ShapeType["EDGE"])
80 geompy.UnionIDs(conge, [25])
81 appui = geompy.CreateGroup(coupe_vis, geompy.ShapeType["EDGE"])
82 geompy.UnionIDs(appui, [39])
83 p_imp = geompy.CreateGroup(coupe_vis, geompy.ShapeType["EDGE"])
84 geompy.UnionIDs(p_imp, [11])
85
86 Vertex_4 = geompy.MakeVertex(11.25, 98.75, 0)
87 Vertex_5 = geompy.MakeVertexWithRef(Vertex_4, -0.5, 0.5, 0)
88 Vertex_6 = geompy.MakeVertexWithRef(Vertex_4, -5, 5, 0)
89 Line_5 = geompy.MakeLineTwoPnt(Vertex_5, Vertex_6)
90 Partition_1 = geompy.MakePartition([Line_5], [conge], [], [], geompy.ShapeType["EDGE"], 0, [], 1)
91 [Vertex_7] = geompy.SubShapes(Partition_1, [4])
92 Vertex_8 = geompy.MakeVertexWithRef(Vertex_7, -1.1, 1.1, 0)
93 generatrice = geompy.MakeLineTwoPnt(Vertex_5, Vertex_8)
94 Revolution_1 = geompy.MakeRevolution2Ways(generatrice, OY, 60*math.pi/180.0)
95 Partition_2 = geompy.MakePartition([Revolution_1], [conge], [], [], geompy.ShapeType["FACE"], 0, [], 1)
96 Partition_2_vertex_11 = geompy.GetSubShape(Partition_2, [11])
97 Plane_1 = geompy.MakePlane(Partition_2_vertex_11, OY, 2000)
98 Partition_3 = geompy.MakePartition([Revolution_1], [Plane_1], [], [], geompy.ShapeType["FACE"], 0, [], 0)
99 Vertex_9 = geompy.MakeVertex(0, 99.633883, 1.977320000000001)
100 Vertex_10 = geompy.MakeVertex(0, 99.633883, -8.977320000000001)
101 Vertex_11 = geompy.MakeVertexWithRef(Vertex_9, 0, 0, -1)
102 Vertex11x = geompy.MakeVertexWithRef(Vertex_11, 1, 0, 0)
103 Line_11x = geompy.MakeLineTwoPnt(Vertex_11, Vertex11x)
104 Vertex_12 = geompy.MakeVertexWithRef(Vertex_10, 0, 0, 1)
105 Vertex12x = geompy.MakeVertexWithRef(Vertex_12, 1, 0, 0)
106 Line_12x = geompy.MakeLineTwoPnt(Vertex_12, Vertex12x)
107 Vertex_13 = geompy.MakeVertexWithRef(Vertex_11, 0, 1, 0)
108 Vertex_14 = geompy.MakeVertexWithRef(Vertex_12, 0, 1, 0)
109 Vertex_15 = geompy.MakeRotation(Vertex_9, Line_11x, 30*math.pi/180.0)
110 Vertex_16 = geompy.MakeRotation(Vertex_10, Line_12x, -30*math.pi/180.0)
111 Arc_1 = geompy.MakeArc(Vertex_15, Vertex_9, Vertex_13,False)
112 Arc_2 = geompy.MakeArc(Vertex_14, Vertex_10, Vertex_16,False)
113 Line_6 = geompy.MakeLineTwoPnt(Vertex_13, Vertex_14)
114 Line_8 = geompy.MakeLineTwoPnt(Vertex_16, Vertex_15)
115 Wire_1 = geompy.MakeWire([Arc_1, Arc_2, Line_6, Line_8], 1e-07)
116 Face_2 = geompy.MakeFaceWires([Wire_1], 1)
117 Extrusion_1 = geompy.MakePrismVecH(Face_2, OX, 15)
118 Revolution_2 = geompy.MakeRevolution2Ways(generatrice, OY, 65*math.pi/180.0)
119 Fissure = geompy.MakeCommonList([Extrusion_1, Revolution_2], True)
120 fondFiss = geompy.CreateGroup(Fissure, geompy.ShapeType["EDGE"])
121 geompy.UnionIDs(fondFiss, [9, 7, 4])
122 geompy.ExportBREP(Fissure, os.path.join(gmu.pathBloc, "materielCasTests", "visFiss.brep"))
123
124 geompy.addToStudy( O, 'O' )
125 geompy.addToStudy( OX, 'OX' )
126 geompy.addToStudy( OY, 'OY' )
127 geompy.addToStudy( OZ, 'OZ' )
128 geompy.addToStudy( Sketch_1, 'Sketch_1' )
129 geompy.addToStudy( Face_1, 'Face_1' )
130 geompy.addToStudy( Vertex_1, 'Vertex_1' )
131 geompy.addToStudy( Vertex_2, 'Vertex_2' )
132 geompy.addToStudy( Vertex_3, 'Vertex_3' )
133 geompy.addToStudyInFather( Face_1, Face_1_vertex_17, 'Face_1:vertex_17' )
134 geompy.addToStudy( Line_1, 'Line_1' )
135 geompy.addToStudyInFather( Face_1, Face_1_vertex_9, 'Face_1:vertex_9' )
136 geompy.addToStudy( Line_2, 'Line_2' )
137 geompy.addToStudyInFather( Face_1, Face_1_vertex_19, 'Face_1:vertex_19' )
138 geompy.addToStudyInFather( Face_1, Face_1_vertex_7, 'Face_1:vertex_7' )
139 geompy.addToStudy( Line_3, 'Line_3' )
140 geompy.addToStudy( Line_4, 'Line_4' )
141 geompy.addToStudy( coupe_vis, 'coupe_vis' )
142 geompy.addToStudyInFather( coupe_vis, tige, 'tige' )
143 geompy.addToStudyInFather( coupe_vis, section, 'section' )
144 geompy.addToStudyInFather( coupe_vis, tige_haute, 'tige_haute' )
145 geompy.addToStudyInFather( coupe_vis, rond, 'rond' )
146 geompy.addToStudyInFather( coupe_vis, tete, 'tete' )
147 geompy.addToStudyInFather( coupe_vis, section_tete, 'section_tete' )
148 geompy.addToStudyInFather( coupe_vis, conge, 'conge' )
149 geompy.addToStudyInFather( coupe_vis, appui, 'appui' )
150 geompy.addToStudyInFather( coupe_vis, p_imp, 'p_imp' )
151
152 geompy.addToStudy( Vertex_4, 'Vertex_4' )
153 geompy.addToStudy( Vertex_6, 'Vertex_6' )
154 geompy.addToStudy( Vertex_5, 'Vertex_5' )
155 geompy.addToStudy( Line_5, 'Line_5' )
156 geompy.addToStudy( Partition_1, 'Partition_1' )
157 geompy.addToStudyInFather( Partition_1, Vertex_7, 'Vertex_7' )
158 geompy.addToStudy( Vertex_8, 'Vertex_8' )
159 geompy.addToStudy( generatrice, 'generatrice' )
160 geompy.addToStudy( Revolution_1, 'Revolution_1' )
161 geompy.addToStudy( Partition_2, 'Partition_2' )
162 geompy.addToStudyInFather( Partition_2, Partition_2_vertex_11, 'Partition_2:vertex_11' )
163 geompy.addToStudy( Plane_1, 'Plane_1' )
164 geompy.addToStudy( Partition_3, 'Partition_3' )
165 geompy.addToStudy( Vertex_9, 'Vertex_9' )
166 geompy.addToStudy( Vertex_10, 'Vertex_10' )
167 geompy.addToStudy( Vertex_11, 'Vertex_11' )
168 geompy.addToStudy( Vertex_12, 'Vertex_12' )
169 geompy.addToStudy( Vertex_13, 'Vertex_13' )
170 geompy.addToStudy( Vertex_14, 'Vertex_14' )
171 geompy.addToStudy( Vertex_15, 'Vertex_15' )
172 geompy.addToStudy( Vertex_16, 'Vertex_16' )
173 geompy.addToStudy( Arc_1, 'Arc_1' )
174 geompy.addToStudy( Arc_2, 'Arc_2' )
175 geompy.addToStudy( Line_6, 'Line_6' )
176 geompy.addToStudy( Line_8, 'Line_8' )
177 geompy.addToStudy( Wire_1, 'Wire_1' )
178 geompy.addToStudy( Face_2, 'Face_2' )
179 geompy.addToStudy( Extrusion_1, 'Extrusion_1' )
180 geompy.addToStudy( Revolution_2, 'Revolution_2' )
181 geompy.addToStudy( Fissure, 'Fissure' )
182 geompy.addToStudyInFather( Fissure, fondFiss, 'fondFiss' )
183
184 ###
185 ### SMESH component
186 ###
187
188 logging.info("Maillage de {}".format(coupe_vis.GetName()))
189
190 import  SMESH, SALOMEDS
191 from salome.smesh import smeshBuilder
192
193 smesh = smeshBuilder.New()
194
195 coupe_vis_1 = smesh.Mesh(coupe_vis)
196 Regular_1D = coupe_vis_1.Segment()
197 Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
198 Quadrangle_2D = coupe_vis_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
199 Regular_1D_1 = coupe_vis_1.Segment(geom=tige)
200 Nb_Segments_2 = Regular_1D_1.NumberOfSegments(30)
201 Regular_1D_2 = coupe_vis_1.Segment(geom=section)
202 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(10,1,[ 7, 11, 16, 23 ])
203
204 tige_1 = coupe_vis_1.GroupOnGeom(tige,'tige',SMESH.EDGE)
205 section_1 = coupe_vis_1.GroupOnGeom(section,'section',SMESH.EDGE)
206 tige_haute_1 = coupe_vis_1.GroupOnGeom(tige_haute,'tige_haute',SMESH.EDGE)
207 rond_1 = coupe_vis_1.GroupOnGeom(rond,'rond',SMESH.EDGE)
208 tete_1 = coupe_vis_1.GroupOnGeom(tete,'tete',SMESH.EDGE)
209 section_tete_1 = coupe_vis_1.GroupOnGeom(section_tete,'section_tete',SMESH.EDGE)
210 conge_1 = coupe_vis_1.GroupOnGeom(conge,'conge',SMESH.EDGE)
211 appui_1 = coupe_vis_1.GroupOnGeom(appui,'appui',SMESH.EDGE)
212 p_imp_1 = coupe_vis_1.GroupOnGeom(p_imp,'p_imp',SMESH.EDGE)
213
214 is_done = coupe_vis_1.Compute()
215 text = "coupe_vis_1.Compute"
216 if is_done:
217   logging.debug(text+" : OK")
218 else:
219   text = "Erreur au calcul du maillage.\n" + text
220   logging.info(text)
221   raise Exception(text)
222
223 # Découpage en 2 triangles du quadrangle dans l'angle
224 cg_x=0.972772
225 cg_y=104.835
226 cg_z=0.
227 l_ids = coupe_vis_1.FindElementsByPoint( cg_x,cg_y,cg_z, SMESH.FACE )
228 if ( len(l_ids) != 1 ):
229   text = "Maillage {}.\nImpossible de trouver l'élément proche de ({},{},{}).".format(coupe_vis.GetName(),cg_x,cg_y,cg_z)
230   raise Exception(text)
231 isDone = coupe_vis_1.SplitQuad( l_ids, 1 )
232 text = "SplitQuad de l'élément n° {} du maillage de {}".format(l_ids[0],coupe_vis.GetName())
233 if isDone:
234   logging.debug(text+" : OK")
235 else:
236   text = "Erreur.\n" + text
237   logging.info(text)
238   raise Exception(text)
239
240 visHex80 = smesh.CopyMesh( coupe_vis_1, 'visHex80', 1, 0)
241
242 _ = visHex80.RotationSweepObjects( [ visHex80 ], [ visHex80 ], [ visHex80 ], SMESH.AxisStruct( 0, 0, 0, 0, 10, 0 ), 0.0785398, 40, 1e-05, 1 )
243
244 [ tige_2, section_2, tige_haute_2, rond_2, tete_2, section_tete_2, conge_2, appui_2, p_imp_2, \
245   tige_rotated, tige_top, section_rotated, section_top, tige_haute_rotated, tige_haute_top, \
246   rond_rotated, rond_top, tete_rotated, tete_top, section_tete_rotated, section_tete_top, \
247   conge_rotated, conge_top, appui_rotated, appui_top, p_imp_rotated, p_imp_top ] = visHex80.GetGroups()
248 Sub_mesh_1 = Regular_1D_1.GetSubMesh()
249 Sub_mesh_2 = Regular_1D_2.GetSubMesh()
250 visHex80.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "visSain.med"))
251
252 ## Set names of Mesh objects
253 smesh.SetName(tige_2, 'tige')
254 smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
255 smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
256 smesh.SetName(Nb_Segments_2, 'Nb. Segments_2')
257 smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
258 smesh.SetName(Nb_Segments_3, 'Nb. Segments_3')
259 smesh.SetName(coupe_vis_1.GetMesh(), 'coupe_vis')
260 smesh.SetName(visHex80.GetMesh(), 'visHex80')
261 smesh.SetName(p_imp_top, 'p_imp_top')
262 smesh.SetName(appui_top, 'appui_top')
263 smesh.SetName(conge_top, 'conge_top')
264 smesh.SetName(section_tete_top, 'section_tete_top')
265 smesh.SetName(tete_top, 'tete_top')
266 smesh.SetName(rond_top, 'rond_top')
267 smesh.SetName(tige_haute_top, 'tige_haute_top')
268 smesh.SetName(section_top, 'section_top')
269 smesh.SetName(tige_top, 'tige_top')
270 smesh.SetName(Sub_mesh_2, 'Sub-mesh_2')
271 smesh.SetName(Sub_mesh_1, 'Sub-mesh_1')
272 smesh.SetName(p_imp_1, 'p_imp')
273 smesh.SetName(p_imp_rotated, 'p_imp_rotated')
274 smesh.SetName(appui_1, 'appui')
275 smesh.SetName(appui_rotated, 'appui_rotated')
276 smesh.SetName(conge_rotated, 'conge_rotated')
277 smesh.SetName(section_tete_rotated, 'section_tete_rotated')
278 smesh.SetName(tete_rotated, 'tete_rotated')
279 smesh.SetName(rond_rotated, 'rond_rotated')
280 smesh.SetName(tige_haute_rotated, 'tige_haute_rotated')
281 smesh.SetName(section_rotated, 'section_rotated')
282 smesh.SetName(tige_1, 'tige')
283 smesh.SetName(tige_rotated, 'tige_rotated')
284 smesh.SetName(tige_haute_1, 'tige_haute')
285 smesh.SetName(section_1, 'section')
286 smesh.SetName(tete_1, 'tete')
287 smesh.SetName(rond_1, 'rond')
288 smesh.SetName(conge_1, 'conge')
289 smesh.SetName(appui_2, 'appui')
290 smesh.SetName(section_tete_1, 'section_tete')
291 smesh.SetName(p_imp_2, 'p_imp')
292 smesh.SetName(section_tete_2, 'section_tete')
293 smesh.SetName(conge_2, 'conge')
294 smesh.SetName(rond_2, 'rond')
295 smesh.SetName(tete_2, 'tete')
296 smesh.SetName(section_2, 'section')
297 smesh.SetName(tige_haute_2, 'tige_haute')
298
299
300 if salome.sg.hasDesktop():
301   salome.sg.updateObjBrowser()