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