Salome HOME
general crack dialog, another error detection
[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.<br>"
31       texte += "Causes possibles :<ul>"
32       texte += "<li>La face de fissure est tangente à la paroi solide."
33       texte += "Elle doit déboucher franchement, sans que la surface dehors ne devienne plus grande que la surface dans le solide.</li>"
34       texte += "<li>le prémaillage de la face de fissure est trop grossier, les mailles à enlever dans le maillage sain "
35       texte += "n'ont pas toutes été détectées.</li></ul>"
36       raise fissError(traceback.extract_stack(),texte)
37     logging.debug("surfaces faces fissure étendue, min %s, max %s", minSurf, maxSurf)
38     facesPortFissure = facesPartShapeDefautSorted[-1]
39   
40   geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
41   return facesPortFissure