diff --git a/src/Tools/blocFissure/gmu/peauInterne.py b/src/Tools/blocFissure/gmu/peauInterne.py index cb444f285..75f500bdb 100644 --- a/src/Tools/blocFissure/gmu/peauInterne.py +++ b/src/Tools/blocFissure/gmu/peauInterne.py @@ -31,8 +31,8 @@ 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 ? """ @@ -40,51 +40,62 @@ def peauInterne(fichierMaillage, shapeDefaut, nomZones): ([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 = {}".format(listOfCorner))