X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FpeauInterne.py;h=6c241a75ce883946ce0fd04bd8e04e82c1281828;hb=f44efbc02056a2734440b736789b8cfa380430bb;hp=b98bba10f29073712ab590d7e0ac7d1764eae1be;hpb=385d4cede5f752d0eec26c306f3b5e14511e2a3d;p=modules%2Fsmesh.git diff --git a/src/Tools/blocFissure/gmu/peauInterne.py b/src/Tools/blocFissure/gmu/peauInterne.py index b98bba10f..6c241a75c 100644 --- a/src/Tools/blocFissure/gmu/peauInterne.py +++ b/src/Tools/blocFissure/gmu/peauInterne.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2014-2019 CEA/DEN, EDF R&D +# 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 @@ -17,79 +17,91 @@ # # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # +"""Peau interne du defaut dans le maillage sain""" import logging -from .geomsmesh import smesh -import SMESH import traceback -from .fissError import fissError +import SMESH + +from .geomsmesh import smesh + +from .fissError import fissError from .listOfExtraFunctions import lookForCorner from .fusionMaillageAttributionDefaut import fusionMaillageDefaut -# ----------------------------------------------------------------------------- -# --- peau interne du defaut dans le maillage sain - def peauInterne(fichierMaillage, shapeDefaut, nomZones): - """ - Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage) + """Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage) + On récupère le volume et la peau de la zone de défaut, les éventuelles faces et arêtes internes de cette zone. + Remarque : intérêt du passage par fichierMaillage plutôt que par maillageSain ? """ logging.info("start") - ([maillageSain], status) = smesh.CreateMeshesFromMED(fichierMaillage) + ([maillageSain], _) = smesh.CreateMeshesFromMED(fichierMaillage) groups = maillageSain.GetGroups() + #print ("groupes :") + #for grp in groups: + #print ("\t{}".format(grp.GetName())) zoneDefaut = None for grp in groups: logging.debug("groupe %s",grp.GetName()) if grp.GetName() == nomZones + "_vol": zoneDefaut = grp break + #print ("zoneDefaut = {}".format(zoneDefaut)) zoneDefaut_skin = None for grp in groups: if grp.GetName() == nomZones + "_skin": zoneDefaut_skin = grp break + #print ("zoneDefaut_skin = {}".format(zoneDefaut_skin)) zoneDefaut_internalFaces = None for grp in groups: if grp.GetName() == nomZones + "_internalFaces": zoneDefaut_internalFaces = grp break + #print ("zoneDefaut_internalFaces = {}".format(zoneDefaut_internalFaces)) zoneDefaut_internalEdges = None for grp in groups: if grp.GetName() == nomZones + "_internalEdges": zoneDefaut_internalEdges = grp break - + #print ("zoneDefaut_internalEdges = {}".format(zoneDefaut_internalEdges)) + # --- Le groupe ZoneDefaut ne doit contenir que des Hexaèdres" - - info=maillageSain.GetMeshInfo(zoneDefaut) - keys = list(info.keys()); keys.sort() - nbelem=0 - nbhexa=0 - for i in keys: - #print " %s : %d" % ( i, info[i] ) - nbelem+=info[i] - if "Entity_Hexa" in str(i): - nbhexa+=info[i] - if (nbelem == 0) or (nbhexa < nbelem) : + + info = maillageSain.GetMeshInfo(zoneDefaut) + #print ("info = {}".format(info)) + nbelem = 0 + nbhexa = 0 + for entity_type in info: + #print (". {} : {})".format(entity_type, info[entity_type])) + nbelem += info[entity_type] + if ( str(entity_type) == "Entity_Hexa" ): + nbhexa += info[entity_type] + nbhexa += info[entity_type] + #print ("==> nbelem = {}, nbhexa = {}".format(nbelem,nbhexa)) + + if ( (nbelem == 0) or (nbhexa < nbelem) ): + print ("==> nbelem = {}, nbhexa = {}".format(nbelem,nbhexa)) texte = "La zone a remailler est incorrecte.
" texte += "Causes possibles :" + texte += "
  • Il n'y a pas que des hexaèdres réglés linéaires dans la zone à remailler (notamment mailles quadratiques, tetraèdres non traités)
  • " raise fissError(traceback.extract_stack(),texte) - nbAdded, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ]) + _, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ]) internal = maillageSain.GetMesh().CutListOfGroups( [ DefautBoundary ], [ zoneDefaut_skin ], 'internal' ) internalBoundary = smesh.CopyMesh( internal, 'internalBoundary', 0, 0) - + maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0) listOfCorner = lookForCorner(maillageDefautCible) - logging.debug("listOfCorner = %s", listOfCorner) - if len(listOfCorner) > 0: - logging.info("présence de coins à la surface externe de la zone à reconstruire") - zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner) + texte = "listOfCorner = {}".format(listOfCorner) + logging.debug(texte) + if listOfCorner: + logging.info("présence de coins à la surface externe de la zone à reconstruire") + zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner) return maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges -