3点で平面を作るスクリプト


似た感じのコマンドはあるのですが、中心を指定できるものがほしかったので、作ってみました。

mode=0にすると中心になります。

rs.Vector+(ベクトル操作)という関数がありますが、RhinocerosのPythonでは、演算子オペレータ(+や-)が使えます。

ソースコードをみていると、Vectorで*が内積だったり、obj.Length, obj.Reverseなどもあるようです。
ドキュメントされていないのでつかっていいのかどうかわかりません。
ベクトル積の外積と内積は間違いやすいので、それは関数名で拾ったほうがよさそうですが、一方で、行列演算は、VectorTransformよりは*のほうが分かりやすいです。

わかりやすいというのは、個人の感覚によるところが大きいと思いますが・・。

modeや計算方法は人それぞれ、いろいろ好きにしてほしいのですが、とりあえず 0/1で作ってみました。また各自で変更を加えるなどしてみてください。


def SKPlaneSrf(pc,px,py,mode):
	dx= px - pc
	dy= py - pc
	dz = rs.VectorCrossProduct(dx,dy)
	ndy= rs.VectorCrossProduct(dz,dx)
	ndy.Unitize()
	dy= ndy * rs.VectorDotProduct(dy,ndy)
	# surf points
	srfp=[]
	if (mode==0):
		#center mode
		srfp.append(pc-dx-dy)
		srfp.append(pc+dx-dy)
		srfp.append(pc+dx+dy)
		srfp.append(pc-dx+dy)
	elif (mode==1):
		#vertex mode
		srfp.append(pc)
		srfp.append(pc+dx)
		srfp.append(pc+dx+dy)
		srfp.append(pc+dy)
	srf=rs.AddSrfPt(srfp)
	return srf

plane