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