Salome HOME
[bos #40653][CEA] New mesh import export formats with meshio.
[modules/smesh.git] / src / Tools / blocFissure / gmu / insereFissureElliptique.py
index ede20b48ce9cdd38718171318f13b96121e7752d..8ec19886a3a6b19d981122afff2e33b4f78eb788 100644 (file)
@@ -1,45 +1,55 @@
 # -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""Insertion d'une fissure elliptique"""
+
+import os
 
 import logging
+
 import salome
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from geomsmesh import smesh
-import SMESH
-import math
-
-from partitionBlocDefaut import partitionBlocDefaut
-from facesVolumesToriques import facesVolumesToriques
-from facesCirculaires import facesCirculaires
-from propagateTore import propagateTore
-from sortGeneratrices import sortGeneratrices
-from facesFissure import facesFissure
-from facesToreInBloc import facesToreInBloc
-from shapeSurFissure import shapeSurFissure
-from meshBlocPart import meshBlocPart
-from enleveDefaut import enleveDefaut
-from regroupeSainEtDefaut import RegroupeSainEtDefaut
-from putName import putName
-# -----------------------------------------------------------------------------
-# --- procedure complete fissure elliptique
-
-def insereFissureElliptique(geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
+
+from .partitionBlocDefaut import partitionBlocDefaut
+from .facesVolumesToriques import facesVolumesToriques
+from .facesCirculaires import facesCirculaires
+from .propagateTore import propagateTore
+from .sortGeneratrices import sortGeneratrices
+from .facesFissure import facesFissure
+from .facesToreInBloc import facesToreInBloc
+from .shapeSurFissure import shapeSurFissure
+from .meshBlocPart import meshBlocPart
+from .enleveDefaut import enleveDefaut
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .putName import putName
+
+def insereFissureElliptique(geometriesSaines, maillagesSains, \
+                            shapesFissure, shapeFissureParams, \
                             maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
+  """procedure complete fissure elliptique"""
   logging.info('start')
 
-  geometrieSaine    = geometriesSaines[0]
+  #geometrieSaine    = geometriesSaines[0]
   maillageSain      = maillagesSains[0]
   isHexa            = maillagesSains[1]
-  shapeDefaut       = shapesFissure[0]
-  tailleDefaut      = shapesFissure[2]
-  pipe0             = shapesFissure[4]
+  #shapeDefaut       = shapesFissure[0]
+  #tailleDefaut      = shapesFissure[2]
+  #pipe0             = shapesFissure[4]
   gener1            = shapesFissure[5]
   pipe1             = shapesFissure[6]
   facefis1          = shapesFissure[7]
@@ -47,12 +57,12 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
   ellipsoide1       = shapesFissure[9]
 
 
-  demiGrandAxe      = shapeFissureParams['demiGrandAxe']
-  demiPetitAxe      = shapeFissureParams['demiPetitAxe']
-  orientation       = shapeFissureParams['orientation']
+  #demiGrandAxe      = shapeFissureParams['demiGrandAxe']
+  #demiPetitAxe      = shapeFissureParams['demiPetitAxe']
+  #orientation       = shapeFissureParams['orientation']
 
   nomRep            = maillageFissureParams['nomRep']
-  nomFicSain        = maillageFissureParams['nomFicSain']
+  #nomFicSain        = maillageFissureParams['nomFicSain']
   nomFicFissure     = maillageFissureParams['nomFicFissure']
 
   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
@@ -63,137 +73,142 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
 
-  fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
+  #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
+  fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
 
   facesDefaut              = elementsDefaut[0]
-  centreDefaut             = elementsDefaut[1]
-  normalDefaut             = elementsDefaut[2]
+  #centreDefaut             = elementsDefaut[1]
+  #normalDefaut             = elementsDefaut[2]
   extrusionDefaut          = elementsDefaut[3]
   dmoyen                   = elementsDefaut[4]
-  bordsPartages            = elementsDefaut[5]
-  fillconts                = elementsDefaut[6]
-  idFilToCont              = elementsDefaut[7]
-  maillageSain             = elementsDefaut[8]
+  #bordsPartages            = elementsDefaut[5]
+  #fillconts                = elementsDefaut[6]
+  #idFilToCont              = elementsDefaut[7]
+  #maillageSain             = elementsDefaut[8]
   internalBoundary         = elementsDefaut[9]
   zoneDefaut               = elementsDefaut[10]
   zoneDefaut_skin          = elementsDefaut[11]
   zoneDefaut_internalFaces = elementsDefaut[12]
   zoneDefaut_internalEdges = elementsDefaut[13]
 
-  ## --- ellipse incomplete : generatrice
-  #if step == 5:
-    #return None
+  maillageComplet = None
+
+  while True:
+
+    ## --- ellipse incomplete : generatrice
+    #if step == 5:
+      #break
+
+    #allonge = demiGrandAxe/demiPetitAxe
+    #rayonTore = demiPetitAxe/5.0
+    #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
+    #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge)
 
-  #allonge = demiGrandAxe/demiPetitAxe
-  #rayonTore = demiPetitAxe/5.0
-  #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
-  #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
+    ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
+    #if step == 6:
+      #break
 
-  ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
-  #if step == 6:
-    #return None
+    #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
+    #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
+    #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
+    #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
+    #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
+    #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
 
-  #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
-  #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
-  #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
-  #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
-  #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
-  #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
+    #geomPublish(initLog.debug,  pipe0, 'pipe0' )
+    #geomPublish(initLog.debug,  gener1, 'gener1' )
+    #geomPublish(initLog.debug,  pipe1, 'pipe1' )
+    #geomPublish(initLog.debug,  facefis1, 'facefis1' )
+    #geomPublish(initLog.debug,  plane1, 'plane1' )
+    #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
 
-  #geomPublish(initLog.debug,  pipe0, 'pipe0' )
-  #geomPublish(initLog.debug,  gener1, 'gener1' )
-  #geomPublish(initLog.debug,  pipe1, 'pipe1' )
-  #geomPublish(initLog.debug,  facefis1, 'facefis1' )
-  #geomPublish(initLog.debug,  plane1, 'plane1' )
-  #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
+    # --- partition du bloc défaut par génératrice, tore et plan fissure
+    if step == 7:
+      break
 
-  # --- partition du bloc défaut par génératrice, tore et plan fissure
-  if step == 7:
-    return None
+    [ blocPartition, _, tore, \
+      faceFissure, facesExternes, facesExtBloc, facesExtElli,
+      aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
+      partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
+    if not isHexa:
+      edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
 
-  [blocPartition, blocp, tore,
-  faceFissure, facesExternes, facesExtBloc, facesExtElli,
-  aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
-    partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
-                        facefis1, ellipsoide1)
-  if not isHexa:
-    edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
+    # --- TORE
+    # --- faces toriques du tore
+    if step == 8:
+      break
 
-  # --- TORE
-  # --- faces toriques du tore
-  if step == 8:
-    return None
+    [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
 
-  [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
+    # --- faces 1/2 circulaires et edges dans le plan de fissure
+    if step == 9:
+      break
 
-  # --- faces 1/2 circulaires et edges dans le plan de fissure
-  if step == 9:
-    return None
+    [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
 
-  [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
+    # --- recherche et classement des edges du tore par propagate
+    if step == 10:
+      break
 
-  # --- recherche et classement des edges du tore par propagate
-  if step == 10:
-    return None
+    [diams, circles, geners] = propagateTore(tore)
 
-  [diams, circles, geners] = propagateTore(tore)
+    # --- tri par longueur des 3 génératrices
+    if step == 11:
+      break
 
-  # --- tri par longueur des 3 génératrices
-  if step == 11:
-    return None
+    [_, genint, gencnt] = sortGeneratrices(tore, geners)
 
-  [genext, genint, gencnt] = sortGeneratrices(tore, geners)
+    # --- faces fissure dans et hors tore, et edges face hors tore
+    if step == 12:
+      break
 
-  # --- faces fissure dans et hors tore, et edges face hors tore
-  if step == 12:
-    return None
+    [_, facefissoutore, _, edgeext, reverext] = \
+      facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
 
-  [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
-    facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
+    # --- identification des faces tore et fissure dans le solide hors tore
+    if step == 13:
+      break
 
-  # --- identification des faces tore et fissure dans le solide hors tore
-  if step == 13:
-    return None
+    [_, _, _] = \
+      facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
 
-  [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
-    facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
+    # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
 
-  # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
+    #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
+    if step == 14:
+      break
 
-  #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
-  if step == 14:
-    return None
+    extrusionFaceFissure, _ = shapeSurFissure(plane1)
 
-  extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
+    # --- maillage du bloc partitionne
 
-  # --- maillage du bloc partitionne
+    if step == 15:
+      break
 
-  if step == 15:
-    return None
+    [_, blocComplet] = \
+      meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
+                  gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
+                  aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
+                  nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, \
+                  nbsegFis, dmoyen, lensegEllipsoide)
+    if step == 16:
+      break
 
-  [bloc1, blocComplet] = \
-    meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
-                gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
-                aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
-                nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
-                nbsegFis, dmoyen, lensegEllipsoide)
+    maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+    if step == 17:
+      break
 
-  if step == 16:
-    return None
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+    maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
+    if step == 18:
+      break
 
-  if step == 17:
-    return None
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
+    maillageComplet.ExportMED(fichierMaillageFissure)
+    putName(maillageComplet, nomFicFissure)
+    logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
 
-  if step == 18:
-    return None
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
+    break
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(1)
+    salome.sg.updateObjBrowser()
 
   return maillageComplet