1 # -*- coding: utf-8 -*-
4 from geomsmesh import geompy, smesh
5 from geomsmesh import geomPublish
6 from geomsmesh import geomPublishInFather
18 from fissureGenerique import fissureGenerique
20 from initEtude import initEtude
21 from triedreBase import triedreBase
22 from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
23 from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
24 from construitFissureGenerale import construitFissureGenerale
26 O, OX, OY, OZ = triedreBase()
28 class casStandard(fissureGenerique):
30 problème de fissure standard, défini par :
31 - un maillage sain (hexaèdres),
32 - une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
33 - les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
34 - les paramètres de maillage de la fissure
37 # ---------------------------------------------------------------------------
38 def __init__ (self, dicoParams, references = None, numeroCas = 0):
40 self.references = references
41 self.dicoParams = dicoParams
42 if self.dicoParams.has_key('nomCas'):
43 self.nomCas = self.dicoParams['nomCas']
45 self.nomCas = 'casStandard'
46 self.numeroCas = numeroCas
47 if self.numeroCas != 0:
48 self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
50 self.nomProbleme = self.nomCas
51 if self.dicoParams.has_key('lenSegPipe'):
52 self.lenSegPipe = self.dicoParams['lenSegPipe']
54 self.lenSegPipe =self.dicoParams['rayonPipe']
55 if self.dicoParams.has_key('step'):
56 step = self.dicoParams['step']
58 step = -1 # exécuter toutes les étapes
59 if self.numeroCas == 0: # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes
60 self.executeProbleme(step)
62 # ---------------------------------------------------------------------------
63 def genereMaillageSain(self, geometriesSaines, meshParams):
64 logging.info("genereMaillageSain %s", self.nomCas)
66 ([objetSain], status) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain'])
67 smesh.SetName(objetSain.GetMesh(), 'objetSain')
69 return [objetSain, True] # True : maillage hexa
71 # ---------------------------------------------------------------------------
72 def setParamShapeFissure(self):
74 paramètres de la fissure pour méthode insereFissureGenerale
75 lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
76 rayonPipe : le rayon du pile maillé en hexa autour du fond de fissure
77 convexe : True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
78 pointIn_x : optionnel : coordonnée x d'un point dans le solide sain (pour orienter la face - idem avec y,z)
80 logging.info("setParamShapeFissure %s", self.nomCas)
81 if self.dicoParams.has_key('pointInterieur'):
82 self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
83 rayonPipe = self.dicoParams['rayonPipe'],
84 lenSegPipe = self.lenSegPipe,
85 pointIn_x = self.dicoParams['pointInterieur'][0],
86 pointIn_y = self.dicoParams['pointInterieur'][1],
87 pointIn_z = self.dicoParams['pointInterieur'][2])
89 self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
90 rayonPipe = self.dicoParams['rayonPipe'],
91 lenSegPipe = self.lenSegPipe)
93 # ---------------------------------------------------------------------------
94 def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
95 logging.info("genereShapeFissure %s", self.nomCas)
97 lgInfluence = shapeFissureParams['lgInfluence']
99 shellFiss = geompy.ImportFile( self.dicoParams['brepFaceFissure'], "BREP")
100 fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
101 geompy.UnionIDs(fondFiss, self.dicoParams['edgeFissIds'] )
102 geomPublish(initLog.debug, shellFiss, 'shellFiss' )
103 geomPublishInFather(initLog.debug, shellFiss, fondFiss, 'fondFiss' )
106 coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1])
109 return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
111 # ---------------------------------------------------------------------------
112 def setParamMaillageFissure(self):
113 self.maillageFissureParams = dict(nomRep = '.',
114 nomFicSain = self.nomCas,
115 nomFicFissure = 'fissure_' + self.nomCas,
116 nbsegRad = self.dicoParams['nbSegRad'],
117 nbsegCercle = self.dicoParams['nbSegCercle'],
118 areteFaceFissure = self.dicoParams['areteFaceFissure'])
120 # ---------------------------------------------------------------------------
121 def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
122 elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
123 return elementsDefaut
125 # ---------------------------------------------------------------------------
126 def genereMaillageFissure(self, geometriesSaines, maillagesSains,
127 shapesFissure, shapeFissureParams,
128 maillageFissureParams, elementsDefaut, step):
129 maillageFissure = construitFissureGenerale(maillagesSains,
130 shapesFissure, shapeFissureParams,
131 maillageFissureParams, elementsDefaut, step)
132 return maillageFissure
134 # ---------------------------------------------------------------------------
135 def setReferencesMaillageFissure(self):
136 if self.references is not None:
137 self.referencesMaillageFissure = self.references
139 self.referencesMaillageFissure = dict(Entity_Quad_Pyramid = 0,
140 Entity_Quad_Triangle = 0,
141 Entity_Quad_Edge = 0,
142 Entity_Quad_Penta = 0,
143 Entity_Quad_Hexa = 0,
145 Entity_Quad_Tetra = 0,
146 Entity_Quad_Quadrangle = 0)