1 # -*- coding: utf-8 -*-
3 Created on Tue Jun 24 09:14:13 2014
9 from geomsmesh import geompy
12 from listOfExtraFunctions import createNewMeshesFromCorner
13 from listOfExtraFunctions import createLinesFromMesh
15 # -----------------------------------------------------------------------------
16 # --- groupe de quadrangles de face transformé en face géométrique par filling
18 def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
20 # TODO: rédiger la docstring
27 #bords_Partages = [[], []]
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)
48 for face in setOfNodes:
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
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)
59 setOfLines.append(tmpFace)
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)
68 for face in setOfNodes:
69 # On prend la première ligne qui correspond aux bords partagés
70 listOfEdges.append(face[0])
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)
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)
87 geompy.addToStudy(filling, "faceCoupee_{0}".format(i + 1))
88 facesCoupees.append(filling)
89 fillings = facesCoupees, facesNonCoupees
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)
99 geompy.addToStudy(filling, "areteCoupee_{0}".format(i + 1))
100 aretesCoupees.append(filling)
101 bords_Partages = aretesCoupees, aretesNonCoupees
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))
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))
114 return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont