Salome HOME
Merge branch 'hydro/imps_2015' into V7_dev
[modules/smesh.git] / src / Tools / blocFissure / gmu / quadranglesToShapeWithCorner.py
1 # -*- coding: utf-8 -*-
2 """
3 Created on Tue Jun 24 09:14:13 2014
4
5 @author: I48174
6 """
7
8 import logging
9 from geomsmesh import geompy
10 from geomsmesh import geomPublish
11 from geomsmesh import geomPublishInFather
12 import initLog
13 import GEOM
14
15 from listOfExtraFunctions import createNewMeshesFromCorner
16 from listOfExtraFunctions import createLinesFromMesh
17
18 # -----------------------------------------------------------------------------
19 # --- groupe de quadrangles de face transformé en face géométrique par filling
20
21 def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
22     """ """
23     # TODO: rédiger la docstring
24     
25     logging.info("start")
26
27     #fillings = [[], []]
28     tmpFillings = []
29     noeuds_bords = []
30     #bords_Partages = [[], []]
31     tmpBords = []
32     fillconts = []
33     idFilToCont = []
34     
35     facesNonCoupees = []
36     facesCoupees = []
37     aretesNonCoupees = []
38     aretesCoupees = []
39     
40     setOfNodes = []
41     setOfLines = []
42     listOfEdges = []
43     # On crée une liste contenant le maillage de chaque face.
44     listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
45     for msh in listOfNewMeshes:
46         # On crée une liste de noeuds correspondant aux faces suivant
47         # le modèle liste[face][ligne][noeud].
48         lines = createLinesFromMesh(msh, listOfCorners[0])
49         setOfNodes.append(lines)
50     
51     for face in setOfNodes:
52         tmpFace = []
53         for line in face:
54             # On possède l'information 'ID' de chaque noeud composant chaque
55             # ligne de chaque face. A partir de l'ID, on crée un vertex. Un
56             # ensemble de vertices constitue une ligne. Un ensemble de lignes
57             # constitue une face.
58             tmpCoords = [meshQuad.GetNodeXYZ(node) for node in line]
59             tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
60             line = geompy.MakeInterpol(tmpPoints, False, False)
61             tmpFace.append(line)
62         setOfLines.append(tmpFace)
63     
64     for i, face in enumerate(setOfLines):
65         # A partir des lignes de chaque face,
66         # on recrée un objet GEOM temporaire par filling.
67         filling = geompy.MakeFilling(geompy.MakeCompound(face), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
68         geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1)) 
69         tmpFillings.append(filling)
70
71     for face in setOfNodes:
72         # On prend la première ligne qui correspond aux bords partagés
73         listOfEdges.append(face[0])
74     
75     for edge in listOfEdges:
76         # On utilise les points de bords pour créer des aretes vives
77         tmpCoords = [meshQuad.GetNodeXYZ(node) for node in list(edge)]
78         tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
79         line = geompy.MakeInterpol(tmpPoints, False, False)
80         tmpBords.append(line)
81     
82     for i, filling in enumerate(tmpFillings):
83         tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0, True)
84         tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
85         tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
86         if len(tmpExplodeRef) == len(tmpExplodeNum):
87             geomPublish(initLog.debug, filling, "faceNonCoupee_{0}".format(i + 1))
88             facesNonCoupees.append(filling)
89         else:
90             geomPublish(initLog.debug, filling, "faceCoupee_{0}".format(i + 1))
91             facesCoupees.append(filling)
92     fillings = facesCoupees, facesNonCoupees
93     
94     for i, filling in enumerate(tmpBords):
95         tmpPartition = geompy.MakePartition([shapeDefaut], [filling], [], [], geompy.ShapeType["SHELL"], 0, [], 0, True)
96         tmpExplodeRef = geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["VERTEX"], True)
97         tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(tmpPartition, geompy.ShapeType["VERTEX"], True)
98         if len(tmpExplodeRef) == len(tmpExplodeNum):
99             geomPublish(initLog.debug, filling, "areteNonCoupee_{0}".format(i + 1))
100             aretesNonCoupees.append(filling)
101         else:
102             geomPublish(initLog.debug, filling, "areteCoupee_{0}".format(i + 1))
103             aretesCoupees.append(filling)
104     bords_Partages = aretesCoupees, aretesNonCoupees
105     
106 # TODO: A enlever
107 #    for i, face in enumerate(setOfLines):
108 #        for j, line in enumerate(face):
109 #            geomPublish(initLog.debug, line, 'face{0}_ligne{1}'.format(i + 1, j + 1))
110
111  #TODO: A enlever
112 #    for i, filling in enumerate(fillings[0]):
113 #        geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
114 #        for j, line in enumerate(setOfLines[i]):
115 #            geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
116     
117     return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
118