1 # -*- coding: utf-8 -*-
4 from geomsmesh import geompy
5 from geomsmesh import geomPublish
6 from geomsmesh import geomPublishInFather
8 from sortFaces import sortFaces
10 from fissError import fissError
12 def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
14 restriction de la face de fissure au domaine solide
15 partition face fissure étendue par fillings
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)]
24 logging.debug("selection de la face la plus proche du point interne, distance=%s",distfaces[0][0])
25 facesPortFissure = distfaces[0][2]
28 facesPartShapeDefautSorted, minSurf, maxSurf = sortFaces(facesPartShapeDefaut) # la face de fissure dans le volume doit être la plus grande
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]
37 geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
38 return facesPortFissure