1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from substractSubShapes import substractSubShapes
8 def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
9 edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
11 identification précise des edges et disques des faces de peau selon index extremité fissure
15 facesPipePeau = [None for i in range(len(edgesFissExtPipe))]
16 endsEdgeFond = [None for i in range(len(edgesFissExtPipe))]
17 edgeRadFacePipePeau = [None for i in range(len(edgesFissExtPipe))]
22 if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
24 for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
25 logging.debug("examen face debouchante circulaire")
26 for i,efep in enumerate(edgesFissExtPipe):
27 dist = geompy.MinDistance(face, efep)
28 logging.debug(" distance face circulaire edge %s", dist)
30 for ik, edpfi in enumerate(edgesPeauFondIn):
31 if geompy.MinDistance(face, edpfi) < 1e-3:
33 sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[ik]], geompy.ShapeType["VERTEX"])
34 nameFace = "facePipePeau%d"%i
35 nameVert = "endEdgeFond%d"%i
36 nameEdge = "edgeRadFacePipePeau%d"%i
37 facesPipePeau[i] = face
38 endsEdgeFond[i] = sharedVertices[0]
39 geompy.addToStudy(face, nameFace)
40 geompy.addToStudy(sharedVertices[0], nameVert)
41 edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
42 for edge in edgesFace:
43 if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
44 edgeRadFacePipePeau[i] = edge
45 geompy.addToStudy(edge, nameEdge)
52 # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure
53 logging.debug("facesPipePeau: %s", facesPipePeau)
54 edgesCircPeau = [None for i in range(len(facesPipePeau))]
55 verticesCircPeau = [None for i in range(len(facesPipePeau))]
56 for i,fcirc in enumerate(facesPipePeau):
57 edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
58 grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
59 geompy.UnionList(grpEdgesCirc, edges)
60 edgesCircPeau[i] = grpEdgesCirc
62 geompy.addToStudyInFather(facePeau, grpEdgesCirc, name)
63 edgesListees = edgesListees + edges
64 vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
65 grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
66 geompy.UnionList(grpVertCircPeau, vertices)
67 verticesCircPeau[i] = grpVertCircPeau
68 name = "pointEdgeCirc%d"%i
69 geompy.addToStudyInFather(facePeau, grpVertCircPeau, name)
71 pass # --- au moins une extrémité du pipe sur cette face de peau
73 # --- edges de bord de la face de peau
75 edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
77 for i, edge in enumerate(edgesFilling):
78 edgepeau = geompy.GetInPlace(facePeau, edge)
80 geompy.addToStudyInFather(facePeau,edgepeau, name)
81 logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
82 if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
83 logging.debug(" EDGES multiples")
84 edgs = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
88 logging.debug(" EDGE")
89 edgesBords.append(edgepeau)
90 edgesListees.append(edgepeau)
91 groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
92 geompy.UnionList(groupEdgesBordPeau, edgesBords)
94 if aretesVivesC is not None:
95 bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
96 if bordsVifs is not None:
97 geompy.addToStudyInFather(facePeau, bordsVifs, "bordsVifs")
98 groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
100 if len(aretesVivesCoupees) > 0:
101 grpC = geompy.MakeCompound(aretesVivesCoupees)
102 grptmp = geompy.GetInPlace(facePeau, grpC)
103 if grptmp is not None:
104 grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
107 if grpnew is not None:
108 edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
109 aretesVivesCoupees += edv
110 logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
111 geompy.addToStudyInFather(facePeau, groupEdgesBordPeau , "EdgesBords")
113 # --- edges de la face de peau partagées avec la face de fissure
115 edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
116 edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
117 edgesFissurePeau = []
118 if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
119 edgesFissurePeau = [None for i in range(len(verticesCircPeau))] # edges associés aux extrémités du pipe, en premier
121 for i, grpVert in enumerate(verticesCircPeau):
122 if (geompy.MinDistance(grpVert, edge) < 1.e-3) and (edge not in edgesFissurePeau):
123 edgesFissurePeau[i] = edge
124 name = "edgeFissurePeau%d"%i
125 geompy.addToStudyInFather(facePeau, edge, name)
126 for edge in edges: # on ajoute après les edges manquantes
127 if edge not in edgesFissurePeau:
128 edgesFissurePeau.append(edge)
130 for i, edge in enumerate(edges):
131 edgesFissurePeau.append(edge)
132 name = "edgeFissurePeau%d"%i
133 geompy.addToStudyInFather(facePeau, edge, name)
135 return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
136 edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
137 bordsVifs, edgesFissurePeau)