# ==========================
# Fichier test de la fonction
# DistancePtoLine(P0,P1,P2)
# jm soler, Mai 2005
# ==========================
# ==========================
# Fonction DistancePtoLine(P0,P1,P2)
# Entrée : P0, un
point xyz
#
P1,P2 extremite d'un segment
# Sortie : distance minimale
ent P0 et [P1,P2]
#
# FUNCTION DistancePtoLine(P0,P1,P2)
# IN : P0, a xyz point
#
P1,P2 extremite d'un edge
# OUT : minimal distance
between P0 and [P1,P2]
# ==========================
def DistancePtoLine(P0,P1,P2):
DimLINE=abs((P1[0]-P2[0])**2+
(P1[1]-P2[1])**2+
(P1[2]-P2[2])**2)**0.5
if DimLINE>0:
Ratio=((P0[0]-P1[0])*(P2[0]-P1[0])
+
(P0[1]-P1[1])*(P2[1]-P1[1]) +
(P0[2]-P1[2])*(P2[2]-P1[2]))/DimLINE**2
P4=[0.0,.0,.0]
P4[0] = P1[0] + Ratio*(P2[0]-P1[0])
P4[1] = P1[1] + Ratio*(P2[1]-P1[1])
P4[2] = P1[2] + Ratio*(P2[2]-P1[2])
MinDIST=abs((P4[0]-P0[0])**2+
(P4[1]-P0[1])**2+
(P4[2]-P0[2])**2)**0.5
elif DimLINE==0 :
MinDIST=abs((P1[0]-P0[0])**2+
(P1[1]-P0[1])**2+
(P1[2]-P0[2])**2)**0.5
return MinDIST,P4
import Blender
ME=Blender.Object.Get('Plane').getData()
for v in ME.verts:
print v.co
d,P=DistancePtoLine(ME.verts[2],ME.verts[0],ME.verts[1])
v=Blender.NMesh.Vert(P[0],P[1],P[2])
ME.verts.append(v)
# 02/01/2006: Mise à jour pour
blender 2.40
if Blender.Get('')>237:
ME.addEdge(ME.verts[-1], ME.verts[2])
else:
f=Blender.NMesh.Face()
f.v.append(ME.verts[-1])
f.v.append(ME.verts[2])
# 02/01/2006: Mise à jour pour
blender 2.40 fin
ME.faces.append(f)
ME.update()
|