Salome HOME
essai formalisation niveaux de debug
[modules/smesh.git] / src / Tools / blocFissure / gmu / insereFissureElliptique.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 import salome
5 from geomsmesh import geompy
6 from geomsmesh import smesh
7 import SMESH
8 import math
9
10 from partitionBlocDefaut import partitionBlocDefaut
11 from facesVolumesToriques import facesVolumesToriques
12 from facesCirculaires import facesCirculaires
13 from propagateTore import propagateTore
14 from sortGeneratrices import sortGeneratrices
15 from facesFissure import facesFissure
16 from facesToreInBloc import facesToreInBloc
17 from shapeSurFissure import shapeSurFissure
18 from meshBlocPart import meshBlocPart
19 from enleveDefaut import enleveDefaut
20 from regroupeSainEtDefaut import RegroupeSainEtDefaut
21 from putName import putName
22  
23 # -----------------------------------------------------------------------------
24 # --- procedure complete fissure elliptique
25
26 def insereFissureElliptique(geometriesSaines, maillagesSains,
27                             shapesFissure, shapeFissureParams,
28                             maillageFissureParams, elementsDefaut, step=-1):
29   """
30   TODO: a completer
31   """
32   logging.info('start')
33
34   geometrieSaine    = geometriesSaines[0]
35   maillageSain      = maillagesSains[0]
36   isHexa            = maillagesSains[1]
37   shapeDefaut       = shapesFissure[0]
38   tailleDefaut      = shapesFissure[2]
39   pipe0             = shapesFissure[4]
40   gener1            = shapesFissure[5]
41   pipe1             = shapesFissure[6]
42   facefis1          = shapesFissure[7]
43   plane1            = shapesFissure[8]
44   ellipsoide1       = shapesFissure[9]
45
46
47   demiGrandAxe      = shapeFissureParams['demiGrandAxe']
48   demiPetitAxe      = shapeFissureParams['demiPetitAxe']
49   orientation       = shapeFissureParams['orientation']
50
51   nomRep            = maillageFissureParams['nomRep']
52   nomFicSain        = maillageFissureParams['nomFicSain']
53   nomFicFissure     = maillageFissureParams['nomFicFissure']
54
55   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
56   nbsegGen          = maillageFissureParams['nbsegGen']      # 25
57   nbsegRad          = maillageFissureParams['nbsegRad']      # 5
58   scaleRad          = maillageFissureParams['scaleRad']      # 4
59   nbsegCercle       = maillageFissureParams['nbsegCercle']   # 6
60   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
61   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
62
63   fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
64   fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
65
66   facesDefaut              = elementsDefaut[0]
67   centreDefaut             = elementsDefaut[1]
68   normalDefaut             = elementsDefaut[2]
69   extrusionDefaut          = elementsDefaut[3]
70   dmoyen                   = elementsDefaut[4]
71   bordsPartages            = elementsDefaut[5]
72   fillconts                = elementsDefaut[6]
73   idFilToCont              = elementsDefaut[7]
74   maillageSain             = elementsDefaut[8]
75   internalBoundary         = elementsDefaut[9]
76   zoneDefaut               = elementsDefaut[10]
77   zoneDefaut_skin          = elementsDefaut[11]
78   zoneDefaut_internalFaces = elementsDefaut[12]
79   zoneDefaut_internalEdges = elementsDefaut[13]
80
81   ## --- ellipse incomplete : generatrice
82   #if step == 5:
83     #return None
84
85   #allonge = demiGrandAxe/demiPetitAxe
86   #rayonTore = demiPetitAxe/5.0
87   #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
88   #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
89
90   ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
91   #if step == 6:
92     #return None
93
94   #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
95   #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
96   #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
97   #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
98   #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
99   #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
100
101   #geompy.addToStudy( pipe0, 'pipe0' )
102   #geompy.addToStudy( gener1, 'gener1' )
103   #geompy.addToStudy( pipe1, 'pipe1' )
104   #geompy.addToStudy( facefis1, 'facefis1' )
105   #geompy.addToStudy( plane1, 'plane1' )
106   #geompy.addToStudy( ellipsoide1, 'ellipsoide1' )
107
108   # --- partition du bloc défaut par génératrice, tore et plan fissure
109   if step == 7:
110     return None
111
112   [blocPartition, blocp, tore,
113   faceFissure, facesExternes, facesExtBloc, facesExtElli,
114   aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
115     partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
116                         facefis1, ellipsoide1)
117   if not isHexa:
118     edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
119
120   # --- TORE
121   # --- faces toriques du tore
122   if step == 8:
123     return None
124
125   [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
126
127   # --- faces 1/2 circulaires et edges dans le plan de fissure
128   if step == 9:
129     return None
130
131   [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
132
133   # --- recherche et classement des edges du tore par propagate
134   if step == 10:
135     return None
136
137   [diams, circles, geners] = propagateTore(tore)
138
139   # --- tri par longueur des 3 génératrices
140   if step == 11:
141     return None
142
143   [genext, genint, gencnt] = sortGeneratrices(tore, geners)
144
145   # --- faces fissure dans et hors tore, et edges face hors tore
146   if step == 12:
147     return None
148
149   [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
150     facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
151
152   # --- identification des faces tore et fissure dans le solide hors tore
153   if step == 13:
154     return None
155
156   [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
157     facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
158
159   # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
160
161   #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
162   if step == 14:
163     return None
164
165   extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
166
167   # --- maillage du bloc partitionne
168
169   if step == 15:
170     return None
171
172   [bloc1, blocComplet] = \
173     meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
174                 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
175                 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
176                 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
177                 nbsegFis, dmoyen, lensegEllipsoide)
178
179   if step == 16:
180     return None
181   maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
182
183   if step == 17:
184     return None
185   maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
186
187   if step == 18:
188     return None
189   maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
190   putName(maillageComplet, nomFicFissure)
191   logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
192
193   if salome.sg.hasDesktop():
194     salome.sg.updateObjBrowser(1)
195
196   return maillageComplet