]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
add: construction géométrie Cabri mergeto_V3_2_0_eltvisu_17nov06
authorsalome <>
Thu, 14 Sep 2006 18:16:46 +0000 (18:16 +0000)
committersalome <>
Thu, 14 Sep 2006 18:16:46 +0000 (18:16 +0000)
src/EFICASGUI/Makefile.in
src/EFICASGUI/cabri.py [new file with mode: 0644]
src/EFICASGUI/eficasSalome.py

index 73c0c469c51419f5865bc8fee3f55483195eab59..5ba540e374304fe23be60cac408b3943d5228469 100644 (file)
@@ -32,6 +32,7 @@ LIB_SERVER_IDL =
 PO_FILES =  EFICAS_msg_en.po EFICAS_icons.po
 
 EXPORT_PYSCRIPTS = \
+cabri.py\
 SelectMainShapeDiag_ui.py\
 EFICASGUI.py   \
 eficasSalome.py \
diff --git a/src/EFICASGUI/cabri.py b/src/EFICASGUI/cabri.py
new file mode 100644 (file)
index 0000000..71406b3
--- /dev/null
@@ -0,0 +1,737 @@
+# -*- coding: iso-8859-1 -*-
+"""
+outil métier Cabri pour Salome
+
+"""
+
+
+def tetra( name, **param ):
+    """
+    construction géométrie Cabri en Tetra    
+    """
+    #*************************************************************
+    # Paramètres physiques 
+    #*************************************************************    
+    # Nombre déléments circonférentiels (NBR_CIR)
+    ncir = param['ncir']
+    # Temps danalyse
+    temps = param['temps']
+    # Nombre déléments de lalésage (NBR_ALE)
+    nsect = param['nsect']
+    # Nombre déléments radiaux (NBR_RAD)
+    nrad = param['nrad']
+    # Nombre déléments verticaux (NBR_VER)
+    nver = param['nver']
+    
+    
+    # Epaisseur de la rondelle (GOUJ_E_RONDEL)
+    he = param['he']
+    # Hauteur de la bride (BRID_H)
+    hc1 = param['hc1']
+    # Epaisseur de lécrou (GOUJ_E_ECROU)
+    e = param['e']
+    # Nombre de goujons de la jonction boulonnée (GOUJ_N_GOUJON)
+    nbgouj = param['nbgouj']
+    # Diamètre des goujons de la jonction boulonnée (GOUJ_D_GOUJON)
+    dg = param['dg']
+    # Hauteur des alésages de la bride permettant lintroduction des goujons (BRID_H_ALESAG)
+    htrou = param['htrou']
+    # Epaisseur du joint au niveau de linterface détanchéité (ETAN_E_JOINT)
+    j = param['j']
+    # Hauteur de lépaulement de la bride au niveau de linterface détanchéité (BRID_H_EPAUL)
+    hb = param['hb']
+    # Rayon du congé de la bride (BRID_R_CONGE)
+    rcong = param['rcong']
+    # Position des alésages de la bride permettant lintroduction des goujons (BRID_P_ALESAG)
+    dtrou = param['dtrou']
+    # Profondeur (épaisseur) des filets des goujons (GOUJ_E_FILET)
+    pf = param['pf']
+    # Hauteur de conduite (TUBU_H)
+    hcg1 = param['hcg1']
+    # Diamètre intérieur de la bride (BRID_D_INT)
+    dint = param['dint']
+    # Diamètre extérieur de la bride (BRID_D_EXT)
+    dext = param['dext']
+    # Diamètre des alésages de la bride permettant lintroduction des goujons (BRID_D_ALESAG)
+    dt = param['dt']
+    # Diamètre de lécrou (GOUJ_D_ECROU)
+    dec = param['dec']
+    # Diamétre extérieur de la conduite (TUBU_D_EXT)
+    dex1 = param['dex1']
+    # Diamètre de la rondelle (GOUJ_D_RONDEL)
+    drd = param['drd']
+    # Diamètre de lépaulement de la bride au niveau de linterface détanchéité (BRID_D_EPAUL)
+    dex3 = param['dex3']
+    # Position (diamètre) du congé de la bride (BRID_D_CONGE)
+    dex2 = param['dex2']
+    
+    
+    
+    import math
+    import time
+    
+    # imports spécifiques à salome:
+    
+    import geompy
+    import smesh
+    import salome
+    #Import de l'interface graphique de GEOM (nécessaire pour affecter de la couleur)
+    gg = salome.ImportComponentGUI("GEOM")
+    
+    time_init = time.time()
+    
+    #**************************                                                   
+    # test sur les parametres *                                                   
+    #**************************
+    
+    #opti trac psc
+    
+    nrad = abs(nrad)
+    ncir = abs(ncir)
+    nver = abs(nver)
+    temps = abs(temps)
+    nsect = abs(nsect)
+    nbgouj = abs(nbgouj)
+    dint = abs(dint)
+    dex1 = abs(dex1)
+    dex2 = abs(dex2)
+    dex3 = abs(dex3)
+    dtrou = abs(dtrou)
+    dext = abs(dext)
+    dt = abs(dt)
+    drd = abs(drd)
+    dg = abs(dg)
+    dec = abs(dec)
+    rcong = abs(rcong)
+    he =  abs(he)
+    e = abs(e)
+    j = abs(j)
+    hc1 = abs(hc1)
+    hcg1 = abs(hcg1)
+    hb = abs(hb)
+    htrou = abs(htrou)
+    pf = abs(pf)
+    j = abs(j)
+    
+    if (nbgouj <= 2):
+        nbgouj = 2
+    
+    if ((nbgouj == 2) and (ncir <= 4)):
+        ncir = 4
+    
+    if (dex1 <= dint):
+        dex1 = dint+10.
+    
+    if (dex2 <= dex1):
+        dex2 = dex1+20
+    
+    if (dg >= dt):
+        dg = dt-2.
+    
+    if (dec <= dt):
+        if (drd > dt):
+            dec = (dt+drd)/2
+        else:
+            dec = dt+2
+            drd = dec+2
+    
+    if ((dtrou-dt) <= dex2):
+        if (dtrou <= dex2):
+            dtrou = dex2+(2*dt)
+        else:
+            dt = (dtrou-dex2)/2
+    
+    if (dex3 < dint):
+        dex3 = dtrou-drd
+    if (dex3 > (dtrou-dt)):
+        dex3 = dtrou-drd
+    
+    if ((dtrou+drd) <= (2*dtrou-dex3)):
+        a = 2*dtrou-dex3
+    else:
+        a = dtrou+drd
+    if (dext < a):
+        dext = a 
+    
+    if (hb >= hc1):
+        hb = 1
+    if (htrou >= hc1):
+        htrou = hc1/2
+    if ((hb+htrou) >= hc1):
+        hb = (hc1-htrou)/10
+    
+    if (rcong >= 15.):
+        rcong = 15.
+    
+    rg = dg / 2.
+    if (pf >= rg):
+        pf = rg/2.
+    
+    if (nrad <= 0):
+        nrad = 1
+    
+    if (ncir <= 1):
+        ncir = 2
+    
+    if (nver <= 0):
+        nver = 1
+    
+    if (nsect <= 3):
+        nsect = 4
+    
+    if (temps <= 0):
+        nsect = 3
+    
+    #**************************                                                   
+    # parametres intrinsèques *                                                   
+    #**************************
+    #opti dime 3 elem cub8                           
+    #dens 1
+    
+    # critere pour elim                                                     
+    crit = 0.0001                                                              
+    
+    # rayons
+    rint = dint / 2.
+    rex1 = dex1 / 2.
+    rex2 = dex2 / 2.
+    rex3 = dex3 / 2.
+    rtrou = dtrou / 2.
+    rext = dext / 2.
+    rt = dt / 2.
+    rrd = drd / 2.
+    rg = dg / 2.
+    rec = dec / 2.
+    
+    # angle de coupe
+    stet = rrd/rtrou 
+    ctet = stet**2 
+    ctet = 1-ctet 
+    ctet = ctet**0.5 
+    tet = stet/ctet 
+    tet = math.atan(tet)
+    beta = math.pi / nbgouj
+    # if (tet >= beta):
+    #     tet = 1.1*tet
+    #     beta = tet 
+    # else:
+    #     if ((beta-tet) < (0.1*tet)):
+    #         tet = beta
+    #     else:
+    #         tet = (tet+beta)/2 
+    
+    # hauteurs                                                        
+    ht = hc1 + hcg1;                                                           
+    h = (hb + htrou);
+    mj = 0-j;     
+    
+    p0 = geompy.MakeVertex(0., 0., 0.)
+    
+    Vx = geompy.MakeVectorDXDYDZ(1., 0., 0.)
+    Vy = geompy.MakeVectorDXDYDZ(0., 1., 0.)
+    Vz = geompy.MakeVectorDXDYDZ(0., 0., 1.)
+    
+    
+    p1 = geompy.MakeVertex(rint, 0., 0.)
+    p2 = geompy.MakeVertex(rint, 0., -j/2.)
+    p3 = geompy.MakeVertex(rex3, 0., -j/2.)
+    p4 = geompy.MakeVertex(rex3, 0., 0.)
+    
+    edge1 = geompy.MakeEdge(p1,p2)
+    edge2 = geompy.MakeEdge(p2,p3)
+    edge3 = geompy.MakeEdge(p3,p4)
+    edge4 = geompy.MakeEdge(p4,p1)
+    
+    wire_joint = geompy.MakeWire([edge1, edge2, edge3, edge4])
+    face_joint = geompy.MakeFace(wire_joint,1)
+    
+    p5 = geompy.MakeVertex(rex3, 0., hb)
+    
+    edge5 = geompy.MakeEdge(p4, p5)
+    
+    p7 = geompy.MakeVertex(rext, 0., hb)
+    p8 = geompy.MakeVertex(rext, 0., hb + htrou)
+    p9 = geompy.MakeVertex(rex2, 0., hb + htrou)
+    
+    edge6 = geompy.MakeEdge(p5, p7)
+    edge9 = geompy.MakeEdge(p7, p8)
+    # construction du congé
+    # Rq: voir ce que l'on fait si la rondelle s'appuye sur le congé                    
+    
+    an = math.atan ((hc1-h)/(rex2-rex1)) 
+    alpha = (math.pi - an)/2.
+    
+    conge_p1 = geompy.MakeVertex(rex2 + rcong/math.tan(alpha), 0., h)
+    conge_centre = geompy.MakeVertex(rex2 + rcong/math.tan(alpha), 0., h + rcong)
+    
+    gamma = math.pi - 2*alpha
+    
+    conge_axe = geompy.MakePrismVecH(conge_centre, Vy, 1)
+    conge = geompy.MakeRevolution(conge_p1, conge_axe, gamma)
+    # geompy.addToStudy(conge, "conge")
+    
+    conge_p2 = geompy.MakeRotation(conge_p1, conge_axe, gamma)
+    
+    ## fin construction du congé
+    
+    #avant le congé
+    edge10 = geompy.MakeEdge(p8, conge_p1)
+    # après le congé
+    p12 = geompy.MakeVertex(rex1, 0., hc1)
+    edge11 = geompy.MakeEdge(conge_p2, p12)
+    
+    p11 = geompy.MakeVertex(rint, 0., hc1)
+    p13 = geompy.MakeVertex(rex1, 0., hc1 + hcg1)
+    p14 = geompy.MakeVertex(rint, 0., hc1 + hcg1)
+    
+    edge16 = geompy.MakeEdge(p11, p14)
+    edge17 = geompy.MakeEdge(p14, p13)
+    edge18 = geompy.MakeEdge(p13, p12)
+    
+    edge19 = geompy.MakeEdge(p11, p1)
+    
+    wire_front = geompy.MakeWire([edge4, edge5, edge6, edge9, edge10, conge,
+                                edge11, edge18, edge17, edge16, edge19])
+    
+    face_front = geompy.MakeFace(wire_front,1)
+    # geompy.addToStudy(face_front, "face_front")
+    # on ajoutera le joint après la révolution
+    
+    
+    # Création du bloc solide
+    
+    bride_revol = geompy.MakeRevolution(face_front, Vz, beta)
+    # geompy.addToStudy(bride_revol, "bride_revol")
+    
+    # outil de coupe
+    p_goujon = geompy.MakeVertex(rtrou, 0., -j/2.)
+    cut_tool = geompy.MakeCylinder(p_goujon, Vz, rt, hc1 + j)
+    # geompy.addToStudy(cut_tool, "cut_tool")
+    
+    # coupe
+    bride_cut = geompy.MakeCut(bride_revol, cut_tool)
+    # geompy.addToStudy(bride_cut, "bride_cut")
+    
+    
+    
+    # goujon
+    axe_goujon = geompy.MakePrismVecH(p_goujon, Vz, 1.)
+    p_rayon_goujon = geompy.MakeTranslation(p_goujon, rg, 0., 0.)
+    rayon_goujon = geompy.MakeEdge(p_goujon, p_rayon_goujon)
+    # base_goujon = geompy.MakeRevolution(rayon_goujon, axe_goujon, math.pi)
+    h_goujon = j/2. + h + e + 1.5 * he
+    p1_filet_goujon = geompy.MakeVertex(rtrou + rg, 0., h_goujon - pf)
+    p2_filet_goujon = geompy.MakeVertex(rtrou + rg - pf, 0., h_goujon)
+    p_goujon_h = geompy.MakeVertex(rtrou, 0., h_goujon)
+    edge1_goujon = geompy.MakeEdge(p_rayon_goujon, p1_filet_goujon)
+    edge2_goujon = geompy.MakeEdge(p1_filet_goujon, p2_filet_goujon)
+    edge3_goujon = geompy.MakeEdge(p2_filet_goujon, p_goujon_h)
+    wire_goujon = geompy.MakeWire([rayon_goujon, edge1_goujon, edge2_goujon, edge3_goujon])
+    face_ext_goujon = geompy.MakeRevolution(wire_goujon, axe_goujon, math.pi)
+    # geompy.addToStudy(face_ext_goujon, "face_ext_goujon")
+    wire_gauche_goujon = geompy.MakeRotation(wire_goujon, axe_goujon, math.pi)
+    
+    p2_filet_goujon_g = geompy.MakeRotation(p2_filet_goujon, axe_goujon, math.pi)
+    p_rayon_goujon_g = geompy.MakeTranslation(p_goujon, - rg, 0., 0.)
+    diametre_haut = geompy.MakeEdge(p2_filet_goujon_g, p2_filet_goujon)
+    diametre_bas = geompy.MakeEdge(p_rayon_goujon_g, p_rayon_goujon)
+    edge1_goujon_g = geompy.MakeRotation(edge1_goujon, axe_goujon, math.pi)
+    edge2_goujon_g = geompy.MakeRotation(edge2_goujon, axe_goujon, math.pi)
+    wire_face_int_goujon2 = geompy.MakeWire([diametre_bas, edge1_goujon, edge2_goujon, 
+                diametre_haut, edge1_goujon_g, edge2_goujon_g])
+    # geompy.addToStudy(wire_face_int_goujon2, "wire_face_int_goujon2")
+    face_int_goujon = geompy.MakeFace(wire_face_int_goujon2, 1)
+    
+    shell_goujon = geompy.MakeShell([face_ext_goujon, face_int_goujon])
+    goujon = geompy.MakeSolid([shell_goujon])
+    # geompy.addToStudy(goujon, "goujon")
+    
+    # ecrou
+    p1_ecrou = geompy.MakeVertex(rtrou + rg, 0., hb + htrou + e)
+    p2_ecrou = geompy.MakeVertex(rtrou + rec, 0., hb + htrou + e)
+    rayon_ecrou = geompy.MakeEdge(p1_ecrou, p2_ecrou)
+    base_ecrou = geompy.MakeRevolution(rayon_ecrou, axe_goujon, math.pi)
+    ecrou = geompy.MakePrismVecH(base_ecrou, Vz, he)
+    # geompy.addToStudy(ecrou, "ecrou")
+    
+    # assemblage goujon, ecrou:
+    goujon_ecrou = geompy.MakeCompound([goujon, ecrou])
+    # geompy.addToStudy(goujon_ecrou, "goujon_ecrou")
+    
+    
+    # rondelle
+    p1_rondelle = geompy.MakeVertex(rtrou + rt, 0., hb + htrou)
+    p2_rondelle = geompy.MakeVertex(rtrou + rrd, 0., hb + htrou)
+    rayon_rondelle = geompy.MakeEdge(p1_rondelle, p2_rondelle)
+    # base_rondelle = geompy.MakeRevolution(rayon_rondelle, axe_goujon, math.pi)
+    face_rondelle = geompy.MakePrismVecH(rayon_rondelle, Vz, e)
+    rondelle = geompy.MakeRevolution(face_rondelle, axe_goujon, math.pi)
+    # geompy.addToStudy(rondelle, "rondelle")
+    
+    
+    # assemblage goujon-ecrou avec rondelle
+    goujon_ecrou_rondelle = geompy.MakeFuse(goujon_ecrou, rondelle)
+    # geompy.addToStudy(goujon_ecrou_rondelle, "goujon_ecrou_rondelle")
+    
+    
+    # assemblage sur la piece principale
+    bride_but_joint_tmp = geompy.MakeFuse(bride_cut, goujon_ecrou_rondelle)
+    # geompy.addToStudy(bride_but_joint_tmp, "bride_but_joint_tmp")
+    
+    # On partitionne avec la rondelle pour récupérer les solides physiques
+    bride_but_joint = geompy.MakePartition([bride_but_joint_tmp], [rondelle])
+    # geompy.addToStudy(bride_but_joint, "bride_but_joint")
+    
+    # on ajoute le joint (compound pour que les faces communes soient en double)
+    joint = geompy.MakeRevolution(face_joint, Vz, beta)
+    # geompy.addToStudy(joint, "joint")
+    
+    bride_tmp = geompy.MakeCompound([bride_but_joint, joint])
+    # geompy.addToStudy(bride_tmp, "bride_tmp")
+    
+    time_0 = time.time()
+    print "Temps Geometrie = ", (time_0-time_init)
+    
+    
+    # on partitionne pour obtenir certains points (P_BRI, P_GOU)
+    p6 = geompy.MakeVertex(rint, 0., hb)
+    edge_part = geompy.MakeEdge(p6, p7)
+    plan_part = geompy.MakeRevolution(edge_part, Vz, beta)
+    bride_part = geompy.MakePartition([bride_tmp], [plan_part])
+    # geompy.addToStudy(bride_part, "bride_part")
+    
+    edge_p5_p6 = geompy.GetEdge(bride_part, p5, p6)
+    edge_p5_p6_ind = geompy.GetSubShapeID(bride_part, edge_p5_p6)
+    bride_vertex1 = geompy.DivideEdge(bride_part, edge_p5_p6_ind, 1./3., 1)
+    # geompy.addToStudy(bride_vertex1, "bride_vertex1")
+    
+    p_gouj_part1 = geompy.MakeVertex(rtrou - rg, 0., hb)
+    p_gouj_part2 = geompy.MakeVertex(rtrou + rg, 0., hb)
+    p_gouj_mid = geompy.MakeVertex(rtrou, 0., hb)
+    edge_gouj_part = geompy.GetEdgeNearPoint(bride_vertex1, p_gouj_mid)
+    edge_gouj_part_ind = geompy.GetSubShapeID(bride_vertex1, edge_gouj_part)
+    bride = geompy.DivideEdge(bride_vertex1, edge_gouj_part_ind, 0.5, 1)
+#     geompy.addToStudy(bride, "bride")
+    geompy.addToStudy(bride, name )
+    
+    
+    time_1 = time.time()
+    print "Temps Partition = ", (time_1-time_0)
+    
+    # Détermination des différents solides et affichage en couleur
+    
+    idToDisplay=[]
+    
+    GOUJON1 = geompy.GetBlockNearPoint(bride, p_goujon)
+    GOUJON2 = geompy.GetBlockNearPoint(bride, p_goujon_h)
+    list_GOUJON = [GOUJON1, GOUJON2]
+    
+    GOUJON = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
+    id_GOUJON = geompy.addToStudyInFather(bride, GOUJON, "GOUJON")
+    idToDisplay.append(id_GOUJON)
+    
+    for solid in list_GOUJON:
+        f_ind_tmp = geompy.GetSubShapeID(bride, solid)
+        geompy.AddObject(GOUJON, f_ind_tmp)
+    
+    
+    JOINT = geompy.GetBlockNearPoint(bride, p2)
+    id_JOINT = geompy.addToStudyInFather(bride, JOINT, "JOINT")
+    idToDisplay.append(id_JOINT)
+    
+    p_rondelle = geompy.MakeTranslation(p2_rondelle, 0., 0., e)
+    ROND = geompy.GetBlockNearPoint(bride, p_rondelle)
+    id_ROND = geompy.addToStudyInFather(bride, ROND, "ROND")
+    idToDisplay.append(id_ROND)
+    
+    p_ecrou = geompy.MakeTranslation(p2_ecrou, 0., 0., he)
+    ECROU = geompy.GetBlockNearPoint(bride, p_ecrou)
+    id_ECROU = geompy.addToStudyInFather(bride, ECROU, "ECROU")
+    idToDisplay.append(id_ECROU)
+    
+    list_BRIDE = []
+    
+    BRIDE1 = geompy.GetBlockNearPoint(bride, p14)
+    list_BRIDE.append(BRIDE1)
+    
+    p_BRIDE2 = geompy.MakeVertex((rint+rex3)/2., 0., hb/2.)
+    p_BRIDE2_rota = geompy.MakeRotation(p_BRIDE2, Vz, beta/2.)
+    BRIDE2 = geompy.GetBlockNearPoint(bride, p_BRIDE2_rota)
+    list_BRIDE.append(BRIDE2)
+    
+    BRIDE = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
+    id_BRIDE = geompy.addToStudyInFather(bride, BRIDE, "BRIDE")
+    idToDisplay.append(id_BRIDE)
+    
+    for solid in list_BRIDE:
+        f_ind_tmp = geompy.GetSubShapeID(bride, solid)
+        geompy.AddObject(BRIDE, f_ind_tmp)
+    
+    RedGreenBlue = [[189,97,0],[255,215,0],[255,0,0],[0,176,0],[0,0,255]]
+    
+    for i in range(len(idToDisplay)):
+        gg.createAndDisplayGO(idToDisplay[i])
+        gg.setDisplayMode(idToDisplay[i],1)
+        gg.setColor(idToDisplay[i],RedGreenBlue[i][0],RedGreenBlue[i][1],RedGreenBlue[i][2])
+    
+    list_VTOT = geompy.SubShapeAllSorted(bride, geompy.ShapeType["SOLID"])
+    VTOT = geompy.CreateGroup(bride, geompy.ShapeType["SOLID"])
+    for solid in list_VTOT:
+        f_ind_tmp = geompy.GetSubShapeID(bride, solid)
+        geompy.AddObject(VTOT, f_ind_tmp)
+    geompy.addToStudyInFather(bride, VTOT, "VTOT")
+        
+    time_2 = time.time()
+    print "Temps affichage solides = ", (time_2-time_1)
+    
+    # Détermination des différentes faces
+    
+    p_SCEG = geompy.MakeVertex(rtrou, rg, h + e + he/2.)
+    SCEG = geompy.GetFaceNearPoint(ECROU, p_SCEG)
+    geompy.addToStudyInFather(bride, SCEG, "SCEG")
+    
+    SCGE = geompy.GetFaceNearPoint(GOUJON, p_SCEG)
+    geompy.addToStudyInFather(bride, SCGE, "SCGE")
+    
+    p_2_3 = geompy.MakeVertexOnCurve(edge2, 0.5)
+    p_2_3_rota = geompy.MakeRotation(p_2_3, Vz, beta/2.)
+    M_JOI = geompy.GetFaceNearPoint(JOINT, p_2_3_rota)
+    geompy.addToStudyInFather(bride, M_JOI, "M_JOI")
+    
+    p_1_4 = geompy.MakeVertexOnCurve(edge4, 0.5)
+    p_1_4_rota = geompy.MakeRotation(p_1_4, Vz, beta/2.)
+    SCJB = geompy.GetFaceNearPoint(JOINT, p_1_4_rota)
+    geompy.addToStudyInFather(bride, SCJB, "SCJB")
+    
+    SCBJ = geompy.GetFaceNearPoint(BRIDE, p_1_4_rota)
+    geompy.addToStudyInFather(bride, SCBJ, "SCBJ")
+    
+    p1_rota = geompy.MakeRotation(p1, Vz, beta/2.)
+    Vint = geompy.MakeVector(p1_rota, p0)
+    list_M_INT = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
+                                Vint, geompy.GEOM.ST_ONOUT)
+    
+    M_INT = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
+    geompy.addToStudyInFather(bride, M_INT, "M_INT")
+    
+    for face in list_M_INT:
+        f_ind_tmp = geompy.GetSubShapeID(bride, face)
+        geompy.AddObject(M_INT, f_ind_tmp)
+    
+    
+    p_13_14 = geompy.MakeVertexOnCurve(edge17, 0.5)
+    p_13_14_rota = geompy.MakeRotation(p_13_14, Vz, beta/2.)
+    M_TUB = geompy.GetFaceNearPoint(BRIDE, p_13_14_rota)
+    geompy.addToStudyInFather(bride, M_TUB, "M_TUB")
+    
+    p_M_GOU = geompy.MakeVertex(rtrou, rg/2., -j/2.)
+    M_GOU = geompy.GetFaceNearPoint(GOUJON, p_M_GOU)
+    geompy.addToStudyInFather(bride, M_GOU, "M_GOU")
+    
+    Vy_rota = geompy.MakeRotation(Vy, Vz, beta)
+    list_M_L_SA = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
+                                Vy_rota, geompy.GEOM.ST_ONOUT)
+    
+    M_L_SA = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
+    geompy.addToStudyInFather(bride, M_L_SA, "M_L_SA")
+    
+    for face in list_M_L_SA:
+        f_ind_tmp = geompy.GetSubShapeID(bride, face)
+        geompy.AddObject(M_L_SA, f_ind_tmp)
+    
+    
+    moins_Vy = geompy.ChangeOrientation(Vy)
+    list_M_L_AA = geompy.GetShapesOnPlane(bride, geompy.ShapeType["FACE"],
+                                moins_Vy, geompy.GEOM.ST_ONOUT)
+    
+    M_L_AA = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
+    geompy.addToStudyInFather(bride, M_L_AA, "M_L_AA")
+    
+    for face in list_M_L_AA:
+        f_ind_tmp = geompy.GetSubShapeID(bride, face)
+        geompy.AddObject(M_L_AA, f_ind_tmp)
+    
+                                
+    list_M_EXT = []
+    
+    p_4_5 = geompy.MakeVertexOnCurve(edge5, 0.5)
+    p_4_5_rota = geompy.MakeRotation(p_4_5, Vz, beta/2.)
+    M_EXT1 = geompy.GetFaceNearPoint(bride, p_4_5_rota)
+    list_M_EXT.append(M_EXT1)
+    
+    p_M_EXT2 = geompy.MakeVertex((rex3 + rtrou-rt)/2., 0., hb)
+    p_M_EXT2_rota = geompy.MakeRotation(p_M_EXT2, Vz, beta/2.)
+    M_EXT2 = geompy.GetFaceNearPoint(bride, p_M_EXT2_rota)
+    list_M_EXT.append(M_EXT2)
+    
+    p_7_8 = geompy.MakeVertexOnCurve(edge9, 0.5)
+    p_7_8_rota = geompy.MakeRotation(p_7_8, Vz, beta/2.)
+    M_EXT3 = geompy.GetFaceNearPoint(bride, p_7_8_rota)
+    list_M_EXT.append(M_EXT3)
+    
+    p_M_EXT4 = geompy.MakeVertex((rext + rtrou+rrd)/2., 0., h)
+    p_M_EXT4_rota = geompy.MakeRotation(p_M_EXT4, Vz, beta/2.)
+    M_EXT4 = geompy.GetFaceNearPoint(bride, p_M_EXT4_rota)
+    list_M_EXT.append(M_EXT4)
+    
+    p_mid_conge = geompy.MakeVertexOnCurve(conge, 0.5)
+    p_mid_conge_rota = geompy.MakeRotation(p_mid_conge, Vz, beta/2.)
+    M_EXT5 = geompy.GetFaceNearPoint(bride, p_mid_conge_rota)
+    list_M_EXT.append(M_EXT5)
+    
+    p_9_12 = geompy.MakeVertexOnCurve(edge11, 0.5)
+    p_9_12_rota = geompy.MakeRotation(p_9_12, Vz, beta/2.)
+    M_EXT6 = geompy.GetFaceNearPoint(bride, p_9_12_rota)
+    list_M_EXT.append(M_EXT6)
+    
+    p_12_13 = geompy.MakeVertexOnCurve(edge18, 0.5)
+    p_12_13_rota = geompy.MakeRotation(p_12_13, Vz, beta/2.)
+    M_EXT7 = geompy.GetFaceNearPoint(bride, p_12_13_rota)
+    list_M_EXT.append(M_EXT7)
+    
+    p_haut_gouj = geompy.MakeTranslation(p_goujon_h, 0., (rg-pf)/2., 0.)
+    M_EXT8 = geompy.GetFaceNearPoint(bride, p_haut_gouj)
+    list_M_EXT.append(M_EXT8)
+    
+    p_filet_gouj = geompy.MakeVertexOnCurve(edge2_goujon, 0.5)
+    p_filet_gouj_rota = geompy.MakeRotation(p_filet_gouj, axe_goujon, math.pi/2.)
+    M_EXT9 = geompy.GetFaceNearPoint(bride, p_filet_gouj_rota)
+    list_M_EXT.append(M_EXT9)
+    
+    p_cote_gouj = geompy.MakeVertex(rtrou, rg, (h+e+he + h_goujon) / 2.)
+    M_EXT10 = geompy.GetFaceNearPoint(bride, p_cote_gouj)
+    list_M_EXT.append(M_EXT10)
+    
+    p_haut_ecrou = geompy.MakeVertex(rtrou, (rg+rec)/2., h + e + he)
+    M_EXT11 = geompy.GetFaceNearPoint(bride, p_haut_ecrou)
+    list_M_EXT.append(M_EXT11)
+    
+    p_cote_ecrou = geompy.MakeVertex(rtrou, rec, h + e + he/2.)
+    M_EXT12 = geompy.GetFaceNearPoint(bride, p_cote_ecrou)
+    list_M_EXT.append(M_EXT12)
+    
+    p_haut_rondelle = geompy.MakeVertex(rtrou, (rec+rrd)/2., h + e)
+    M_EXT13 = geompy.GetFaceNearPoint(bride, p_haut_rondelle)
+    list_M_EXT.append(M_EXT13)
+    
+    p_cote_rondelle = geompy.MakeVertex(rtrou, rrd, h + e/2.)
+    M_EXT14 = geompy.GetFaceNearPoint(bride, p_cote_rondelle)
+    list_M_EXT.append(M_EXT14)
+    
+    M_EXT = geompy.CreateGroup(bride, geompy.ShapeType["FACE"])
+    geompy.addToStudyInFather(bride, M_EXT, "M_EXT")
+    
+    for face in list_M_EXT:
+        f_ind_tmp = geompy.GetSubShapeID(bride, face)
+        geompy.AddObject(M_EXT, f_ind_tmp)
+    
+    time_3 = time.time()
+    print "Temps explosion des faces = ", (time_3-time_2)
+    
+    
+    # Détermination des différents points
+    
+    epsilon = 1e-7
+    
+    #P4
+    PJE_OUV = geompy.GetPoint(JOINT, rex3, 0., 0., epsilon)
+    geompy.addToStudyInFather(bride, PJE_OUV, "PJE_OUV")
+    
+    #P1
+    PJI_OUV = geompy.GetPoint(JOINT, rint, 0., 0., epsilon)
+    geompy.addToStudyInFather(bride, PJI_OUV, "PJI_OUV")
+    
+    #P4
+    PBE_OUV = geompy.GetPoint(BRIDE, rex3, 0., 0., epsilon)
+    geompy.addToStudyInFather(bride, PBE_OUV, "PBE_OUV")
+    
+    #P1
+    PBI_OUV = geompy.GetPoint(BRIDE, rint, 0., 0., epsilon)
+    geompy.addToStudyInFather(bride, PBI_OUV, "PBI_OUV")
+    
+    P_ECR = geompy.GetPoint(bride, rtrou + rt, 0., h + e, epsilon)
+    geompy.addToStudyInFather(bride, P_ECR, "P_ECR")
+    
+    P_GOU = geompy.GetPoint(bride, rtrou, 0., hb, epsilon)
+    geompy.addToStudyInFather(bride, P_GOU, "P_GOU")
+    
+    P_BRI = geompy.GetPoint(bride, rint + (rex3-rint)/3., 0., hb, epsilon)
+    geompy.addToStudyInFather(bride, P_BRI, "P_BRI")
+    
+    time_4 = time.time()
+    print "Temps explosion des vertices = ", (time_4-time_3)
+    
+    
+#     #=============== MAILLAGE ======================
+#     
+#     AverageLength = (rex1-rint)/nrad
+#     
+#     # Creation du maillage
+#     # --------------------
+#     
+#     maillageBride = smesh.Mesh(bride, "MeshBride")
+#     
+#     # Algorithmes et hypotheses globales
+#     # ----------------------------------
+#     
+#     # 1D
+#     
+#     algo = maillageBride.Segment()
+#     algo.LocalLength(AverageLength)
+#     # On veut un maillage quadratique
+#     algo.QuadraticMesh()
+#     
+#     # 2D
+#     
+#     algo = maillageBride.Triangle()
+#     algo.LengthFromEdges()
+#     
+#     # 3D
+#     
+#     maillageBride.Tetrahedron(smesh.NETGEN)
+#     
+#     
+#     # Calcul
+#     # ------
+#     
+#     maillageBride.Compute()    
+#     time_5 = time.time()    
+#     print "Temps Maillage = ", (time_5-time_4)
+#     
+#     # Création des groupes
+#     # --------------------
+#     
+#     maillageBride.Group(P_GOU, "P_GOU")
+#     maillageBride.Group(PBI_OUV, "PBI_OUV")
+#     maillageBride.Group(P_BRI, "P_BRI")
+#     maillageBride.Group(PBE_OUV, "PBE_OUV")
+#     maillageBride.Group(P_ECR, "P_ECR")
+#     maillageBride.Group(PJI_OUV, "PJI_OUV")
+#     maillageBride.Group(SCEG, "SCEG")
+#     maillageBride.Group(SCGE, "SCGE")
+#     maillageBride.Group(M_JOI, "M_JOI")
+#     maillageBride.Group(SCJB, "SCJB")
+#     maillageBride.Group(SCBJ, "SCBJ")
+#     maillageBride.Group(M_EXT, "M_EXT")
+#     maillageBride.Group(M_INT, "M_INT")
+#     maillageBride.Group(M_TUB, "M_TUB")
+#     maillageBride.Group(M_GOU, "M_GOU")
+#     maillageBride.Group(M_L_SA, "M_L_SA")
+#     maillageBride.Group(M_L_AA, "M_L_AA")
+#     maillageBride.Group(GOUJON, "GOUJON")
+#     maillageBride.Group(ROND, "ROND")
+#     maillageBride.Group(ECROU, "ECROU")
+#     maillageBride.Group(BRIDE, "BRIDE")
+#     maillageBride.Group(JOINT, "JOINT")
+#     maillageBride.Group(VTOT, "VTOT")
+#             
+#     time_6 = time.time()
+#     
+#     print "Temps Groupes Maillage = ", (time_6-time_5)      
+#     # Mise à jour de l'arbre d'étude
+    
+    salome.sg.updateObjBrowser(1)
+    
+    
+    
+    
\ No newline at end of file
index e2142cd71a6abdc042e134e1bda9266f88763919..c303be4a93acaef736570caa44707e7fd798e54c 100644 (file)
@@ -408,7 +408,7 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
         return groupNo
 
         
-    #-----------------------  LISTE DES NOUVEAUX CAS D'UTILISATIONS -----------
+    #-----------------------  LISTE DES NOUVEAUX CAS D'UTILISATIONS -----------    
     def selectGroupFromSalome( self, kwType ):
         """
         Sélection d'élément(s) d'une géométrie ( sub-shape ) ou d'élément(s) de maillage ( groupe de maille) à partir de l'arbre salome
@@ -591,11 +591,19 @@ class MyEficas( Tkinter.Toplevel, eficas.EFICAS ):
           print "fin crreConfigTxt"    
         """
         pass #CS_pbruno à implémenter
+           
+           
+    def buildCabriGeom( self, name, **param ):
+        """
+        visualisation dans GEOM d'une géométrie CABRI
+        """
+        import cabri        
+        qt.QApplication.setOverrideCursor( qt.QCursor.waitCursor )
+        cabri.tetra( name, **param )
+        qt.QApplication.restoreOverrideCursor()
         
         
-    
-        
-        
+           
         
 #-------------------------------------------------------------------------------------------------------        
 #           Point d'entré lancement EFICAS