1 # -*- coding: utf-8 -*-
5 from .geomsmesh import geompy
6 from .whichSideVertex import whichSideVertex
8 def elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle):
10 recherche des points en trop (externes au volume à remailler)
11 - on associe chaque extrémité du pipe à une face filling
12 - on part des disques aux extrémités du pipe
13 - pour chaque disque, on prend les vertices de géométrie,
14 on marque leur position relative à la face.
15 - on s'arrete quand tous les noeuds sont dedans
22 idFillingFromBout = [None, None] # contiendra l'index du filling pour les extrémités 0 et 1
23 nbFacesFilling = len(ptEdgeFond)
24 for ifil in range(nbFacesFilling):
25 for ipt, pt in enumerate(ptEdgeFond[ifil]): # il y a un ou deux points débouchant sur cette face
26 if geompy.MinDistance(pt,pt0) < geompy.MinDistance(pt,pt1): # TODO: trouver plus fiable pour les cas tordus...
27 idFillingFromBout[0] = ifil
29 idFillingFromBout[1] = ifil
30 logging.debug("association bouts du pipe - faces de filling: %s", idFillingFromBout)
32 logging.debug("recherche des disques de noeuds complètement internes")
33 idisklim = [] # indices des premier et dernier disques internes
34 idiskout = [] # indices des premier et dernier disques externes
41 idisk = len(gptsdisks)
43 numout = len(gptsdisks)
48 logging.debug("examen disque %s", idisk)
49 gptdsk = gptsdisks[idisk]
51 for k in range(nbsegCercle):
53 for j, pt in enumerate(points):
54 side = whichSideVertex(facesDefaut[idFillingFromBout[bout]], pt)
56 if outside: # premier point detecté dedans
58 numout = idisk -inc # le disque précédent était dehors
60 inside = False # ce point est dehors
61 if not inside and not outside:
63 idisklim.append(idisk) # premier et dernier disques internes
64 idiskout.append(numout) # premier et dernier disques externes
66 return (idFillingFromBout, idisklim, idiskout)