Salome HOME
merge from V3_2_0_maintenance 17mar08
[modules/eficas.git] / src / EFICASGUI / cabri.py
1 # -*- coding: iso-8859-1 -*-
2 """
3 outil métier Cabri pour Salome
4
5 """
6
7
8 def tetra( name, **param ):
9     """
10     construction géométrie Cabri en Tetra    
11     """
12     #*************************************************************
13     # Paramètres physiques 
14     #*************************************************************    
15     # Nombre déléments circonférentiels (NBR_CIR)
16     ncir = param['ncir']
17     # Temps danalyse
18     temps = param['temps']
19     # Nombre déléments de lalésage (NBR_ALE)
20     nsect = param['nsect']
21     # Nombre déléments radiaux (NBR_RAD)
22     nrad = param['nrad']
23     # Nombre déléments verticaux (NBR_VER)
24     nver = param['nver']
25     
26     
27     # Epaisseur de la rondelle (GOUJ_E_RONDEL)
28     he = param['he']
29     # Hauteur de la bride (BRID_H)
30     hc1 = param['hc1']
31     # Epaisseur de lécrou (GOUJ_E_ECROU)
32     e = param['e']
33     # Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)
34     nbgouj = param['nbgouj']
35     # Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)
36     dg = param['dg']
37     # Hauteur des alésages de la bride permettant lintroduction des goujons (BRID_H_ALESAG)
38     htrou = param['htrou']
39     # Epaisseur du joint au niveau de linterface détanchéité (ETAN_E_JOINT)
40     j = param['j']
41     # Hauteur de lépaulement de la bride au niveau de linterface détanchéité (BRID_H_EPAUL)
42     hb = param['hb']
43     # Rayon du congé de la bride (BRID_R_CONGE)
44     rcong = param['rcong']
45     # Position des alésages de la bride permettant lintroduction des goujons (BRID_P_ALESAG)
46     dtrou = param['dtrou']
47     # Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)
48     pf = param['pf']
49     # Hauteur de conduite (TUBU_H)
50     hcg1 = param['hcg1']
51     # Diamètre intérieur de la bride (BRID_D_INT)
52     dint = param['dint']
53     # Diamètre extérieur de la bride (BRID_D_EXT)
54     dext = param['dext']
55     # Diamètre des alésages de la bride permettant lintroduction des goujons (BRID_D_ALESAG)
56     dt = param['dt']
57     # Diamètre de lécrou (GOUJ_D_ECROU)
58     dec = param['dec']
59     # Diamétre extérieur de la conduite (TUBU_D_EXT)
60     dex1 = param['dex1']
61     # Diamètre de la rondelle (GOUJ_D_RONDEL)
62     drd = param['drd']
63     # Diamètre de lépaulement de la bride au niveau de linterface détanchéité (BRID_D_EPAUL)
64     dex3 = param['dex3']
65     # Position (diamètre) du congé de la bride (BRID_D_CONGE)
66     dex2 = param['dex2']
67     
68     
69     
70     import math
71     import time
72     
73     # imports spécifiques à salome:
74     
75     import geompy
76     import smesh
77     import salome
78     #Import de l'interface graphique de GEOM (nécessaire pour affecter de la couleur)
79     gg = salome.ImportComponentGUI("GEOM")
80     
81     time_init = time.time()
82     
83     #**************************                                                   
84     # test sur les parametres *                                                   
85     #**************************
86     
87     #opti trac psc
88     
89     nrad = abs(nrad)
90     ncir = abs(ncir)
91     nver = abs(nver)
92     temps = abs(temps)
93     nsect = abs(nsect)
94     nbgouj = abs(nbgouj)
95     dint = abs(dint)
96     dex1 = abs(dex1)
97     dex2 = abs(dex2)
98     dex3 = abs(dex3)
99     dtrou = abs(dtrou)
100     dext = abs(dext)
101     dt = abs(dt)
102     drd = abs(drd)
103     dg = abs(dg)
104     dec = abs(dec)
105     rcong = abs(rcong)
106     he =  abs(he)
107     e = abs(e)
108     j = abs(j)
109     hc1 = abs(hc1)
110     hcg1 = abs(hcg1)
111     hb = abs(hb)
112     htrou = abs(htrou)
113     pf = abs(pf)
114     j = abs(j)
115     
116     if (nbgouj <= 2):
117         nbgouj = 2
118     
119     if ((nbgouj == 2) and (ncir <= 4)):
120         ncir = 4
121     
122     if (dex1 <= dint):
123         dex1 = dint+10.
124     
125     if (dex2 <= dex1):
126         dex2 = dex1+20
127     
128     if (dg >= dt):
129         dg = dt-2.
130     
131     if (dec <= dt):
132         if (drd > dt):
133             dec = (dt+drd)/2
134         else:
135             dec = dt+2
136             drd = dec+2
137     
138     if ((dtrou-dt) <= dex2):
139         if (dtrou <= dex2):
140             dtrou = dex2+(2*dt)
141         else:
142             dt = (dtrou-dex2)/2
143     
144     if (dex3 < dint):
145         dex3 = dtrou-drd
146     if (dex3 > (dtrou-dt)):
147         dex3 = dtrou-drd
148     
149     if ((dtrou+drd) <= (2*dtrou-dex3)):
150         a = 2*dtrou-dex3
151     else:
152         a = dtrou+drd
153     if (dext < a):
154         dext = a 
155     
156     if (hb >= hc1):
157         hb = 1
158     if (htrou >= hc1):
159         htrou = hc1/2
160     if ((hb+htrou) >= hc1):
161         hb = (hc1-htrou)/10
162     
163     if (rcong >= 15.):
164         rcong = 15.
165     
166     rg = dg / 2.
167     if (pf >= rg):
168         pf = rg/2.
169     
170     if (nrad <= 0):
171         nrad = 1
172     
173     if (ncir <= 1):
174         ncir = 2
175     
176     if (nver <= 0):
177         nver = 1
178     
179     if (nsect <= 3):
180         nsect = 4
181     
182     if (temps <= 0):
183         nsect = 3
184     
185     #**************************                                                   
186     # parametres intrinsèques *                                                   
187     #**************************
188     #opti dime 3 elem cub8                           
189     #dens 1
190     
191     # critere pour elim                                                     
192     crit = 0.0001                                                              
193     
194     # rayons
195     rint = dint / 2.
196     rex1 = dex1 / 2.
197     rex2 = dex2 / 2.
198     rex3 = dex3 / 2.
199     rtrou = dtrou / 2.
200     rext = dext / 2.
201     rt = dt / 2.
202     rrd = drd / 2.
203     rg = dg / 2.
204     rec = dec / 2.
205     
206     # angle de coupe
207     stet = rrd/rtrou 
208     ctet = stet**2 
209     ctet = 1-ctet 
210     ctet = ctet**0.5 
211     tet = stet/ctet 
212     tet = math.atan(tet)
213     beta = math.pi / nbgouj
214     # if (tet >= beta):
215     #     tet = 1.1*tet
216     #     beta = tet 
217     # else:
218     #     if ((beta-tet) < (0.1*tet)):
219     #         tet = beta
220     #     else:
221     #         tet = (tet+beta)/2 
222     
223     # hauteurs                                                        
224     ht = hc1 + hcg1;                                                           
225     h = (hb + htrou);
226     mj = 0-j;     
227     
228     p0 = geompy.MakeVertex(0., 0., 0.)
229     
230     Vx = geompy.MakeVectorDXDYDZ(1., 0., 0.)
231     Vy = geompy.MakeVectorDXDYDZ(0., 1., 0.)
232     Vz = geompy.MakeVectorDXDYDZ(0., 0., 1.)
233     
234     
235     p1 = geompy.MakeVertex(rint, 0., 0.)
236     p2 = geompy.MakeVertex(rint, 0., -j/2.)
237     p3 = geompy.MakeVertex(rex3, 0., -j/2.)
238     p4 = geompy.MakeVertex(rex3, 0., 0.)
239     
240     edge1 = geompy.MakeEdge(p1,p2)
241     edge2 = geompy.MakeEdge(p2,p3)
242     edge3 = geompy.MakeEdge(p3,p4)
243     edge4 = geompy.MakeEdge(p4,p1)
244     
245     wire_joint = geompy.MakeWire([edge1, edge2, edge3, edge4])
246     face_joint = geompy.MakeFace(wire_joint,1)
247     
248     p5 = geompy.MakeVertex(rex3, 0., hb)
249     
250     edge5 = geompy.MakeEdge(p4, p5)
251     
252     p7 = geompy.MakeVertex(rext, 0., hb)
253     p8 = geompy.MakeVertex(rext, 0., hb + htrou)
254     p9 = geompy.MakeVertex(rex2, 0., hb + htrou)
255     
256     edge6 = geompy.MakeEdge(p5, p7)
257     edge9 = geompy.MakeEdge(p7, p8)
258     # construction du congé
259     # Rq: voir ce que l'on fait si la rondelle s'appuye sur le congé                    
260     
261     an = math.atan ((hc1-h)/(rex2-rex1)) 
262     alpha = (math.pi - an)/2.
263     
264     conge_p1 = geompy.MakeVertex(rex2 + rcong/math.tan(alpha), 0., h)
265     conge_centre = geompy.MakeVertex(rex2 + rcong/math.tan(alpha), 0., h + rcong)
266     
267     gamma = math.pi - 2*alpha
268     
269     conge_axe = geompy.MakePrismVecH(conge_centre, Vy, 1)
270     conge = geompy.MakeRevolution(conge_p1, conge_axe, gamma)
271     # geompy.addToStudy(conge, "conge")
272     
273     conge_p2 = geompy.MakeRotation(conge_p1, conge_axe, gamma)
274     
275     ## fin construction du congé
276     
277     #avant le congé
278     edge10 = geompy.MakeEdge(p8, conge_p1)
279     # après le congé
280     p12 = geompy.MakeVertex(rex1, 0., hc1)
281     edge11 = geompy.MakeEdge(conge_p2, p12)
282     
283     p11 = geompy.MakeVertex(rint, 0., hc1)
284     p13 = geompy.MakeVertex(rex1, 0., hc1 + hcg1)
285     p14 = geompy.MakeVertex(rint, 0., hc1 + hcg1)
286     
287     edge16 = geompy.MakeEdge(p11, p14)
288     edge17 = geompy.MakeEdge(p14, p13)
289     edge18 = geompy.MakeEdge(p13, p12)
290     
291     edge19 = geompy.MakeEdge(p11, p1)
292     
293     wire_front = geompy.MakeWire([edge4, edge5, edge6, edge9, edge10, conge,
294                                 edge11, edge18, edge17, edge16, edge19])
295     
296     face_front = geompy.MakeFace(wire_front,1)
297     # geompy.addToStudy(face_front, "face_front")
298     # on ajoutera le joint après la révolution
299     
300     
301     # Création du bloc solide
302     
303     bride_revol = geompy.MakeRevolution(face_front, Vz, beta)
304     # geompy.addToStudy(bride_revol, "bride_revol")
305     
306     # outil de coupe
307     p_goujon = geompy.MakeVertex(rtrou, 0., -j/2.)
308     cut_tool = geompy.MakeCylinder(p_goujon, Vz, rt, hc1 + j)
309     # geompy.addToStudy(cut_tool, "cut_tool")
310     
311     # coupe
312     bride_cut = geompy.MakeCut(bride_revol, cut_tool)
313     # geompy.addToStudy(bride_cut, "bride_cut")
314     
315     
316     
317     # goujon
318     axe_goujon = geompy.MakePrismVecH(p_goujon, Vz, 1.)
319     p_rayon_goujon = geompy.MakeTranslation(p_goujon, rg, 0., 0.)
320     rayon_goujon = geompy.MakeEdge(p_goujon, p_rayon_goujon)
321     # base_goujon = geompy.MakeRevolution(rayon_goujon, axe_goujon, math.pi)
322     h_goujon = j/2. + h + e + 1.5 * he
323     p1_filet_goujon = geompy.MakeVertex(rtrou + rg, 0., h_goujon - pf)
324     p2_filet_goujon = geompy.MakeVertex(rtrou + rg - pf, 0., h_goujon)
325     p_goujon_h = geompy.MakeVertex(rtrou, 0., h_goujon)
326     edge1_goujon = geompy.MakeEdge(p_rayon_goujon, p1_filet_goujon)
327     edge2_goujon = geompy.MakeEdge(p1_filet_goujon, p2_filet_goujon)
328     edge3_goujon = geompy.MakeEdge(p2_filet_goujon, p_goujon_h)
329     wire_goujon = geompy.MakeWire([rayon_goujon, edge1_goujon, edge2_goujon, edge3_goujon])
330     face_ext_goujon = geompy.MakeRevolution(wire_goujon, axe_goujon, math.pi)
331     # geompy.addToStudy(face_ext_goujon, "face_ext_goujon")
332     wire_gauche_goujon = geompy.MakeRotation(wire_goujon, axe_goujon, math.pi)
333     
334     p2_filet_goujon_g = geompy.MakeRotation(p2_filet_goujon, axe_goujon, math.pi)
335     p_rayon_goujon_g = geompy.MakeTranslation(p_goujon, - rg, 0., 0.)
336     diametre_haut = geompy.MakeEdge(p2_filet_goujon_g, p2_filet_goujon)
337     diametre_bas = geompy.MakeEdge(p_rayon_goujon_g, p_rayon_goujon)
338     edge1_goujon_g = geompy.MakeRotation(edge1_goujon, axe_goujon, math.pi)
339     edge2_goujon_g = geompy.MakeRotation(edge2_goujon, axe_goujon, math.pi)
340     wire_face_int_goujon2 = geompy.MakeWire([diametre_bas, edge1_goujon, edge2_goujon, 
341                 diametre_haut, edge1_goujon_g, edge2_goujon_g])
342     # geompy.addToStudy(wire_face_int_goujon2, "wire_face_int_goujon2")
343     face_int_goujon = geompy.MakeFace(wire_face_int_goujon2, 1)
344     
345     shell_goujon = geompy.MakeShell([face_ext_goujon, face_int_goujon])
346     goujon = geompy.MakeSolid([shell_goujon])
347     # geompy.addToStudy(goujon, "goujon")
348     
349     # ecrou
350     p1_ecrou = geompy.MakeVertex(rtrou + rg, 0., hb + htrou + e)
351     p2_ecrou = geompy.MakeVertex(rtrou + rec, 0., hb + htrou + e)
352     rayon_ecrou = geompy.MakeEdge(p1_ecrou, p2_ecrou)
353     base_ecrou = geompy.MakeRevolution(rayon_ecrou, axe_goujon, math.pi)
354     ecrou = geompy.MakePrismVecH(base_ecrou, Vz, he)
355     # geompy.addToStudy(ecrou, "ecrou")
356     
357     # assemblage goujon, ecrou:
358     goujon_ecrou = geompy.MakeCompound([goujon, ecrou])
359     # geompy.addToStudy(goujon_ecrou, "goujon_ecrou")
360     
361     
362     # rondelle
363     p1_rondelle = geompy.MakeVertex(rtrou + rt, 0., hb + htrou)
364     p2_rondelle = geompy.MakeVertex(rtrou + rrd, 0., hb + htrou)
365     rayon_rondelle = geompy.MakeEdge(p1_rondelle, p2_rondelle)
366     # base_rondelle = geompy.MakeRevolution(rayon_rondelle, axe_goujon, math.pi)
367     face_rondelle = geompy.MakePrismVecH(rayon_rondelle, Vz, e)
368     rondelle = geompy.MakeRevolution(face_rondelle, axe_goujon, math.pi)
369     # geompy.addToStudy(rondelle, "rondelle")
370     
371     
372     # assemblage goujon-ecrou avec rondelle
373     goujon_ecrou_rondelle = geompy.MakeFuse(goujon_ecrou, rondelle)
374     # geompy.addToStudy(goujon_ecrou_rondelle, "goujon_ecrou_rondelle")
375     
376     
377     # assemblage sur la piece principale
378     bride_but_joint_tmp = geompy.MakeFuse(bride_cut, goujon_ecrou_rondelle)
379     # geompy.addToStudy(bride_but_joint_tmp, "bride_but_joint_tmp")
380     
381     # On partitionne avec la rondelle pour récupérer les solides physiques
382     bride_but_joint = geompy.MakePartition([bride_but_joint_tmp], [rondelle])
383     # geompy.addToStudy(bride_but_joint, "bride_but_joint")
384     
385     # on ajoute le joint (compound pour que les faces communes soient en double)
386     joint = geompy.MakeRevolution(face_joint, Vz, beta)
387     # geompy.addToStudy(joint, "joint")
388     
389     bride_tmp = geompy.MakeCompound([bride_but_joint, joint])
390     # geompy.addToStudy(bride_tmp, "bride_tmp")
391     
392     time_0 = time.time()
393     print "Temps Geometrie = ", (time_0-time_init)
394     
395     
396     # on partitionne pour obtenir certains points (P_BRI, P_GOU)
397     p6 = geompy.MakeVertex(rint, 0., hb)
398     edge_part = geompy.MakeEdge(p6, p7)
399     plan_part = geompy.MakeRevolution(edge_part, Vz, beta)
400     bride_part = geompy.MakePartition([bride_tmp], [plan_part])
401     # geompy.addToStudy(bride_part, "bride_part")
402     
403     edge_p5_p6 = geompy.GetEdge(bride_part, p5, p6)
404     edge_p5_p6_ind = geompy.GetSubShapeID(bride_part, edge_p5_p6)
405     bride_vertex1 = geompy.DivideEdge(bride_part, edge_p5_p6_ind, 1./3., 1)
406     # geompy.addToStudy(bride_vertex1, "bride_vertex1")
407     
408     p_gouj_part1 = geompy.MakeVertex(rtrou - rg, 0., hb)
409     p_gouj_part2 = geompy.MakeVertex(rtrou + rg, 0., hb)
410     p_gouj_mid = geompy.MakeVertex(rtrou, 0., hb)
411     edge_gouj_part = geompy.GetEdgeNearPoint(bride_vertex1, p_gouj_mid)
412     edge_gouj_part_ind = geompy.GetSubShapeID(bride_vertex1, edge_gouj_part)
413     bride = geompy.DivideEdge(bride_vertex1, edge_gouj_part_ind, 0.5, 1)
414 #     geompy.addToStudy(bride, "bride")
415     geompy.addToStudy(bride, name )
416     
417     
418     time_1 = time.time()
419     print "Temps Partition = ", (time_1-time_0)
420     
421     # Détermination des différents solides et affichage en couleur
422     
423     idToDisplay=[]
424     
425     GOUJON1 = geompy.GetBlockNearPoint(bride, p_goujon)
426     GOUJON2 = geompy.GetBlockNearPoint(bride, p_goujon_h)
427     list_GOUJON = [GOUJON1, GOUJON2]
428     
429     GOUJON = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
430     id_GOUJON = geompy.addToStudyInFather(bride, GOUJON, "GOUJON")
431     idToDisplay.append(id_GOUJON)
432     
433     for solid in list_GOUJON:
434         f_ind_tmp = geompy.GetSubShapeID(bride, solid)
435         geompy.AddObject(GOUJON, f_ind_tmp)
436     
437     
438     JOINT = geompy.GetBlockNearPoint(bride, p2)
439     id_JOINT = geompy.addToStudyInFather(bride, JOINT, "JOINT")
440     idToDisplay.append(id_JOINT)
441     
442     p_rondelle = geompy.MakeTranslation(p2_rondelle, 0., 0., e)
443     ROND = geompy.GetBlockNearPoint(bride, p_rondelle)
444     id_ROND = geompy.addToStudyInFather(bride, ROND, "ROND")
445     idToDisplay.append(id_ROND)
446     
447     p_ecrou = geompy.MakeTranslation(p2_ecrou, 0., 0., he)
448     ECROU = geompy.GetBlockNearPoint(bride, p_ecrou)
449     id_ECROU = geompy.addToStudyInFather(bride, ECROU, "ECROU")
450     idToDisplay.append(id_ECROU)
451     
452     list_BRIDE = []
453     
454     BRIDE1 = geompy.GetBlockNearPoint(bride, p14)
455     list_BRIDE.append(BRIDE1)
456     
457     p_BRIDE2 = geompy.MakeVertex((rint+rex3)/2., 0., hb/2.)
458     p_BRIDE2_rota = geompy.MakeRotation(p_BRIDE2, Vz, beta/2.)
459     BRIDE2 = geompy.GetBlockNearPoint(bride, p_BRIDE2_rota)
460     list_BRIDE.append(BRIDE2)
461     
462     BRIDE = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
463     id_BRIDE = geompy.addToStudyInFather(bride, BRIDE, "BRIDE")
464     idToDisplay.append(id_BRIDE)
465     
466     for solid in list_BRIDE:
467         f_ind_tmp = geompy.GetSubShapeID(bride, solid)
468         geompy.AddObject(BRIDE, f_ind_tmp)
469     
470     RedGreenBlue = [[189,97,0],[255,215,0],[255,0,0],[0,176,0],[0,0,255]]
471     
472     for i in range(len(idToDisplay)):
473         gg.createAndDisplayGO(idToDisplay[i])
474         gg.setDisplayMode(idToDisplay[i],1)
475         gg.setColor(idToDisplay[i],RedGreenBlue[i][0],RedGreenBlue[i][1],RedGreenBlue[i][2])
476     
477     list_VTOT = geompy.SubShapeAllSorted(bride, geompy.ShapeType["SOLID"])
478     VTOT = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
479     for solid in list_VTOT:
480         f_ind_tmp = geompy.GetSubShapeID(bride, solid)
481         geompy.AddObject(VTOT, f_ind_tmp)
482     geompy.addToStudyInFather(bride, VTOT, "VTOT")
483         
484     time_2 = time.time()
485     print "Temps affichage solides = ", (time_2-time_1)
486     
487     # Détermination des différentes faces
488     
489     p_SCEG = geompy.MakeVertex(rtrou, rg, h + e + he/2.)
490     SCEG = geompy.GetFaceNearPoint(ECROU, p_SCEG)
491     geompy.addToStudyInFather(bride, SCEG, "SCEG")
492     
493     SCGE = geompy.GetFaceNearPoint(GOUJON, p_SCEG)
494     geompy.addToStudyInFather(bride, SCGE, "SCGE")
495     
496     p_2_3 = geompy.MakeVertexOnCurve(edge2, 0.5)
497     p_2_3_rota = geompy.MakeRotation(p_2_3, Vz, beta/2.)
498     M_JOI = geompy.GetFaceNearPoint(JOINT, p_2_3_rota)
499     geompy.addToStudyInFather(bride, M_JOI, "M_JOI")
500     
501     p_1_4 = geompy.MakeVertexOnCurve(edge4, 0.5)
502     p_1_4_rota = geompy.MakeRotation(p_1_4, Vz, beta/2.)
503     SCJB = geompy.GetFaceNearPoint(JOINT, p_1_4_rota)
504     geompy.addToStudyInFather(bride, SCJB, "SCJB")
505     
506     SCBJ = geompy.GetFaceNearPoint(BRIDE, p_1_4_rota)
507     geompy.addToStudyInFather(bride, SCBJ, "SCBJ")
508     
509     p1_rota = geompy.MakeRotation(p1, Vz, beta/2.)
510     Vint = geompy.MakeVector(p1_rota, p0)
511     list_M_INT = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
512                                 Vint, geompy.GEOM.ST_ONOUT)
513     
514     M_INT = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
515     geompy.addToStudyInFather(bride, M_INT, "M_INT")
516     
517     for face in list_M_INT:
518         f_ind_tmp = geompy.GetSubShapeID(bride, face)
519         geompy.AddObject(M_INT, f_ind_tmp)
520     
521     
522     p_13_14 = geompy.MakeVertexOnCurve(edge17, 0.5)
523     p_13_14_rota = geompy.MakeRotation(p_13_14, Vz, beta/2.)
524     M_TUB = geompy.GetFaceNearPoint(BRIDE, p_13_14_rota)
525     geompy.addToStudyInFather(bride, M_TUB, "M_TUB")
526     
527     p_M_GOU = geompy.MakeVertex(rtrou, rg/2., -j/2.)
528     M_GOU = geompy.GetFaceNearPoint(GOUJON, p_M_GOU)
529     geompy.addToStudyInFather(bride, M_GOU, "M_GOU")
530     
531     Vy_rota = geompy.MakeRotation(Vy, Vz, beta)
532     list_M_L_SA = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
533                                 Vy_rota, geompy.GEOM.ST_ONOUT)
534     
535     M_L_SA = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
536     geompy.addToStudyInFather(bride, M_L_SA, "M_L_SA")
537     
538     for face in list_M_L_SA:
539         f_ind_tmp = geompy.GetSubShapeID(bride, face)
540         geompy.AddObject(M_L_SA, f_ind_tmp)
541     
542     
543     moins_Vy = geompy.ChangeOrientation(Vy)
544     list_M_L_AA = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
545                                 moins_Vy, geompy.GEOM.ST_ONOUT)
546     
547     M_L_AA = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
548     geompy.addToStudyInFather(bride, M_L_AA, "M_L_AA")
549     
550     for face in list_M_L_AA:
551         f_ind_tmp = geompy.GetSubShapeID(bride, face)
552         geompy.AddObject(M_L_AA, f_ind_tmp)
553     
554                                 
555     list_M_EXT = []
556     
557     p_4_5 = geompy.MakeVertexOnCurve(edge5, 0.5)
558     p_4_5_rota = geompy.MakeRotation(p_4_5, Vz, beta/2.)
559     M_EXT1 = geompy.GetFaceNearPoint(bride, p_4_5_rota)
560     list_M_EXT.append(M_EXT1)
561     
562     p_M_EXT2 = geompy.MakeVertex((rex3 + rtrou-rt)/2., 0., hb)
563     p_M_EXT2_rota = geompy.MakeRotation(p_M_EXT2, Vz, beta/2.)
564     M_EXT2 = geompy.GetFaceNearPoint(bride, p_M_EXT2_rota)
565     list_M_EXT.append(M_EXT2)
566     
567     p_7_8 = geompy.MakeVertexOnCurve(edge9, 0.5)
568     p_7_8_rota = geompy.MakeRotation(p_7_8, Vz, beta/2.)
569     M_EXT3 = geompy.GetFaceNearPoint(bride, p_7_8_rota)
570     list_M_EXT.append(M_EXT3)
571     
572     p_M_EXT4 = geompy.MakeVertex((rext + rtrou+rrd)/2., 0., h)
573     p_M_EXT4_rota = geompy.MakeRotation(p_M_EXT4, Vz, beta/2.)
574     M_EXT4 = geompy.GetFaceNearPoint(bride, p_M_EXT4_rota)
575     list_M_EXT.append(M_EXT4)
576     
577     p_mid_conge = geompy.MakeVertexOnCurve(conge, 0.5)
578     p_mid_conge_rota = geompy.MakeRotation(p_mid_conge, Vz, beta/2.)
579     M_EXT5 = geompy.GetFaceNearPoint(bride, p_mid_conge_rota)
580     list_M_EXT.append(M_EXT5)
581     
582     p_9_12 = geompy.MakeVertexOnCurve(edge11, 0.5)
583     p_9_12_rota = geompy.MakeRotation(p_9_12, Vz, beta/2.)
584     M_EXT6 = geompy.GetFaceNearPoint(bride, p_9_12_rota)
585     list_M_EXT.append(M_EXT6)
586     
587     p_12_13 = geompy.MakeVertexOnCurve(edge18, 0.5)
588     p_12_13_rota = geompy.MakeRotation(p_12_13, Vz, beta/2.)
589     M_EXT7 = geompy.GetFaceNearPoint(bride, p_12_13_rota)
590     list_M_EXT.append(M_EXT7)
591     
592     p_haut_gouj = geompy.MakeTranslation(p_goujon_h, 0., (rg-pf)/2., 0.)
593     M_EXT8 = geompy.GetFaceNearPoint(bride, p_haut_gouj)
594     list_M_EXT.append(M_EXT8)
595     
596     p_filet_gouj = geompy.MakeVertexOnCurve(edge2_goujon, 0.5)
597     p_filet_gouj_rota = geompy.MakeRotation(p_filet_gouj, axe_goujon, math.pi/2.)
598     M_EXT9 = geompy.GetFaceNearPoint(bride, p_filet_gouj_rota)
599     list_M_EXT.append(M_EXT9)
600     
601     p_cote_gouj = geompy.MakeVertex(rtrou, rg, (h+e+he + h_goujon) / 2.)
602     M_EXT10 = geompy.GetFaceNearPoint(bride, p_cote_gouj)
603     list_M_EXT.append(M_EXT10)
604     
605     p_haut_ecrou = geompy.MakeVertex(rtrou, (rg+rec)/2., h + e + he)
606     M_EXT11 = geompy.GetFaceNearPoint(bride, p_haut_ecrou)
607     list_M_EXT.append(M_EXT11)
608     
609     p_cote_ecrou = geompy.MakeVertex(rtrou, rec, h + e + he/2.)
610     M_EXT12 = geompy.GetFaceNearPoint(bride, p_cote_ecrou)
611     list_M_EXT.append(M_EXT12)
612     
613     p_haut_rondelle = geompy.MakeVertex(rtrou, (rec+rrd)/2., h + e)
614     M_EXT13 = geompy.GetFaceNearPoint(bride, p_haut_rondelle)
615     list_M_EXT.append(M_EXT13)
616     
617     p_cote_rondelle = geompy.MakeVertex(rtrou, rrd, h + e/2.)
618     M_EXT14 = geompy.GetFaceNearPoint(bride, p_cote_rondelle)
619     list_M_EXT.append(M_EXT14)
620     
621     M_EXT = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
622     geompy.addToStudyInFather(bride, M_EXT, "M_EXT")
623     
624     for face in list_M_EXT:
625         f_ind_tmp = geompy.GetSubShapeID(bride, face)
626         geompy.AddObject(M_EXT, f_ind_tmp)
627     
628     time_3 = time.time()
629     print "Temps explosion des faces = ", (time_3-time_2)
630     
631     
632     # Détermination des différents points
633     
634     epsilon = 1e-7
635     
636     #P4
637     PJE_OUV = geompy.GetPoint(JOINT, rex3, 0., 0., epsilon)
638     geompy.addToStudyInFather(bride, PJE_OUV, "PJE_OUV")
639     
640     #P1
641     PJI_OUV = geompy.GetPoint(JOINT, rint, 0., 0., epsilon)
642     geompy.addToStudyInFather(bride, PJI_OUV, "PJI_OUV")
643     
644     #P4
645     PBE_OUV = geompy.GetPoint(BRIDE, rex3, 0., 0., epsilon)
646     geompy.addToStudyInFather(bride, PBE_OUV, "PBE_OUV")
647     
648     #P1
649     PBI_OUV = geompy.GetPoint(BRIDE, rint, 0., 0., epsilon)
650     geompy.addToStudyInFather(bride, PBI_OUV, "PBI_OUV")
651     
652     P_ECR = geompy.GetPoint(bride, rtrou + rt, 0., h + e, epsilon)
653     geompy.addToStudyInFather(bride, P_ECR, "P_ECR")
654     
655     P_GOU = geompy.GetPoint(bride, rtrou, 0., hb, epsilon)
656     geompy.addToStudyInFather(bride, P_GOU, "P_GOU")
657     
658     P_BRI = geompy.GetPoint(bride, rint + (rex3-rint)/3., 0., hb, epsilon)
659     geompy.addToStudyInFather(bride, P_BRI, "P_BRI")
660     
661     time_4 = time.time()
662     print "Temps explosion des vertices = ", (time_4-time_3)
663     
664     
665 #     #=============== MAILLAGE ======================
666 #     
667 #     AverageLength = (rex1-rint)/nrad
668 #     
669 #     # Creation du maillage
670 #     # --------------------
671 #     
672 #     maillageBride = smesh.Mesh(bride, "MeshBride")
673 #     
674 #     # Algorithmes et hypotheses globales
675 #     # ----------------------------------
676 #     
677 #     # 1D
678 #     
679 #     algo = maillageBride.Segment()
680 #     algo.LocalLength(AverageLength)
681 #     # On veut un maillage quadratique
682 #     algo.QuadraticMesh()
683 #     
684 #     # 2D
685 #     
686 #     algo = maillageBride.Triangle()
687 #     algo.LengthFromEdges()
688 #     
689 #     # 3D
690 #     
691 #     maillageBride.Tetrahedron(smesh.NETGEN)
692 #     
693 #     
694 #     # Calcul
695 #     # ------
696 #     
697 #     maillageBride.Compute()    
698 #     time_5 = time.time()    
699 #     print "Temps Maillage = ", (time_5-time_4)
700 #     
701 #     # Création des groupes
702 #     # --------------------
703 #     
704 #     maillageBride.Group(P_GOU, "P_GOU")
705 #     maillageBride.Group(PBI_OUV, "PBI_OUV")
706 #     maillageBride.Group(P_BRI, "P_BRI")
707 #     maillageBride.Group(PBE_OUV, "PBE_OUV")
708 #     maillageBride.Group(P_ECR, "P_ECR")
709 #     maillageBride.Group(PJI_OUV, "PJI_OUV")
710 #     maillageBride.Group(SCEG, "SCEG")
711 #     maillageBride.Group(SCGE, "SCGE")
712 #     maillageBride.Group(M_JOI, "M_JOI")
713 #     maillageBride.Group(SCJB, "SCJB")
714 #     maillageBride.Group(SCBJ, "SCBJ")
715 #     maillageBride.Group(M_EXT, "M_EXT")
716 #     maillageBride.Group(M_INT, "M_INT")
717 #     maillageBride.Group(M_TUB, "M_TUB")
718 #     maillageBride.Group(M_GOU, "M_GOU")
719 #     maillageBride.Group(M_L_SA, "M_L_SA")
720 #     maillageBride.Group(M_L_AA, "M_L_AA")
721 #     maillageBride.Group(GOUJON, "GOUJON")
722 #     maillageBride.Group(ROND, "ROND")
723 #     maillageBride.Group(ECROU, "ECROU")
724 #     maillageBride.Group(BRIDE, "BRIDE")
725 #     maillageBride.Group(JOINT, "JOINT")
726 #     maillageBride.Group(VTOT, "VTOT")
727 #             
728 #     time_6 = time.time()
729 #     
730 #     print "Temps Groupes Maillage = ", (time_6-time_5)      
731 #     # Mise à jour de l'arbre d'étude
732     
733     salome.sg.updateObjBrowser(1)
734     
735     
736     
737