X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FTools%2FblocFissure%2Fgmu%2FpeauInterne.py;h=75f500bdbbf796efb029fa10332f6b08cb045d9b;hb=b922e849a4bee9f5cbbeab64c0a11d830046f0bd;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..75f500bdb 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-2020 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 @@ -31,63 +31,75 @@ 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) 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 ("Entity_Hexa" == str(entity_type)): + 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 ]) 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.debug("listOfCorner = {}".format(listOfCorner)) + 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)