Salome HOME
Merge tag 'V8_3_0a2' into ngr/python3_dev
[modules/smesh.git] / src / Tools / blocFissure / gmu / identifieElementsFissure.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 from .extractionOrientee import extractionOrientee
11 from .extractionOrienteeMulti import extractionOrienteeMulti
12  
13 def identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
14                              edgesPipeFiss, edgesFondFiss, aretesVivesC,
15                              fillingFaceExterne, centreFondFiss):
16   """
17   # -----------------------------------------------------------------------
18   # --- identification edges fond de fissure, edges pipe sur la face de fissure,
19   #     edges prolongées
20   #     edges internes communes pipe et fissure, points communs edges fissure peau et edges circulaires
21   """
22
23   logging.info('start')
24
25   edgesPipeC = geompy.GetInPlace(partitionPeauFissFond, geompy.MakeCompound(edgesPipeFiss))
26   geomPublishInFather(initLog.debug, partitionPeauFissFond, edgesPipeC, "edgesPipeFiss")
27   edgesFondC = geompy.GetInPlace(partitionPeauFissFond, geompy.MakeCompound(edgesFondFiss))
28   geomPublishInFather(initLog.debug, partitionPeauFissFond, edgesFondC, "edgesFondFiss")
29   
30   if aretesVivesC is None:
31     [edgesInside, edgesOutside, edgesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
32     [facesInside, facesOutside, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
33   else:
34     [edgesInside, edgesOutside, edgesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
35     [facesInside, facesOutside, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
36     
37   edgesPipeIn = geompy.GetSharedShapesMulti([edgesPipeC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"])
38   verticesPipePeau = []
39
40   for i, edge in enumerate(edgesPipeIn):
41     try:
42       vertices = geompy.GetSharedShapesMulti([edge, geompy.MakeCompound(facesOnside)], geompy.ShapeType["VERTEX"])
43       verticesPipePeau.append(vertices[0])
44       name = "edgePipeIn%d"%i
45       geomPublishInFather(initLog.debug, partitionPeauFissFond, edge, name)
46       name = "verticePipePeau%d"%i
47       geomPublishInFather(initLog.debug, partitionPeauFissFond, vertices[0], name)
48       logging.debug("edgePipeIn%s coupe les faces OnSide", i)
49     except:
50       logging.debug("edgePipeIn%s ne coupe pas les faces OnSide", i)
51
52   edgesFondIn =[]
53   if len(verticesPipePeau) > 0: # au moins une extrémité du pipe sur cette face de peau  
54     #tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesOutside)], geompy.ShapeType["EDGE"])
55     #edgesFondOut = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3] 
56     tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"])
57     edgesFondIn = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3]
58
59   return (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside)