mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-13 02:44:34 +05:00
72 lines
3.1 KiB
Python
72 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
from geomsmesh import geompy
|
|
from geomsmesh import geomPublish
|
|
from geomsmesh import geomPublishInFather
|
|
import initLog
|
|
from projettePointSurCourbe import projettePointSurCourbe
|
|
|
|
def creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
|
|
ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad):
|
|
"""
|
|
création des points du maillage du pipe sur la face de peau
|
|
"""
|
|
logging.info('start')
|
|
|
|
for i, edges in enumerate(listEdges):
|
|
idf = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
|
|
if idf >= 0:
|
|
gptdsk = []
|
|
if idf > 0: # idf vaut 0 ou 1
|
|
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)
|
|
centre = ptEdgeFond[idFillingFromBout[i]][idf]
|
|
name = "centre%d"%idf
|
|
geomPublish(initLog.debug, centre, name)
|
|
vertPipePeau = ptFisExtPi[idFillingFromBout[i]][idf]
|
|
geomPublishInFather(initLog.debug, centre, vertPipePeau, "vertPipePeau")
|
|
grpsEdgesCirc = edCircPeau[idFillingFromBout[i]] # liste de groupes
|
|
edgesCirc = []
|
|
for grpEdgesCirc in grpsEdgesCirc:
|
|
edgesCirc += geompy.ExtractShapes(grpEdgesCirc, geompy.ShapeType["EDGE"], False)
|
|
for k, edge in enumerate(edges):
|
|
extrems = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
|
|
if geompy.MinDistance(centre, extrems[0]) < geompy.MinDistance(centre, extrems[1]):
|
|
bout = extrems[1]
|
|
else:
|
|
bout = extrems[0]
|
|
# ajustement du point extrémité (bout) sur l'edge circulaire en face de peau
|
|
logging.debug("edgesCirc: %s", edgesCirc)
|
|
distEdgeCirc = [(geompy.MinDistance(bout, edgeCirc), k2, edgeCirc) for k2, edgeCirc in enumerate(edgesCirc)]
|
|
distEdgeCirc.sort()
|
|
logging.debug("distEdgeCirc: %s", distEdgeCirc)
|
|
u = projettePointSurCourbe(bout, distEdgeCirc[0][2])
|
|
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.
|
|
extrCircs = geompy.ExtractShapes(distEdgeCirc[0][2], geompy.ShapeType["VERTEX"], True)
|
|
if geompy.MinDistance(bout, extrCircs[0]) < geompy.MinDistance(bout, extrCircs[1]):
|
|
bout = extrCircs[0]
|
|
else:
|
|
bout = extrCircs[1]
|
|
else:
|
|
bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], u)
|
|
name ="bout%d"%k
|
|
geomPublishInFather(initLog.debug, centre, bout, name)
|
|
# enregistrement des points dans la structure
|
|
points = []
|
|
for j in range(nbsegRad +1):
|
|
u = j/float(nbsegRad)
|
|
points.append(geompy.MakeVertexOnCurve(edge, u))
|
|
if geompy.MinDistance(bout, points[0]) < geompy.MinDistance(centre, points[0]):
|
|
points.reverse()
|
|
points[0] = centre
|
|
points[-1] = bout
|
|
gptdsk.append(points)
|
|
if i == 0:
|
|
gptsdisks[idisklim[0] -1] = gptdsk
|
|
idisklim[0] = idisklim[0] -1
|
|
else:
|
|
gptsdisks[idisklim[1] +1] = gptdsk
|
|
idisklim[1] = idisklim[1] +1
|
|
|
|
return (gptsdisks, idisklim) |