1 # -*- coding: utf-8 -*-
5 from .geomsmesh import geompy
6 from .geomsmesh import geomPublish
7 from .geomsmesh import geomPublishInFather
9 from .projettePointSurCourbe import projettePointSurCourbe
11 def creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
12 ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad):
14 création des points du maillage du pipe sur la face de peau
18 for i, edges in enumerate(listEdges):
19 idf = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
22 if idf > 0: # idf vaut 0 ou 1
23 idf = -1 # si idf vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face)
24 centre = ptEdgeFond[idFillingFromBout[i]][idf]
26 geomPublish(initLog.debug, centre, name)
27 vertPipePeau = ptFisExtPi[idFillingFromBout[i]][idf]
28 geomPublishInFather(initLog.debug, centre, vertPipePeau, "vertPipePeau")
29 grpsEdgesCirc = edCircPeau[idFillingFromBout[i]] # liste de groupes
31 for grpEdgesCirc in grpsEdgesCirc:
32 edgesCirc += geompy.ExtractShapes(grpEdgesCirc, geompy.ShapeType["EDGE"], False)
33 for k, edge in enumerate(edges):
34 extrems = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
35 if geompy.MinDistance(centre, extrems[0]) < geompy.MinDistance(centre, extrems[1]):
39 # ajustement du point extrémité (bout) sur l'edge circulaire en face de peau
40 logging.debug("edgesCirc: %s", edgesCirc)
41 distEdgeCirc = [(geompy.MinDistance(bout, edgeCirc), k2, edgeCirc) for k2, edgeCirc in enumerate(edgesCirc)]
43 logging.debug("distEdgeCirc: %s", distEdgeCirc)
44 u = projettePointSurCourbe(bout, distEdgeCirc[0][2])
45 if (abs(u) < 0.02) or (abs(1-u) < 0.02): # les points très proches d'une extrémité doivent y être mis précisément.
46 extrCircs = geompy.ExtractShapes(distEdgeCirc[0][2], geompy.ShapeType["VERTEX"], True)
47 if geompy.MinDistance(bout, extrCircs[0]) < geompy.MinDistance(bout, extrCircs[1]):
52 bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], u)
54 geomPublishInFather(initLog.debug, centre, bout, name)
55 # enregistrement des points dans la structure
57 for j in range(nbsegRad +1):
59 points.append(geompy.MakeVertexOnCurve(edge, u))
60 if geompy.MinDistance(bout, points[0]) < geompy.MinDistance(centre, points[0]):
66 gptsdisks[idisklim[0] -1] = gptdsk
67 idisklim[0] = idisklim[0] -1
69 gptsdisks[idisklim[1] +1] = gptdsk
70 idisklim[1] = idisklim[1] +1
72 return (gptsdisks, idisklim)