Salome HOME
general crack dialog: working on log...
[modules/smesh.git] / src / Tools / blocFissure / gmu / fusionMaillageAttributionDefaut.py
1 # -*- coding: utf-8 -*-
2 """
3 Created on Tue Jun 24 09:14:13 2014
4
5 @author: I48174 (Olivier HOAREAU)
6 """
7
8 import logging
9 from geomsmesh import geompy
10 from geomsmesh import smesh
11 from geomsmesh import geomPublish
12 from geomsmesh import geomPublishInFather
13 import initLog
14 import GEOM
15 import SMESH
16
17 from listOfExtraFunctions import createNewMeshesFromCorner
18 from listOfExtraFunctions import createLinesFromMesh
19
20 # -----------------------------------------------------------------------------
21 # --- groupe de quadrangles de face transformé en face géométrique par filling
22
23 def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, zoneDefaut_skin, shapeDefaut, listOfCorners):
24     """ """
25     # TODO: rédiger la docstring
26     
27     logging.info("start")
28     
29     facesNonCoupees = []
30     facesCoupees = []
31     maillagesNonCoupes = []
32     maillagesCoupes = []
33         
34     # On crée une liste contenant le maillage de chaque face.
35     listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners)
36     
37     i = 0
38     while i < len(listOfNewMeshes):
39         lines = createLinesFromMesh(listOfNewMeshes[i])
40         setOfLines = []
41         for line in lines:
42             # On possède l'information 'ID' de chaque noeud composant chaque
43             # ligne de la face. A partir de l'ID, on crée un vertex. Un
44             # ensemble de vertices constitue une ligne. Un ensemble de lignes
45             # constitue la face.
46             tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
47             tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
48             line = geompy.MakeInterpol(tmpPoints, False, False)
49             setOfLines.append(line)
50         
51         # A partir des lignes de la face,
52         # on recrée un objet GEOM temporaire par filling.
53         filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
54         #logging.debug("face de filling")
55         #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
56         
57         tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0)
58         tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
59         tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
60         if len(tmpExplodeRef) == len(tmpExplodeNum):
61             logging.debug("face de filling non coupee")
62             geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i + 1)) # doit etre publie pour critere OK plus bas
63             facesNonCoupees.append(filling)
64             maillagesNonCoupes.append(listOfNewMeshes[i])
65         else:
66             logging.debug("face de filling coupee")
67             geompy.addToStudy( filling, "faceCoupee_{0}".format(i + 1))
68             facesCoupees.append(filling)
69             maillagesCoupes.append(listOfNewMeshes[i])
70         
71         i += 1
72     
73     listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
74     
75     newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
76     
77     facesEnTrop = []
78     
79     criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
80     filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
81     for i, filtre in enumerate(filtres):
82         filtre.SetMesh(maillageSain.GetMesh())
83         faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i + 1), filtre)
84         facesEnTrop.append(faceEnTrop)
85     
86     newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
87     
88     smesh.SetName(newMaillageInterne, 'newInternalBoundary')
89         
90     return newZoneDefaut_skin, newMaillageInterne
91