mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 18:00:34 +05:00
Correcion de programmation - fichiers en python
This commit is contained in:
parent
e66f809aa1
commit
361885ae5e
@ -28,9 +28,6 @@ import math
|
|||||||
import GEOM
|
import GEOM
|
||||||
import SALOMEDS
|
import SALOMEDS
|
||||||
import SMESH
|
import SMESH
|
||||||
#import StdMeshers
|
|
||||||
#import GHS3DPlugin
|
|
||||||
#import NETGENPlugin
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from .fissureGenerique import fissureGenerique
|
from .fissureGenerique import fissureGenerique
|
||||||
@ -44,8 +41,8 @@ from .construitFissureGenerale import construitFissureGenerale
|
|||||||
O, OX, OY, OZ = triedreBase()
|
O, OX, OY, OZ = triedreBase()
|
||||||
|
|
||||||
class casStandard(fissureGenerique):
|
class casStandard(fissureGenerique):
|
||||||
"""
|
"""problème de fissure standard, défini par :
|
||||||
problème de fissure standard, défini par :
|
|
||||||
- un maillage sain (hexaèdres),
|
- un maillage sain (hexaèdres),
|
||||||
- une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
|
- une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
|
||||||
- les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
|
- les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
|
||||||
@ -66,7 +63,7 @@ class casStandard(fissureGenerique):
|
|||||||
if 'reptrav' in self.dicoParams:
|
if 'reptrav' in self.dicoParams:
|
||||||
self.reptrav = self.dicoParams['reptrav']
|
self.reptrav = self.dicoParams['reptrav']
|
||||||
else:
|
else:
|
||||||
self.reptrav = '.'
|
self.reptrav = os.curdir
|
||||||
self.numeroCas = numeroCas
|
self.numeroCas = numeroCas
|
||||||
if self.numeroCas != 0:
|
if self.numeroCas != 0:
|
||||||
self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
|
self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
|
||||||
@ -176,11 +173,13 @@ class casStandard(fissureGenerique):
|
|||||||
if self.references is not None:
|
if self.references is not None:
|
||||||
self.referencesMaillageFissure = self.references
|
self.referencesMaillageFissure = self.references
|
||||||
else:
|
else:
|
||||||
self.referencesMaillageFissure = dict(Entity_Quad_Pyramid = 0,
|
self.referencesMaillageFissure = dict( \
|
||||||
Entity_Quad_Triangle = 0,
|
Entity_Quad_Quadrangle = 0, \
|
||||||
Entity_Quad_Edge = 0,
|
Entity_Quad_Hexa = 0, \
|
||||||
Entity_Quad_Penta = 0,
|
Entity_Node = 0, \
|
||||||
Entity_Quad_Hexa = 0,
|
Entity_Quad_Edge = 0, \
|
||||||
Entity_Node = 0,
|
Entity_Quad_Triangle = 0, \
|
||||||
Entity_Quad_Tetra = 0,
|
Entity_Quad_Tetra = 0, \
|
||||||
Entity_Quad_Quadrangle = 0)
|
Entity_Quad_Pyramid = 0, \
|
||||||
|
Entity_Quad_Penta = 0 \
|
||||||
|
)
|
||||||
|
@ -25,12 +25,11 @@ from .geomsmesh import geomPublishInFather
|
|||||||
from . import initLog
|
from . import initLog
|
||||||
|
|
||||||
def compoundFromList(elements, nom=None):
|
def compoundFromList(elements, nom=None):
|
||||||
"""
|
"""compoundFromList"""
|
||||||
|
|
||||||
"""
|
|
||||||
logging.debug('start')
|
logging.debug('start')
|
||||||
|
|
||||||
shapeList = []
|
shapeList = list()
|
||||||
for a in elements:
|
for a in elements:
|
||||||
if not isinstance(a, list):
|
if not isinstance(a, list):
|
||||||
shapeList.append(a)
|
shapeList.append(a)
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import salome
|
import salome
|
||||||
from .geomsmesh import geompy
|
from .geomsmesh import geompy
|
||||||
@ -121,8 +123,7 @@ def construitFissureGenerale(maillagesSains,
|
|||||||
else:
|
else:
|
||||||
pointInterne = None
|
pointInterne = None
|
||||||
|
|
||||||
#fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
|
fichierMaillageFissure = os.path.join (nomRep , '{}.med'.format(nomFicFissure))
|
||||||
fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
|
|
||||||
|
|
||||||
# fillings des faces en peau
|
# fillings des faces en peau
|
||||||
facesDefaut = elementsDefaut[0]
|
facesDefaut = elementsDefaut[0]
|
||||||
@ -158,6 +159,7 @@ def construitFissureGenerale(maillagesSains,
|
|||||||
|
|
||||||
(fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
|
(fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
|
||||||
edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
|
edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
|
||||||
|
|
||||||
for i,edge in enumerate(edgesFondFiss):
|
for i,edge in enumerate(edgesFondFiss):
|
||||||
geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss%d"%i)
|
geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss%d"%i)
|
||||||
|
|
||||||
@ -174,27 +176,28 @@ def construitFissureGenerale(maillagesSains,
|
|||||||
# et quadranglesToShapeWithCorner)
|
# et quadranglesToShapeWithCorner)
|
||||||
|
|
||||||
aretesVivesC = compoundFromList(bordsPartages, "areteVive")
|
aretesVivesC = compoundFromList(bordsPartages, "areteVive")
|
||||||
aretesVivesCoupees = [] # ensembles des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
|
aretesVivesCoupees = list() # ensembles des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
|
||||||
|
|
||||||
# --- inventaire des faces de peau coupées par la fissure
|
# --- inventaire des faces de peau coupées par la fissure
|
||||||
# pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
|
# pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
|
||||||
# 0, 1 ou plus edges de la face de fissure externe au pipe
|
# 0, 1 ou plus edges de la face de fissure externe au pipe
|
||||||
|
|
||||||
nbFacesFilling = len(partitionsPeauFissFond)
|
nbFacesFilling = len(partitionsPeauFissFond)
|
||||||
|
logging.info("nbFacesFilling : {} ".format(nbFacesFilling))
|
||||||
|
|
||||||
ptEdgeFond = [ [] for i in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
|
ptEdgeFond = [ list() for i in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
|
||||||
fsPipePeau = [ [] for i in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
|
fsPipePeau = [ list() for i in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
|
||||||
edRadFPiPo = [ [] for i in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
|
edRadFPiPo = [ list() for i in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
|
||||||
fsFissuExt = [ [] for i in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
|
fsFissuExt = [ list() for i in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
|
||||||
edFisExtPe = [ [] for i in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
|
edFisExtPe = [ list() for i in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
|
||||||
edFisExtPi = [ [] for i in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
|
edFisExtPi = [ list() for i in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
|
||||||
facesPeaux = [None for i in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
|
facesPeaux = [None for i in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
|
||||||
edCircPeau = [ [] for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
|
edCircPeau = [ list() for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
|
||||||
ptCircPeau = [ [] for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
|
ptCircPeau = [ list() for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
|
||||||
gpedgeBord = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
|
gpedgeBord = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
|
||||||
gpedgeVifs = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
|
gpedgeVifs = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
|
||||||
edFissPeau = [ [] for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
|
edFissPeau = [ list() for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
|
||||||
ptFisExtPi = [ [] for i in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
|
ptFisExtPi = [ list() for i in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
|
||||||
|
|
||||||
for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
|
for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
|
||||||
if partitionPeauFissFond is not None:
|
if partitionPeauFissFond is not None:
|
||||||
@ -216,8 +219,8 @@ def construitFissureGenerale(maillagesSains,
|
|||||||
edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
|
edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
|
||||||
ptFisExtPi[ifil] = dataPPFF['verticesPipePeau']
|
ptFisExtPi[ifil] = dataPPFF['verticesPipePeau']
|
||||||
|
|
||||||
facesPipePeau = []
|
facesPipePeau = list()
|
||||||
edgeRadFacePipePeau = []
|
edgeRadFacePipePeau = list()
|
||||||
for ifil in range(nbFacesFilling):
|
for ifil in range(nbFacesFilling):
|
||||||
facesPipePeau += fsPipePeau[ifil]
|
facesPipePeau += fsPipePeau[ifil]
|
||||||
edgeRadFacePipePeau += edRadFPiPo[ifil]
|
edgeRadFacePipePeau += edRadFPiPo[ifil]
|
||||||
|
@ -50,7 +50,7 @@ def construitPartitionsPeauFissure(facesDefaut, fissPipe):
|
|||||||
isPart = checkDecoupePartition([fissPipe, filling], part)
|
isPart = checkDecoupePartition([fissPipe, filling], part)
|
||||||
if isPart: # on recrée la partition avec toutes les faces filling en outil pour avoir une face de fissure correcte
|
if isPart: # on recrée la partition avec toutes les faces filling en outil pour avoir une face de fissure correcte
|
||||||
otherFD = [fd for fd in facesDefaut if fd != filling]
|
otherFD = [fd for fd in facesDefaut if fd != filling]
|
||||||
if len(otherFD) > 0:
|
if otherFD:
|
||||||
fissPipePart = geompy.MakePartition([fissPipe], otherFD, [], [], geompy.ShapeType["FACE"], 0, [], 0)
|
fissPipePart = geompy.MakePartition([fissPipe], otherFD, [], [], geompy.ShapeType["FACE"], 0, [], 0)
|
||||||
else:
|
else:
|
||||||
fissPipePart = fissPipe
|
fissPipePart = fissPipe
|
||||||
@ -59,6 +59,6 @@ def construitPartitionsPeauFissure(facesDefaut, fissPipe):
|
|||||||
geomPublish(initLog.debug, part, 'partitionPeauFissFond%d'%ipart )
|
geomPublish(initLog.debug, part, 'partitionPeauFissFond%d'%ipart )
|
||||||
else:
|
else:
|
||||||
partitionsPeauFissFond.append(None)
|
partitionsPeauFissFond.append(None)
|
||||||
ipart = ipart +1
|
ipart += 1
|
||||||
|
|
||||||
return partitionsPeauFissFond
|
return partitionsPeauFissFond
|
@ -18,6 +18,8 @@
|
|||||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from .geomsmesh import smesh
|
from .geomsmesh import smesh
|
||||||
import SMESH
|
import SMESH
|
||||||
@ -62,7 +64,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
|
|||||||
nomRep = maillageFissureParams['nomRep']
|
nomRep = maillageFissureParams['nomRep']
|
||||||
nomFicSain = maillageFissureParams['nomFicSain']
|
nomFicSain = maillageFissureParams['nomFicSain']
|
||||||
|
|
||||||
fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
|
fichierMaillageSain = os.path.join (nomRep , '{}.med'.format(nomFicSain))
|
||||||
|
|
||||||
# --- centre de fond de fissure et tangente
|
# --- centre de fond de fissure et tangente
|
||||||
|
|
||||||
@ -80,10 +82,10 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
|
|||||||
[maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
|
[maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
|
||||||
peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
|
peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
|
||||||
|
|
||||||
facesDefaut = []
|
facesDefaut = list()
|
||||||
centresDefaut = []
|
centresDefaut = list()
|
||||||
normalsDefaut =[]
|
normalsDefaut = list()
|
||||||
extrusionsDefaut = []
|
extrusionsDefaut = list()
|
||||||
isPlane = False
|
isPlane = False
|
||||||
if isHexa and not isPlane:
|
if isHexa and not isPlane:
|
||||||
meshQuad = smesh.CopyMesh( zoneDefaut_skin, 'meshQuad', 0, 0)
|
meshQuad = smesh.CopyMesh( zoneDefaut_skin, 'meshQuad', 0, 0)
|
||||||
@ -100,7 +102,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
|
|||||||
else:
|
else:
|
||||||
[facesDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
|
[facesDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
|
||||||
creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion)
|
creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion)
|
||||||
bordsPartages = []
|
bordsPartages = list()
|
||||||
for face in facesDefaut:
|
for face in facesDefaut:
|
||||||
bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
|
bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
|
||||||
fillconts = facesDefaut
|
fillconts = facesDefaut
|
||||||
|
@ -53,11 +53,11 @@ def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut,
|
|||||||
isHexa = maillagesSains[1]
|
isHexa = maillagesSains[1]
|
||||||
lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure)
|
lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure)
|
||||||
|
|
||||||
logging.debug("lists=%s", lists)
|
logging.debug("lists={}".format(lists))
|
||||||
|
|
||||||
trace = True
|
trace = True
|
||||||
origShapes = []
|
origShapes = list()
|
||||||
verticesShapes = []
|
verticesShapes = list()
|
||||||
|
|
||||||
cumul = 0 # somme des distances carrées entre point ordonnés (taille des arêtes)
|
cumul = 0 # somme des distances carrées entre point ordonnés (taille des arêtes)
|
||||||
nb = 0 # nombre d'arêtes évaluées
|
nb = 0 # nombre d'arêtes évaluées
|
||||||
@ -65,8 +65,8 @@ def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut,
|
|||||||
for aList in lists:
|
for aList in lists:
|
||||||
aShape = aList[0]
|
aShape = aList[0]
|
||||||
origShapes.append(aShape)
|
origShapes.append(aShape)
|
||||||
logging.debug(" shapeId %s", aShape)
|
logging.debug(" shapeId {}".format(aShape))
|
||||||
vertices = []
|
vertices = list()
|
||||||
xyz0 = None
|
xyz0 = None
|
||||||
for inode in range(1, len(aList)):
|
for inode in range(1, len(aList)):
|
||||||
xyz = maillageSain.GetNodeXYZ(aList[inode])
|
xyz = maillageSain.GetNodeXYZ(aList[inode])
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#
|
#
|
||||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
#
|
#
|
||||||
|
"""fissureGenerique"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -24,9 +25,9 @@ from blocFissure import gmu
|
|||||||
from blocFissure.gmu.initEtude import initEtude
|
from blocFissure.gmu.initEtude import initEtude
|
||||||
from blocFissure.gmu.getStatsMaillageFissure import getStatsMaillageFissure
|
from blocFissure.gmu.getStatsMaillageFissure import getStatsMaillageFissure
|
||||||
|
|
||||||
class fissureGenerique():
|
class fissureGenerique(object):
|
||||||
"""
|
"""classe générique problème fissure:
|
||||||
classe générique problème fissure:
|
|
||||||
génération géométrie et maillage sain
|
génération géométrie et maillage sain
|
||||||
définition et positionnement d'une fissure
|
définition et positionnement d'une fissure
|
||||||
génération d'un bloc défaut inséré dans le maillage sain
|
génération d'un bloc défaut inséré dans le maillage sain
|
||||||
@ -41,46 +42,58 @@ class fissureGenerique():
|
|||||||
self.fissureLongue = False
|
self.fissureLongue = False
|
||||||
|
|
||||||
def setParamGeometrieSaine(self):
|
def setParamGeometrieSaine(self):
|
||||||
self.geomParams = {}
|
"""setParamGeometrieSaine"""
|
||||||
|
self.geomParams = dict()
|
||||||
|
|
||||||
def genereGeometrieSaine(self, geomParams):
|
def genereGeometrieSaine(self, geomParams):
|
||||||
|
"""genereGeometrieSaine"""
|
||||||
geometriesSaines = [None]
|
geometriesSaines = [None]
|
||||||
return geometriesSaines
|
return geometriesSaines
|
||||||
|
|
||||||
def setParamMaillageSain(self):
|
def setParamMaillageSain(self):
|
||||||
self.meshParams = {}
|
"""setParamMaillageSain"""
|
||||||
|
self.meshParams = dict()
|
||||||
|
|
||||||
def genereMaillageSain(self, geometriesSaines, meshParams):
|
def genereMaillageSain(self, geometriesSaines, meshParams):
|
||||||
|
"""genereMaillageSain"""
|
||||||
maillagesSains = [None]
|
maillagesSains = [None]
|
||||||
return maillagesSains
|
return maillagesSains
|
||||||
|
|
||||||
def setParamShapeFissure(self):
|
def setParamShapeFissure(self):
|
||||||
self.shapeFissureParams = {}
|
"""setParamShapeFissure"""
|
||||||
|
self.shapeFissureParams = dict()
|
||||||
|
|
||||||
def genereShapeFissure(self, geometriesSaines, geomParams, shapeFissureParams):
|
def genereShapeFissure(self, geometriesSaines, geomParams, shapeFissureParams):
|
||||||
|
"""genereShapeFissure"""
|
||||||
shapesFissure = [None]
|
shapesFissure = [None]
|
||||||
return shapesFissure
|
return shapesFissure
|
||||||
|
|
||||||
def setParamMaillageFissure(self):
|
def setParamMaillageFissure(self):
|
||||||
self.maillageFissureParams = {}
|
"""setParamMaillageFissure"""
|
||||||
|
self.maillageFissureParams = dict()
|
||||||
|
|
||||||
def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, maillageFissureParams):
|
def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, maillageFissureParams):
|
||||||
|
"""genereZoneDefaut"""
|
||||||
elementsDefaut = [None]
|
elementsDefaut = [None]
|
||||||
return elementsDefaut
|
return elementsDefaut
|
||||||
|
|
||||||
def genereMaillageFissure(self, geometriesSaines, maillagesSains, shapesFissure,
|
def genereMaillageFissure(self, geometriesSaines, maillagesSains, shapesFissure,
|
||||||
maillageFissureParams, elementsDefaut, step):
|
maillageFissureParams, elementsDefaut):
|
||||||
|
"""genereMaillageFissure"""
|
||||||
maillageFissure = None
|
maillageFissure = None
|
||||||
return maillageFissure
|
return maillageFissure
|
||||||
|
|
||||||
def setReferencesMaillageFissure(self):
|
def setReferencesMaillageFissure(self):
|
||||||
referencesMaillageFissure = {}
|
"""setReferencesMaillageFissure"""
|
||||||
|
referencesMaillageFissure = dict()
|
||||||
return referencesMaillageFissure
|
return referencesMaillageFissure
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def executeProbleme(self, step=-1):
|
def executeProbleme(self, step=-1):
|
||||||
logging.info(" --- executeProbleme %s", self.nomCas)
|
"""executeProbleme"""
|
||||||
|
texte = " --- fissureGenerique.executeProbleme pour '{}', step = {}".format(self.nomCas,step)
|
||||||
|
logging.info(texte)
|
||||||
if step == 0:
|
if step == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -109,10 +122,5 @@ class fissureGenerique():
|
|||||||
self.maillageFissureParams, elementsDefaut, step)
|
self.maillageFissureParams, elementsDefaut, step)
|
||||||
|
|
||||||
self.setReferencesMaillageFissure()
|
self.setReferencesMaillageFissure()
|
||||||
mesures = getStatsMaillageFissure(maillageFissure, self.referencesMaillageFissure, self.maillageFissureParams)
|
ok_maillage = getStatsMaillageFissure(maillageFissure, self.referencesMaillageFissure, self.maillageFissureParams)
|
||||||
|
return ok_maillage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,6 +41,8 @@ def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize):
|
|||||||
dans une liste sous la forme : [X0, Y0, Z0, ..., Xn, Yn, Zn]"""
|
dans une liste sous la forme : [X0, Y0, Z0, ..., Xn, Yn, Zn]"""
|
||||||
|
|
||||||
logging.info('start')
|
logging.info('start')
|
||||||
|
text = "Maillage de '{}'".format(facefiss.GetName())
|
||||||
|
logging.info(text)
|
||||||
|
|
||||||
meshFissure = smesh.Mesh(facefiss)
|
meshFissure = smesh.Mesh(facefiss)
|
||||||
algo2d = meshFissure.Triangle(algo=smeshBuilder.NETGEN_1D2D)
|
algo2d = meshFissure.Triangle(algo=smeshBuilder.NETGEN_1D2D)
|
||||||
@ -51,15 +53,27 @@ def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize):
|
|||||||
hypo2d.SetFineness( 2 )
|
hypo2d.SetFineness( 2 )
|
||||||
hypo2d.SetMinSize( minSize )
|
hypo2d.SetMinSize( minSize )
|
||||||
hypo2d.SetQuadAllowed( 0 )
|
hypo2d.SetQuadAllowed( 0 )
|
||||||
isDone = meshFissure.Compute()
|
|
||||||
smesh.SetName(algo2d, "algo2d_zoneFiss")
|
smesh.SetName(algo2d, "algo2d_zoneFiss")
|
||||||
smesh.SetName(hypo2d, "hypo1d_zoneFiss")
|
smesh.SetName(hypo2d, "hypo1d_zoneFiss")
|
||||||
|
|
||||||
coordsNoeudsFissure = []
|
isDone = meshFissure.Compute()
|
||||||
|
|
||||||
|
if isDone:
|
||||||
|
logging.info(text+" : OK")
|
||||||
|
logging.debug(text+" : OK")
|
||||||
|
else:
|
||||||
|
text = "Erreur au calcul du maillage.\n" + text
|
||||||
|
logging.info(text)
|
||||||
|
raise Exception(text)
|
||||||
|
|
||||||
|
coordsNoeudsFissure = list()
|
||||||
nodeIds = meshFissure.GetNodesId()
|
nodeIds = meshFissure.GetNodesId()
|
||||||
for id in nodeIds:
|
for id in nodeIds:
|
||||||
coords = meshFissure.GetNodeXYZ(id)
|
coords = meshFissure.GetNodeXYZ(id)
|
||||||
coordsNoeudsFissure.append(coords[0])
|
coordsNoeudsFissure.append(coords[0])
|
||||||
coordsNoeudsFissure.append(coords[1])
|
coordsNoeudsFissure.append(coords[1])
|
||||||
coordsNoeudsFissure.append(coords[2])
|
coordsNoeudsFissure.append(coords[2])
|
||||||
|
|
||||||
|
logging.info('end')
|
||||||
|
|
||||||
return coordsNoeudsFissure
|
return coordsNoeudsFissure
|
||||||
|
@ -40,7 +40,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
|
|||||||
fichierNewRef = os.path.join(nomRep, "{}.new".format(nomFicFissure))
|
fichierNewRef = os.path.join(nomRep, "{}.new".format(nomFicFissure))
|
||||||
logging.debug("fichierStatMaillageFissure=%s", fichierStatMaillageFissure)
|
logging.debug("fichierStatMaillageFissure=%s", fichierStatMaillageFissure)
|
||||||
|
|
||||||
OK = False
|
ok_maillage = False
|
||||||
if maillage is not None:
|
if maillage is not None:
|
||||||
mesures = maillage.GetMeshInfo()
|
mesures = maillage.GetMeshInfo()
|
||||||
d_resu = dict()
|
d_resu = dict()
|
||||||
@ -50,12 +50,12 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
|
|||||||
logging.debug("dico mesures %s", d_resu)
|
logging.debug("dico mesures %s", d_resu)
|
||||||
|
|
||||||
text_2 = ""
|
text_2 = ""
|
||||||
OK = True
|
ok_maillage = True
|
||||||
with open(fichierStatMaillageFissure, "w") as fic_stat :
|
with open(fichierStatMaillageFissure, "w") as fic_stat :
|
||||||
for key in ('Entity_Quad_Quadrangle', 'Entity_Quad_Hexa'):
|
for key in ('Entity_Quad_Quadrangle', 'Entity_Quad_Hexa'):
|
||||||
if d_resu[key] != referencesMaillageFissure[key]:
|
if d_resu[key] != referencesMaillageFissure[key]:
|
||||||
text = "Ecart"
|
text = "Ecart"
|
||||||
OK = False
|
ok_maillage = False
|
||||||
else:
|
else:
|
||||||
text = "Valeur_OK"
|
text = "Valeur_OK"
|
||||||
text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
|
text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
|
||||||
@ -67,7 +67,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
|
|||||||
if (d_resu[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
|
if (d_resu[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
|
||||||
or (d_resu[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
|
or (d_resu[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
|
||||||
text = "Ecart"
|
text = "Ecart"
|
||||||
OK = False
|
ok_maillage = False
|
||||||
else:
|
else:
|
||||||
text = "Valeur_OK"
|
text = "Valeur_OK"
|
||||||
text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
|
text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
|
||||||
@ -79,7 +79,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
|
|||||||
with open(fichierNewRef, "w") as fic_info :
|
with open(fichierNewRef, "w") as fic_info :
|
||||||
fic_info.write(text_2[:-4]+" \\")
|
fic_info.write(text_2[:-4]+" \\")
|
||||||
|
|
||||||
if OK:
|
if ok_maillage:
|
||||||
print ("Calcul cohérent avec la référence.")
|
print ("Calcul cohérent avec la référence.")
|
||||||
else:
|
else:
|
||||||
text = "Calcul différent de la référence.\n"
|
text = "Calcul différent de la référence.\n"
|
||||||
@ -88,4 +88,4 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
|
|||||||
text += "Il faut l'insérer pour créer le dictionnaire 'referencesMaillageFissure' dans le paramétrage du cas."
|
text += "Il faut l'insérer pour créer le dictionnaire 'referencesMaillageFissure' dans le paramétrage du cas."
|
||||||
print (text)
|
print (text)
|
||||||
|
|
||||||
return OK
|
return ok_maillage
|
||||||
|
@ -26,42 +26,47 @@ from .geomsmesh import geomPublishInFather
|
|||||||
from . import initLog
|
from . import initLog
|
||||||
|
|
||||||
def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
|
def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
|
||||||
"""
|
"""identification des faces et edges de fissure externe pour maillage"""
|
||||||
identification des faces et edges de fissure externe pour maillage
|
|
||||||
"""
|
|
||||||
logging.info('start')
|
logging.info('start')
|
||||||
|
|
||||||
facesFissExt = []
|
logging.debug("---------------------------- fsFissuExt : {} ".format(fsFissuExt))
|
||||||
edgesFissExtPeau = []
|
facesFissExt = list()
|
||||||
edgesFissExtPipe = []
|
edgesFissExtPeau = list()
|
||||||
|
edgesFissExtPipe = list()
|
||||||
for ifil in range(len(fsFissuExt)): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
|
for ifil in range(len(fsFissuExt)): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
|
||||||
facesFissExt += fsFissuExt[ifil]
|
facesFissExt += fsFissuExt[ifil]
|
||||||
edgesFissExtPeau += edFisExtPe[ifil]
|
edgesFissExtPeau += edFisExtPe[ifil]
|
||||||
edgesFissExtPipe += edFisExtPi[ifil]
|
edgesFissExtPipe += edFisExtPi[ifil]
|
||||||
logging.debug("---------------------------- identification faces de fissure externes au pipe :%s ", len(facesFissExt))
|
logging.debug("---------------------------- identification faces de fissure externes au pipe : {}".format(len(facesFissExt)))
|
||||||
# regroupement des faces de fissure externes au pipe.
|
# regroupement des faces de fissure externes au pipe.
|
||||||
|
|
||||||
if len(facesFissExt) > 1:
|
if not facesFissExt:
|
||||||
|
logging.info("---------------------------- fsFissuExt : {} ".format(fsFissuExt))
|
||||||
|
raise Exception("stop identifieFacesEdgesFissureExterne ; aucune face de fissure externe au pipe n'a été trouvée.")
|
||||||
|
|
||||||
|
elif len(facesFissExt) > 1:
|
||||||
faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
|
faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
|
||||||
edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss)) # edgesFissExtPipe peut ne pas couvrir toute la longueur
|
edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss)) # edgesFissExtPipe peut ne pas couvrir toute la longueur
|
||||||
# edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
|
# edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
|
||||||
# il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
|
# il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
|
||||||
(isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
|
(isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
|
||||||
edgesBordFFE = []
|
edgesBordFFE = list()
|
||||||
for bound in closedFreeBoundaries:
|
for bound in closedFreeBoundaries:
|
||||||
edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
|
edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
|
||||||
edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
|
edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
|
||||||
logging.debug("edgesBordFFEid %s", edgesBordFFEid)
|
logging.debug("edgesBordFFEid {}".format(edgesBordFFEid))
|
||||||
edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
|
edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
|
||||||
edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
|
edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
|
||||||
logging.debug("edgesPPEid %s", edgesPPEid)
|
logging.debug("edgesPPEid {}".format(edgesPPEid))
|
||||||
edgesPFE = [ edid[0] for edid in edgesBordFFEid if edid[1] not in edgesPPEid] # on garde toutes les edges de bord non en contact avec le pipe
|
edgesPFE = [ edid[0] for edid in edgesBordFFEid if edid[1] not in edgesPPEid] # on garde toutes les edges de bord non en contact avec le pipe
|
||||||
logging.debug("edgesPFE %s", edgesPFE)
|
logging.debug("edgesPFE {}".format(edgesPFE))
|
||||||
edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
|
edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
faceFissureExterne = facesFissExt[0]
|
faceFissureExterne = facesFissExt[0]
|
||||||
edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
|
edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
|
||||||
edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
|
edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
|
||||||
|
|
||||||
wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
|
wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
|
||||||
geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
|
geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
|
||||||
geomPublishInFather(initLog.debug, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
|
geomPublishInFather(initLog.debug, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
|
||||||
|
@ -33,6 +33,7 @@ def mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFi
|
|||||||
maillage faces de fissure
|
maillage faces de fissure
|
||||||
"""
|
"""
|
||||||
logging.info('start')
|
logging.info('start')
|
||||||
|
logging.info("Maillage de {}".format(faceFissureExterne.GetName()))
|
||||||
|
|
||||||
meshFaceFiss = smesh.Mesh(faceFissureExterne)
|
meshFaceFiss = smesh.Mesh(faceFissureExterne)
|
||||||
algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D)
|
algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D)
|
||||||
@ -47,17 +48,24 @@ def mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFi
|
|||||||
putName(algo2d, "algo2d_faceFiss")
|
putName(algo2d, "algo2d_faceFiss")
|
||||||
putName(hypo2d, "hypo2d_faceFiss")
|
putName(hypo2d, "hypo2d_faceFiss")
|
||||||
|
|
||||||
|
logging.info('Récupération des arêtes de {}'.format(edgesPipeFissureExterneC.GetName()))
|
||||||
algo1d = meshFaceFiss.UseExisting1DElements(geom=edgesPipeFissureExterneC)
|
algo1d = meshFaceFiss.UseExisting1DElements(geom=edgesPipeFissureExterneC)
|
||||||
hypo1d = algo1d.SourceEdges([ meshPipeGroups['edgeFaceFissGroup'] ],0,0)
|
hypo1d = algo1d.SourceEdges([ meshPipeGroups['edgeFaceFissGroup'] ],0,0)
|
||||||
putName(algo1d.GetSubMesh(), "edgeFissPeau")
|
putName(algo1d.GetSubMesh(), "edgeFissPeau")
|
||||||
putName(algo1d, "algo1d_edgeFissPeau")
|
putName(algo1d, "algo1d_edgeFissPeau")
|
||||||
putName(hypo1d, "hypo1d_edgeFissPeau")
|
putName(hypo1d, "hypo1d_edgeFissPeau")
|
||||||
|
|
||||||
isDone = meshFaceFiss.Compute()
|
|
||||||
logging.info("meshFaceFiss fini")
|
|
||||||
|
|
||||||
grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE)
|
grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE)
|
||||||
grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE)
|
grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE)
|
||||||
grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE)
|
grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE)
|
||||||
|
|
||||||
|
isDone = meshFaceFiss.Compute()
|
||||||
|
text = "meshFaceFiss fini"
|
||||||
|
if isDone:
|
||||||
|
logging.info(text)
|
||||||
|
else:
|
||||||
|
text = "Erreur au calcul du maillage.\n" + text
|
||||||
|
logging.info(text)
|
||||||
|
raise Exception(text)
|
||||||
|
|
||||||
return (meshFaceFiss, grpFaceFissureExterne, grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne)
|
return (meshFaceFiss, grpFaceFissureExterne, grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne)
|
@ -32,7 +32,7 @@ def orderEdgesFromWire(aWire):
|
|||||||
logging.info("start")
|
logging.info("start")
|
||||||
edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
|
edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
|
||||||
|
|
||||||
idverts = {}
|
idverts = dict()
|
||||||
for i, edge in enumerate(edges):
|
for i, edge in enumerate(edges):
|
||||||
verts = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
|
verts = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
|
||||||
# idverts[(i,0)] = verts[0]
|
# idverts[(i,0)] = verts[0]
|
||||||
@ -46,7 +46,7 @@ def orderEdgesFromWire(aWire):
|
|||||||
idverts[(i,0)] = verts[1]
|
idverts[(i,0)] = verts[1]
|
||||||
idverts[(i,1)] = verts[0]
|
idverts[(i,1)] = verts[0]
|
||||||
|
|
||||||
idsubs = {}
|
idsubs = dict()
|
||||||
for kv, sub in idverts.items():
|
for kv, sub in idverts.items():
|
||||||
subid = geompy.GetSubShapeID(aWire, sub)
|
subid = geompy.GetSubShapeID(aWire, sub)
|
||||||
if subid in list(idsubs.keys()):
|
if subid in list(idsubs.keys()):
|
||||||
@ -63,7 +63,7 @@ def orderEdgesFromWire(aWire):
|
|||||||
debut = kv[0]
|
debut = kv[0]
|
||||||
else:
|
else:
|
||||||
fin = kv[0]
|
fin = kv[0]
|
||||||
logging.debug("nombre d'edges: %s, indice edge début: %s, fin: %s",len(edges), debut, fin)
|
logging.debug("nombre d'edges: {}, indice edge début: {}, fin: {}".format(len(edges), debut, fin))
|
||||||
if debut < 0:
|
if debut < 0:
|
||||||
logging.critical("les edges du wire ne sont pas orientées dans le même sens: pas de début trouvé")
|
logging.critical("les edges du wire ne sont pas orientées dans le même sens: pas de début trouvé")
|
||||||
return edges, list(range(len(edges)))
|
return edges, list(range(len(edges)))
|
||||||
@ -82,9 +82,9 @@ def orderEdgesFromWire(aWire):
|
|||||||
logging.critical("les edges du wire ne sont pas orientées dans le même sens: une edge à l'envers")
|
logging.critical("les edges du wire ne sont pas orientées dans le même sens: une edge à l'envers")
|
||||||
return edges, list(range(len(edges)))
|
return edges, list(range(len(edges)))
|
||||||
|
|
||||||
logging.debug("liste des edges ordonnées selon le sens de parcours: %s", orderedList)
|
logging.debug("liste des edges ordonnées selon le sens de parcours : {}".format(orderedList))
|
||||||
accessList = list(range(len(orderedList)))
|
accessList = list(range(len(orderedList)))
|
||||||
for i,k in enumerate(orderedList):
|
for i,k in enumerate(orderedList):
|
||||||
accessList[k] = i
|
accessList[k] = i
|
||||||
logging.info("position ordonnée des edges selon le sens de parcours: %s", accessList)
|
logging.info("position ordonnée des edges selon le sens de parcours : {}".format(accessList))
|
||||||
return edges, accessList
|
return edges, accessList
|
||||||
|
@ -34,6 +34,7 @@ def peauInterne(fichierMaillage, shapeDefaut, nomZones):
|
|||||||
"""
|
"""
|
||||||
Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage)
|
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.
|
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.
|
||||||
|
Remarque : intérêt du passage par fichierMaillage plutôt que par maillageSain ?
|
||||||
"""
|
"""
|
||||||
logging.info("start")
|
logging.info("start")
|
||||||
([maillageSain], status) = smesh.CreateMeshesFromMED(fichierMaillage)
|
([maillageSain], status) = smesh.CreateMeshesFromMED(fichierMaillage)
|
||||||
@ -86,8 +87,8 @@ def peauInterne(fichierMaillage, shapeDefaut, nomZones):
|
|||||||
|
|
||||||
maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0)
|
maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0)
|
||||||
listOfCorner = lookForCorner(maillageDefautCible)
|
listOfCorner = lookForCorner(maillageDefautCible)
|
||||||
logging.debug("listOfCorner = %s", listOfCorner)
|
logging.debug("listOfCorner = {}".format(listOfCorner))
|
||||||
if len(listOfCorner) > 0:
|
if listOfCorner:
|
||||||
logging.info("présence de coins à la surface externe de la zone à reconstruire")
|
logging.info("présence de coins à la surface externe de la zone à reconstruire")
|
||||||
zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner)
|
zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner)
|
||||||
|
|
||||||
|
@ -36,38 +36,39 @@ from .listOfExtraFunctions import createLinesFromMesh
|
|||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# --- groupe de quadrangles de face transformé en face géométrique par filling
|
# --- groupe de quadrangles de face transformé en face géométrique par filling
|
||||||
|
|
||||||
def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
|
def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, listOfCorners):
|
||||||
""" """
|
""" """
|
||||||
# TODO: rédiger la docstring
|
# TODO: rédiger la docstring
|
||||||
|
|
||||||
logging.info("start")
|
logging.info("start")
|
||||||
|
|
||||||
#fillings = [[], []]
|
#fillings = [list(), list()]
|
||||||
tmpFillings = []
|
tmpFillings = list()
|
||||||
noeuds_bords = []
|
noeuds_bords = list()
|
||||||
#bords_Partages = [[], []]
|
#bords_Partages = [list(), list()]
|
||||||
tmpBords = []
|
tmpBords = list()
|
||||||
fillconts = []
|
fillconts = list()
|
||||||
idFilToCont = []
|
idFilToCont = list()
|
||||||
|
|
||||||
facesNonCoupees = []
|
facesNonCoupees = list()
|
||||||
facesCoupees = []
|
facesCoupees = list()
|
||||||
aretesNonCoupees = []
|
aretesNonCoupees = list()
|
||||||
aretesCoupees = []
|
aretesCoupees = list()
|
||||||
|
|
||||||
setOfNodes = []
|
setOfNodes = list()
|
||||||
setOfLines = []
|
setOfLines = list()
|
||||||
listOfEdges = []
|
listOfEdges = list()
|
||||||
# On crée une liste contenant le maillage de chaque face.
|
# On crée une liste contenant le maillage de chaque face.
|
||||||
listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
|
listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
|
||||||
for msh in listOfNewMeshes:
|
for msh in listOfNewMeshes:
|
||||||
# On crée une liste de noeuds correspondant aux faces suivant
|
# On crée une liste de noeuds correspondant aux faces suivant
|
||||||
# le modèle liste[face][ligne][noeud].
|
# le modèle liste[face][ligne][noeud].
|
||||||
lines = createLinesFromMesh(msh, listOfCorners[0])
|
#lines = createLinesFromMesh(msh, listOfCorners[0])
|
||||||
|
lines = createLinesFromMesh(msh)
|
||||||
setOfNodes.append(lines)
|
setOfNodes.append(lines)
|
||||||
|
|
||||||
for face in setOfNodes:
|
for face in setOfNodes:
|
||||||
tmpFace = []
|
tmpFace = list()
|
||||||
for line in face:
|
for line in face:
|
||||||
# On possède l'information 'ID' de chaque noeud composant chaque
|
# 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
|
# ligne de chaque face. A partir de l'ID, on crée un vertex. Un
|
||||||
@ -83,7 +84,7 @@ def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, cent
|
|||||||
# A partir des lignes de chaque face,
|
# A partir des lignes de chaque face,
|
||||||
# on recrée un objet GEOM temporaire par filling.
|
# 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)
|
filling = geompy.MakeFilling(geompy.MakeCompound(face), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
|
||||||
geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
|
geomPublish(initLog.debug, filling, 'filling_{}'.format(i + 1))
|
||||||
tmpFillings.append(filling)
|
tmpFillings.append(filling)
|
||||||
|
|
||||||
for face in setOfNodes:
|
for face in setOfNodes:
|
||||||
@ -98,26 +99,26 @@ def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, cent
|
|||||||
tmpBords.append(line)
|
tmpBords.append(line)
|
||||||
|
|
||||||
for i, filling in enumerate(tmpFillings):
|
for i, filling in enumerate(tmpFillings):
|
||||||
tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0, True)
|
tmpPartition = geompy.MakePartition([filling], [shapeDefaut], list(), list(), geompy.ShapeType["FACE"], 0, list(), 0, True)
|
||||||
tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
|
tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
|
||||||
tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
|
tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
|
||||||
if len(tmpExplodeRef) == len(tmpExplodeNum):
|
if len(tmpExplodeRef) == len(tmpExplodeNum):
|
||||||
geomPublish(initLog.debug, filling, "faceNonCoupee_{0}".format(i + 1))
|
geomPublish(initLog.debug, filling, "faceNonCoupee_{}".format(i + 1))
|
||||||
facesNonCoupees.append(filling)
|
facesNonCoupees.append(filling)
|
||||||
else:
|
else:
|
||||||
geomPublish(initLog.debug, filling, "faceCoupee_{0}".format(i + 1))
|
geomPublish(initLog.debug, filling, "faceCoupee_{}".format(i + 1))
|
||||||
facesCoupees.append(filling)
|
facesCoupees.append(filling)
|
||||||
fillings = facesCoupees, facesNonCoupees
|
fillings = facesCoupees, facesNonCoupees
|
||||||
|
|
||||||
for i, filling in enumerate(tmpBords):
|
for i, filling in enumerate(tmpBords):
|
||||||
tmpPartition = geompy.MakePartition([shapeDefaut], [filling], [], [], geompy.ShapeType["SHELL"], 0, [], 0, True)
|
tmpPartition = geompy.MakePartition([shapeDefaut], [filling], list(), list(), geompy.ShapeType["SHELL"], 0, list(), 0, True)
|
||||||
tmpExplodeRef = geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["VERTEX"], 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)
|
tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(tmpPartition, geompy.ShapeType["VERTEX"], True)
|
||||||
if len(tmpExplodeRef) == len(tmpExplodeNum):
|
if len(tmpExplodeRef) == len(tmpExplodeNum):
|
||||||
geomPublish(initLog.debug, filling, "areteNonCoupee_{0}".format(i + 1))
|
geomPublish(initLog.debug, filling, "areteNonCoupee_{}".format(i + 1))
|
||||||
aretesNonCoupees.append(filling)
|
aretesNonCoupees.append(filling)
|
||||||
else:
|
else:
|
||||||
geomPublish(initLog.debug, filling, "areteCoupee_{0}".format(i + 1))
|
geomPublish(initLog.debug, filling, "areteCoupee_{}".format(i + 1))
|
||||||
aretesCoupees.append(filling)
|
aretesCoupees.append(filling)
|
||||||
bords_Partages = aretesCoupees, aretesNonCoupees
|
bords_Partages = aretesCoupees, aretesNonCoupees
|
||||||
|
|
||||||
@ -133,4 +134,3 @@ def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, cent
|
|||||||
# geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
|
# geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
|
||||||
|
|
||||||
return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
|
return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
|
||||||
|
|
@ -28,8 +28,8 @@ import traceback
|
|||||||
from .fissError import fissError
|
from .fissError import fissError
|
||||||
|
|
||||||
def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
|
def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
|
||||||
"""
|
"""restriction de la face de fissure au domaine solide
|
||||||
restriction de la face de fissure au domaine solide
|
|
||||||
partition face fissure étendue par fillings
|
partition face fissure étendue par fillings
|
||||||
"""
|
"""
|
||||||
logging.info('start')
|
logging.info('start')
|
||||||
@ -39,7 +39,7 @@ def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
|
|||||||
if pointInterne is not None:
|
if pointInterne is not None:
|
||||||
distfaces = [(geompy.MinDistance(face,pointInterne), i, face) for i, face in enumerate(facesPartShapeDefaut)]
|
distfaces = [(geompy.MinDistance(face,pointInterne), i, face) for i, face in enumerate(facesPartShapeDefaut)]
|
||||||
distfaces.sort()
|
distfaces.sort()
|
||||||
logging.debug("selection de la face la plus proche du point interne, distance=%s",distfaces[0][0])
|
logging.debug("selection de la face la plus proche du point interne, distance={}".format(distfaces[0][0]))
|
||||||
facesPortFissure = distfaces[0][2]
|
facesPortFissure = distfaces[0][2]
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
@ -52,7 +52,7 @@ def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
|
|||||||
texte += "<li>le prémaillage de la face de fissure est trop grossier, les mailles à enlever dans le maillage sain "
|
texte += "<li>le prémaillage de la face de fissure est trop grossier, les mailles à enlever dans le maillage sain "
|
||||||
texte += "n'ont pas toutes été détectées.</li></ul>"
|
texte += "n'ont pas toutes été détectées.</li></ul>"
|
||||||
raise fissError(traceback.extract_stack(),texte)
|
raise fissError(traceback.extract_stack(),texte)
|
||||||
logging.debug("surfaces faces fissure étendue, min %s, max %s", minSurf, maxSurf)
|
logging.debug("surfaces faces fissure étendue, min {}, max {}".format(minSurf, maxSurf))
|
||||||
facesPortFissure = facesPartShapeDefautSorted[-1]
|
facesPortFissure = facesPartShapeDefautSorted[-1]
|
||||||
|
|
||||||
geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
|
geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
|
||||||
|
Loading…
Reference in New Issue
Block a user