merge manuel developpements Olivier Hoareau

This commit is contained in:
Paul RASCLE 2014-08-25 17:26:29 +02:00
parent a95ff9b2ce
commit 6b00ce3326
22 changed files with 1790 additions and 27 deletions

View File

@ -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)

View File

@ -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)

View 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)

View File

@ -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)

View 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

View 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,

View File

@ -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

View 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)

View 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

View File

@ -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

View 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

View File

@ -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

View File

@ -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

View 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

View File

@ -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 lembout P2 à lextré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 lembout P1 à lextré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 lembout 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 lembout 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 laxe 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 lextrados jusquà lintrados 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 langle en degrés formé par le grand axe de la fissure et la génératrice du coude donnant ainsi lorientation 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))

View File

@ -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))

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)