Salome HOME
Copyright update 2022
[modules/smesh.git] / src / Tools / blocFissure / gmu / fusionMaillageAttributionDefaut.py
index b599be6d15348ade02e46db3eb414a273b01464a..e2ccabb729b443f48875f9ed8ea365e88c194f12 100644 (file)
 # -*- coding: utf-8 -*-
-"""
-Created on Tue Jun 24 09:14:13 2014
+# Copyright (C) 2014-2022  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
+#
+"""Groupe de quadrangles de face transformé en face géométrique par filling
 
+Created on Tue Jun 24 09:14:13 2014
 @author: I48174 (Olivier HOAREAU)
 """
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import smesh
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
+
 import GEOM
 import SMESH
 
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
 from .listOfExtraFunctions import createNewMeshesFromCorner
 from .listOfExtraFunctions import createLinesFromMesh
+from .putName import putName
+
+def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, \
+                         zoneDefaut_skin, shapeDefaut, listOfCorners, \
+                         nro_cas=None):
+  """Groupe de quadrangles de face transformé en face géométrique par filling"""
+
+  logging.info("start")
+  logging.info("Pour le cas n°%s", nro_cas)
+
+  facesNonCoupees = list()
+  facesCoupees = list()
+  maillagesNonCoupes = list()
+  maillagesCoupes = list()
+
+  # On crée une liste contenant le maillage de chaque face.
+  listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners, nro_cas)
+
+  i_aux = 0
+  while i_aux < len(listOfNewMeshes):
+    lines = createLinesFromMesh(listOfNewMeshes[i_aux])
+    setOfLines = list()
+    for line in lines:
+      # On possède l'information 'ID' de chaque noeud composant chaque
+      # ligne de la face. A partir de l'ID, on crée un vertex. Un
+      # ensemble de vertices constitue une ligne. Un ensemble de lignes
+      # constitue la face.
+      tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
+      tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+      line = geompy.MakeInterpol(tmpPoints, False, False)
+      setOfLines.append(line)
+
+    # A partir des lignes de la face,
+    # on recrée un objet GEOM temporaire par filling.
+    filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+    #logging.debug("face de filling")
+    #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i_aux+1))
+
+    tmpPartition = geompy.MakePartition([filling], [shapeDefaut], list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
+    tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
+    tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
+    if len(tmpExplodeRef) == len(tmpExplodeNum):
+      logging.debug("face de filling non coupee")
+      geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i_aux+1)) # doit etre publié pour critère OK plus bas
+      facesNonCoupees.append(filling)
+      maillagesNonCoupes.append(listOfNewMeshes[i_aux])
+    else:
+      logging.debug("face de filling coupee")
+      geompy.addToStudy( filling, "faceCoupee_{0}".format(i_aux+1))
+      facesCoupees.append(filling)
+      maillagesCoupes.append(listOfNewMeshes[i_aux])
+    i_aux += 1
+
+  listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
+
+  newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
+  putName(newMaillageInterne, 'newInternalBoundary', i_pref=nro_cas)
+
+  facesEnTrop = list()
+  criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
+  filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
+  for i_aux, filtre in enumerate(filtres):
+    filtre.SetMesh(maillageSain.GetMesh())
+    faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i_aux+1), filtre)
+    facesEnTrop.append(faceEnTrop)
+
+  newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
 
-# -----------------------------------------------------------------------------
-# --- groupe de quadrangles de face transformé en face géométrique par filling
-
-def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, zoneDefaut_skin, shapeDefaut, listOfCorners):
-    """ """
-    # TODO: rédiger la docstring
-    
-    logging.info("start")
-    
-    facesNonCoupees = []
-    facesCoupees = []
-    maillagesNonCoupes = []
-    maillagesCoupes = []
-        
-    # On crée une liste contenant le maillage de chaque face.
-    listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners)
-    
-    i = 0
-    while i < len(listOfNewMeshes):
-        lines = createLinesFromMesh(listOfNewMeshes[i])
-        setOfLines = []
-        for line in lines:
-            # On possède l'information 'ID' de chaque noeud composant chaque
-            # ligne de la face. A partir de l'ID, on crée un vertex. Un
-            # ensemble de vertices constitue une ligne. Un ensemble de lignes
-            # constitue la face.
-            tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
-            tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
-            line = geompy.MakeInterpol(tmpPoints, False, False)
-            setOfLines.append(line)
-        
-        # A partir des lignes de la face,
-        # on recrée un objet GEOM temporaire par filling.
-        filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
-        #logging.debug("face de filling")
-        #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
-        
-        tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-        tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
-        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
-        if len(tmpExplodeRef) == len(tmpExplodeNum):
-            logging.debug("face de filling non coupee")
-            geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i + 1)) # doit etre publie pour critere OK plus bas
-            facesNonCoupees.append(filling)
-            maillagesNonCoupes.append(listOfNewMeshes[i])
-        else:
-            logging.debug("face de filling coupee")
-            geompy.addToStudy( filling, "faceCoupee_{0}".format(i + 1))
-            facesCoupees.append(filling)
-            maillagesCoupes.append(listOfNewMeshes[i])
-        
-        i += 1
-    
-    listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
-    
-    newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
-    
-    facesEnTrop = []
-    
-    criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
-    filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
-    for i, filtre in enumerate(filtres):
-        filtre.SetMesh(maillageSain.GetMesh())
-        faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i + 1), filtre)
-        facesEnTrop.append(faceEnTrop)
-    
-    newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
-    
-    smesh.SetName(newMaillageInterne, 'newInternalBoundary')
-        
-    return newZoneDefaut_skin, newMaillageInterne
-    
\ No newline at end of file
+  return newZoneDefaut_skin, newMaillageInterne