Salome HOME
Merge branch 'master' into V9_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 from . 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