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.<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]
40 geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
41 return facesPortFissure