]> SALOME platform Git repositories - modules/hexablock.git/blob - src/TEST_PY/cas_2013/make_pave.py
Salome HOME
4523b802daebf35d838db8a49b6c88a9accb33fb
[modules/hexablock.git] / src / TEST_PY / cas_2013 / make_pave.py
1 # !/bin/python
2 # -*- coding: latin-1 -*-
3 # Hexa : Creation d'hexaedres 
4
5 import hexablock
6 geompy = hexablock.geompy
7 ## import os
8 ## import math
9
10 nbr_fic   = 0
11 the_name  = "pave_troue"
12 the_doc   = None
13 the_grid  = None
14                        ## Constantes
15 Epsilon  = 1e-3
16 BadIndex = -1
17 DirX = 0
18 DirY = 1
19 DirZ = 2
20 X    = 100000.0
21 X0   = X-1
22 HOK  = 0
23 HERR = 1
24 YES  = 1
25 NO   = 0
26 BOF  = -1
27                        ## Parametrage
28 db             = True
29 maillage_actif = True
30
31 # ======================================================= save_vtk
32 def save_vtk () :
33
34     global nbr_fic
35     nbr_fic += 1
36     filename = "%s_%02d.vtk" % (the_name,nbr_fic)
37     the_doc.saveVtk (filename)
38
39
40 # ======================================================= make_toit
41 def make_toit () :
42
43     ichem  = 5
44     jchem  = 3
45
46     for ni in range (imax) :
47         for nj in range (jmax) :
48             if ni != ichem or nj != jchem :
49                the_doc.removeHexa (the_grid.getHexaIJK (ni,nj,kmax))
50
51 # ======================================================= make_trou1
52 def make_trou1 () :
53
54     ic1   = 2
55     jc1   = 2
56     nc1   = 3
57
58     for ni in range (nc1) :
59         for nj in range (nc1) :
60             for nk in range (kmax) :
61                 the_doc.removeHexa (the_grid.getHexaIJK (ic1+ni, jc1+nj, nk))
62
63     xc1   = 65
64     yc1   = 25
65     orig1 = the_doc.addVertex (xc1, yc1, 0)
66     vxy   = the_doc.addVector (1,1,0)
67
68     rayon  = 5
69     rext   = 8
70     nbsect = 12
71     theta    = 360.0 / nbsect
72     cyl1_ray = [ rayon, rext]
73     cyl1_ang = []
74     for na in range (nbsect+1) :
75         cyl1_ang.append (na*theta)
76     cyl1_h = tab_z
77     cyl1_h.pop()
78     cyl1_h.insert (0,0)
79     cyl1 = the_doc.makePipe (orig1, vxy, vz, cyl1_ray, cyl1_ang, cyl1_h)
80
81                      ### Test visu
82
83     va1 = cyl1    .getVertexIJK (1,         1,       0)
84     va2 = cyl1    .getVertexIJK (1,         1,       1)
85     vc1 = the_grid.getVertexIJK (ic1+nc1-1, jc1+nc1, 0)
86     vc2 = the_grid.getVertexIJK (ic1+nc1-1, jc1+nc1, 1)
87
88     cible = the_grid.getQuadIK (ic1+2, jc1+nc1, 0)
89     tab_quads = []
90     for nk in range (len(cyl1_h)-1) :
91         for nj in range (len(cyl1_ang)-1) :
92             tab_quads.append (cyl1.getQuadJK (1, nj, nk))
93
94     if db :
95        va1.setColor (5)
96        vc1.setColor (5)
97        save_vtk ()
98
99        va2.setColor (5)
100        vc2.setColor (5)
101        save_vtk ()
102
103        cible.setColor        (5)
104        tab_quads[0].setColor (5)
105        save_vtk ()
106                      ### Jointure 
107
108     the_doc.joinQuadsUni (tab_quads, cible, va1, vc1, va2, vc2, 1)
109     hexablock.what () 
110     return cyl1
111
112 # ======================================================= make_trou2
113 def make_trou2 () :
114
115     ic2   = 7
116     kc2   = 1
117     for nj in range (jmax) :
118         the_doc.removeHexa (the_grid.getHexaIJK (ic2, nj, kc2))
119
120     xc2   = 105
121     zc2   = 20
122     orig2 = the_doc.addVertex (xc2, 0, zc2)
123     vxz   = the_doc.addVector (1,0,1)
124
125     rayon  = 5
126     rext   = 8
127     nbsect = 4
128     theta  = 360.0 / nbsect
129     cyl2_ray = [ rayon, rext]
130     cyl2_ang = []
131     for na in range (nbsect+1) :
132         cyl2_ang.append (na*theta)
133     cyl2_h = tab_y
134     cyl2_h.insert (0,0)
135     cyl2 = the_doc.makePipe (orig2, vxz, vy, cyl2_ray, cyl2_ang, cyl2_h)
136                      ### Test visu
137
138     va1 = cyl2    .getVertexIJK (1,     0, 0)
139     va2 = cyl2    .getVertexIJK (1,     0, 1)
140     vc1 = the_grid.getVertexIJK (ic2+1, 0, kc2+1)
141     vc2 = the_grid.getVertexIJK (ic2+1, 1, kc2+1)
142
143     cible = the_grid.getQuadJK (ic2+1, 0, kc2)
144     tab_quads = []
145     for nk in range (len(cyl2_h)-1) :
146         for nj in range (len(cyl2_ang)-1) :
147             tab_quads.append (cyl2.getQuadJK (1, nj, nk))
148
149     if db :
150        va1.setColor (5)
151        vc1.setColor (5)
152        save_vtk ()
153
154        va2.setColor (5)
155        vc2.setColor (5)
156        save_vtk ()
157
158        cible.setColor        (5)
159        tab_quads[0].setColor (5)
160        save_vtk ()
161                      ### Jointure 
162
163     the_doc.joinQuadsUni (tab_quads, cible, va1, vc1, va2, vc2, 1)
164     hexablock.what () 
165     return cyl2
166
167 # ======================================================= trait_vertical
168 def trait_vertical () :
169
170     ivert  = 3
171     for nk in range (kmax) :
172         for nj in range (2) :
173             the_doc.removeHexa (the_grid.getHexaIJK (ivert,nj,nk))
174
175 # ================================================================= make_pave
176 def make_pave () :
177
178     global the_doc, the_grid, tab_y, tab_z, vz, vy
179
180     the_doc  = hexablock.addDocument (the_name)
181     vx   = the_doc.addVector (1,0,0)
182     vy   = the_doc.addVector (0,1,0)
183     vz   = the_doc.addVector (0,0,1)
184     orig = the_doc.addVertex (0, 0, 0)
185     orig.setColor (5)
186
187     tab_x = [50, 62.5, 67.5, 70, 75, 85, 105, 120]
188     tab_y = [10, 15, 22.5, 25, 27.5, 40]
189     tab_z = [25, 40, 50, 53]
190                                             ### Modifs 
191     tab_x  = [50, 55, 62.5, 67.5, 75, 85, 95, 115, 120]
192     tab_y  = [10, 15, 22.5, 27.5, 35, 40]
193     tab_z  = [10, 30, 40, 50, 53]
194
195     rayon = 5
196
197     the_grid = the_doc.makeCartesian (orig, vx, vy, vz, tab_x, tab_y, tab_z)
198     save_vtk ()
199
200     global imax,  jmax,  kmax 
201     imax = len (tab_x)
202     jmax = len (tab_y)
203     kmax = len (tab_z) - 1
204
205     make_toit ()
206
207     the_doc.removeHexa (the_grid.getHexaIJK (0,0,kmax-1))
208
209                                    ###    Trou 1
210     make_trou1 ()
211     save_vtk ()
212                                    ###    Trou 2
213     make_trou2 ()
214     save_vtk ()
215                                 ### Les trous
216                                 ### Maillage
217     trait_vertical ()
218
219     if maillage_actif :
220        print "  ________________________ Maillage"
221        the_doc.addLaws (2, True)
222        mesh_hexas = hexablock.mesh(the_doc)
223
224     the_doc.purge ()
225     the_doc.save (the_name)
226     save_vtk ()
227     save_vtk ()
228     save_vtk ()
229     save_vtk ()
230     save_vtk ()
231     return the_doc
232
233 # ================================================================= Begin
234 doc = make_pave  ()
235
236
237