Salome HOME
c2a055f8ff1af58fc5d984df34e00ae00ba97901
[modules/smesh.git] / src / Tools / blocFissure / gmu / restreintFaceFissure.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import geompy
5 from geomsmesh import geomPublish
6 from geomsmesh import geomPublishInFather
7 import initLog
8 from sortFaces import sortFaces
9 import traceback
10 from fissError import fissError
11
12 def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
13   """
14   restriction de la face de fissure au domaine solide
15   partition face fissure étendue par fillings
16   """
17   logging.info('start')
18   partShapeDefaut = geompy.MakePartition([shapeDefaut], facesDefaut, [], [], geompy.ShapeType["FACE"], 0, [], 0)
19   geomPublish(initLog.debug, partShapeDefaut, 'partShapeDefaut')
20   facesPartShapeDefaut = geompy.ExtractShapes(partShapeDefaut, geompy.ShapeType["FACE"], False)
21   if pointInterne is not None:
22     distfaces = [(geompy.MinDistance(face,pointInterne), i, face) for i, face in enumerate(facesPartShapeDefaut)]
23     distfaces.sort()
24     logging.debug("selection de la face la plus proche du point interne, distance=%s",distfaces[0][0])
25     facesPortFissure = distfaces[0][2]
26   else:
27     try:
28       facesPartShapeDefautSorted, minSurf, maxSurf = sortFaces(facesPartShapeDefaut) # la face de fissure dans le volume doit être la plus grande
29     except:
30       texte = "Restriction de la face de fissure au domaine solide impossible. "
31       texte += "Cause possible : la face de fissure est tangente à la paroi solide. "
32       texte += "Elle doit déboucher franchement, sans que la surface dehors ne devienne plus grande que la surface dans le solide. "
33       raise fissError(traceback.extract_stack(),texte)
34     logging.debug("surfaces faces fissure étendue, min %s, max %s", minSurf, maxSurf)
35     facesPortFissure = facesPartShapeDefautSorted[-1]
36   
37   geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
38   return facesPortFissure