Salome HOME
merge manuel developpements Olivier Hoareau
authorPaul RASCLE <paul.rascle@edf.fr>
Mon, 25 Aug 2014 15:26:29 +0000 (17:26 +0200)
committerPaul RASCLE <paul.rascle@edf.fr>
Mon, 25 Aug 2014 15:26:29 +0000 (17:26 +0200)
22 files changed:
src/Tools/blocFissure/AREextradosLauncher.py [new file with mode: 0644]
src/Tools/blocFissure/AREintradosLauncher.py [new file with mode: 0644]
src/Tools/blocFissure/exemple2.py
src/Tools/blocFissure/fissureLauncher.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/creeZoneDefautDansObjetSain.py
src/Tools/blocFissure/gmu/creeZoneDefautFilling.py
src/Tools/blocFissure/gmu/fusionMaillageAttributionDefaut.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/genereMeshCalculZoneDefaut.py
src/Tools/blocFissure/gmu/insereFissureGenerale.py
src/Tools/blocFissure/gmu/listOfExtraFunctions.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/peauInterne.py
src/Tools/blocFissure/gmu/quadranglesToShapeNoCorner.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/quadranglesToShapeWithCorner.py [new file with mode: 0644]
src/Tools/blocFissure/ihm/fissureCoude_plugin.py
src/Tools/blocFissure/ihm/fissureCoude_ui.py [new file with mode: 0644]
src/Tools/blocFissure/ihm/fissureGenerale_ui.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurCasTestCoinTriple.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurCasTestCoinTripleMilieu.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurCasTestCoinTripleTransverse.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurSoudureArrondieTest.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurSoudureViveTest.py [new file with mode: 0644]
src/Tools/blocFissure/lanceurTestAubry.py [new file with mode: 0644]

diff --git a/src/Tools/blocFissure/AREextradosLauncher.py b/src/Tools/blocFissure/AREextradosLauncher.py
new file mode 100644 (file)
index 0000000..f256b4c
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+""" FissureLauncher:
+    Permet de lancer le script 'casStandard'
+    en fonction des paramètres contenus dans 'dicoParams'. """
+
+#import sys
+import salome
+
+#import os
+#from blocFissure import gmu
+from blocFissure.gmu import initLog
+initLog.setDebug()
+#initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'ARE_sain_lin_rotated.med'
+crack = 'fissureExtrados.brep'
+
+dicoParams = dict(nomCas            = 'fissTuyau',
+                  maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFissIds       = [4],
+                  lgInfluence       = 12,
+                  meshBrep          = (0.05, 2.0),
+                  rayonPipe         = 1.0,
+                  lenSegPipe        = 1, #9,
+                  nbSegRad          = 8,
+                  nbSegCercle       = 20,
+                  areteFaceFissure  = 1.0)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+    salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/AREintradosLauncher.py b/src/Tools/blocFissure/AREintradosLauncher.py
new file mode 100644 (file)
index 0000000..f95fea2
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+""" FissureLauncher:
+    Permet de lancer le script 'casStandard'
+    en fonction des paramètres contenus dans 'dicoParams'. """
+
+#import sys
+import salome
+
+#import os
+#from blocFissure import gmu
+from blocFissure.gmu import initLog
+initLog.setDebug()
+#initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'ARE_sain_lin_rotated.med'
+crack = 'fissureIntrados.brep'
+
+dicoParams = dict(nomCas            = 'fissTuyau',
+                  maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFissIds       = [4],
+                  lgInfluence       = 14,
+                  meshBrep          = (0.05, 2.0),
+                  rayonPipe         = 1.0,
+                  lenSegPipe        = 1, #9,
+                  nbSegRad          = 5,
+                  nbSegCercle       = 16,
+                  areteFaceFissure  = 1.0)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+    salome.sg.updateObjBrowser(1)
index c6d20eb27bc0c4e93ca22d3070b45a578f69a352..e2f80738c49d681bd4530cba27321dc1fa0a0999 100644 (file)
@@ -80,12 +80,13 @@ dicoParams = dict(nomCas            = 'angleCube2',
                   maillageSain      = 'boite.med',
                   brepFaceFissure   = "disk.brep",
                   edgeFissIds       = [4],
-                  lgInfluence       = 20,
+                  lgInfluence       = 50,
                   meshBrep          = (5,10),
-                  rayonPipe         = 10,
+                  rayonPipe         = 15,
+                  lenSegPipe        = 20,
                   nbSegRad          = 5,
-                  nbSegCercle       = 8,
-                  areteFaceFissure  = 10)
+                  nbSegCercle       = 12,
+                  areteFaceFissure  = 2)
 
 execInstance = casStandard(dicoParams)
 
diff --git a/src/Tools/blocFissure/fissureLauncher.py b/src/Tools/blocFissure/fissureLauncher.py
new file mode 100644 (file)
index 0000000..10f7b0f
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+""" FissureLauncher:
+    Permet de lancer le script 'casStandard'
+    en fonction des paramètres contenus dans 'dicoParams'. """
+
+#import sys
+import salome
+
+#import os
+#from blocFissure import gmu
+from blocFissure.gmu import initLog
+initLog.setDebug()
+#initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'maillageSainTuyauFEM.med'
+crack = 'fissureQuartEllipse.brep'
+
+dicoParams = dict(nomCas            = 'fissTuyau',
+                  maillageSain      = '/local00/home/I48174/Bureau/supportMaillage/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Bureau/supportMaillage/{0}'.format(crack),
+                  edgeFissIds       = [9],
+                  lgInfluence       = 250,
+                  meshBrep          = (10, 50),
+                  rayonPipe         = 35,
+                  lenSegPipe        = 7, #9,
+                  nbSegRad          = 6,
+                  nbSegCercle       = 30,
+                  areteFaceFissure  = 20)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+    salome.sg.updateObjBrowser(1)
\ No newline at end of file
index edd6855dbb0528a1b8c70fb561653cce933c42d5..d4270fceade65e7ed994c0ec8c142385fdace2a8 100644 (file)
@@ -7,7 +7,7 @@ import SALOMEDS
 
 from creeZoneDefautMaillage import creeZoneDefautMaillage
 from peauInterne import peauInterne
-from quadranglesToShape import quadranglesToShape
+from quadranglesToShapeNoCorner import quadranglesToShapeNoCorner
 from creeZoneDefautFilling import creeZoneDefautFilling
 from creeZoneDefautGeom import creeZoneDefautGeom
 from getCentreFondFiss import getCentreFondFiss
@@ -18,7 +18,7 @@ from getCentreFondFiss import getCentreFondFiss
 def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
                                 shapeFissureParams, maillageFissureParams):
   """
-  TODO: a compléter
+  #TODO: a compléter
   """
   logging.info('start')
   
@@ -62,7 +62,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   maillageSain.ExportMED( fichierMaillageSain, 0, SMESH.MED_V2_2, 1 )
   logging.debug("fichier maillage sain %s", fichierMaillageSain)
   [maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
-    peauInterne(fichierMaillageSain, nomZones)
+    peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
 
   facesDefaut = []
   centresDefaut = []
@@ -71,7 +71,9 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   isPlane = False
   if isHexa and not isPlane:
     meshQuad =  smesh.CopyMesh( zoneDefaut_skin, 'meshQuad', 0, 0)
-    fillings, noeuds_bords, bordsPartages, fillconts, idFilToCont  = quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss)
+    
+    fillings, noeuds_bords, bordsPartages, fillconts, idFilToCont = quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss)
+    
     for filling in fillings:
       [faceDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
         creeZoneDefautFilling(filling, shapeDefaut, lgExtrusion)
@@ -82,7 +84,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   else:
     [facesDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
       creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion)
-    bordsPartages =[]
+    bordsPartages = []
     for face in facesDefaut:
       bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
     fillconts = facesDefaut
index ed3229eb8f85ccba744b7a8b5ac9a6f0bf48a141..fd98acab2f5d2b7382c32d415a871f98da086bcb 100644 (file)
@@ -9,7 +9,7 @@ from geomsmesh import geompy
 def creeZoneDefautFilling(filling, shapeDefaut, lgExtrusion=50):
   """
   Construction CAO de la zone à remailler, quand on utilise un filling,
-  après appel creeZoneDefautMaillage et quadranglesToShape
+  après appel creeZoneDefautMaillage et quadranglesToShapeNoCorner
   @param filling : la CAO de la peau du défaut reconstituée
   @param shapeDefaut : objet géométrique représentant la fissure
   (selon les cas, un point central, ou une shape plus complexe,
diff --git a/src/Tools/blocFissure/gmu/fusionMaillageAttributionDefaut.py b/src/Tools/blocFissure/gmu/fusionMaillageAttributionDefaut.py
new file mode 100644 (file)
index 0000000..d7736d2
--- /dev/null
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Jun 24 09:14:13 2014
+
+@author: I48174
+"""
+
+import logging
+from geomsmesh import geompy
+from geomsmesh import smesh
+import GEOM
+import SMESH
+
+from listOfExtraFunctions import createNewMeshesFromCorner
+from listOfExtraFunctions import createLinesFromMesh
+
+# -----------------------------------------------------------------------------
+# --- groupe de quadrangles de face transformé en face géométrique par filling
+
+def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, zoneDefaut_skin, shapeDefaut, listOfCorners):
+    """ """
+    # TODO: rédiger la docstring
+    
+    logging.info("start")
+    
+    facesNonCoupees = []
+    facesCoupees = []
+    maillagesNonCoupes = []
+    maillagesCoupes = []
+        
+    # On crée une liste contenant le maillage de chaque face.
+    listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners)
+    
+    i = 0
+    while i < len(listOfNewMeshes):
+        lines = createLinesFromMesh(listOfNewMeshes[i])
+        setOfLines = []
+        for line in lines:
+            # On possède l'information 'ID' de chaque noeud composant chaque
+            # ligne de la face. A partir de l'ID, on crée un vertex. Un
+            # ensemble de vertices constitue une ligne. Un ensemble de lignes
+            # constitue la face.
+            tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
+            tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+            line = geompy.MakeInterpol(tmpPoints, False, False)
+            setOfLines.append(line)
+        
+        # A partir des lignes de la face,
+        # on recrée un objet GEOM temporaire par filling.
+        filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+        geompy.addToStudy(filling, 'filling_{0}'.format(i + 1))
+        
+        tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0, True)
+        tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
+        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
+        if len(tmpExplodeRef) == len(tmpExplodeNum):
+            geompy.addToStudy(filling, "faceNonCoupee_{0}".format(i + 1))
+            facesNonCoupees.append(filling)
+            maillagesNonCoupes.append(listOfNewMeshes[i])
+        else:
+            geompy.addToStudy(filling, "faceCoupee_{0}".format(i + 1))
+            facesCoupees.append(filling)
+            maillagesCoupes.append(listOfNewMeshes[i])
+        
+        i += 1
+    
+    listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
+    
+    newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
+    
+    facesEnTrop = []
+    
+    criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
+    filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
+    for i, filtre in enumerate(filtres):
+        filtre.SetMesh(maillageSain.GetMesh())
+        faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i + 1), filtre)
+        facesEnTrop.append(faceEnTrop)
+    
+    newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
+    
+    smesh.SetName(newMaillageInterne, 'newInternalBoundary')
+        
+    return newZoneDefaut_skin, newMaillageInterne
+    
\ No newline at end of file
index a08664bad6f35931590f1e7c56c53968bbbd76cc..08e24748c7da511aee18c714b80c500b7d8cab1e 100644 (file)
@@ -9,8 +9,19 @@ from salome.smesh import smeshBuilder
 
 def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize):
   """
-  TODO: a completer
-  """
+  -Permet de générer un maillage sur l'objet géométrique 'facefiss' via
+   l'algorithme NETGEN_1D2D :
+      -SetMaxSize     = dimension max d'un élément (maxSize)
+      -SetSecondOrder = élément quadratique (Y=1, N=0)
+      -SetOptimize    = élément régulier (Y=1, N=0)
+      -SetFineness    = finesse du maillage
+       [very_coarse, coarse, moderate, fine, very_fine, custom]
+       [0,           1,      2,        3,    4,         5     ]
+      -SetMinSize     = dimension min d'un élément (minSize)
+      -SetQuadAllowed = permission quadrangle dans maillage triangle
+  -On récupère les coordonnées de chaque noeud de la fissure qu'on stocke
+   dans une liste sous la forme : [X0, Y0, Z0, ..., Xn, Yn, Zn]"""
+   
   logging.info('start')
 
   meshFissure = smesh.Mesh(facefiss)
index 3204084a5c458e8726b26b10beaa21ba0db95f4c..2611fa616d5c30b2fa8ea42dc28f7ccdbb0c9cfa 100644 (file)
@@ -82,12 +82,13 @@ def insereFissureGenerale(maillagesSains,
   #fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
   fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
 
-  facesDefaut              = elementsDefaut[0] # fillings des faces en peau 
+  # fillings des faces en peau
+  facesDefaut = elementsDefaut[0]
   #centresDefaut            = elementsDefaut[1]
   #normalsDefaut            = elementsDefaut[2]
   #extrusionsDefaut         = elementsDefaut[3]
   dmoyen                   = elementsDefaut[4]
-  bordsPartages            = elementsDefaut[5]
+  bordsPartages = elementsDefaut[5]
   fillconts                = elementsDefaut[6]
   idFilToCont              = elementsDefaut[7]
   maillageSain             = elementsDefaut[8]
@@ -172,7 +173,7 @@ def insereFissureGenerale(maillagesSains,
   #     il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure
   #     liste de faces externes : facesDefaut
   #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
-  
+
   partitionsPeauFissFond = []
   ipart = 0
   for filling in facesDefaut: 
@@ -190,18 +191,27 @@ def insereFissureGenerale(maillagesSains,
     else:
       partitionsPeauFissFond.append(None)
     ipart = ipart +1
+  
+  # --- arêtes vives détectées (dans quadranglesToShapeNoCorner
+  #                             et quadranglesToShapeWithCorner)
   
-  # --- arêtes vives détectées (dans quadranglesToShape)
-   
   aretesVives = []
   aretesVivesCoupees = []
   ia = 0
   for a in bordsPartages:
-    if a[0] is not None:
-      aretesVives.append(a[0])
-      name = "areteVive%d"%ia
-      geompy.addToStudy(a[0], name)
-      ia += 1
+    if not isinstance(a, list):
+        aretesVives.append(a)
+        name = "areteVive%d"%ia
+        geompy.addToStudy(a, name)
+        ia += 1
+    else:
+        if a[0] is not None:
+            aretesVives.append(a[0])
+            name = "areteVive%d"%ia
+            geompy.addToStudy(a[0], name)
+            ia += 1
+
   aretesVivesC = None
   if len(aretesVives) > 0:
     aretesVivesC =geompy.MakeCompound(aretesVives)
@@ -228,7 +238,7 @@ def insereFissureGenerale(maillagesSains,
   
   for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
     fillingFaceExterne = facesDefaut[ifil]
-    fillingSansDecoupe = fillconts[idFilToCont[ifil]]
+    #fillingSansDecoupe = fillconts[idFilToCont[ifil]]
     if partitionPeauFissFond is not None:
       logging.debug("traitement partitionPeauFissFond %s", ifil)
       # -----------------------------------------------------------------------
@@ -1210,7 +1220,7 @@ def insereFissureGenerale(maillagesSains,
   grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE)
 
   # --- maillage faces de peau
-  
+    
   boutFromIfil = [None for i in range(nbFacesFilling)]
   if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes
     boutFromIfil[idFillingFromBout[0]] = 0
diff --git a/src/Tools/blocFissure/gmu/listOfExtraFunctions.py b/src/Tools/blocFissure/gmu/listOfExtraFunctions.py
new file mode 100644 (file)
index 0000000..5353962
--- /dev/null
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Jun 23 14:49:36 2014
+
+@author: I48174
+"""
+
+import logging
+import SMESH
+from geomsmesh import smesh
+
+def lookForCorner(maillageAScanner):
+    
+    """ Cette fonction permet de scanner la liste de noeuds qui composent le
+        maillage passé en paramètre. On recherche un ou plusieurs coins, ce
+        qui implique les caractéristiques suivantes:
+            - le noeud doit appartenir au moins à trois éléments distinctes
+            - chaque élément doit appartenir à un ensemble distincte
+        La fonction renvoie une liste de coins par l'intermédiaire de l'IDs
+        chaque noeud. La liste contient en général au maximum deux coins. """
+    
+    logging.info("start")
+    
+    allNodeIds = maillageAScanner.GetNodesId()  # On stocke tout les noeuds
+    listOfCorners = []
+    for ND in allNodeIds:
+        # On parcours la liste de noeuds
+        listOfElements = maillageAScanner.GetNodeInverseElements(ND)
+        if len(listOfElements) >=3:
+            # On teste le nombre d'éléments qui partage le même noeud
+            # --- Filtre selon le critère 'coplanar' --- #
+            listOfCriterion = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
+            SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30) \
+            for elem in listOfElements]
+            listOfFilters = [smesh.GetFilterFromCriteria([criteria]) \
+            for criteria in listOfCriterion]
+            # ------------------------------------------ #
+            listOfSets = [maillageAScanner.GetIdsFromFilter(filter) \
+            for filter in listOfFilters]
+            if listOfSets.count(listOfSets[0]) == len(listOfSets):
+                # Si toutes les listes d'éléments sont similaires, on retourne
+                # au début pour éviter de travailler sur des éléments inutils.
+                # Exemple : un noeud appartenant à 4 éléments sur la même face.
+                continue
+            for s in listOfSets:
+                while listOfSets.count(s) > 1:
+                    # On supprime tant que la liste d'éléments n'est pas unique.
+                    listOfSets.remove(s)
+            if len(listOfSets) >= 3:
+                # Si on a au moins 3 listes d'élements différentes, on considère
+                # qu'il y a présence d'un coin.
+                listOfCorners.append(ND)
+    return listOfCorners
+
+def createLinesFromMesh(maillageSupport):
+    
+    """ Cette fonction permet de générer une liste de lignes à partir du 
+        maillage support passé en paramètre. On démarre à partir d'un coin
+        simple et on parcourt tout les noeuds pour former un ligne. Soit la
+        figure ci-dessous :
+            
+            1_____4_____7    On part du coin N1, et on cherche les noeuds
+            |     |     |    successifs tels que [1, 2, 3]. Lorsqu'on arrive
+            |  1  |  3  |    arrive sur le noeud de fin de ligne N3, on repart
+            |     |     |    du noeud précédent du premier élément (E1), à
+            2_____5_____8    savoir le noeud N4. On suit les noeuds succesifs
+            |     |     |    [4, 5, 6] comme précédemment et ainsi de suite.
+            |  2  |  4  |    Lorsqu'on arrive sur le dernier noeud de la
+            |     |     |    dernière ligne, à savoir le noeud N9, on considère
+            3_____6_____9    que toutes les lignes sont créées.
+            
+        La fonction retourne une liste de lignes utilisées par la suite. """
+    
+    logging.info("start")
+    
+    allNodeIds = maillageSupport.GetNodesId()
+    while len(allNodeIds):
+        nodeIds = allNodeIds
+        for idNode in nodeIds: # rechercher un coin
+          elems = maillageSupport.GetNodeInverseElements(idNode)
+          if len(elems) == 1:
+            # un coin: un noeud, un element quadrangle
+            elem = elems[0]
+            break;
+        idStart = idNode # le noeud de coin
+        elemStart = elem # l'élément quadrangle au coin
+        xyz = maillageSupport.GetNodeXYZ(idStart)
+        logging.debug("idStart %s, coords %s", idStart, str(xyz))
+    
+        nodelines =[] # on va constituer une liste de lignes de points
+        nextLine = True
+        ligneFinale = False
+        while nextLine:
+            logging.debug("--- une ligne")
+            idNode = idStart
+            elem = elemStart
+            if ligneFinale:
+                agauche = False  # sens de parcours des 4 noeuds d'un quadrangle
+                nextLine = False
+            else:
+                agauche = True
+            ligneIncomplete = True  # on commence une ligne de points
+            debutLigne = True
+            nodeline = []
+            elemline = []
+            while ligneIncomplete:  # compléter la ligne de points
+                nodeline.append(idNode)
+                allNodeIds.remove(idNode)
+                elemline.append(elem)
+                nodes = maillageSupport.GetElemNodes(elem)
+                i = nodes.index(idNode)  # repérer l'index du noeud courant (i) dans l'élément quadrangle (0 a 3)
+                if agauche:              # déterminer le noeud suivant (j) et celui opposé (k) dans le quadrangle
+                    if i < 3:
+                        j = i+1
+                    else:
+                        j = 0
+                    if j < 3:
+                        k = j+1
+                    else:
+                        k = 0
+                else:
+                    if i > 0:
+                        j = i -1
+                    else:
+                        j = 3
+                    if j > 0:
+                        k = j -1
+                    else:
+                        k = 3
+                isuiv = nodes[j]   # noeud suivant
+                iapres = nodes[k]  # noeud opposé
+                if debutLigne:
+                    debutLigne = False
+                    # précédent a trouver, dernière ligne : précédent au lieu de suivant
+                    if agauche:
+                        if i > 0:
+                            iprec = nodes[i -1]
+                        else:
+                            iprec = nodes[3]
+                        idStart = iprec
+                        elems3 = maillageSupport.GetNodeInverseElements(iprec)
+                        if len(elems3) == 1: # autre coin
+                            ligneFinale = True
+                        else:
+                            for elem3 in elems3:
+                                if elem3 != elem:
+                                    elemStart = elem3
+                                    break
+                #print nodes, idNode, isuiv, iapres
+                elems1 = maillageSupport.GetNodeInverseElements(isuiv)
+                elems2 = maillageSupport.GetNodeInverseElements(iapres)
+                ligneIncomplete = False
+                for elem2 in elems2:
+                    if elems1.count(elem2) and elem2 != elem:
+                        ligneIncomplete = True
+                        idNode = isuiv
+                        elem = elem2
+                        break
+                if not  ligneIncomplete:
+                    nodeline.append(isuiv)
+                    allNodeIds.remove(isuiv)
+            logging.debug("nodeline %s", nodeline)
+            logging.debug("elemline %s", elemline)
+            nodelines.append(nodeline)
+             
+        # on a constitué une liste de lignes de points connexes
+        logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
+    
+    return nodelines
+
+def createNewMeshesFromCorner(maillageSupport, listOfCorners):
+    
+    """ Cette fonction permet de générer un nouveau maillage plus facile à
+        utiliser. On démarre d'un coin et on récupère les trois éléments
+        auquel le noeud appartient. Grâce à un filtre 'coplanar' sur les trois
+        éléments, on peut générer des faces distinctes. """
+    
+    logging.info("start")
+    
+    tmp = []
+    listOfNewMeshes = []
+    for corner in listOfCorners:
+        elems = maillageSupport.GetNodeInverseElements(corner)
+        for i, elem in enumerate(elems):
+            # --- Filtre selon le critère 'coplanar' --- #
+            critere = smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
+            SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30)
+            filtre = smesh.GetFilterFromCriteria([critere])
+            # ------------------------------------------ #
+            grp = maillageSupport.GroupOnFilter(SMESH.FACE, 'grp', filtre)
+            # On copie le maillage en fonction du filtre
+            msh = smesh.CopyMesh(grp, 'new_{0}'.format(i + 1), False, True)
+            # On stocke l'ensemble des noeuds du maillage dans tmp
+            # On ajoute le maillage à la liste des nouveaux maillages
+            # seulement s'il n'y est pas déjà
+            tmp.append(msh.GetNodesId())
+            if tmp.count(msh.GetNodesId()) <= 1:
+                listOfNewMeshes.append(msh)
+    return listOfNewMeshes
\ No newline at end of file
index 6790061b96213a9259d9bbff54fe0092c2ccf668..3899a72be2c9ee8d7a59ce94ca8b1b1345518e59 100644 (file)
@@ -4,10 +4,13 @@ import logging
 from geomsmesh import smesh
 import SMESH
 
+from listOfExtraFunctions import lookForCorner
+from fusionMaillageAttributionDefaut import fusionMaillageDefaut
+
 # -----------------------------------------------------------------------------
 # --- peau interne du defaut dans le maillage sain
 
-def peauInterne(fichierMaillage, nomZones):
+def peauInterne(fichierMaillage, shapeDefaut, nomZones):
   """
   Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage)
   On récupère le volume et la peau de la zone de défaut, les éventuelles faces et arêtes internes de cette zone.
@@ -41,6 +44,13 @@ def peauInterne(fichierMaillage, nomZones):
   nbAdded, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ])
   internal = maillageSain.GetMesh().CutListOfGroups( [ DefautBoundary ], [ zoneDefaut_skin ], 'internal' )
   internalBoundary = smesh.CopyMesh( internal, 'internalBoundary', 0, 0)
+  
+  maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0)
+  listOfCorner = lookForCorner(maillageDefautCible)
+  print "listOfCorner = ", listOfCorner
+  if len(listOfCorner) > 0:
+      print " /!\ SUITE DU SCRIPT EN CONSTRUCTION /!\\"
+      zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner)
 
   return maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges
 
diff --git a/src/Tools/blocFissure/gmu/quadranglesToShapeNoCorner.py b/src/Tools/blocFissure/gmu/quadranglesToShapeNoCorner.py
new file mode 100644 (file)
index 0000000..15b74a5
--- /dev/null
@@ -0,0 +1,327 @@
+# -*- coding: utf-8 -*-
+
+import logging
+from geomsmesh import geompy
+import GEOM
+import math
+import numpy as np
+
+def mydot(a):
+  return np.dot(a,a)
+
+# -----------------------------------------------------------------------------
+# --- groupe de quadrangles de face transformé en face géométrique par filling
+
+def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
+  """
+  groupe de quadrangles de face transformée en faces géométriques par filling
+  on part de quadrangles définissant une zone a 4 cotés (convexe), et on reconstitue n lignes de p points.
+  Ces n lignes de p points sont transformées en n courbes géométriques,
+  à partir desquelles on reconstitue une surface géométrique.
+  Il peut y avoir plusieurs faces géométriques reconstituées, si on fournit des groupes de quadrangles non connexes.
+  On détecte les angles vifs, pour conserver des arêtes vives délimitant des faces connexes.
+  @param meshQuad : maillages constitué de quadrangles constituant une ou plusieurs zones convexes
+  @return (fillings, noeuds_Bords) : liste de geomObject, listes des bords (bord = liste ordonnée de noeuds (geomObject))
+  """
+  logging.info("start")
+
+  isVecteurDefaut = False
+  if shapeFissureParams.has_key('vecteurDefaut'):
+    isVecteurDefaut = True
+    vecteurDefaut = shapeFissureParams['vecteurDefaut']
+
+  fillings = []       # les faces reconstituées, découpées selon les arêtes vives
+  noeuds_bords = []   #
+  bords_Partages = [] # contient a la fin les courbes correspondant aux arêtes vives
+  fillconts = []      # les faces reconstituées, sans découpage selon les arêtes vives
+  idFilToCont = []    # index face découpée vers face sans découpe
+  iface = 0           # index face découpée
+  icont = 0           # index face continue
+  
+  allNodeIds = meshQuad.GetNodesId()
+  while len(allNodeIds):
+    nodeIds = allNodeIds
+    for idNode in nodeIds: # rechercher un coin
+      elems = meshQuad.GetNodeInverseElements(idNode)
+      if len(elems) == 1:
+        # un coin: un noeud, un element quadrangle
+        elem = elems[0]
+        break;
+    idStart = idNode # le noeud de coin
+    elemStart = elem # l'élément quadrangle au coin
+    xyz = meshQuad.GetNodeXYZ(idStart)
+    print "xyz = ", xyz
+    logging.debug("idStart %s, coords %s", idStart, str(xyz))
+  
+    nodelines =[] # on va constituer une liste de lignes de points
+    nextLine = True
+    ligneFinale = False
+    while nextLine:
+      logging.debug("--- une ligne")
+      idNode = idStart
+      elem = elemStart
+      if ligneFinale:
+        agauche = False      # sens de parcours des 4 noeuds d'un quadrangle
+        nextLine = False
+      else:
+        agauche = True
+      ligneIncomplete = True # on commence une ligne de points
+      debutLigne = True
+      nodeline = []
+      elemline = []
+      while ligneIncomplete: # compléter la ligne de points
+        nodeline.append(idNode)
+        allNodeIds.remove(idNode)
+        elemline.append(elem)
+        nodes = meshQuad.GetElemNodes(elem)
+        i = nodes.index(idNode) # repérer l'index du noeud courant (i) dans l'élément quadrangle (0 a 3)
+        if agauche:             # déterminer le noeud suivant (j) et celui opposé (k) dans le quadrangle
+          if i < 3:
+            j = i+1
+          else:
+            j = 0
+          if j < 3:
+            k = j+1
+          else:
+            k = 0
+        else:
+          if i > 0:
+            j = i -1
+          else:
+            j = 3
+          if j > 0:
+            k = j -1
+          else:
+            k = 3
+        isuiv = nodes[j]   #noeud suivant
+        iapres = nodes[k]  #noeud opposé
+        if debutLigne:
+          debutLigne = False
+          # précédent a trouver, dernière ligne : précédent au lieu de suivant
+          if agauche:
+            if i > 0:
+              iprec = nodes[i -1]
+            else:
+              iprec = nodes[3]
+            idStart = iprec
+            elems3 = meshQuad.GetNodeInverseElements(iprec)
+            if len(elems3) == 1: # autre coin
+              ligneFinale = True
+            else:
+              for elem3 in elems3:
+                if elem3 != elem:
+                  elemStart = elem3
+                  break
+        #print nodes, idNode, isuiv, iapres
+        elems1 = meshQuad.GetNodeInverseElements(isuiv)
+        elems2 = meshQuad.GetNodeInverseElements(iapres)
+        ligneIncomplete = False
+        for elem2 in elems2:
+          if elems1.count(elem2) and elem2 != elem:
+            ligneIncomplete = True
+            idNode = isuiv
+            elem = elem2
+            break
+        if not  ligneIncomplete:
+          nodeline.append(isuiv)
+          allNodeIds.remove(isuiv)
+      logging.debug("nodeline %s", nodeline)
+      logging.debug("elemline %s", elemline)
+      nodelines.append(nodeline)
+    print "nodelines = ", nodelines
+    longueur = [len(val) for val in nodelines]
+    print "longueur = ", longueur
+    # on a constitué une liste de lignes de points connexes
+    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))   
+    
+    # stockage des coordonnées dans un tableau numpy
+    mat = np.zeros((len(nodelines), len(nodeline), 3))
+    for i, ligne in enumerate(nodelines):
+      for j, nodeId in enumerate(ligne):
+        mat[i,j] = meshQuad.GetNodeXYZ(nodeId)
+    logging.debug("matrice de coordonnées: \n%s",mat)
+    logging.debug("dimensions %s", mat.shape)
+    
+    # recherche d'angles supérieurs a un seuil sur une ligne : angle entre deux vecteurs successifs
+    cosmin = math.cos(math.pi/4.)          # TODO: angle reference en paramètre
+    vecx = mat[:, 1:,  :] - mat[:, :-1, :] # vecteurs selon direction "x"
+    vx0 = vecx[:, :-1, :]                  # vecteurs amont
+    vx1 = vecx[:, 1:,  :]                  # vecteurs aval
+    e = np.einsum('ijk,ijk->ij', vx0, vx1) # produit scalaire des vecteurs
+    f = np.apply_along_axis(mydot, 2, vx0) # normes carrées vecteurs amont
+    g = np.apply_along_axis(mydot, 2, vx1) # normes carrées vecteurs aval
+    h = e/(np.sqrt(f*g))                   # cosinus
+    ruptureX = h < cosmin                  # True si angle > reference
+    logging.debug("matrice de rupture X: \n%s",ruptureX)
+    rupX = filter(lambda x: np.prod(ruptureX[:,x]), range(len(nodeline)-2))
+    logging.debug("colonnes de rupture: %s",rupX)
+    # recherche d'angles supérieurs a un seuil sur une colonne : angle entre deux vecteurs successifs
+    vecy = mat[ 1:, :, :] - mat[:-1, :, :] # vecteurs selon direction "y"
+    vy0 = vecy[:-1, :, :]                  # vecteurs amont
+    vy1 = vecy[ 1:, :, :]                  # vecteurs aval
+    e = np.einsum('ijk,ijk->ij', vy0, vy1) # produit scalaire des vecteurs
+    f = np.apply_along_axis(mydot, 2, vy0) # normes carrées vecteurs amont
+    g = np.apply_along_axis(mydot, 2, vy1) # normes carrées vecteurs aval
+    h = e/(np.sqrt(f*g))                   # cosinus
+    ruptureY = h < cosmin                  # True si angle > reference
+    logging.debug("matrice de rupture Y: \n%s",ruptureY)
+    rupY = filter(lambda x: np.prod(ruptureY[x, :]), range(len(nodelines)-2))
+    logging.debug("lignes de rupture: %s",rupY)
+    if (len(rupX)*len(rupY)) > 0:
+      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
+      lors de la reconstitution des faces géométriques dans la zone remaillée""")
+    
+    mats = []
+    bordsPartages = []
+    if (len(rupX)> 0):
+      rupX.append(mat.shape[1]-1)
+      for i, index in enumerate(rupX):
+        imax = index+2
+        imin = 0
+        if i > 0:
+          imin = rupX[i-1] + 1
+        mats.append(mat[:, imin:imax, :])
+        if imax == mat.shape[1] + 1:
+          ifin = 0
+        else:
+          ifin = imax
+        bordsPartages.append([imin,ifin]) # les indices différents de 0 correspondent à des bords partagés
+    elif (len(rupY)> 0):
+      rupY.append(mat.shape[0]-1)
+      for i, index in enumerate(rupY):
+        imax = index+2
+        imin = 0
+        if i > 0:
+          imin = rupY[i-1] + 1
+        mats.append(mat[imin:imax, :, :])
+        if imax == mat.shape[0] + 1:
+          ifin = 0
+        else:
+          ifin = imax
+        bordsPartages.append([imin,ifin]) # les indices différents de 0 correspondent à des bords partagés
+    else:
+      mats.append(mat)
+      bordsPartages.append([0,0])         # les indices différents de 0 correspondent à des bords partagés
+    
+    curvconts = []
+    for nmat, amat in enumerate(mats):
+      logging.debug("dimensions matrice %s: %s", nmat, amat.shape)
+      nbLignes = amat.shape[1] # pas de rupture, ou rupture selon des colonnes: on transpose
+      nbCols = amat.shape[0]
+      if len(rupY) > 0 :       # rupture selon des lignes: pas de transposition
+        nbLignes = amat.shape[0]
+        nbCols = amat.shape[1]
+      curves = []
+      noeudsBords = []
+      for i in range(4):
+        noeudsBords.append([])
+      k = 0
+      for i in range(nbLignes):
+        nodeList = []
+        for j in range(nbCols):
+          #logging.debug("point[%s,%s] = (%s, %s, %s)",i,j,amat[i,j,0], amat[i,j,1], amat[i,j,2])
+          if len(rupY) > 0 : # pas de transposition
+            node = geompy.MakeVertex(amat[i,j,0], amat[i,j,1], amat[i,j,2])
+          else:              # transposition
+            node = geompy.MakeVertex(amat[j,i,0], amat[j,i,1], amat[j,i,2])
+          nodeList.append(node)
+          if i == 0:
+            noeudsBords[0].append(node)
+            #name = "bord0_%d"%k
+            #geompy.addToStudy( node, name )
+          if i == (nbLignes -1):
+            noeudsBords[2].append(node)
+            #name = "bord2_%d"%k
+            #geompy.addToStudy( node, name )
+          if j == 0:
+            noeudsBords[1].append(node)
+            #name = "bord1_%d"%k
+            #geompy.addToStudy( node, name )
+          if j == (nbCols -1):
+            noeudsBords[3].append(node)
+            #name = "bord3_%d"%k
+            #geompy.addToStudy( node, name )
+            k += 1
+        curve = geompy.MakeInterpol(nodeList, False, False)
+        #name = "curve_%d"%i
+        #geompy.addToStudy( curve, name )
+        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe 
+          curvconts.append(nodeList)
+        curves.append(curve)
+      if bordsPartages[nmat][0] :
+        bordsPartages[nmat][0] = curves[0]  # la première ligne est un bord partagé
+      else:
+        bordsPartages[nmat][0] = None
+      if bordsPartages[nmat][1] :
+        bordsPartages[nmat][1] = curves[-1] # la dernière ligne est un bord partagé
+      else:
+        bordsPartages[nmat][1] = None
+      filling = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+      # --- test orientation filling
+      vertex = geompy.MakeVertexOnSurface(filling, 0.5, 0.5)
+      normal = geompy.GetNormal(filling, vertex)
+
+      if centreFondFiss is not None:
+        logging.debug("orientation filling a l'aide du centre de fond de fissure")
+        vecteurDefaut = geompy.MakeVector(centreFondFiss, vertex)
+        
+      if not isVecteurDefaut:
+        pointIn_x = 0.0
+        pointIn_y = 0.0
+        pointIn_z = 0.0
+        pointExplicite = False
+        if shapeFissureParams.has_key('pointIn_x'):
+          pointExplicite = True
+          pointIn_x = shapeFissureParams['pointIn_x']
+        if shapeFissureParams.has_key('pointIn_y'):
+          pointExplicite = True
+          pointIn_y = shapeFissureParams['pointIn_y']
+        if shapeFissureParams.has_key('pointIn_z'):
+          pointExplicite = True
+          pointIn_z = shapeFissureParams['pointIn_z']
+        if pointExplicite:
+          cdg = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
+          logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
+          vecteurDefaut = geompy.MakeVector(cdg, vertex)
+        
+      if shapeFissureParams.has_key('convexe'):
+        isConvexe = shapeFissureParams['convexe']
+        logging.debug("orientation filling par indication de convexité %s", isConvexe)
+        cdg = geompy.MakeCDG(filling)
+        if isConvexe:
+          vecteurDefaut = geompy.MakeVector(cdg, vertex)
+        else:
+          vecteurDefaut = geompy.MakeVector(vertex, cdg)
+     
+      if vecteurDefaut is not None:
+        geompy.addToStudy(normal, "normFillOrig%d"%iface)
+        geompy.addToStudy(vecteurDefaut, "fromInterieur%d"%iface)
+        if geompy.GetAngleRadians(vecteurDefaut, normal) > math.pi/2.0:
+          filling = geompy.ChangeOrientation(filling)
+      geompy.addToStudy( filling, "filling%d"%iface )
+      #geompy.ExportBREP(filling, "filling.brep")
+      iface = iface+1
+      fillings.append(filling)
+      noeuds_bords.append(noeudsBords)
+      idFilToCont.append(icont)
+      bords_Partages += bordsPartages
+      print "bords_Partages = ", bords_Partages
+      pass # --- loop on mats
+    # --- reconstruction des faces continues à partir des listes de noeuds
+    #     les courbes doivent suivre la courbure pour éviter les oscillations
+    if icont == iface - 1: # pas de découpe, on garde la même face
+      fillcont = fillings[-1]
+    else:
+      nbLignes = len(curvconts[0])
+      curves = []
+      for i in range(nbLignes):
+        nodes = [curvconts[j][i] for j in range(len(curvconts))]
+        curve = geompy.MakeInterpol(nodes, False, False)
+        curves.append(curve)
+      fillcont = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+    geompy.addToStudy( fillcont, "filcont%d"%icont )
+    fillconts.append(fillcont)
+    icont = icont+1   
+    pass   # --- loop while there are remaining nodes
+  
+  return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
diff --git a/src/Tools/blocFissure/gmu/quadranglesToShapeWithCorner.py b/src/Tools/blocFissure/gmu/quadranglesToShapeWithCorner.py
new file mode 100644 (file)
index 0000000..83fba60
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Jun 24 09:14:13 2014
+
+@author: I48174
+"""
+
+import logging
+from geomsmesh import geompy
+import GEOM
+
+from listOfExtraFunctions import createNewMeshesFromCorner
+from listOfExtraFunctions import createLinesFromMesh
+
+# -----------------------------------------------------------------------------
+# --- groupe de quadrangles de face transformé en face géométrique par filling
+
+def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
+    """ """
+    # TODO: rédiger la docstring
+    
+    logging.info("start")
+
+    #fillings = [[], []]
+    tmpFillings = []
+    noeuds_bords = []
+    #bords_Partages = [[], []]
+    tmpBords = []
+    fillconts = []
+    idFilToCont = []
+    
+    facesNonCoupees = []
+    facesCoupees = []
+    aretesNonCoupees = []
+    aretesCoupees = []
+    
+    setOfNodes = []
+    setOfLines = []
+    listOfEdges = []
+    # On crée une liste contenant le maillage de chaque face.
+    listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
+    for msh in listOfNewMeshes:
+        # On crée une liste de noeuds correspondant aux faces suivant
+        # le modèle liste[face][ligne][noeud].
+        lines = createLinesFromMesh(msh, listOfCorners[0])
+        setOfNodes.append(lines)
+    
+    for face in setOfNodes:
+        tmpFace = []
+        for line in face:
+            # On possède l'information 'ID' de chaque noeud composant chaque
+            # ligne de chaque face. A partir de l'ID, on crée un vertex. Un
+            # ensemble de vertices constitue une ligne. Un ensemble de lignes
+            # constitue une face.
+            tmpCoords = [meshQuad.GetNodeXYZ(node) for node in line]
+            tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+            line = geompy.MakeInterpol(tmpPoints, False, False)
+            tmpFace.append(line)
+        setOfLines.append(tmpFace)
+    
+    for i, face in enumerate(setOfLines):
+        # A partir des lignes de chaque face,
+        # on recrée un objet GEOM temporaire par filling.
+        filling = geompy.MakeFilling(geompy.MakeCompound(face), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+        geompy.addToStudy(filling, 'filling_{0}'.format(i + 1)) 
+        tmpFillings.append(filling)
+
+    for face in setOfNodes:
+        # On prend la première ligne qui correspond aux bords partagés
+        listOfEdges.append(face[0])
+    
+    for edge in listOfEdges:
+        # On utilise les points de bords pour créer des aretes vives
+        tmpCoords = [meshQuad.GetNodeXYZ(node) for node in list(edge)]
+        tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+        line = geompy.MakeInterpol(tmpPoints, False, False)
+        tmpBords.append(line)
+    
+    for i, filling in enumerate(tmpFillings):
+        tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0, True)
+        tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
+        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
+        if len(tmpExplodeRef) == len(tmpExplodeNum):
+            geompy.addToStudy(filling, "faceNonCoupee_{0}".format(i + 1))
+            facesNonCoupees.append(filling)
+        else:
+            geompy.addToStudy(filling, "faceCoupee_{0}".format(i + 1))
+            facesCoupees.append(filling)
+    fillings = facesCoupees, facesNonCoupees
+    
+    for i, filling in enumerate(tmpBords):
+        tmpPartition = geompy.MakePartition([shapeDefaut], [filling], [], [], geompy.ShapeType["SHELL"], 0, [], 0, True)
+        tmpExplodeRef = geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["VERTEX"], True)
+        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(tmpPartition, geompy.ShapeType["VERTEX"], True)
+        if len(tmpExplodeRef) == len(tmpExplodeNum):
+            geompy.addToStudy(filling, "areteNonCoupee_{0}".format(i + 1))
+            aretesNonCoupees.append(filling)
+        else:
+            geompy.addToStudy(filling, "areteCoupee_{0}".format(i + 1))
+            aretesCoupees.append(filling)
+    bords_Partages = aretesCoupees, aretesNonCoupees
+    
+# TODO: A enlever
+#    for i, face in enumerate(setOfLines):
+#        for j, line in enumerate(face):
+#            geompy.addToStudy(line, 'face{0}_ligne{1}'.format(i + 1, j + 1))
+
+ #TODO: A enlever
+#    for i, filling in enumerate(fillings[0]):
+#        geompy.addToStudy(filling, 'filling_{0}'.format(i + 1))
+#        for j, line in enumerate(setOfLines[i]):
+#            geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
+    
+    return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
+    
\ No newline at end of file
index 9771d6c3cf634d12c4ca5fa5cadbbdd6a867985f..4e4453f2553bbd004d4e1a2b7403d360f6ddaed8 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (C) 2006-2014  EDF R&D
+# Copyright (C) 2006-2013  EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
+# version 2.1 of the License.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/src/Tools/blocFissure/ihm/fissureCoude_ui.py b/src/Tools/blocFissure/ihm/fissureCoude_ui.py
new file mode 100644 (file)
index 0000000..1f7fcb0
--- /dev/null
@@ -0,0 +1,492 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '/scratch/I27518/V7_3_build/V7_3_0/modules/src/SMESH_V7_3_0p2/src/Tools/blocFissure/ihm/fissureCoude.ui'
+#
+# Created: Wed Mar  5 09:49:21 2014
+#      by: PyQt4 UI code generator 4.9.6
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+try:
+    _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+    def _fromUtf8(s):
+        return s
+
+try:
+    _encoding = QtGui.QApplication.UnicodeUTF8
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig)
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName(_fromUtf8("Dialog"))
+        Dialog.resize(826, 540)
+        self.gridLayout_8 = QtGui.QGridLayout(Dialog)
+        self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
+        self.horizontalLayout_5 = QtGui.QHBoxLayout()
+        self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
+        self.verticalLayout_2 = QtGui.QVBoxLayout()
+        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
+        self.groupBox = QtGui.QGroupBox(Dialog)
+        self.groupBox.setObjectName(_fromUtf8("groupBox"))
+        self.verticalLayout_3 = QtGui.QVBoxLayout(self.groupBox)
+        self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
+        self.groupBox_3 = QtGui.QGroupBox(self.groupBox)
+        self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
+        self.gridLayout_2 = QtGui.QGridLayout(self.groupBox_3)
+        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
+        self.gridLayout = QtGui.QGridLayout()
+        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
+        self.label_3 = QtGui.QLabel(self.groupBox_3)
+        self.label_3.setObjectName(_fromUtf8("label_3"))
+        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
+        self.dsb_angle = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_angle.setDecimals(5)
+        self.dsb_angle.setMinimum(-181.0)
+        self.dsb_angle.setMaximum(180.0)
+        self.dsb_angle.setProperty("value", -181.0)
+        self.dsb_angle.setObjectName(_fromUtf8("dsb_angle"))
+        self.gridLayout.addWidget(self.dsb_angle, 0, 1, 1, 1)
+        self.label_2 = QtGui.QLabel(self.groupBox_3)
+        self.label_2.setObjectName(_fromUtf8("label_2"))
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.label_5 = QtGui.QLabel(self.groupBox_3)
+        self.label_5.setObjectName(_fromUtf8("label_5"))
+        self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1)
+        self.dsb_epais = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_epais.setDecimals(5)
+        self.dsb_epais.setMaximum(1000000.0)
+        self.dsb_epais.setObjectName(_fromUtf8("dsb_epais"))
+        self.gridLayout.addWidget(self.dsb_epais, 4, 1, 1, 1)
+        self.label_4 = QtGui.QLabel(self.groupBox_3)
+        self.label_4.setObjectName(_fromUtf8("label_4"))
+        self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
+        self.dsb_lTubeP2 = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_lTubeP2.setDecimals(5)
+        self.dsb_lTubeP2.setMaximum(1000000.0)
+        self.dsb_lTubeP2.setObjectName(_fromUtf8("dsb_lTubeP2"))
+        self.gridLayout.addWidget(self.dsb_lTubeP2, 3, 1, 1, 1)
+        self.label_6 = QtGui.QLabel(self.groupBox_3)
+        self.label_6.setObjectName(_fromUtf8("label_6"))
+        self.gridLayout.addWidget(self.label_6, 5, 0, 1, 1)
+        self.label = QtGui.QLabel(self.groupBox_3)
+        self.label.setObjectName(_fromUtf8("label"))
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.dsb_dext = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_dext.setDecimals(5)
+        self.dsb_dext.setMaximum(1000000.0)
+        self.dsb_dext.setObjectName(_fromUtf8("dsb_dext"))
+        self.gridLayout.addWidget(self.dsb_dext, 5, 1, 1, 1)
+        self.dsb_lTubeP1 = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_lTubeP1.setDecimals(5)
+        self.dsb_lTubeP1.setMaximum(1000000.0)
+        self.dsb_lTubeP1.setObjectName(_fromUtf8("dsb_lTubeP1"))
+        self.gridLayout.addWidget(self.dsb_lTubeP1, 2, 1, 1, 1)
+        self.dsb_rCintr = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_rCintr.setDecimals(5)
+        self.dsb_rCintr.setMaximum(1000000.0)
+        self.dsb_rCintr.setObjectName(_fromUtf8("dsb_rCintr"))
+        self.gridLayout.addWidget(self.dsb_rCintr, 1, 1, 1, 1)
+        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
+        self.verticalLayout_3.addWidget(self.groupBox_3)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.cb_optDiscrSain = QtGui.QCheckBox(Dialog)
+        self.cb_optDiscrSain.setObjectName(_fromUtf8("cb_optDiscrSain"))
+        self.verticalLayout_2.addWidget(self.cb_optDiscrSain)
+        self.gb_discrSain = QtGui.QGroupBox(Dialog)
+        self.gb_discrSain.setObjectName(_fromUtf8("gb_discrSain"))
+        self.gridLayout_4 = QtGui.QGridLayout(self.gb_discrSain)
+        self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
+        self.verticalLayout = QtGui.QVBoxLayout()
+        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
+        self.label_7 = QtGui.QLabel(self.gb_discrSain)
+        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.verticalLayout.addWidget(self.label_7)
+        self.gridLayout_3 = QtGui.QGridLayout()
+        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
+        self.label_8 = QtGui.QLabel(self.gb_discrSain)
+        self.label_8.setObjectName(_fromUtf8("label_8"))
+        self.gridLayout_3.addWidget(self.label_8, 0, 0, 1, 1)
+        self.sb_nbAxeTubeP1 = QtGui.QSpinBox(self.gb_discrSain)
+        self.sb_nbAxeTubeP1.setMaximum(10000)
+        self.sb_nbAxeTubeP1.setProperty("value", 15)
+        self.sb_nbAxeTubeP1.setObjectName(_fromUtf8("sb_nbAxeTubeP1"))
+        self.gridLayout_3.addWidget(self.sb_nbAxeTubeP1, 0, 1, 1, 1)
+        self.label_9 = QtGui.QLabel(self.gb_discrSain)
+        self.label_9.setObjectName(_fromUtf8("label_9"))
+        self.gridLayout_3.addWidget(self.label_9, 1, 0, 1, 1)
+        self.sb_nbAxeTubeP2 = QtGui.QSpinBox(self.gb_discrSain)
+        self.sb_nbAxeTubeP2.setMaximum(10000)
+        self.sb_nbAxeTubeP2.setProperty("value", 15)
+        self.sb_nbAxeTubeP2.setObjectName(_fromUtf8("sb_nbAxeTubeP2"))
+        self.gridLayout_3.addWidget(self.sb_nbAxeTubeP2, 1, 1, 1, 1)
+        self.label_10 = QtGui.QLabel(self.gb_discrSain)
+        self.label_10.setObjectName(_fromUtf8("label_10"))
+        self.gridLayout_3.addWidget(self.label_10, 2, 0, 1, 1)
+        self.sb_nbAxeCoude = QtGui.QSpinBox(self.gb_discrSain)
+        self.sb_nbAxeCoude.setMaximum(10000)
+        self.sb_nbAxeCoude.setProperty("value", 10)
+        self.sb_nbAxeCoude.setObjectName(_fromUtf8("sb_nbAxeCoude"))
+        self.gridLayout_3.addWidget(self.sb_nbAxeCoude, 2, 1, 1, 1)
+        self.label_11 = QtGui.QLabel(self.gb_discrSain)
+        self.label_11.setObjectName(_fromUtf8("label_11"))
+        self.gridLayout_3.addWidget(self.label_11, 3, 0, 1, 1)
+        self.sb_nbCirconf = QtGui.QSpinBox(self.gb_discrSain)
+        self.sb_nbCirconf.setMaximum(10000)
+        self.sb_nbCirconf.setProperty("value", 20)
+        self.sb_nbCirconf.setObjectName(_fromUtf8("sb_nbCirconf"))
+        self.gridLayout_3.addWidget(self.sb_nbCirconf, 3, 1, 1, 1)
+        self.label_13 = QtGui.QLabel(self.gb_discrSain)
+        self.label_13.setObjectName(_fromUtf8("label_13"))
+        self.gridLayout_3.addWidget(self.label_13, 4, 0, 1, 1)
+        self.sb_nbEpaisseur = QtGui.QSpinBox(self.gb_discrSain)
+        self.sb_nbEpaisseur.setMaximum(10000)
+        self.sb_nbEpaisseur.setProperty("value", 3)
+        self.sb_nbEpaisseur.setObjectName(_fromUtf8("sb_nbEpaisseur"))
+        self.gridLayout_3.addWidget(self.sb_nbEpaisseur, 4, 1, 1, 1)
+        self.verticalLayout.addLayout(self.gridLayout_3)
+        self.gridLayout_4.addLayout(self.verticalLayout, 0, 0, 1, 1)
+        self.verticalLayout_2.addWidget(self.gb_discrSain)
+        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_2.addItem(spacerItem)
+        self.horizontalLayout_5.addLayout(self.verticalLayout_2)
+        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_5.addItem(spacerItem1)
+        self.groupBox_2 = QtGui.QGroupBox(Dialog)
+        self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
+        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.groupBox_2)
+        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
+        self.verticalLayout_4 = QtGui.QVBoxLayout()
+        self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
+        self.groupBox_5 = QtGui.QGroupBox(self.groupBox_2)
+        self.groupBox_5.setObjectName(_fromUtf8("groupBox_5"))
+        self.gridLayout_12 = QtGui.QGridLayout(self.groupBox_5)
+        self.gridLayout_12.setObjectName(_fromUtf8("gridLayout_12"))
+        self.gridLayout_10 = QtGui.QGridLayout()
+        self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10"))
+        self.groupBox_4 = QtGui.QGroupBox(self.groupBox_5)
+        self.groupBox_4.setObjectName(_fromUtf8("groupBox_4"))
+        self.verticalLayout_7 = QtGui.QVBoxLayout(self.groupBox_4)
+        self.verticalLayout_7.setObjectName(_fromUtf8("verticalLayout_7"))
+        self.rb_fissInt = QtGui.QRadioButton(self.groupBox_4)
+        self.rb_fissInt.setObjectName(_fromUtf8("rb_fissInt"))
+        self.verticalLayout_7.addWidget(self.rb_fissInt)
+        self.rb_fissExt = QtGui.QRadioButton(self.groupBox_4)
+        self.rb_fissExt.setObjectName(_fromUtf8("rb_fissExt"))
+        self.verticalLayout_7.addWidget(self.rb_fissExt)
+        self.gridLayout_10.addWidget(self.groupBox_4, 0, 0, 1, 1)
+        spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_10.addItem(spacerItem2, 0, 1, 1, 1)
+        self.cb_forceEllipse = QtGui.QCheckBox(self.groupBox_5)
+        self.cb_forceEllipse.setAccessibleDescription(_fromUtf8(""))
+        self.cb_forceEllipse.setObjectName(_fromUtf8("cb_forceEllipse"))
+        self.gridLayout_10.addWidget(self.cb_forceEllipse, 1, 0, 1, 1)
+        spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_10.addItem(spacerItem3, 1, 1, 1, 1)
+        self.gridLayout_12.addLayout(self.gridLayout_10, 0, 0, 1, 1)
+        self.gridLayout_5 = QtGui.QGridLayout()
+        self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
+        self.dsb_azimut = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_azimut.setDecimals(5)
+        self.dsb_azimut.setMinimum(-181.0)
+        self.dsb_azimut.setMaximum(180.0)
+        self.dsb_azimut.setProperty("value", -181.0)
+        self.dsb_azimut.setObjectName(_fromUtf8("dsb_azimut"))
+        self.gridLayout_5.addWidget(self.dsb_azimut, 2, 1, 1, 1)
+        self.label_18 = QtGui.QLabel(self.groupBox_5)
+        self.label_18.setObjectName(_fromUtf8("label_18"))
+        self.gridLayout_5.addWidget(self.label_18, 0, 0, 1, 1)
+        self.dsb_profondeur = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_profondeur.setDecimals(5)
+        self.dsb_profondeur.setMaximum(1000000.0)
+        self.dsb_profondeur.setObjectName(_fromUtf8("dsb_profondeur"))
+        self.gridLayout_5.addWidget(self.dsb_profondeur, 0, 1, 1, 1)
+        self.label_19 = QtGui.QLabel(self.groupBox_5)
+        self.label_19.setObjectName(_fromUtf8("label_19"))
+        self.gridLayout_5.addWidget(self.label_19, 1, 0, 1, 1)
+        self.label_14 = QtGui.QLabel(self.groupBox_5)
+        self.label_14.setObjectName(_fromUtf8("label_14"))
+        self.gridLayout_5.addWidget(self.label_14, 2, 0, 1, 1)
+        self.label_15 = QtGui.QLabel(self.groupBox_5)
+        self.label_15.setObjectName(_fromUtf8("label_15"))
+        self.gridLayout_5.addWidget(self.label_15, 3, 0, 1, 1)
+        self.dsb_orientation = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_orientation.setDecimals(5)
+        self.dsb_orientation.setMinimum(-1.0)
+        self.dsb_orientation.setMaximum(90.0)
+        self.dsb_orientation.setProperty("value", -1.0)
+        self.dsb_orientation.setObjectName(_fromUtf8("dsb_orientation"))
+        self.gridLayout_5.addWidget(self.dsb_orientation, 3, 1, 1, 1)
+        self.dsb_longueur = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_longueur.setDecimals(5)
+        self.dsb_longueur.setMaximum(1000000.0)
+        self.dsb_longueur.setObjectName(_fromUtf8("dsb_longueur"))
+        self.gridLayout_5.addWidget(self.dsb_longueur, 1, 1, 1, 1)
+        self.gridLayout_12.addLayout(self.gridLayout_5, 1, 0, 1, 1)
+        self.groupBox_11 = QtGui.QGroupBox(self.groupBox_5)
+        self.groupBox_11.setObjectName(_fromUtf8("groupBox_11"))
+        self.gridLayout_11 = QtGui.QGridLayout(self.groupBox_11)
+        self.gridLayout_11.setObjectName(_fromUtf8("gridLayout_11"))
+        self.rb_absCurv = QtGui.QRadioButton(self.groupBox_11)
+        self.rb_absCurv.setObjectName(_fromUtf8("rb_absCurv"))
+        self.gridLayout_11.addWidget(self.rb_absCurv, 0, 0, 1, 1)
+        self.rb_posiAngul = QtGui.QRadioButton(self.groupBox_11)
+        self.rb_posiAngul.setObjectName(_fromUtf8("rb_posiAngul"))
+        self.gridLayout_11.addWidget(self.rb_posiAngul, 1, 0, 1, 1)
+        self.dsb_absCurv = QtGui.QDoubleSpinBox(self.groupBox_11)
+        self.dsb_absCurv.setDecimals(5)
+        self.dsb_absCurv.setMaximum(1000000.0)
+        self.dsb_absCurv.setObjectName(_fromUtf8("dsb_absCurv"))
+        self.gridLayout_11.addWidget(self.dsb_absCurv, 0, 1, 1, 1)
+        self.dsb_posiAngul = QtGui.QDoubleSpinBox(self.groupBox_11)
+        self.dsb_posiAngul.setDecimals(5)
+        self.dsb_posiAngul.setMinimum(-181.0)
+        self.dsb_posiAngul.setMaximum(180.0)
+        self.dsb_posiAngul.setProperty("value", -181.0)
+        self.dsb_posiAngul.setObjectName(_fromUtf8("dsb_posiAngul"))
+        self.gridLayout_11.addWidget(self.dsb_posiAngul, 1, 1, 1, 1)
+        self.gridLayout_12.addWidget(self.groupBox_11, 2, 0, 1, 1)
+        self.verticalLayout_4.addWidget(self.groupBox_5)
+        spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_4.addItem(spacerItem4)
+        self.horizontalLayout_2.addLayout(self.verticalLayout_4)
+        self.verticalLayout_6 = QtGui.QVBoxLayout()
+        self.verticalLayout_6.setObjectName(_fromUtf8("verticalLayout_6"))
+        self.groupBox_6 = QtGui.QGroupBox(self.groupBox_2)
+        self.groupBox_6.setObjectName(_fromUtf8("groupBox_6"))
+        self.gridLayout_7 = QtGui.QGridLayout(self.groupBox_6)
+        self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7"))
+        self.groupBox_8 = QtGui.QGroupBox(self.groupBox_6)
+        self.groupBox_8.setObjectName(_fromUtf8("groupBox_8"))
+        self.verticalLayout_5 = QtGui.QVBoxLayout(self.groupBox_8)
+        self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5"))
+        self.groupBox_9 = QtGui.QGroupBox(self.groupBox_8)
+        self.groupBox_9.setObjectName(_fromUtf8("groupBox_9"))
+        self.horizontalLayout_4 = QtGui.QHBoxLayout(self.groupBox_9)
+        self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
+        self.gridLayout_6 = QtGui.QGridLayout()
+        self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
+        self.label_21 = QtGui.QLabel(self.groupBox_9)
+        self.label_21.setObjectName(_fromUtf8("label_21"))
+        self.gridLayout_6.addWidget(self.label_21, 1, 0, 1, 1)
+        self.label_22 = QtGui.QLabel(self.groupBox_9)
+        self.label_22.setObjectName(_fromUtf8("label_22"))
+        self.gridLayout_6.addWidget(self.label_22, 2, 0, 1, 1)
+        self.sb_nbCouronne = QtGui.QSpinBox(self.groupBox_9)
+        self.sb_nbCouronne.setMinimum(1)
+        self.sb_nbCouronne.setMaximum(10000)
+        self.sb_nbCouronne.setProperty("value", 1)
+        self.sb_nbCouronne.setObjectName(_fromUtf8("sb_nbCouronne"))
+        self.gridLayout_6.addWidget(self.sb_nbCouronne, 2, 1, 1, 1)
+        self.label_23 = QtGui.QLabel(self.groupBox_9)
+        self.label_23.setObjectName(_fromUtf8("label_23"))
+        self.gridLayout_6.addWidget(self.label_23, 3, 0, 1, 1)
+        self.sb_nbSecteur = QtGui.QSpinBox(self.groupBox_9)
+        self.sb_nbSecteur.setMinimum(3)
+        self.sb_nbSecteur.setMaximum(10000)
+        self.sb_nbSecteur.setProperty("value", 3)
+        self.sb_nbSecteur.setObjectName(_fromUtf8("sb_nbSecteur"))
+        self.gridLayout_6.addWidget(self.sb_nbSecteur, 3, 1, 1, 1)
+        self.sb_nbTranches = QtGui.QSpinBox(self.groupBox_9)
+        self.sb_nbTranches.setMinimum(7)
+        self.sb_nbTranches.setMaximum(100000)
+        self.sb_nbTranches.setProperty("value", 7)
+        self.sb_nbTranches.setObjectName(_fromUtf8("sb_nbTranches"))
+        self.gridLayout_6.addWidget(self.sb_nbTranches, 1, 1, 1, 1)
+        self.label_20 = QtGui.QLabel(self.groupBox_9)
+        self.label_20.setObjectName(_fromUtf8("label_20"))
+        self.gridLayout_6.addWidget(self.label_20, 4, 0, 1, 1)
+        self.dsb_rayonTore = QtGui.QDoubleSpinBox(self.groupBox_9)
+        self.dsb_rayonTore.setEnabled(False)
+        self.dsb_rayonTore.setDecimals(5)
+        self.dsb_rayonTore.setMaximum(1000000.0)
+        self.dsb_rayonTore.setProperty("value", 2.0)
+        self.dsb_rayonTore.setObjectName(_fromUtf8("dsb_rayonTore"))
+        self.gridLayout_6.addWidget(self.dsb_rayonTore, 4, 1, 1, 1)
+        self.horizontalLayout_4.addLayout(self.gridLayout_6)
+        spacerItem5 = QtGui.QSpacerItem(6, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_4.addItem(spacerItem5)
+        self.verticalLayout_5.addWidget(self.groupBox_9)
+        self.cb_optDiscrFiss = QtGui.QCheckBox(self.groupBox_8)
+        self.cb_optDiscrFiss.setObjectName(_fromUtf8("cb_optDiscrFiss"))
+        self.verticalLayout_5.addWidget(self.cb_optDiscrFiss)
+        self.gb_discrFacesExternes = QtGui.QGroupBox(self.groupBox_8)
+        self.gb_discrFacesExternes.setEnabled(True)
+        self.gb_discrFacesExternes.setObjectName(_fromUtf8("gb_discrFacesExternes"))
+        self.horizontalLayout_3 = QtGui.QHBoxLayout(self.gb_discrFacesExternes)
+        self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
+        self.label_24 = QtGui.QLabel(self.gb_discrFacesExternes)
+        self.label_24.setObjectName(_fromUtf8("label_24"))
+        self.horizontalLayout_3.addWidget(self.label_24)
+        self.dsb_aretesFaceFissure = QtGui.QDoubleSpinBox(self.gb_discrFacesExternes)
+        self.dsb_aretesFaceFissure.setDecimals(5)
+        self.dsb_aretesFaceFissure.setMaximum(1000000.0)
+        self.dsb_aretesFaceFissure.setObjectName(_fromUtf8("dsb_aretesFaceFissure"))
+        self.horizontalLayout_3.addWidget(self.dsb_aretesFaceFissure)
+        spacerItem6 = QtGui.QSpacerItem(1, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_3.addItem(spacerItem6)
+        self.verticalLayout_5.addWidget(self.gb_discrFacesExternes)
+        self.gridLayout_7.addWidget(self.groupBox_8, 1, 0, 1, 2)
+        self.gb_zoneRemail = QtGui.QGroupBox(self.groupBox_6)
+        self.gb_zoneRemail.setEnabled(True)
+        self.gb_zoneRemail.setObjectName(_fromUtf8("gb_zoneRemail"))
+        self.gridLayout_16 = QtGui.QGridLayout(self.gb_zoneRemail)
+        self.gridLayout_16.setObjectName(_fromUtf8("gridLayout_16"))
+        self.gridLayout_17 = QtGui.QGridLayout()
+        self.gridLayout_17.setObjectName(_fromUtf8("gridLayout_17"))
+        self.dsb_influence = QtGui.QDoubleSpinBox(self.gb_zoneRemail)
+        self.dsb_influence.setDecimals(5)
+        self.dsb_influence.setMaximum(1000000.0)
+        self.dsb_influence.setObjectName(_fromUtf8("dsb_influence"))
+        self.gridLayout_17.addWidget(self.dsb_influence, 1, 1, 1, 1)
+        self.label_25 = QtGui.QLabel(self.gb_zoneRemail)
+        self.label_25.setObjectName(_fromUtf8("label_25"))
+        self.gridLayout_17.addWidget(self.label_25, 1, 0, 1, 1)
+        self.gridLayout_16.addLayout(self.gridLayout_17, 0, 0, 1, 1)
+        spacerItem7 = QtGui.QSpacerItem(47, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_16.addItem(spacerItem7, 0, 1, 1, 1)
+        self.gridLayout_7.addWidget(self.gb_zoneRemail, 2, 0, 1, 1)
+        self.verticalLayout_6.addWidget(self.groupBox_6)
+        spacerItem8 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_6.addItem(spacerItem8)
+        self.horizontalLayout_2.addLayout(self.verticalLayout_6)
+        self.horizontalLayout_5.addWidget(self.groupBox_2)
+        self.gridLayout_8.addLayout(self.horizontalLayout_5, 0, 0, 1, 1)
+        self.horizontalLayout_6 = QtGui.QHBoxLayout()
+        self.horizontalLayout_6.setObjectName(_fromUtf8("horizontalLayout_6"))
+        spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_6.addItem(spacerItem9)
+        self.lb_calcul = QtGui.QLabel(Dialog)
+        font = QtGui.QFont()
+        font.setPointSize(24)
+        self.lb_calcul.setFont(font)
+        self.lb_calcul.setObjectName(_fromUtf8("lb_calcul"))
+        self.horizontalLayout_6.addWidget(self.lb_calcul)
+        spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_6.addItem(spacerItem10)
+        self.gridLayout_8.addLayout(self.horizontalLayout_6, 1, 0, 1, 1)
+        spacerItem11 = QtGui.QSpacerItem(20, 4, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.gridLayout_8.addItem(spacerItem11, 2, 0, 1, 1)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
+        self.pb_reset = QtGui.QPushButton(Dialog)
+        self.pb_reset.setObjectName(_fromUtf8("pb_reset"))
+        self.horizontalLayout.addWidget(self.pb_reset)
+        self.pb_valPrec = QtGui.QPushButton(Dialog)
+        self.pb_valPrec.setObjectName(_fromUtf8("pb_valPrec"))
+        self.horizontalLayout.addWidget(self.pb_valPrec)
+        self.pb_recharger = QtGui.QPushButton(Dialog)
+        self.pb_recharger.setObjectName(_fromUtf8("pb_recharger"))
+        self.horizontalLayout.addWidget(self.pb_recharger)
+        self.pb_sauver = QtGui.QPushButton(Dialog)
+        self.pb_sauver.setObjectName(_fromUtf8("pb_sauver"))
+        self.horizontalLayout.addWidget(self.pb_sauver)
+        spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem12)
+        self.buttonBox = QtGui.QDialogButtonBox(Dialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
+        self.horizontalLayout.addWidget(self.buttonBox)
+        self.gridLayout_8.addLayout(self.horizontalLayout, 3, 0, 1, 1)
+
+        self.retranslateUi(Dialog)
+        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept)
+        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject)
+        QtCore.QObject.connect(self.cb_optDiscrSain, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.gb_discrSain.setShown)
+        QtCore.QObject.connect(self.cb_optDiscrFiss, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.gb_discrFacesExternes.setShown)
+        QtCore.QObject.connect(self.cb_optDiscrFiss, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.gb_zoneRemail.setShown)
+        QtCore.QObject.connect(self.cb_optDiscrFiss, QtCore.SIGNAL(_fromUtf8("clicked(bool)")), self.dsb_rayonTore.setEnabled)
+        QtCore.QObject.connect(self.rb_absCurv, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.dsb_absCurv.setEnabled)
+        QtCore.QObject.connect(self.rb_posiAngul, QtCore.SIGNAL(_fromUtf8("toggled(bool)")), self.dsb_posiAngul.setEnabled)
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
+        self.groupBox.setTitle(_translate("Dialog", "Coude Sain", None))
+        self.groupBox_3.setTitle(_translate("Dialog", "Géométrie", None))
+        self.label_3.setText(_translate("Dialog", "L_TUBE_P1", None))
+        self.dsb_angle.setToolTip(_translate("Dialog", "Valeur de l\'angle du coude en degrés", None))
+        self.label_2.setText(_translate("Dialog", "R_CINTR", None))
+        self.label_5.setText(_translate("Dialog", "EPAIS", None))
+        self.dsb_epais.setToolTip(_translate("Dialog", "Valeur de l’épaisseur du coude et des embouts", None))
+        self.label_4.setText(_translate("Dialog", "L_TUBE_P2", None))
+        self.dsb_lTubeP2.setToolTip(_translate("Dialog", "Valeur de la longueur de l’embout P2 à l’extrémité duquel seront appliqués les chargements", None))
+        self.label_6.setText(_translate("Dialog", "DEXT", None))
+        self.label.setText(_translate("Dialog", "ANGLE", None))
+        self.dsb_dext.setToolTip(_translate("Dialog", "Valeur du diamètre externe du coude et des embouts droits", None))
+        self.dsb_lTubeP1.setToolTip(_translate("Dialog", "Valeur de la longueur de l’embout P1 à l’extrémité duquel seront appliqués les chargements", None))
+        self.dsb_rCintr.setToolTip(_translate("Dialog", "Valeur du rayon de cintrage du coude", None))
+        self.cb_optDiscrSain.setToolTip(_translate("Dialog", "Paramètres optionnels de discretisation", None))
+        self.cb_optDiscrSain.setText(_translate("Dialog", "Options de discretisation", None))
+        self.gb_discrSain.setTitle(_translate("Dialog", "Maillage", None))
+        self.label_7.setText(_translate("Dialog", "Nombres de segments", None))
+        self.label_8.setText(_translate("Dialog", "NB_AXE_TUBE_P1", None))
+        self.sb_nbAxeTubeP1.setToolTip(_translate("Dialog", "Nombre d’éléments le long de l’embout P1", None))
+        self.label_9.setText(_translate("Dialog", "NB_AXE_TUBE_P2", None))
+        self.sb_nbAxeTubeP2.setToolTip(_translate("Dialog", "Nombre d’éléments le long de l’embout P2", None))
+        self.label_10.setText(_translate("Dialog", "NB_AXE_COUDE", None))
+        self.sb_nbAxeCoude.setToolTip(_translate("Dialog", "Nombre d’éléments le long de l’axe du coude", None))
+        self.label_11.setText(_translate("Dialog", "NB_CIRCONF", None))
+        self.sb_nbCirconf.setToolTip(_translate("Dialog", "<html><head/><body><p>Nombre d’éléments le long de la circonférence</p><p>(nombre pair)</p></body></html>", None))
+        self.label_13.setText(_translate("Dialog", "NB_EPAISSEUR", None))
+        self.sb_nbEpaisseur.setToolTip(_translate("Dialog", "Nombre d\'éléments dans l\'épaisseur", None))
+        self.groupBox_2.setTitle(_translate("Dialog", "Fissure", None))
+        self.groupBox_5.setTitle(_translate("Dialog", "Géométrie fissure", None))
+        self.groupBox_4.setTitle(_translate("Dialog", "position", None))
+        self.rb_fissInt.setToolTip(_translate("Dialog", "<html><head/><body><p>Fissure positionnée sur la face interne</p></body></html>", None))
+        self.rb_fissInt.setText(_translate("Dialog", "fissure interne", None))
+        self.rb_fissExt.setToolTip(_translate("Dialog", "<html><head/><body><p>Fissure positionnée sur la face externe</p></body></html>", None))
+        self.rb_fissExt.setText(_translate("Dialog", "fissure externe", None))
+        self.cb_forceEllipse.setToolTip(_translate("Dialog", "<html><head/><body><p>Forcer une fissure de forme elliptique, même si elle est longue</p></body></html>", None))
+        self.cb_forceEllipse.setText(_translate("Dialog", "forcer elliptique", None))
+        self.dsb_azimut.setToolTip(_translate("Dialog", "Valeur de la position circonférentielle du centre de la fissure comptée positivement en degrés à partir de l’extrados jusqu’à l’intrados en passant par le flanc gauche", None))
+        self.label_18.setText(_translate("Dialog", "PROFONDEUR", None))
+        self.dsb_profondeur.setToolTip(_translate("Dialog", "<html><head/><body><p>Profondeur de la fissure :</p><p>distance maximale entre le fond de fissure et la peau interne ou externe sur laquelle débouche la fissure</p></body></html>", None))
+        self.label_19.setText(_translate("Dialog", "LONGUEUR", None))
+        self.label_14.setText(_translate("Dialog", "AZIMUT", None))
+        self.label_15.setText(_translate("Dialog", "ORIEN", None))
+        self.dsb_orientation.setToolTip(_translate("Dialog", "Valeur de l’angle en degrés formé par le grand axe de la fissure et la génératrice du coude donnant ainsi l’orientation du défaut", None))
+        self.dsb_longueur.setToolTip(_translate("Dialog", "Longueur du grand axe de la fissure mesurée sur le coude en peau interne ou externe, suivant la peau sur laquelle se trouve la fissure", None))
+        self.groupBox_11.setTitle(_translate("Dialog", "position longitudinale", None))
+        self.rb_absCurv.setToolTip(_translate("Dialog", "Définition de la position longitudinale par une abscisse curiviligne", None))
+        self.rb_absCurv.setText(_translate("Dialog", "ABS_CURV", None))
+        self.rb_posiAngul.setToolTip(_translate("Dialog", "Définition de la position longitudinale par un angle", None))
+        self.rb_posiAngul.setText(_translate("Dialog", "POSI_ANGUL", None))
+        self.dsb_absCurv.setToolTip(_translate("Dialog", "<html><head/><body><p>Valeur de la position longitudinale du centre de la fissure définie par rapport à l\'interface de l\'embout P1 :</p><p>Abcisse curviligne le long de l\'axe du coude, sur la peau interne ou externe, selon la position de la fissure.</p><p><br/></p></body></html>", None))
+        self.dsb_posiAngul.setToolTip(_translate("Dialog", "<html><head/><body><p>Valeur de la position longitudinale du centre de la fissure définie par rapport à l\'interface de l\'embout P1 :</p><p>Angle en degrés formé par la section contenant le centre de la fissure et l\'interface de l\'embout P1.</p><p><br/></p></body></html>", None))
+        self.groupBox_6.setTitle(_translate("Dialog", "Maillage fissure", None))
+        self.groupBox_8.setTitle(_translate("Dialog", "maillage zone de fissure", None))
+        self.groupBox_9.setTitle(_translate("Dialog", "pipe rayonnant", None))
+        self.label_21.setText(_translate("Dialog", "NB_TRANCHES", None))
+        self.label_22.setText(_translate("Dialog", "NB_COURONNE", None))
+        self.sb_nbCouronne.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>nombre de couronnes du maillage rayonnant autour de la ligne de fond de fissure, y compris la couronne centrale formée de prismes.</p></body></html>", None))
+        self.label_23.setText(_translate("Dialog", "NB_SECTEUR", None))
+        self.sb_nbSecteur.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>nombre de secteurs selon un cercle normal au fond de fissure.</p></body></html>", None))
+        self.sb_nbTranches.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>Nombre de mailles (approximatif) le long de la ligne de fond de fissure.</p></body></html>", None))
+        self.label_20.setText(_translate("Dialog", "RAYON_TORE", None))
+        self.dsb_rayonTore.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>Rayon du pipe.</p></body></html>", None))
+        self.cb_optDiscrFiss.setToolTip(_translate("Dialog", "Paramètres optionnels de discrétisation", None))
+        self.cb_optDiscrFiss.setText(_translate("Dialog", "Options de discretisation", None))
+        self.gb_discrFacesExternes.setTitle(_translate("Dialog", "faces externes", None))
+        self.label_24.setText(_translate("Dialog", "aretes face fissure", None))
+        self.dsb_aretesFaceFissure.setToolTip(_translate("Dialog", "<html><head/><body><p>Faces externes de la zone à remailler.</p><p>Mailage en triangles : valeur cible des arêtes.</p></body></html>", None))
+        self.gb_zoneRemail.setTitle(_translate("Dialog", "identification zone à remailler", None))
+        self.dsb_influence.setToolTip(_translate("Dialog", "<html><head/><body><p>La zone remaillée contiendra toutes les mailles du maillage sain à une distance de la face de fissure inférieure à cette valeur.</p></body></html>", None))
+        self.label_25.setText(_translate("Dialog", "distance influence", None))
+        self.lb_calcul.setText(_translate("Dialog", "--- Calcul en cours ---", None))
+        self.pb_reset.setToolTip(_translate("Dialog", "réinitialisation de tous les paramètres à leur valeur par défaut", None))
+        self.pb_reset.setText(_translate("Dialog", "Reset", None))
+        self.pb_valPrec.setToolTip(_translate("Dialog", "réinitialisation de tous les paramètres à leur valeur de la précédente éxécution", None))
+        self.pb_valPrec.setText(_translate("Dialog", "Précédent", None))
+        self.pb_recharger.setToolTip(_translate("Dialog", "réinitialisation des paramètres à partir d\'un fichier préalablement sauvegardé", None))
+        self.pb_recharger.setText(_translate("Dialog", "Recharger", None))
+        self.pb_sauver.setToolTip(_translate("Dialog", "sauvegarde des paramètres dans un fichier à choisir", None))
+        self.pb_sauver.setText(_translate("Dialog", "Sauver", None))
+
diff --git a/src/Tools/blocFissure/ihm/fissureGenerale_ui.py b/src/Tools/blocFissure/ihm/fissureGenerale_ui.py
new file mode 100644 (file)
index 0000000..63ea2f3
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '/scratch/I27518/V7_3_build/V7_3_0/modules/src/SMESH_V7_3_0p2/src/Tools/blocFissure/ihm/fissureGenerale.ui'
+#
+# Created: Wed Mar  5 09:49:21 2014
+#      by: PyQt4 UI code generator 4.9.6
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+try:
+    _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+    def _fromUtf8(s):
+        return s
+
+try:
+    _encoding = QtGui.QApplication.UnicodeUTF8
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig)
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName(_fromUtf8("Dialog"))
+        Dialog.resize(631, 490)
+        self.gridLayout_11 = QtGui.QGridLayout(Dialog)
+        self.gridLayout_11.setObjectName(_fromUtf8("gridLayout_11"))
+        self.groupBox = QtGui.QGroupBox(Dialog)
+        self.groupBox.setObjectName(_fromUtf8("groupBox"))
+        self.gridLayout_4 = QtGui.QGridLayout(self.groupBox)
+        self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
+        self.gridLayout = QtGui.QGridLayout()
+        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
+        self.pb_maillage = QtGui.QPushButton(self.groupBox)
+        self.pb_maillage.setObjectName(_fromUtf8("pb_maillage"))
+        self.gridLayout.addWidget(self.pb_maillage, 0, 0, 1, 1)
+        self.le_maillage = QtGui.QLineEdit(self.groupBox)
+        self.le_maillage.setObjectName(_fromUtf8("le_maillage"))
+        self.gridLayout.addWidget(self.le_maillage, 0, 1, 1, 1)
+        self.pb_facefiss = QtGui.QPushButton(self.groupBox)
+        self.pb_facefiss.setObjectName(_fromUtf8("pb_facefiss"))
+        self.gridLayout.addWidget(self.pb_facefiss, 1, 0, 1, 1)
+        self.le_facefiss = QtGui.QLineEdit(self.groupBox)
+        self.le_facefiss.setObjectName(_fromUtf8("le_facefiss"))
+        self.gridLayout.addWidget(self.le_facefiss, 1, 1, 1, 1)
+        self.gridLayout_4.addLayout(self.gridLayout, 0, 0, 1, 1)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
+        self.label = QtGui.QLabel(self.groupBox)
+        self.label.setObjectName(_fromUtf8("label"))
+        self.horizontalLayout.addWidget(self.label)
+        self.le_fondfiss = QtGui.QLineEdit(self.groupBox)
+        self.le_fondfiss.setObjectName(_fromUtf8("le_fondfiss"))
+        self.horizontalLayout.addWidget(self.le_fondfiss)
+        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.gridLayout_4.addLayout(self.horizontalLayout, 1, 0, 1, 1)
+        self.gridLayout_11.addWidget(self.groupBox, 0, 0, 1, 2)
+        self.gridLayout_10 = QtGui.QGridLayout()
+        self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10"))
+        self.groupBox_2 = QtGui.QGroupBox(Dialog)
+        self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
+        self.gridLayout_12 = QtGui.QGridLayout(self.groupBox_2)
+        self.gridLayout_12.setObjectName(_fromUtf8("gridLayout_12"))
+        self.gridLayout_6 = QtGui.QGridLayout()
+        self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
+        self.label_2 = QtGui.QLabel(self.groupBox_2)
+        self.label_2.setObjectName(_fromUtf8("label_2"))
+        self.gridLayout_6.addWidget(self.label_2, 0, 0, 1, 1)
+        self.dsb_influence = QtGui.QDoubleSpinBox(self.groupBox_2)
+        self.dsb_influence.setObjectName(_fromUtf8("dsb_influence"))
+        self.gridLayout_6.addWidget(self.dsb_influence, 0, 1, 1, 1)
+        self.gridLayout_12.addLayout(self.gridLayout_6, 0, 0, 1, 1)
+        spacerItem1 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_12.addItem(spacerItem1, 0, 1, 1, 1)
+        self.groupBox_3 = QtGui.QGroupBox(self.groupBox_2)
+        self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
+        self.gridLayout_5 = QtGui.QGridLayout(self.groupBox_3)
+        self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
+        self.gridLayout_2 = QtGui.QGridLayout()
+        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
+        self.label_3 = QtGui.QLabel(self.groupBox_3)
+        self.label_3.setObjectName(_fromUtf8("label_3"))
+        self.gridLayout_2.addWidget(self.label_3, 0, 0, 1, 1)
+        self.dsb_meshBrepMin = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_meshBrepMin.setMaximum(1000000.0)
+        self.dsb_meshBrepMin.setObjectName(_fromUtf8("dsb_meshBrepMin"))
+        self.gridLayout_2.addWidget(self.dsb_meshBrepMin, 0, 1, 1, 1)
+        self.label_4 = QtGui.QLabel(self.groupBox_3)
+        self.label_4.setObjectName(_fromUtf8("label_4"))
+        self.gridLayout_2.addWidget(self.label_4, 1, 0, 1, 1)
+        self.dsb_meshBrepMax = QtGui.QDoubleSpinBox(self.groupBox_3)
+        self.dsb_meshBrepMax.setMaximum(1000000.0)
+        self.dsb_meshBrepMax.setObjectName(_fromUtf8("dsb_meshBrepMax"))
+        self.gridLayout_2.addWidget(self.dsb_meshBrepMax, 1, 1, 1, 1)
+        self.gridLayout_5.addLayout(self.gridLayout_2, 0, 0, 1, 1)
+        spacerItem2 = QtGui.QSpacerItem(34, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_5.addItem(spacerItem2, 0, 1, 1, 1)
+        self.gridLayout_12.addWidget(self.groupBox_3, 1, 0, 1, 2)
+        self.gridLayout_10.addWidget(self.groupBox_2, 0, 0, 1, 1)
+        self.groupBox_4 = QtGui.QGroupBox(Dialog)
+        self.groupBox_4.setObjectName(_fromUtf8("groupBox_4"))
+        self.gridLayout_9 = QtGui.QGridLayout(self.groupBox_4)
+        self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9"))
+        self.groupBox_5 = QtGui.QGroupBox(self.groupBox_4)
+        self.groupBox_5.setObjectName(_fromUtf8("groupBox_5"))
+        self.gridLayout_7 = QtGui.QGridLayout(self.groupBox_5)
+        self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7"))
+        self.gridLayout_3 = QtGui.QGridLayout()
+        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
+        self.label_5 = QtGui.QLabel(self.groupBox_5)
+        self.label_5.setObjectName(_fromUtf8("label_5"))
+        self.gridLayout_3.addWidget(self.label_5, 0, 0, 1, 1)
+        self.dsb_rayonPipe = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_rayonPipe.setMaximum(1000000.0)
+        self.dsb_rayonPipe.setObjectName(_fromUtf8("dsb_rayonPipe"))
+        self.gridLayout_3.addWidget(self.dsb_rayonPipe, 0, 1, 1, 1)
+        self.label_6 = QtGui.QLabel(self.groupBox_5)
+        self.label_6.setObjectName(_fromUtf8("label_6"))
+        self.gridLayout_3.addWidget(self.label_6, 1, 0, 1, 1)
+        self.dsb_lenSegPipe = QtGui.QDoubleSpinBox(self.groupBox_5)
+        self.dsb_lenSegPipe.setMaximum(1000000.0)
+        self.dsb_lenSegPipe.setObjectName(_fromUtf8("dsb_lenSegPipe"))
+        self.gridLayout_3.addWidget(self.dsb_lenSegPipe, 1, 1, 1, 1)
+        self.label_7 = QtGui.QLabel(self.groupBox_5)
+        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.gridLayout_3.addWidget(self.label_7, 2, 0, 1, 1)
+        self.sb_couronnes = QtGui.QSpinBox(self.groupBox_5)
+        self.sb_couronnes.setMinimum(2)
+        self.sb_couronnes.setMaximum(10000)
+        self.sb_couronnes.setProperty("value", 4)
+        self.sb_couronnes.setObjectName(_fromUtf8("sb_couronnes"))
+        self.gridLayout_3.addWidget(self.sb_couronnes, 2, 1, 1, 1)
+        self.label_8 = QtGui.QLabel(self.groupBox_5)
+        self.label_8.setObjectName(_fromUtf8("label_8"))
+        self.gridLayout_3.addWidget(self.label_8, 3, 0, 1, 1)
+        self.sb_secteurs = QtGui.QSpinBox(self.groupBox_5)
+        self.sb_secteurs.setMinimum(4)
+        self.sb_secteurs.setMaximum(10000)
+        self.sb_secteurs.setProperty("value", 8)
+        self.sb_secteurs.setObjectName(_fromUtf8("sb_secteurs"))
+        self.gridLayout_3.addWidget(self.sb_secteurs, 3, 1, 1, 1)
+        self.gridLayout_7.addLayout(self.gridLayout_3, 0, 0, 1, 1)
+        spacerItem3 = QtGui.QSpacerItem(6, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_7.addItem(spacerItem3, 0, 1, 1, 1)
+        self.gridLayout_9.addWidget(self.groupBox_5, 0, 0, 1, 1)
+        self.groupBox_6 = QtGui.QGroupBox(self.groupBox_4)
+        self.groupBox_6.setObjectName(_fromUtf8("groupBox_6"))
+        self.gridLayout_8 = QtGui.QGridLayout(self.groupBox_6)
+        self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
+        self.label_9 = QtGui.QLabel(self.groupBox_6)
+        self.label_9.setObjectName(_fromUtf8("label_9"))
+        self.gridLayout_8.addWidget(self.label_9, 0, 0, 1, 1)
+        self.dsb_areteFaceFissure = QtGui.QDoubleSpinBox(self.groupBox_6)
+        self.dsb_areteFaceFissure.setMaximum(1000000.0)
+        self.dsb_areteFaceFissure.setObjectName(_fromUtf8("dsb_areteFaceFissure"))
+        self.gridLayout_8.addWidget(self.dsb_areteFaceFissure, 0, 1, 1, 1)
+        spacerItem4 = QtGui.QSpacerItem(1, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout_8.addItem(spacerItem4, 0, 2, 1, 1)
+        self.gridLayout_9.addWidget(self.groupBox_6, 1, 0, 1, 1)
+        self.gridLayout_10.addWidget(self.groupBox_4, 0, 1, 2, 1)
+        spacerItem5 = QtGui.QSpacerItem(20, 112, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.gridLayout_10.addItem(spacerItem5, 1, 0, 1, 1)
+        self.gridLayout_11.addLayout(self.gridLayout_10, 1, 0, 1, 2)
+        spacerItem6 = QtGui.QSpacerItem(20, 13, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.gridLayout_11.addItem(spacerItem6, 2, 1, 1, 1)
+        self.horizontalLayout_5 = QtGui.QHBoxLayout()
+        self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
+        spacerItem7 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout_5.addItem(spacerItem7)
+        self.bb_OkCancel = QtGui.QDialogButtonBox(Dialog)
+        self.bb_OkCancel.setOrientation(QtCore.Qt.Horizontal)
+        self.bb_OkCancel.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
+        self.bb_OkCancel.setObjectName(_fromUtf8("bb_OkCancel"))
+        self.horizontalLayout_5.addWidget(self.bb_OkCancel)
+        self.gridLayout_11.addLayout(self.horizontalLayout_5, 3, 0, 1, 1)
+
+        self.retranslateUi(Dialog)
+        QtCore.QObject.connect(self.bb_OkCancel, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept)
+        QtCore.QObject.connect(self.bb_OkCancel, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject)
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
+        Dialog.setToolTip(_translate("Dialog", "<html><head/><body><p>Insertion d\'un maillage de fissure dans un maillage hexaédrique sain.</p><p>Le maillage sain est fourni sous forme de fichier Med.</p><p>La face de fissure est décrite par une géométrie dans un fichier brep.</p><p>La ou les arêtes de fond de fissure sont données par leurs index dans la face de fissure.</p><p>La procédure identfie des mailles saines à enlever et remailler, construit un maillage régulier rayonnant autour de la ligne de fond de fissure, reconstitue les faces externes en triangles, complète la zone à remailler en tétraèdres.</p></body></html>", None))
+        self.groupBox.setTitle(_translate("Dialog", "maillage sain et géometries de fissure", None))
+        self.pb_maillage.setToolTip(_translate("Dialog", "<html><head/><body><p>sélection du fichier med du maillage sain (hexaèdres)</p></body></html>", None))
+        self.pb_maillage.setText(_translate("Dialog", "maillage sain", None))
+        self.le_maillage.setToolTip(_translate("Dialog", "<html><head/><body><p>fichier med du maillage sain (hexaèdres)</p></body></html>", None))
+        self.pb_facefiss.setToolTip(_translate("Dialog", "<html><head/><body><p>sélection du fichier brep (géométrie) décrivant la face de fissure.</p></body></html>", None))
+        self.pb_facefiss.setText(_translate("Dialog", "face fissure", None))
+        self.le_facefiss.setToolTip(_translate("Dialog", "<html><head/><body><p>fichier brep (géométrie) décrivant la face de fissure.</p></body></html>", None))
+        self.label.setText(_translate("Dialog", "index edges fond fissure", None))
+        self.le_fondfiss.setToolTip(_translate("Dialog", "<html><head/><body><p>Index des edges décrivant le fond de fissure, dans la face de fissure.</p><p>Sous forme d\'une liste Python.</p><p>Exemples :<span style=\" color:#00ffff;\"/><span style=\" font-style:italic; color:#00ffff;\">[5,9]</span> ou <span style=\" font-style:italic; color:#00ffff;\">[3]</span></p><p>(on peut récupérer ces valeurs à l\'aide du dialogue de création de groupes d\'edges, dans GEOM)</p></body></html>", None))
+        self.groupBox_2.setTitle(_translate("Dialog", "identification zone à remailler", None))
+        self.label_2.setText(_translate("Dialog", "distance influence", None))
+        self.dsb_influence.setToolTip(_translate("Dialog", "<html><head/><body><p>La zone remaillée contiendra toutes les mailles du maillage sain à une distance de la face de fissure inférieure à cette valeur.</p></body></html>", None))
+        self.groupBox_3.setTitle(_translate("Dialog", "prémaillage face fissure", None))
+        self.label_3.setText(_translate("Dialog", "min", None))
+        self.dsb_meshBrepMin.setToolTip(_translate("Dialog", "<html><head/><body><p>Pour faciliter la détermination de la zone à remailler, il faut des points sur la face de fissure, suffisament resserrés, en relation avec la taille des mailles du maillage sain.</p><p>Ces points sont obtenus par pré maillage de la face de fissure, en triangles. On donne la taille min et max des triangles.</p></body></html>", None))
+        self.label_4.setText(_translate("Dialog", "max", None))
+        self.dsb_meshBrepMax.setToolTip(_translate("Dialog", "<html><head/><body><p>Pour faciliter la détermination de la zone à remailler, il faut des points sur la face de fissure, suffisament resserrés, en relation avec la taille des mailles du maillage sain.</p><p>Ces points sont obtenus par pré maillage de la face de fissure, en triangles. On donne la taille min et max des triangles.</p></body></html>", None))
+        self.groupBox_4.setTitle(_translate("Dialog", "maillage zone de fissure", None))
+        self.groupBox_5.setTitle(_translate("Dialog", "pipe rayonnant", None))
+        self.label_5.setText(_translate("Dialog", "rayon pipe", None))
+        self.dsb_rayonPipe.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>Rayon du pipe.</p></body></html>", None))
+        self.label_6.setText(_translate("Dialog", "longueur mailles", None))
+        self.dsb_lenSegPipe.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>Longueur des mailles le long de la ligne de fond de fissure.</p></body></html>", None))
+        self.label_7.setText(_translate("Dialog", "couronnes", None))
+        self.sb_couronnes.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>nombre de couronnes de mailles autour de la ligne de fond de fissure.</p></body></html>", None))
+        self.label_8.setText(_translate("Dialog", "secteurs", None))
+        self.sb_secteurs.setToolTip(_translate("Dialog", "<html><head/><body><p>Pipe rayonnant construit sur le fond de fissure :</p><p>nombre de secteurs selon un cercle normal au fond de fissure.</p></body></html>", None))
+        self.groupBox_6.setTitle(_translate("Dialog", "faces externes", None))
+        self.label_9.setText(_translate("Dialog", "aretes face fissure", None))
+        self.dsb_areteFaceFissure.setToolTip(_translate("Dialog", "<html><head/><body><p>Faces externes de la zone à remailler.</p><p>Mailage en triangles : valeur cible des arêtes.</p></body></html>", None))
+
diff --git a/src/Tools/blocFissure/lanceurCasTestCoinTriple.py b/src/Tools/blocFissure/lanceurCasTestCoinTriple.py
new file mode 100644 (file)
index 0000000..48836a4
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+dicoParams = dict(nomCas            = 'casTestCoinTripleOlivier',
+                  maillageSain      = '/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/cubeTestCoinTriple.med',
+                  brepFaceFissure   = "/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/fissureTestCoinTriple.brep",
+                  edgeFissIds       = [4],
+                  lgInfluence       = 50,
+                  meshBrep          = (5,10),
+                  rayonPipe         = 10,
+                  lenSegPipe        = 7,
+                  nbSegRad          = 5,
+                  nbSegCercle       = 10,
+                  areteFaceFissure  = 10)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/lanceurCasTestCoinTripleMilieu.py b/src/Tools/blocFissure/lanceurCasTestCoinTripleMilieu.py
new file mode 100644 (file)
index 0000000..ff1e295
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: iso-8859-1 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+dicoParams = dict(nomCas            = 'casTestCoinTriple',
+                  maillageSain      = '/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/cubeTestCoinTriple.med',
+                  brepFaceFissure   = "/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/fissureMilieuTestCoinTriple.brep",
+                  edgeFissIds       = [4],
+                  lgInfluence       = 50,
+                  meshBrep          = (5,10),
+                  rayonPipe         = 10,
+                  lenSegPipe        = 7,
+                  nbSegRad          = 5,
+                  nbSegCercle       = 10,
+                  areteFaceFissure  = 10)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/lanceurCasTestCoinTripleTransverse.py b/src/Tools/blocFissure/lanceurCasTestCoinTripleTransverse.py
new file mode 100644 (file)
index 0000000..3656288
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: iso-8859-1 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+dicoParams = dict(nomCas            = 'casTestCoinTriple',
+                  maillageSain      = '/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/cubeTestCoinTriple.med',
+                  brepFaceFissure   = "/local00/home/I48174/Documents/tubulure_simple/blocFissure/materielCoinSymetrie/fissureTransverseTestCoinTriple.brep",
+                  edgeFissIds       = [6],
+                  lgInfluence       = 50,
+                  meshBrep          = (5,10),
+                  rayonPipe         = 10,
+                  lenSegPipe        = 7,
+                  nbSegRad          = 5,
+                  nbSegCercle       = 10,
+                  areteFaceFissure  = 10)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/lanceurSoudureArrondieTest.py b/src/Tools/blocFissure/lanceurSoudureArrondieTest.py
new file mode 100644 (file)
index 0000000..bd91562
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: iso-8859-1 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'areteArrondieSoudure.med'
+crack = 'fissureSoudureTest.brep'
+
+dicoParams = dict(nomCas            = 'casTestCoinTriple',
+                  maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFissIds       = [4],
+                  lgInfluence       = 30,
+                  meshBrep          = (5,10),
+                  rayonPipe         = 5,
+                  lenSegPipe        = 7,
+                  nbSegRad          = 8,
+                  nbSegCercle       = 20,
+                  areteFaceFissure  = 8)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/lanceurSoudureViveTest.py b/src/Tools/blocFissure/lanceurSoudureViveTest.py
new file mode 100644 (file)
index 0000000..aa4d803
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: iso-8859-1 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'areteViveSoudure.med'
+crack = 'fissureSoudureTest.brep'
+
+dicoParams = dict(nomCas            = 'casTestCoinTriple',
+                  maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFissIds       = [4],
+                  lgInfluence       = 30,
+                  meshBrep          = (5,10),
+                  rayonPipe         = 10,
+                  lenSegPipe        = 7,
+                  nbSegRad          = 5,
+                  nbSegCercle       = 10,
+                  areteFaceFissure  = 10)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)
diff --git a/src/Tools/blocFissure/lanceurTestAubry.py b/src/Tools/blocFissure/lanceurTestAubry.py
new file mode 100644 (file)
index 0000000..6e43111
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: iso-8859-1 -*-
+
+import sys
+import salome
+
+import os
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.casStandard import casStandard
+
+mesh = 'huehue.med'
+crack = 'hue.brep'
+
+dicoParams = dict(nomCas            = 'testAubry',
+                  maillageSain      = '/local00/home/I48174/Bureau/{0}'.format(mesh),
+                  brepFaceFissure   = '/local00/home/I48174/Bureau/{0}'.format(crack),
+                  edgeFissIds       = [8],
+                  lgInfluence       = 0.01,
+                  meshBrep          = (0.0002,0.003),
+                  rayonPipe         = 0.005,
+                  lenSegPipe        = 0.0015,
+                  nbSegRad          = 8,
+                  nbSegCercle       = 18,
+                  areteFaceFissure  = 0.0015)
+
+execInstance = casStandard(dicoParams)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(1)