1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import geomPublish
7 from geomsmesh import geomPublishInFather
9 from geomsmesh import smesh
10 from salome.smesh import smeshBuilder
13 from putName import putName
15 def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
16 facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau,
17 bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives,
18 edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad):
20 maillage faces de peau
23 nbFacesFilling = len(partitionsPeauFissFond)
24 boutFromIfil = [None for i in range(nbFacesFilling)]
25 if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes
26 boutFromIfil[idFillingFromBout[0]] = 0
27 boutFromIfil[idFillingFromBout[1]] = 1
29 logging.debug("---------------------------- maillage faces de peau --------------")
31 for ifil in range(nbFacesFilling):
33 if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte
35 # --- edges de bord de la face de filling
36 filling = facesDefaut[ifil]
37 edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False)
38 groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
39 geompy.UnionList(groupEdgesBordPeau, edgesFilling)
40 geomPublishInFather(initLog.debug,filling, groupEdgesBordPeau , "EdgesBords")
42 meshFacePeau = smesh.Mesh(facesDefaut[ifil])
44 algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
45 hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
46 putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
47 putName(algo1d, "algo1d_bordsLibres", ifil)
48 putName(hypo1d, "hypo1d_bordsLibres", ifil)
52 facePeau = facesPeaux[ifil] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
53 edgesCircPeau = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
54 verticesCircPeau = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
55 groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
56 bordsVifs = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
57 edgesFissurePeau = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
59 meshFacePeau = smesh.Mesh(facePeau)
61 algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
62 hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
63 putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
64 putName(algo1d, "algo1d_bordsLibres", ifil)
65 putName(hypo1d, "hypo1d_bordsLibres", ifil)
67 algo1d = meshFacePeau.UseExisting1DElements(geom=geompy.MakeCompound(edgesFissurePeau))
68 hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0)
69 putName(algo1d.GetSubMesh(), "edgePeauFiss", ifil)
70 putName(algo1d, "algo1d_edgePeauFiss", ifil)
71 putName(hypo1d, "hypo1d_edgePeauFiss", ifil)
73 if bordsVifs is not None:
74 algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs)
75 hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0)
76 putName(algo1d.GetSubMesh(), "bordsVifs", ifil)
77 putName(algo1d, "algo1d_bordsVifs", ifil)
78 putName(hypo1d, "hypo1d_bordsVifs", ifil)
80 for i, edgeCirc in enumerate(edgesCircPeau):
81 if edgeCirc is not None:
82 algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc)
83 if boutFromIfil[ifil] is None:
84 hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[i] ],0,0)
86 hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[boutFromIfil[ifil]] ],0,0)
88 putName(algo1d.GetSubMesh(), name, ifil)
89 putName(algo1d, "algo1d_" + name, ifil)
90 putName(hypo1d, "hypo1d_" + name, ifil)
92 algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D)
93 hypo2d = algo2d.Parameters()
94 hypo2d.SetMaxSize( dmoyen )
95 hypo2d.SetOptimize( 1 )
96 hypo2d.SetFineness( 2 )
97 hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
98 hypo2d.SetQuadAllowed( 0 )
99 putName(algo2d.GetSubMesh(), "facePeau", ifil)
100 putName(algo2d, "algo2d_facePeau", ifil)
101 putName(hypo2d, "hypo2d_facePeau", ifil)
103 isDone = meshFacePeau.Compute()
104 logging.info("meshFacePeau %d fini", ifil)
105 GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil )
106 nbAdd = GroupFaces.AddFrom( meshFacePeau.GetMesh() )
107 meshesFacesPeau.append(meshFacePeau)
109 return meshesFacesPeau