]> SALOME platform Git repositories - modules/hexablock.git/blob - src/TEST_PY/test_unit/troisCylindres_v5.py
Salome HOME
Merge from V6_main 13/12/2012
[modules/hexablock.git] / src / TEST_PY / test_unit / troisCylindres_v5.py
1 # -*- coding: latin-1 -*-\r
2 # Copyright (C) 2009-2012  CEA/DEN, EDF R&D\r
3 #\r
4 # This library is free software; you can redistribute it and/or\r
5 # modify it under the terms of the GNU Lesser General Public\r
6 # License as published by the Free Software Foundation; either\r
7 # version 2.1 of the License.\r
8 #\r
9 # This library is distributed in the hope that it will be useful,\r
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
12 # Lesser General Public License for more details.\r
13 #\r
14 # You should have received a copy of the GNU Lesser General Public\r
15 # License along with this library; if not, write to the Free Software\r
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
17 #\r
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
19 #\r
20 \r
21 # Francis KLOSS : 2012 : CEA-Saclay, DEN, DM2S, SFME, LGLS, F-91191 Gif-sur-Yvette, France\r
22 # ========================================================================================\r
23 \r
24 import geompy\r
25 import hexablock\r
26 \r
27 # Charger la geometrie\r
28 # ====================\r
29 \r
30 nom = "troisCylindres"\r
31 \r
32 piece = geompy.ImportBREP(nom+".brep")\r
33 \r
34 # Selectionner des sous-parties de la geometrie\r
35 # ---------------------------------------------\r
36 \r
37 sommets = geompy.SubShapeAllSortedCentres(piece, geompy.ShapeType["VERTEX"])\r
38 aretes  = geompy.SubShapeAllSortedCentres(piece, geompy.ShapeType["EDGE"  ])\r
39 \r
40 moy_b_x, moy_b_y, moy_b_z = geompy.PointCoordinates(sommets[14])\r
41 moy_p_x, moy_p_y, moy_p_z = geompy.PointCoordinates(sommets[ 6])\r
42 moy_g_x, moy_g_y, moy_g_z = geompy.PointCoordinates(sommets[ 3])\r
43 \r
44 grand0, grand_xb, grand_yb, grand_zb,  grand1, grand2, grand3,  grand_rayon = geompy.KindOfShape(aretes[ 0])\r
45 grand4, grand_xh, grand_yh, grand_zh,  grand5, grand6, grand7,  grand8      = geompy.KindOfShape(aretes[ 1])\r
46 \r
47 moyen0, moyen_x , moyen_y , moyen_z ,  moyen1, moyen2, moyen3,  moyen_rayon = geompy.KindOfShape(aretes[20])\r
48 \r
49 petit0, petit_xb, petit_yb, petit_zb,  petit1, petit2, petit3,  petit_rayon = geompy.KindOfShape(aretes[12])\r
50 petit4, petit_xh, petit_yh, petit_zh,  petit5, petit6, petit7,  petit8      = geompy.KindOfShape(aretes[13])\r
51 \r
52 # Construire le modele de bloc\r
53 # ============================\r
54 \r
55 doc = hexablock.addDocument(nom)\r
56 \r
57 doc.addShape(piece,nom)\r
58 \r
59 # Construire le grand cylindre\r
60 # ----------------------------\r
61 \r
62 grand_base = doc.addVertex(grand_xb, grand_yb, grand_zb)\r
63 grand_oppo = doc.addVertex(grand_xh, grand_yh, grand_zh)\r
64 \r
65 grand_dir = doc.addVectorVertices(grand_base, grand_oppo)\r
66 \r
67 grand_hauteur = grand_dir.getNorm()\r
68 \r
69 grand_cylindre = doc.addCylinder(grand_base, grand_dir, grand_rayon, grand_hauteur)\r
70 \r
71 # Construire le moyen cylindre cote grand\r
72 # ---------------------------------------\r
73 \r
74 moy_g_r1 = 0.8\r
75 moy_g_r2 = 0.5\r
76 \r
77 moy_g_base_x = moy_p_x + (moy_g_x-moy_p_x)*moy_g_r1 + moyen_x - moy_b_x\r
78 moy_g_base_y = moy_p_y + (moy_g_y-moy_p_y)*moy_g_r1 + moyen_y - moy_b_y\r
79 moy_g_base_z = moy_p_z + (moy_g_z-moy_p_z)*moy_g_r1 + moyen_z - moy_b_z\r
80 \r
81 moy_g_base = doc.addVertex(moy_g_base_x, moy_g_base_y, moy_g_base_z)\r
82 moy_g_oppo = doc.addVertex( (grand_xh+grand_xb) * moy_g_r2, (grand_yh+grand_yb) * moy_g_r2, (grand_zh+grand_zb) * moy_g_r2 )\r
83 \r
84 moy_g_dir = doc.addVectorVertices(moy_g_base, moy_g_oppo)\r
85 \r
86 moy_g_hauteur = moy_g_dir.getNorm()\r
87 \r
88 moy_g_cylindre = doc.addCylinder(moy_g_base, moy_g_dir, moyen_rayon, moy_g_hauteur)\r
89 \r
90 # Construire le moyen cylindre cote petit\r
91 # ---------------------------------------\r
92 \r
93 moy_p_r = 0.18\r
94 \r
95 moy_p_base = doc.addVertex(moyen_x, moyen_y, moyen_z)\r
96 moy_b_base = doc.addVertex(moy_b_x, moy_b_y, moy_b_z)\r
97 moy_p_oppo = doc.addVertex( moy_p_x+(moy_g_x-moy_p_x) * moy_p_r, moy_p_y+(moy_g_y-moy_p_y) * moy_p_r, moy_p_z+(moy_g_z-moy_p_z) * moy_p_r )\r
98 \r
99 moy_p_dir = doc.addVectorVertices(moy_b_base, moy_p_oppo)\r
100 \r
101 moy_p_hauteur = moy_p_dir.getNorm()\r
102 \r
103 moy_p_cylindre = doc.addCylinder(moy_p_base, moy_p_dir, moyen_rayon, moy_p_hauteur)\r
104 \r
105 # Construire le petit cylindre\r
106 # ----------------------------\r
107 \r
108 petit_base = doc.addVertex(petit_xb, petit_yb, petit_zb)\r
109 petit_oppo = doc.addVertex(petit_xh, petit_yh, petit_zh)\r
110 \r
111 petit_dir = doc.addVectorVertices(petit_base, petit_oppo)\r
112 \r
113 petit_hauteur = petit_dir.getNorm()\r
114 \r
115 petit_cylindre = doc.addCylinder(petit_base, petit_dir, petit_rayon, petit_hauteur)\r
116 \r
117 # Construire le T et la X\r
118 # -----------------------\r
119 \r
120 en_te = doc.makeCylinders(grand_cylindre, moy_g_cylindre)\r
121 croix = doc.makeCylinders(moy_p_cylindre, petit_cylindre)\r
122 \r
123 # Relier le T et la X\r
124 # -------------------\r
125 \r
126 croix_quads = []\r
127 \r
128 for i in xrange(1, -1, -1):\r
129     for j in xrange( [hexablock.CV_MAXI_INT, hexablock.CV_MAXI_EXT][i] ):\r
130         quad = croix.getQuadIJ(hexablock.CYL_BIG, i, j, hexablock.CYL_BIG_SLICES)\r
131         croix_quads.append(quad)\r
132 \r
133 en_te_q = en_te.getQuadIJ(hexablock.CYL_SMALL, 1, hexablock.V_N, 0)\r
134 \r
135 en_te_v0 = en_te.getVertexIJK(hexablock.CYL_SMALL, 2, hexablock.V_N , 0)\r
136 en_te_v1 = en_te.getVertexIJK(hexablock.CYL_SMALL, 2, hexablock.V_NW, 0)\r
137 \r
138 croix_v0 = croix.getVertexIJK(hexablock.CYL_BIG, 2, hexablock.V_E , hexablock.CYL_BIG_SLICES)\r
139 croix_v1 = croix.getVertexIJK(hexablock.CYL_BIG, 2, hexablock.V_NE, hexablock.CYL_BIG_SLICES)\r
140 \r
141 prisme = doc.joinQuads(croix_quads, en_te_q,  croix_v0, en_te_v0,  croix_v1, en_te_v1,  1)\r
142 \r
143 # Associer\r
144 # ========\r
145 \r
146 # fkl: comme pour la tuyauterie: associer pour le prisme (sauf si item 142 et 146 de Taches.ods)\r
147 \r
148 # Mailler le modele de bloc\r
149 # =========================\r
150 \r
151 # Definir 5 groupes de faces\r
152 # --------------------------\r
153 \r
154 groupe_grand_a = doc.addQuadGroup("Grand_A")\r
155 groupe_grand_b = doc.addQuadGroup("Grand_B")\r
156 groupe_moyen_f = doc.addQuadGroup("Moyen")\r
157 groupe_petit_a = doc.addQuadGroup("Petit_A")\r
158 groupe_petit_b = doc.addQuadGroup("Petit_B")\r
159 \r
160 for i in xrange(2):\r
161     for j in xrange( [hexablock.CV_MAXI_INT, hexablock.CV_MAXI_EXT][i] ):\r
162         quad = en_te.getQuadIJ(hexablock.CYL_BIG  , i, j, 0)\r
163         groupe_grand_a.addElement(quad)\r
164 \r
165         quad = en_te.getQuadIJ(hexablock.CYL_BIG  , i, j, hexablock.CYL_BIG_SLICES)\r
166         groupe_grand_b.addElement(quad)\r
167 \r
168         quad = croix.getQuadIJ(hexablock.CYL_BIG  , i, j, 0)\r
169         groupe_moyen_f.addElement(quad)\r
170 \r
171         quad = croix.getQuadIJ(hexablock.CYL_SMALL, i, j, 0)\r
172         groupe_petit_a.addElement(quad)\r
173 \r
174         quad = croix.getQuadIJ(hexablock.CYL_SMALL, i, j, hexablock.CYL_SMALL_SLICES)\r
175         groupe_petit_b.addElement(quad)\r
176 \r
177 # Definir 3 groupes de volumes\r
178 # ----------------------------\r
179 \r
180 groupe_grand = doc.addHexaGroup("Grand")\r
181 groupe_moyen = doc.addHexaGroup("Moyen")\r
182 groupe_petit = doc.addHexaGroup("Petit")\r
183 \r
184 for i in xrange( doc.countUsedHexa() ):\r
185     h = doc.getUsedHexa(i)\r
186     groupe_moyen.addElement(h)\r
187 \r
188 for i in xrange(2):\r
189     for j in xrange( [hexablock.CV_MAXI_INT, hexablock.CV_MAXI_EXT][i] ):\r
190         for k in [ 0, hexablock.CYL_BIG_SLICES-1 ]:\r
191             h = en_te.getHexaIJK(hexablock.CYL_BIG, i, j, k)\r
192             groupe_grand.addElement(h)\r
193             groupe_moyen.removeElement(h)\r
194 \r
195         for k in [0, hexablock.CYL_SMALL_SLICES-1 ]:\r
196             h = croix.getHexaIJK(hexablock.CYL_SMALL, i, j, k)\r
197             groupe_petit.addElement(h)\r
198             groupe_moyen.removeElement(h)\r
199 \r
200 # Mailler le modele de bloc avec association\r
201 # ------------------------------------------\r
202 \r
203 ########## hexablock.addLaws(doc, 10, True) Ne marche pas\r
204 \r
205 law = doc.addLaw("Uniform", 4)\r
206 for j in range(doc.countPropagation()):\r
207     propa = doc.getPropagation(j)\r
208     propa.setLaw(law)\r
209 \r
210 doc.save("troisCylindres_v5")\r
211 doc.setName("troisCylindres_v5")\r
212 hexablock.addToStudy(doc)\r
213 \r
214 blocs = hexablock.mesh(doc, dim=3)\r
215 \r
216 muv, mue, muq, muh = hexablock.dump(doc, blocs)\r