Salome HOME
Conformité python avec import os
[modules/smesh.git] / src / Tools / blocFissure / gmu / insereFissureElliptique.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2020  EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import os
22
23 import logging
24 import salome
25 from .geomsmesh import geompy
26 from .geomsmesh import geomPublish
27 from .geomsmesh import geomPublishInFather
28 from . import initLog
29 from .geomsmesh import smesh
30 import SMESH
31 import math
32
33 from .partitionBlocDefaut import partitionBlocDefaut
34 from .facesVolumesToriques import facesVolumesToriques
35 from .facesCirculaires import facesCirculaires
36 from .propagateTore import propagateTore
37 from .sortGeneratrices import sortGeneratrices
38 from .facesFissure import facesFissure
39 from .facesToreInBloc import facesToreInBloc
40 from .shapeSurFissure import shapeSurFissure
41 from .meshBlocPart import meshBlocPart
42 from .enleveDefaut import enleveDefaut
43 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
44 from .putName import putName
45  
46 # -----------------------------------------------------------------------------
47 # --- procedure complete fissure elliptique
48
49 def insereFissureElliptique(geometriesSaines, maillagesSains,
50                             shapesFissure, shapeFissureParams,
51                             maillageFissureParams, elementsDefaut, step=-1):
52   """
53   TODO: a completer
54   """
55   logging.info('start')
56
57   geometrieSaine    = geometriesSaines[0]
58   maillageSain      = maillagesSains[0]
59   isHexa            = maillagesSains[1]
60   shapeDefaut       = shapesFissure[0]
61   tailleDefaut      = shapesFissure[2]
62   pipe0             = shapesFissure[4]
63   gener1            = shapesFissure[5]
64   pipe1             = shapesFissure[6]
65   facefis1          = shapesFissure[7]
66   plane1            = shapesFissure[8]
67   ellipsoide1       = shapesFissure[9]
68
69
70   demiGrandAxe      = shapeFissureParams['demiGrandAxe']
71   demiPetitAxe      = shapeFissureParams['demiPetitAxe']
72   orientation       = shapeFissureParams['orientation']
73
74   nomRep            = maillageFissureParams['nomRep']
75   nomFicSain        = maillageFissureParams['nomFicSain']
76   nomFicFissure     = maillageFissureParams['nomFicFissure']
77
78   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
79   nbsegGen          = maillageFissureParams['nbsegGen']      # 25
80   nbsegRad          = maillageFissureParams['nbsegRad']      # 5
81   scaleRad          = maillageFissureParams['scaleRad']      # 4
82   nbsegCercle       = maillageFissureParams['nbsegCercle']   # 6
83   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
84   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
85
86   fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
87   fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
88
89   facesDefaut              = elementsDefaut[0]
90   centreDefaut             = elementsDefaut[1]
91   normalDefaut             = elementsDefaut[2]
92   extrusionDefaut          = elementsDefaut[3]
93   dmoyen                   = elementsDefaut[4]
94   bordsPartages            = elementsDefaut[5]
95   fillconts                = elementsDefaut[6]
96   idFilToCont              = elementsDefaut[7]
97   maillageSain             = elementsDefaut[8]
98   internalBoundary         = elementsDefaut[9]
99   zoneDefaut               = elementsDefaut[10]
100   zoneDefaut_skin          = elementsDefaut[11]
101   zoneDefaut_internalFaces = elementsDefaut[12]
102   zoneDefaut_internalEdges = elementsDefaut[13]
103
104   ## --- ellipse incomplete : generatrice
105   #if step == 5:
106     #return None
107
108   #allonge = demiGrandAxe/demiPetitAxe
109   #rayonTore = demiPetitAxe/5.0
110   #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
111   #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
112
113   ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
114   #if step == 6:
115     #return None
116
117   #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
118   #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
119   #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
120   #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
121   #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
122   #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
123
124   #geomPublish(initLog.debug,  pipe0, 'pipe0' )
125   #geomPublish(initLog.debug,  gener1, 'gener1' )
126   #geomPublish(initLog.debug,  pipe1, 'pipe1' )
127   #geomPublish(initLog.debug,  facefis1, 'facefis1' )
128   #geomPublish(initLog.debug,  plane1, 'plane1' )
129   #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
130
131   # --- partition du bloc défaut par génératrice, tore et plan fissure
132   if step == 7:
133     return None
134
135   [blocPartition, blocp, tore,
136   faceFissure, facesExternes, facesExtBloc, facesExtElli,
137   aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
138     partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
139                         facefis1, ellipsoide1)
140   if not isHexa:
141     edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
142
143   # --- TORE
144   # --- faces toriques du tore
145   if step == 8:
146     return None
147
148   [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
149
150   # --- faces 1/2 circulaires et edges dans le plan de fissure
151   if step == 9:
152     return None
153
154   [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
155
156   # --- recherche et classement des edges du tore par propagate
157   if step == 10:
158     return None
159
160   [diams, circles, geners] = propagateTore(tore)
161
162   # --- tri par longueur des 3 génératrices
163   if step == 11:
164     return None
165
166   [genext, genint, gencnt] = sortGeneratrices(tore, geners)
167
168   # --- faces fissure dans et hors tore, et edges face hors tore
169   if step == 12:
170     return None
171
172   [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
173     facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
174
175   # --- identification des faces tore et fissure dans le solide hors tore
176   if step == 13:
177     return None
178
179   [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
180     facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
181
182   # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
183
184   #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
185   if step == 14:
186     return None
187
188   extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
189
190   # --- maillage du bloc partitionne
191
192   if step == 15:
193     return None
194
195   [bloc1, blocComplet] = \
196     meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
197                 gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
198                 aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
199                 nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
200                 nbsegFis, dmoyen, lensegEllipsoide)
201
202   if step == 16:
203     return None
204   maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
205
206   if step == 17:
207     return None
208   maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
209
210   if step == 18:
211     return None
212   maillageComplet.ExportMED(fichierMaillageFissure)
213   putName(maillageComplet, nomFicFissure)
214   logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
215
216   if salome.sg.hasDesktop():
217     salome.sg.updateObjBrowser()
218
219   return maillageComplet