Salome HOME
simplification
[modules/smesh.git] / src / Tools / blocFissure / gmu / identifieFacesEdgesFissureExterne.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2014-2021  EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """Identification des faces et edges de fissure externe pour maillage"""
21
22 import logging
23
24 from . import initLog
25
26 from .geomsmesh import geompy
27 from .geomsmesh import geomPublish
28 from .geomsmesh import geomPublishInFather
29
30 def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss, \
31                                       nro_cas=None):
32   """Identification des faces et edges de fissure externe pour maillage"""
33   logging.info('start')
34
35   texte = "---------------------------- fsFissuExt : {} ".format(fsFissuExt)
36   logging.debug(texte)
37   facesFissExt = list()
38   edgesFissExtPeau = list()
39   edgesFissExtPipe = list()
40   for ifil, face in enumerate(fsFissuExt): # éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
41     facesFissExt += face
42     edgesFissExtPeau += edFisExtPe[ifil]
43     edgesFissExtPipe += edFisExtPi[ifil]
44   texte = "---------------------------- identification faces de fissure externes au pipe : {}".format(len(facesFissExt))
45   logging.debug(texte)
46   # regroupement des faces de fissure externes au pipe.
47
48   if not facesFissExt:
49     texte = "---------------------------- fsFissuExt : {} ".format(fsFissuExt)
50     logging.info(texte)
51     raise Exception("stop identifieFacesEdgesFissureExterne ; aucune face de fissure externe au pipe n'a été trouvée.")
52
53   elif len(facesFissExt) > 1:
54     faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
55     edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss))    # edgesFissExtPipe peut ne pas couvrir toute la longueur
56     # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
57     # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
58     (_, closedFreeBoundaries, _) = geompy.GetFreeBoundary(faceFissureExterne)
59     edgesBordFFE = list()
60     for bound in closedFreeBoundaries:
61       edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
62     edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
63     texte = "edgesBordFFEid {}".format(edgesBordFFEid)
64     logging.debug(texte)
65     edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
66     edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
67     texte = "edgesPPEid {}".format(edgesPPEid)
68     logging.debug(texte)
69     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
70     texte = "edgesPFE {}".format(edgesPFE)
71     logging.debug(texte)
72     edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
73
74   else:
75     faceFissureExterne = facesFissExt[0]
76     edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
77     edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
78
79   geomPublish(initLog.always, faceFissureExterne, "faceFissureExterne", nro_cas)
80   geomPublishInFather(initLog.always, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne", nro_cas)
81   geomPublishInFather(initLog.always, faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne", nro_cas)
82
83   wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
84
85   return (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC)