Here’s the code for manually interpolating between points using Bézier’s equations if anyone’s interested. You can easily use this to generate a curvy mesh with a custom resolution…
The view the second posting for updated code
import Blender
from Blender import NMesh
from math import pow
def Bezier3(p1,p2,p3,mu):
#_________________________________________
#Three control point Bezier interpolation
#Parameters: p1 to p3- 3 point tuple [x,y,z]
#mu ranges from 0 to 1 (start to end of curve)
#_________________________________________
p = [0,0,0]
mu2 = mu * mu
mum1 = 1 - mu
mum12 = mum1 * mum1
for z in range(3):
p[z] = p1[z] * mum12 + 2 * p2[z] * mum1 * mu + p3[z] * mu2
return(p);
def Bezier4(p1,p2,p3,p4,mu):
#_________________________________________
#Four control point Bezier interpolation
#Parameters: p1 to p4- 3 point tuple [x,y,z]
#mu ranges from 0 to 1 (start to end of curve)
#_________________________________________
p = [0,0,0]
mum1 = 1 - mu
mum13 = mum1 * mum1 * mum1
mu3 = mu * mu * mu
for z in range(3):
p[z] = mum13*p1[z] + 3*mu*mum1*mum1*p2[z] + 3*mu*mu*mum1*p3[z] + mu3*p4[z]
return(p)
def Bezier(p,mu):
#_________________________________________
#General Bezier curve
#Parameters: p array of points ( etc [[x1,y1,z1],[x2,y2,z2],...] )
#mu ranges from 0 to 1 (start to end of curve)
#_________________________________________
b = [0,0,0]
n = len(p)
muk = 1
munk = pow(1-mu,n)
for k in range(n):
nn = n
kn = k
nkn = n - k
blend = muk * munk
muk *= mu
munk /= (1-mu)
while nn >= 1:
blend *= nn
nn -=1
if kn > 1:
blend /= float(kn)
kn-=1
if nkn > 1:
blend /= float(nkn)
nkn-=1
for z in range(3):
b[z] += p[k][z] * blend
return(b)
me = NMesh.GetRaw()
verts = [[8,-1,-20],[-9,2,8],[10,36,-3],[8,8,8],[10,4,-10],[0,0,0],[10,10,2]]
points = 300
for y in range(points):
#vertex = Bezier3(verts[1],verts[2],verts[3], float(y)/s)
#vertex = Bezier4(verts[1],verts[2],verts[3],verts[4], float(y)/s)
vertex = Bezier(verts,float(y)/s)
vert = NMesh.Vert(vertex[0],vertex[1],vertex[2])
me.verts.append(vert)
NMesh.PutRaw(me)