]> SALOME platform Git repositories - modules/hexablock.git/blob - src/TEST_PY/tape_edf/hexa_tape.py
Salome HOME
Version 1 de la tape EDF
[modules/hexablock.git] / src / TEST_PY / tape_edf / hexa_tape.py
1
2 # Hexa : Utilitaires de creation de la tape
3
4 import hexablock
5 import geompy
6
7 nbr_points = 0
8
9 the_doc   = None
10 the_shape = None
11 the_name  = "xxxx"
12
13 tab_x = []
14 tab_z = []
15
16 x_moy = 0.0
17 z_moy = 0.0
18 z_min = 0.0
19 z_max = 0.0
20
21 Epsilon = 1e-4
22
23 # ======================================================== add_document
24 def add_document (name, load_geom=True) :
25
26     global the_doc, the_shape, the_name
27
28     the_name  = name
29     the_doc   = hexablock.addDocument (name)
30     the_shape = None
31
32     if load_geom :
33        brep      = 'cas_edf/' + name + '.brep'
34        geom      = geompy.ImportBREP (brep)
35        the_shape = hexablock.addShape (the_doc, geom , name)
36
37     return the_doc
38
39 # ============================================================= add_edge
40 def add_edge (nro, v1,v2, ass=True) :
41    edge = the_doc.addEdge (v1,v2)
42    if ass :
43       edge.addAssociation (the_shape, nro, 0.0, 1.0)
44    return edge
45
46 # ============================================================= mailler
47 def mailler (doc=None) :
48
49     if doc == None :
50        doc = the_doc
51
52     law = doc.addLaw('Uniform', 3)
53     for j in range(doc.countPropagation()) :
54         propa = doc.getPropagation(j)
55         propa.setLaw(law)
56
57     mesh_hexas = hexablock.mesh(doc)
58     return  mesh_hexas
59
60 # ============================================================= egalite
61 def egalite (px, py) :
62     delta = py - px
63     return delta > -Epsilon and delta < Epsilon
64
65 # ============================================================= add_value
66 def add_value (table, value) :
67
68     pasla = True
69     for val in table :
70         if egalite (val, value) :
71            pasla = False
72
73     if pasla :
74        table.append (value)
75
76 # ========================================================== raz_points
77 def raz_points () :
78
79     global nbr_points, x_moy, y_fix, z_min, z_max
80     global tab_x, tab_z
81     nbr_points = 0
82     x_moy      = 0
83     y_fix      = 0
84
85     tab_x = []
86     tab_z = []
87
88 # ============================================================= add_point
89 def add_point (px, py, pz) :
90
91     global nbr_points, x_moy, y_fix, z_min, z_max
92     global tab_x, tab_z
93
94     if nbr_points == 0 :
95        x_moy = px
96        z_min = pz
97        z_max = pz
98     else :
99        x_moy  += px
100        if pz < z_min : z_min = pz
101        if pz > z_max : z_max = pz
102
103     y_fix       = py
104     nbr_points += 1
105
106     tab_x.append (px)
107     tab_z.append (pz)
108
109 # ========================================================== gen_cylinder
110 def gen_cylinder () :
111
112     global nbr_points, x_moy, y_fix, z_min
113     global tab_x, tab_z
114     x_moy = x_moy / nbr_points
115
116     ta = [ 0, 90, 180, 270, 360 ]
117     tab_ray  = []
118     tab_haut = []
119
120     for val in tab_x :
121         if val > x_moy :
122            add_value (tab_ray,  val-x_moy)
123
124     tab_ray.sort()
125
126     for val in tab_z :
127         add_value (tab_haut, val)
128
129     tab_haut.sort()
130
131     orig = the_doc.addVertex (x_moy, y_fix, 0)
132     vx   = the_doc.addVector (1, 0, 0)
133     vz   = the_doc.addVector (0, 0, 1)
134     grid = the_doc.makePipe (orig, vx, vz, tab_ray, ta, tab_haut)
135     return grid
136
137
138 # ========================================================== gen_vis
139 def gen_vis () :
140
141     global nbr_points, x_moy, y_fix, z_min
142     global tab_x, tab_z
143     x_moy = x_moy / nbr_points
144
145     xmed = tab_x [0] - x_moy
146     xmax = xmed
147     xmin = xmed
148
149     for px in tab_x :
150         if px > x_moy :
151            val = px - x_moy
152            if val < xmin :
153               xmin = val
154            elif val > xmax :
155               xmed = xmax
156               xmax = val
157            elif val < xmax and val > xmed :
158               xmed = val
159
160     z_top = z_min
161     for val in tab_z :
162         if val < z_max and val > z_top :
163            z_top = val
164
165     tr = [ xmin,  xmed,  xmax ]
166     tz = [ z_min, z_top, z_max ]
167     ta = [ 0, 90, 180, 270, 360 ]
168
169     orig = the_doc.addVertex (x_moy, y_fix, 0)
170     vx   = the_doc.addVector (1, 0, 0)
171     vz   = the_doc.addVector (0, 0, 1)
172
173     grid = the_doc.makePipe (orig, vx, vz, tr, ta, tz)
174
175     for na in range (4) :
176         grid.getHexaIJK (1, na, 0).remove()
177
178     return grid
179
180