# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2021 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""Identification précise des edges et disques des faces de peau selon index extremité fissure"""
import logging
-from geomsmesh import geompy
-from substractSubShapes import substractSubShapes
+from .identifieEdgesPeau_a import identifieEdgesPeau_a
+from .identifieEdgesPeau_b import identifieEdgesPeau_b
+from .identifieEdgesPeau_c import identifieEdgesPeau_c
-def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
- edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
- """
- identification précise des edges et disques des faces de peau selon index extremité fissure
- """
+def identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted, \
+ edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+ nro_cas=None):
+ """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 = []
+
+ facesPipePeau = [None for _ in range(len(edgesFissExtPipe))]
+ endsEdgeFond = [None for _ in range(len(edgesFissExtPipe))]
+ edgeRadFacePipePeau = [None for _ in range(len(edgesFissExtPipe))]
+
+ edgesListees = list()
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):
- dist = geompy.MinDistance(face, efep)
- logging.debug(" distance face circulaire edge %s", dist)
- if dist < 1e-3:
- for ik, edpfi in enumerate(edgesPeauFondIn):
- if geompy.MinDistance(face, edpfi) < 1e-3:
- break
- sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[ik]], geompy.ShapeType["VERTEX"])
- nameFace = "facePipePeau%d"%i
- nameVert = "endEdgeFond%d"%i
- nameEdge = "edgeRadFacePipePeau%d"%i
- facesPipePeau[i] = face
- endsEdgeFond[i] = sharedVertices[0]
- geompy.addToStudy(face, nameFace)
- geompy.addToStudy(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)
- 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))]
- 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)
- 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)
- pass
- pass # --- au moins une extrémité du pipe sur cette face de peau
+
+ edgesCircPeau, verticesCircPeau = identifieEdgesPeau_a(edgesFissExtPipe, facePeau, facesPeauSorted, edgesPeauFondIn, \
+ endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, edgesListees, \
+ nro_cas)
+ else:
+ edgesCircPeau = list()
+ verticesCircPeau = list()
+
# --- edges de bord de la face de peau
- edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
- edgesBords = []
- for i, edge in enumerate(edgesFilling):
- edgepeau = geompy.GetInPlace(facePeau, edge)
- name = "edgepeau%d"%i
- geompy.addToStudyInFather(facePeau,edgepeau, name)
- logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
- if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
- logging.debug(" EDGES multiples")
- edgs = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
- edgesBords += edgs
- edgesListees += edgs
- else:
- logging.debug(" EDGE")
- edgesBords.append(edgepeau)
- edgesListees.append(edgepeau)
- groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
- geompy.UnionList(groupEdgesBordPeau, edgesBords)
- bordsVifs = None
- if aretesVivesC is not None:
- bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
- if bordsVifs is not None:
- geompy.addToStudyInFather(facePeau, bordsVifs, "bordsVifs")
- groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
- grptmp = None
- if len(aretesVivesCoupees) > 0:
- grpC = geompy.MakeCompound(aretesVivesCoupees)
- grptmp = geompy.GetInPlace(facePeau, grpC)
- if grptmp is not None:
- grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
- else:
- grpnew = bordsVifs
- if grpnew is not None:
- edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
- aretesVivesCoupees += edv
- logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
- geompy.addToStudyInFather(facePeau, groupEdgesBordPeau , "EdgesBords")
-
+ groupEdgesBordPeau, bordsVifs = identifieEdgesPeau_b(facePeau, edgesListees, \
+ fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+ nro_cas)
+
# --- 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 = []
- if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
- edgesFissurePeau = [None for i in range(len(verticesCircPeau))] # edges associés aux extrémités du pipe, en premier
- for edge in edges:
- for i, grpVert in enumerate(verticesCircPeau):
- 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)
- for edge in edges: # on ajoute après les edges manquantes
- if edge not in edgesFissurePeau:
- edgesFissurePeau.append(edge)
- else:
- for i, edge in enumerate(edges):
- edgesFissurePeau.append(edge)
- name = "edgeFissurePeau%d"%i
- geompy.addToStudyInFather(facePeau, edge, name)
-
+
+ edgesFissurePeau = identifieEdgesPeau_c(verticesPipePeau, facePeau, edgesListees, verticesCircPeau)
+
return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
bordsVifs, edgesFissurePeau, aretesVivesCoupees)