1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2020 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 from .geomsmesh import geompy
24 from .geomsmesh import geomPublish
25 from .geomsmesh import geomPublishInFather
28 def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
29 """identification des faces et edges de fissure externe pour maillage"""
32 logging.debug("---------------------------- fsFissuExt : {} ".format(fsFissuExt))
34 edgesFissExtPeau = list()
35 edgesFissExtPipe = list()
36 for ifil in range(len(fsFissuExt)): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
37 facesFissExt += fsFissuExt[ifil]
38 edgesFissExtPeau += edFisExtPe[ifil]
39 edgesFissExtPipe += edFisExtPi[ifil]
40 logging.debug("---------------------------- identification faces de fissure externes au pipe : {}".format(len(facesFissExt)))
41 # regroupement des faces de fissure externes au pipe.
44 logging.info("---------------------------- fsFissuExt : {} ".format(fsFissuExt))
45 raise Exception("stop identifieFacesEdgesFissureExterne ; aucune face de fissure externe au pipe n'a été trouvée.")
47 elif len(facesFissExt) > 1:
48 faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
49 edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss)) # edgesFissExtPipe peut ne pas couvrir toute la longueur
50 # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
51 # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
52 (isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
54 for bound in closedFreeBoundaries:
55 edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
56 edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
57 logging.debug("edgesBordFFEid {}".format(edgesBordFFEid))
58 edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
59 edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
60 logging.debug("edgesPPEid {}".format(edgesPPEid))
61 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
62 logging.debug("edgesPFE {}".format(edgesPFE))
63 edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
66 faceFissureExterne = facesFissExt[0]
67 edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
68 edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
70 wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
71 geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
72 geomPublishInFather(initLog.debug, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
73 geomPublishInFather(initLog.debug, faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne")
75 return (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC)