- listEdges = []
- for i, nappes in enumerate(listNappes):
- ifd = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
- if ifd < 0:
- listEdges.append([])
- else:
- face = facesPipePeau[ifd]
- edges = [edgeRadFacePipePeau[ifd]]
- for k, nappe in enumerate(nappes):
- if k > 0:
- obj = geompy.MakeSection(face, nappes[k]) # normalement une edge, parfois un compound d'edges dont un tout petit
- edge = obj
- vs = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
- if len(vs) > 2:
- eds = geompy.ExtractShapes(obj, geompy.ShapeType["EDGE"], False)
- [edsorted, _, maxl] = sortEdges(eds)
- edge = edsorted[-1]
- else:
- maxl = geompy.BasicProperties(edge)[0]
- if maxl < 0.01: # problème MakeSection
- logging.info("problème MakeSection recherche edge radiale %s, longueur trop faible: %s, utilisation partition", k, maxl)
- partNappeFace = geompy.MakePartition([face, nappes[k]], [] , [], [], geompy.ShapeType["FACE"], 0, [], 0)
- edps= geompy.ExtractShapes(partNappeFace, geompy.ShapeType["EDGE"], False)
- ednouv = []
- for ii, ed in enumerate(edps):
- dmax=100.
- vxs = geompy.ExtractShapes(ed, geompy.ShapeType["VERTEX"], False)
- distx = [geompy.MinDistance(vx, face) for vx in vxs]
- distx += [geompy.MinDistance(vx, nappes[k]) for vx in vxs]
- dmax = max(distx)
- lgedge = geompy.BasicProperties(ed)[0]
- logging.debug(" dmax %s, longueur edge %s",dmax, lgedge)
- if dmax < 0.01 and lgedge > 0.01:
- ednouv.append(ed)
- if (len(ednouv) > 0):
- logging.debug(" edges issues de la partition: %s", ednouv)
- for ii, ed in enumerate(ednouv):
- geomPublish(initLog.debug, ed, "ednouv%d"%ii)
- [edsorted, _, maxl] = sortEdges(ednouv)
- logging.debug(" longueur edge trouvée: %s", maxl)
- edge = edsorted[-1]
- else:
- logging.info("problème partition recherche edge radiale %s", k)
- vxs = geompy.ExtractShapes(partNappeFace, geompy.ShapeType["VERTEX"], False)
- vxnouv=[]
- for ii,vx in enumerate(vxs):
- distx = geompy.MinDistance(vx, face)
- distx += geompy.MinDistance(vx, nappes[k])
- logging.debug("vertex distance: %s", distx)
- if distx < 0.005:
- vxnouv.append(vx)
- logging.debug("nombre vertex candidats %s", len(vxnouv))
- if len(vxnouv) >= 2:
- eds = [geompy.MakeEdge(vxnouv[j],vxnouv[(j+1)%len(vxnouv)]) for j in range(len(vxnouv))]
- [edsorted2, _, maxl] = sortEdges(eds)
- edge = edsorted2[-1]
- logging.debug("lg edge: %s", maxl)
- else:
- logging.debug("problème recherche edge radiale %s non résolu", k)
- edges.append(edge)
- name = 'edgeEndPipe%d'%k
- geomPublish(initLog.debug, edge, name)
- listEdges.append(edges)