X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FcasStandard.py;h=0243a84e98ce453790a4198621a4401c5d948549;hp=e52b700130229425cdaf76b9f882d846e9425e97;hb=140b89fcdf34becd8a3be2f1e276ad0960383eca;hpb=c178a1a49169d525650f4a4d8485a88f8058ffc4 diff --git a/src/Tools/blocFissure/gmu/casStandard.py b/src/Tools/blocFissure/gmu/casStandard.py index e52b70013..0243a84e9 100644 --- a/src/Tools/blocFissure/gmu/casStandard.py +++ b/src/Tools/blocFissure/gmu/casStandard.py @@ -1,78 +1,93 @@ # -*- coding: utf-8 -*- +# Copyright (C) 2014-2021 EDF R&D +# +# 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 +# +"""Cas standard""" import os -from geomsmesh import geompy, smesh -from geomsmesh import geomPublish -from geomsmesh import geomPublishInFather -import initLog - -import math -import GEOM -import SALOMEDS -import SMESH -#import StdMeshers -#import GHS3DPlugin -#import NETGENPlugin import logging -from fissureGenerique import fissureGenerique +from .geomsmesh import geompy, smesh +from .geomsmesh import geomPublish +from .geomsmesh import geomPublishInFather -from initEtude import initEtude -from triedreBase import triedreBase -from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut -from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain -from construitFissureGenerale import construitFissureGenerale +from . import initLog + +from .fissureGenerique import fissureGenerique + +from .initEtude import initEtude +from .triedreBase import triedreBase +from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut +from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain +from .construitFissureGenerale import construitFissureGenerale +from .putName import putName O, OX, OY, OZ = triedreBase() class casStandard(fissureGenerique): - """ - problème de fissure standard, défini par : + """problème de fissure standard, défini par : + - un maillage sain (hexaèdres), - une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé - - les numéros d'arêtes (edges géométriques) correspondant au fond de fissure + - les noms des groupes d'arêtes ou leurs numéros d'arêtes (edges au sens de GEOM) correspondant au fond de fissure - les paramètres de maillage de la fissure """ + referencesMaillageFissure = None # --------------------------------------------------------------------------- def __init__ (self, dicoParams, references = None, numeroCas = 0): initEtude() self.references = references self.dicoParams = dicoParams - if self.dicoParams.has_key('nomCas'): + if 'nomCas' in self.dicoParams: self.nomCas = self.dicoParams['nomCas'] - elif self.dicoParams.has_key('nomres'): + elif 'nomres' in self.dicoParams: self.nomCas = os.path.splitext(os.path.split(self.dicoParams['nomres'])[1])[0] else: self.nomCas = 'casStandard' - if self.dicoParams.has_key('reptrav'): + if 'reptrav' in self.dicoParams: self.reptrav = self.dicoParams['reptrav'] else: - self.reptrav = '.' + self.reptrav = os.curdir self.numeroCas = numeroCas if self.numeroCas != 0: self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas) else: self.nomProbleme = self.nomCas - if self.dicoParams.has_key('lenSegPipe'): + if 'lenSegPipe' in self.dicoParams: self.lenSegPipe = self.dicoParams['lenSegPipe'] else: self.lenSegPipe =self.dicoParams['rayonPipe'] - if self.dicoParams.has_key('step'): + if 'step' in self.dicoParams: step = self.dicoParams['step'] else: step = -1 # exécuter toutes les étapes - if not self.dicoParams.has_key('aretesVives'): + if 'aretesVives' not in self.dicoParams: self.dicoParams['aretesVives'] = 0 if self.numeroCas == 0: # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes self.executeProbleme(step) - + # --------------------------------------------------------------------------- def genereMaillageSain(self, geometriesSaines, meshParams): logging.info("genereMaillageSain %s", self.nomCas) - ([objetSain], status) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain']) - smesh.SetName(objetSain.GetMesh(), 'objetSain') + ([objetSain], _) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain']) + putName(objetSain.GetMesh(), 'objetSain', i_pref=self.numeroCas) return [objetSain, True] # True : maillage hexa @@ -86,7 +101,7 @@ class casStandard(fissureGenerique): pointIn_x : optionnel : coordonnée x d'un point dans le solide sain (pour orienter la face - idem avec y,z) """ logging.info("setParamShapeFissure %s", self.nomCas) - if self.dicoParams.has_key('pointInterieur'): + if 'pointInterieur' in self.dicoParams: self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'], rayonPipe = self.dicoParams['rayonPipe'], lenSegPipe = self.lenSegPipe, @@ -99,19 +114,39 @@ class casStandard(fissureGenerique): lenSegPipe = self.lenSegPipe) # --------------------------------------------------------------------------- - def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams): - logging.info("genereShapeFissure %s", self.nomCas) + def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \ + mailleur="MeshGems"): lgInfluence = shapeFissureParams['lgInfluence'] - shellFiss = geompy.ImportFile( self.dicoParams['brepFaceFissure'], "BREP") +# Contrôle de 'brepFaceFissure' pour les anciennes versions + if ( 'brepFaceFissure' in self.dicoParams ): + self.dicoParams['CAOFaceFissure'] = self.dicoParams['brepFaceFissure'] + cao_file = self.dicoParams['CAOFaceFissure'] + suffix = os.path.basename(cao_file).split(".")[-1] + if ( suffix.upper() == "BREP" ): + shellFiss = geompy.ImportBREP(cao_file) + elif ( suffix.upper() == "XAO" ): + (_, shellFiss, _, l_groups, _) = geompy.ImportXAO(cao_file) fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"]) - geompy.UnionIDs(fondFiss, self.dicoParams['edgeFissIds'] ) +# Contrôle de 'edgeFissIds' pour les anciennes versions + if ( 'edgeFissIds' in self.dicoParams ): + self.dicoParams['edgeFiss'] = self.dicoParams['edgeFissIds'] + if isinstance(self.dicoParams['edgeFiss'][0],int): + geompy.UnionIDs(fondFiss, self.dicoParams['edgeFiss'] ) + else: + l_groups = geompy.GetGroups(shellFiss) + l_aux = list() + for group in l_groups: + if ( group.GetName() in self.dicoParams['edgeFiss'] ): + l_aux.append(group) + geompy.UnionList(fondFiss, l_aux ) geomPublish(initLog.debug, shellFiss, 'shellFiss' ) geomPublishInFather(initLog.debug, shellFiss, fondFiss, 'fondFiss' ) - coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1]) + coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1], \ + mailleur, self.numeroCas) centre = None return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss] @@ -128,16 +163,18 @@ class casStandard(fissureGenerique): # --------------------------------------------------------------------------- def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams): - elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams) + elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \ + self.numeroCas) return elementsDefaut # --------------------------------------------------------------------------- - def genereMaillageFissure(self, geometriesSaines, maillagesSains, - shapesFissure, shapeFissureParams, - maillageFissureParams, elementsDefaut, step): - maillageFissure = construitFissureGenerale(maillagesSains, - shapesFissure, shapeFissureParams, - maillageFissureParams, elementsDefaut, step) + def genereMaillageFissure(self, geometriesSaines, maillagesSains, \ + shapesFissure, shapeFissureParams, \ + maillageFissureParams, elementsDefaut, step, \ + mailleur="MeshGems"): + maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \ + maillageFissureParams, elementsDefaut, \ + mailleur, self.numeroCas) return maillageFissure # --------------------------------------------------------------------------- @@ -145,12 +182,13 @@ class casStandard(fissureGenerique): if self.references is not None: self.referencesMaillageFissure = self.references else: - self.referencesMaillageFissure = dict(Entity_Quad_Pyramid = 0, - Entity_Quad_Triangle = 0, - Entity_Quad_Edge = 0, - Entity_Quad_Penta = 0, - Entity_Quad_Hexa = 0, - Entity_Node = 0, - Entity_Quad_Tetra = 0, - Entity_Quad_Quadrangle = 0) - + self.referencesMaillageFissure = dict( \ + Entity_Quad_Quadrangle = 0, \ + Entity_Quad_Hexa = 0, \ + Entity_Node = 0, \ + Entity_Quad_Edge = 0, \ + Entity_Quad_Triangle = 0, \ + Entity_Quad_Tetra = 0, \ + Entity_Quad_Pyramid = 0, \ + Entity_Quad_Penta = 0 \ + )