Salome HOME
Merge branch 'hydro/imps_2015' into V7_dev
[modules/smesh.git] / src / Tools / blocFissure / gmu / peauInterne.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import smesh
5 import SMESH
6
7 from listOfExtraFunctions import lookForCorner
8 from fusionMaillageAttributionDefaut import fusionMaillageDefaut
9
10 # -----------------------------------------------------------------------------
11 # --- peau interne du defaut dans le maillage sain
12
13 def peauInterne(fichierMaillage, shapeDefaut, nomZones):
14   """
15   Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage)
16   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.
17   """
18   logging.info("start")
19   ([maillageSain], status) = smesh.CreateMeshesFromMED(fichierMaillage)
20
21   groups = maillageSain.GetGroups()
22   zoneDefaut = None
23   for grp in groups:
24     logging.debug("groupe %s",grp.GetName())
25     if grp.GetName() == nomZones + "_vol":
26       zoneDefaut = grp
27       break
28   zoneDefaut_skin = None
29   for grp in groups:
30     if grp.GetName() == nomZones + "_skin":
31       zoneDefaut_skin = grp
32       break
33   zoneDefaut_internalFaces = None
34   for grp in groups:
35     if grp.GetName() == nomZones + "_internalFaces":
36       zoneDefaut_internalFaces = grp
37       break
38   zoneDefaut_internalEdges = None
39   for grp in groups:
40     if grp.GetName() == nomZones + "_internalEdges":
41       zoneDefaut_internalEdges = grp
42       break
43
44   nbAdded, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ])
45   internal = maillageSain.GetMesh().CutListOfGroups( [ DefautBoundary ], [ zoneDefaut_skin ], 'internal' )
46   internalBoundary = smesh.CopyMesh( internal, 'internalBoundary', 0, 0)
47   
48   maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0)
49   listOfCorner = lookForCorner(maillageDefautCible)
50   logging.debug("listOfCorner = %s", listOfCorner)
51   if len(listOfCorner) > 0:
52       logging.info("présence de coins à la surface externe de la zone à reconstruire")
53       zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner)
54
55   return maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges
56