1 # -*- coding: utf-8 -*-
3 Created on Tue Jun 24 09:14:13 2014
9 from .geomsmesh import geompy
10 from .geomsmesh import geomPublish
11 from .geomsmesh import geomPublishInFather
15 from .listOfExtraFunctions import createNewMeshesFromCorner
16 from .listOfExtraFunctions import createLinesFromMesh
18 # -----------------------------------------------------------------------------
19 # --- groupe de quadrangles de face transformé en face géométrique par filling
21 def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
23 # TODO: rédiger la docstring
30 #bords_Partages = [[], []]
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)
51 for face in setOfNodes:
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
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)
62 setOfLines.append(tmpFace)
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)
71 for face in setOfNodes:
72 # On prend la première ligne qui correspond aux bords partagés
73 listOfEdges.append(face[0])
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)
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)
90 geomPublish(initLog.debug, filling, "faceCoupee_{0}".format(i + 1))
91 facesCoupees.append(filling)
92 fillings = facesCoupees, facesNonCoupees
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)
102 geomPublish(initLog.debug, filling, "areteCoupee_{0}".format(i + 1))
103 aretesCoupees.append(filling)
104 bords_Partages = aretesCoupees, aretesNonCoupees
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))
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))
117 return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont