X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FidentifieEdgesPeau.py;h=c4cbe095cebdb760b4ebe8d6170a758314a0f612;hp=19335d7fa52c72cc58e6294ef983f7ed9425163a;hb=953204ba5556e1a46843c58c5900dbbbe85d9726;hpb=cfa45d551fd47dd3648dea6e50ac74329b0d9e5d diff --git a/src/Tools/blocFissure/gmu/identifieEdgesPeau.py b/src/Tools/blocFissure/gmu/identifieEdgesPeau.py index 19335d7fa..c4cbe095c 100644 --- a/src/Tools/blocFissure/gmu/identifieEdgesPeau.py +++ b/src/Tools/blocFissure/gmu/identifieEdgesPeau.py @@ -1,141 +1,62 @@ # -*- 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 geomsmesh import geomPublish -from geomsmesh import geomPublishInFather -import initLog +from .identifieEdgesPeau_a import identifieEdgesPeau_a +from .identifieEdgesPeau_b import identifieEdgesPeau_b +from .identifieEdgesPeau_c import identifieEdgesPeau_c -from substractSubShapes import substractSubShapes - -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 = [] - 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] - 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 - 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))] - 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 - 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 - geomPublishInFather(initLog.debug, facePeau, grpVertCircPeau, name) - pass - pass # --- au moins une extrémité du pipe sur cette face de peau + logging.info('Nombre de sommets : len(verticesPipePeau) = %d', len(verticesPipePeau)) + + facesPipePeau = [None for _ in range(len(edgesFissExtPipe))] + endsEdgeFond = [None for _ in range(len(edgesFissExtPipe))] + edgeRadFacePipePeau = [None for _ in range(len(edgesFissExtPipe))] + + edgesListees = list() + # --- au moins une extrémité du pipe sur cette face de peau + if verticesPipePeau: + + 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 - geomPublishInFather(initLog.debug, 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: - geomPublishInFather(initLog.debug, 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) - geomPublishInFather(initLog.debug, 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 - 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) - else: - for i, edge in enumerate(edges): - edgesFissurePeau.append(edge) - name = "edgeFissurePeau%d"%i - geomPublishInFather(initLog.debug, facePeau, edge, name) - + edgesFissurePeau = identifieEdgesPeau_c(verticesPipePeau, facePeau, edgesListees, verticesCircPeau) + return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, edgesCircPeau, verticesCircPeau, groupEdgesBordPeau, bordsVifs, edgesFissurePeau, aretesVivesCoupees)