Salome HOME
Merge branch 'V8_3_BR' into ngr/python3_dev
[modules/smesh.git] / src / Tools / blocFissure / gmu / identifieFacesEdgesFissureExterne.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4
5 from .geomsmesh import geompy
6 from .geomsmesh import geomPublish
7 from .geomsmesh import geomPublishInFather
8 from . import initLog
9
10 def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
11   """
12   identification des faces et edges de fissure externe pour maillage
13   """
14   logging.info('start')
15  
16   facesFissExt = []
17   edgesFissExtPeau = []
18   edgesFissExtPipe = []
19   for ifil in range(len(fsFissuExt)): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
20     facesFissExt += fsFissuExt[ifil]
21     edgesFissExtPeau += edFisExtPe[ifil]
22     edgesFissExtPipe += edFisExtPi[ifil]
23   logging.debug("---------------------------- identification faces de fissure externes au pipe :%s ", len(facesFissExt))
24   # regroupement des faces de fissure externes au pipe.
25   
26   if len(facesFissExt) > 1:
27     faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
28     edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss))    # edgesFissExtPipe peut ne pas couvrir toute la longueur
29     # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
30     # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
31     (isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
32     edgesBordFFE = []
33     for bound in closedFreeBoundaries:
34       edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
35     edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
36     logging.debug("edgesBordFFEid %s", edgesBordFFEid)
37     edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
38     edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
39     logging.debug("edgesPPEid %s", edgesPPEid)
40     edgesPFE = [ edid[0] for edid in edgesBordFFEid if edid[1] not in edgesPPEid] # on garde toutes les edges de bord non en contact avec le pipe
41     logging.debug("edgesPFE %s", edgesPFE)
42     edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
43   else:
44     faceFissureExterne = facesFissExt[0]
45     edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
46     edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
47   wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
48   geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
49   geomPublishInFather(initLog.debug, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
50   geomPublishInFather(initLog.debug, faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne")
51   
52   return (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC)