# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2023 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]
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
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