1 # -*- coding: utf-8 -*-
3 Created on Tue Jun 24 09:14:13 2014
5 @author: I48174 (Olivier HOAREAU)
9 from .geomsmesh import geompy
10 from .geomsmesh import smesh
11 from .geomsmesh import geomPublish
12 from .geomsmesh import geomPublishInFather
17 from .listOfExtraFunctions import createNewMeshesFromCorner
18 from .listOfExtraFunctions import createLinesFromMesh
20 # -----------------------------------------------------------------------------
21 # --- groupe de quadrangles de face transformé en face géométrique par filling
23 def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, zoneDefaut_skin, shapeDefaut, listOfCorners):
25 # TODO: rédiger la docstring
31 maillagesNonCoupes = []
34 # On crée une liste contenant le maillage de chaque face.
35 listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners)
38 while i < len(listOfNewMeshes):
39 lines = createLinesFromMesh(listOfNewMeshes[i])
42 # On possède l'information 'ID' de chaque noeud composant chaque
43 # ligne de la face. A partir de l'ID, on crée un vertex. Un
44 # ensemble de vertices constitue une ligne. Un ensemble de lignes
46 tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
47 tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
48 line = geompy.MakeInterpol(tmpPoints, False, False)
49 setOfLines.append(line)
51 # A partir des lignes de la face,
52 # on recrée un objet GEOM temporaire par filling.
53 filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
54 #logging.debug("face de filling")
55 #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
57 tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0)
58 tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
59 tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
60 if len(tmpExplodeRef) == len(tmpExplodeNum):
61 logging.debug("face de filling non coupee")
62 geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i + 1)) # doit etre publie pour critere OK plus bas
63 facesNonCoupees.append(filling)
64 maillagesNonCoupes.append(listOfNewMeshes[i])
66 logging.debug("face de filling coupee")
67 geompy.addToStudy( filling, "faceCoupee_{0}".format(i + 1))
68 facesCoupees.append(filling)
69 maillagesCoupes.append(listOfNewMeshes[i])
73 listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
75 newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
79 criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
80 filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
81 for i, filtre in enumerate(filtres):
82 filtre.SetMesh(maillageSain.GetMesh())
83 faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i + 1), filtre)
84 facesEnTrop.append(faceEnTrop)
86 newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
88 smesh.SetName(newMaillageInterne, 'newInternalBoundary')
90 return newZoneDefaut_skin, newMaillageInterne