通過点を指定して曲線を描く


 ==暫定版==


 通過点を直接指定して曲線を描く方法が判らないので、 Bezier 曲線の機能を使って無理矢理描く。たぶんもっとうまい方法があるはず?

import math

#### Define some functions ####
def pbez(v):
  return BezTriple.New(v.x, v.y, v.z, v.x, v.y, v.z, v.x, v.y, v.z)

def passcurve(plist):
  cu = Curve.New()

  cu.appendNurb(pbez(plist[0]))
  cu_nurb = cu[0]

  for p in plist[1:]:
    cu_nurb.append(pbez(p))

  cu.flag = 1
  cu.bevresol = 6

  scn = Scene.GetCurrent()
  ob = scn.objects.new(cu)
  return ob


#### Set passing points (a list of 3D points)####
plist = []

for t in range(300):
	p = Vector(t*0.01, math.sin(t*0.1), math.cos(t*0.1))
	plist.append(v)


ob = passcurve(plist)


曲線(Curve)の詳細はこちら→ Module Curve


 これで太さ 0 (?)の曲線が出来る(けどレンダリングしても見えない)。太さを変えるには曲線を選択した上で「Editing」パネル−「Curve and Surface」の Bevel Depth の値を変更する*1



 更に「Edit Mode」にして「Curve Tools」から Convert「Poly」にすると object が軽くなってレンダリングが速くなる(たぶん)。





 もうちょっと遊んでみる。(Lorenz attactor)

*1:python から直接この値を変更する手段が見つからず。