1 # -*- coding: utf-8 -*-
5 from geomsmesh import geompy
6 from geomsmesh import geomPublishDebug
7 from geomsmesh import geomPublishDebugInFather
9 from substractSubShapes import substractSubShapes
11 def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
12 edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
14 identification précise des edges et disques des faces de peau selon index extremité fissure
18 facesPipePeau = [None for i in range(len(edgesFissExtPipe))]
19 endsEdgeFond = [None for i in range(len(edgesFissExtPipe))]
20 edgeRadFacePipePeau = [None for i in range(len(edgesFissExtPipe))]
25 if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
27 for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
28 logging.debug("examen face debouchante circulaire")
29 for i,efep in enumerate(edgesFissExtPipe):
30 dist = geompy.MinDistance(face, efep)
31 logging.debug(" distance face circulaire edge %s", dist)
33 for ik, edpfi in enumerate(edgesPeauFondIn):
34 if geompy.MinDistance(face, edpfi) < 1e-3:
36 sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[ik]], geompy.ShapeType["VERTEX"])
37 nameFace = "facePipePeau%d"%i
38 nameVert = "endEdgeFond%d"%i
39 nameEdge = "edgeRadFacePipePeau%d"%i
40 facesPipePeau[i] = face
41 endsEdgeFond[i] = sharedVertices[0]
42 geomPublishDebug(face, nameFace)
43 geomPublishDebug(sharedVertices[0], nameVert)
44 edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
45 for edge in edgesFace:
46 if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
47 edgeRadFacePipePeau[i] = edge
48 geomPublishDebug(edge, nameEdge)
55 # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure
56 logging.debug("facesPipePeau: %s", facesPipePeau)
57 edgesCircPeau = [None for i in range(len(facesPipePeau))]
58 verticesCircPeau = [None for i in range(len(facesPipePeau))]
59 for i,fcirc in enumerate(facesPipePeau):
60 edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
61 grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
62 geompy.UnionList(grpEdgesCirc, edges)
63 edgesCircPeau[i] = grpEdgesCirc
65 geomPublishDebugInFather(facePeau, grpEdgesCirc, name)
66 edgesListees = edgesListees + edges
67 vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
68 grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
69 geompy.UnionList(grpVertCircPeau, vertices)
70 verticesCircPeau[i] = grpVertCircPeau
71 name = "pointEdgeCirc%d"%i
72 geomPublishDebugInFather(facePeau, grpVertCircPeau, name)
74 pass # --- au moins une extrémité du pipe sur cette face de peau
76 # --- edges de bord de la face de peau
78 edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
80 for i, edge in enumerate(edgesFilling):
81 edgepeau = geompy.GetInPlace(facePeau, edge)
83 geomPublishDebugInFather(facePeau,edgepeau, name)
84 logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
85 if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
86 logging.debug(" EDGES multiples")
87 edgs = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
91 logging.debug(" EDGE")
92 edgesBords.append(edgepeau)
93 edgesListees.append(edgepeau)
94 groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
95 geompy.UnionList(groupEdgesBordPeau, edgesBords)
97 if aretesVivesC is not None:
98 bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
99 if bordsVifs is not None:
100 geomPublishDebugInFather(facePeau, bordsVifs, "bordsVifs")
101 groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
103 if len(aretesVivesCoupees) > 0:
104 grpC = geompy.MakeCompound(aretesVivesCoupees)
105 grptmp = geompy.GetInPlace(facePeau, grpC)
106 if grptmp is not None:
107 grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
110 if grpnew is not None:
111 edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
112 aretesVivesCoupees += edv
113 logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
114 geomPublishDebugInFather(facePeau, groupEdgesBordPeau , "EdgesBords")
116 # --- edges de la face de peau partagées avec la face de fissure
118 edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
119 edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
120 edgesFissurePeau = []
121 if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
122 edgesFissurePeau = [None for i in range(len(verticesCircPeau))] # edges associés aux extrémités du pipe, en premier
124 for i, grpVert in enumerate(verticesCircPeau):
125 if (geompy.MinDistance(grpVert, edge) < 1.e-3) and (edge not in edgesFissurePeau):
126 edgesFissurePeau[i] = edge
127 name = "edgeFissurePeau%d"%i
128 geomPublishDebugInFather(facePeau, edge, name)
129 for edge in edges: # on ajoute après les edges manquantes
130 if edge not in edgesFissurePeau:
131 edgesFissurePeau.append(edge)
133 for i, edge in enumerate(edges):
134 edgesFissurePeau.append(edge)
135 name = "edgeFissurePeau%d"%i
136 geomPublishDebugInFather(facePeau, edge, name)
138 return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
139 edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
140 bordsVifs, edgesFissurePeau, aretesVivesCoupees)