Salome HOME
Merge branch 'V8_3_BR' into ngr/python3_dev
[modules/smesh.git] / src / Tools / blocFissure / gmu / identifieEdgesPeau.py
index ff138f3292374a2ac1ab026b8d7a98f4636a8cbe..53b2cc5b91ff500a33a55fe899665d85b9e46c11 100644 (file)
@@ -2,8 +2,12 @@
 
 import logging
 
-from geomsmesh import geompy
-from substractSubShapes import substractSubShapes
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+
+from .substractSubShapes import substractSubShapes
 
 def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
                        edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
@@ -11,16 +15,16 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
   identification précise des edges et disques des faces de peau selon index extremité fissure
   """
   logging.info('start')
-  
+
   facesPipePeau = [None for i in range(len(edgesFissExtPipe))]
   endsEdgeFond = [None for i in range(len(edgesFissExtPipe))]
   edgeRadFacePipePeau = [None for i in range(len(edgesFissExtPipe))]
-  
+
   edgesListees = []
   edgesCircPeau = []
   verticesCircPeau = []
   if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-    
+
     for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
       logging.debug("examen face debouchante circulaire")
       for i,efep in enumerate(edgesFissExtPipe):
@@ -36,37 +40,37 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
           nameEdge = "edgeRadFacePipePeau%d"%i
           facesPipePeau[i] = face
           endsEdgeFond[i] = sharedVertices[0]
-          geompy.addToStudy(face, nameFace)
-          geompy.addToStudy(sharedVertices[0], nameVert)
+          geomPublish(initLog.debug, face, nameFace)
+          geomPublish(initLog.debug, sharedVertices[0], nameVert)
           edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
           for edge in edgesFace:
             if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
               edgeRadFacePipePeau[i] = edge
-              geompy.addToStudy(edge, nameEdge)
+              geomPublish(initLog.debug, edge, nameEdge)
               break
             pass
           pass
         pass
       pass
-    
+
     # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure
     logging.debug("facesPipePeau: %s", facesPipePeau)
     edgesCircPeau = [None for i in range(len(facesPipePeau))]
-    verticesCircPeau = [None for i in range(len(facesPipePeau))]        
+    verticesCircPeau = [None for i in range(len(facesPipePeau))]
     for i,fcirc in enumerate(facesPipePeau):
       edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
       grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
       geompy.UnionList(grpEdgesCirc, edges)
       edgesCircPeau[i] = grpEdgesCirc
       name = "edgeCirc%d"%i
-      geompy.addToStudyInFather(facePeau, grpEdgesCirc, name)
+      geomPublishInFather(initLog.debug, facePeau, grpEdgesCirc, name)
       edgesListees = edgesListees + edges
       vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
       grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
       geompy.UnionList(grpVertCircPeau, vertices)
       verticesCircPeau[i] = grpVertCircPeau
       name = "pointEdgeCirc%d"%i
-      geompy.addToStudyInFather(facePeau, grpVertCircPeau, name)
+      geomPublishInFather(initLog.debug, facePeau, grpVertCircPeau, name)
       pass
     pass # --- au moins une extrémité du pipe sur cette face de peau
 
@@ -77,7 +81,7 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
   for i, edge in enumerate(edgesFilling):
     edgepeau = geompy.GetInPlace(facePeau, edge)
     name = "edgepeau%d"%i
-    geompy.addToStudyInFather(facePeau,edgepeau, name)
+    geomPublishInFather(initLog.debug, facePeau,edgepeau, name)
     logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
     if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
       logging.debug("  EDGES multiples")
@@ -92,9 +96,28 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
   geompy.UnionList(groupEdgesBordPeau, edgesBords)
   bordsVifs = None
   if aretesVivesC is not None:
+    logging.debug("identification des bords vifs par GetInPlace")
     bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
+    if bordsVifs is None:
+      logging.debug("pas d'identification des bords vifs par GetInPlace: test par distance")
+      edvifs = []
+      arvives = geompy.ExtractShapes(aretesVivesC, geompy.ShapeType["EDGE"], False)
+      edgs = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
+      for ed in edgs:
+        vxs = geompy.ExtractShapes(ed, geompy.ShapeType["VERTEX"], False)
+        for ar in arvives:
+          d = geompy.MinDistance(vxs[0], ar)
+          d += geompy.MinDistance(vxs[1], ar)
+          logging.debug("test distance bord face peau - arete vive: %s",d)
+          if d < 0.001:
+            edvifs.append(ed)
+            break
+      if len(edvifs) >0:
+        bordsVifs = geompy.CreateGroup(facePeau,geompy.ShapeType["EDGE"])
+        for ed in edvifs:
+          geompy.AddObject(bordsVifs, geompy.GetSubShapeID(facePeau, ed))
   if bordsVifs is not None:
-    geompy.addToStudyInFather(facePeau, bordsVifs, "bordsVifs")
+    geomPublishInFather(initLog.debug, facePeau, bordsVifs, "bordsVifs")
     groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
     grptmp = None
     if len(aretesVivesCoupees) > 0:
@@ -108,10 +131,10 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
       edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
       aretesVivesCoupees += edv
   logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
-  geompy.addToStudyInFather(facePeau, groupEdgesBordPeau , "EdgesBords")
-    
+  geomPublishInFather(initLog.debug, facePeau, groupEdgesBordPeau , "EdgesBords")
+
   # ---  edges de la face de peau partagées avec la face de fissure
-  
+
   edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
   edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
   edgesFissurePeau = []
@@ -122,7 +145,7 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
         if (geompy.MinDistance(grpVert, edge) < 1.e-3) and (edge not in edgesFissurePeau):
           edgesFissurePeau[i] = edge
           name = "edgeFissurePeau%d"%i
-          geompy.addToStudyInFather(facePeau,  edge, name)
+          geomPublishInFather(initLog.debug, facePeau,  edge, name)
     for edge in edges: # on ajoute après les edges manquantes
       if edge not in edgesFissurePeau:
         edgesFissurePeau.append(edge)
@@ -130,8 +153,8 @@ def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSor
     for i, edge in enumerate(edges):
       edgesFissurePeau.append(edge)
       name = "edgeFissurePeau%d"%i
-      geompy.addToStudyInFather(facePeau,  edge, name)
-      
+      geomPublishInFather(initLog.debug, facePeau,  edge, name)
+
   return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
           edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
-          bordsVifs, edgesFissurePeau)
+          bordsVifs, edgesFissurePeau, aretesVivesCoupees)