1/1

四角すいの生成

基本に立ち返り、面の向きを考えて記述してみる。


# 基本図形、新規オブジェクトで四角すいをつくる
#meta_4sui.py
doc = MQSystem.getDocument()

obj = MQSystem.newObject() #新規オブジェクト
out = MQSystem.println

out(obj.name)
num=doc.numObject
a=num

obj.name="sikakusui_%d" % a #オブジェクト名をつける

a0=obj.addVertex(-50.000000,0.000000,-100.000000) #0
a1=obj.addVertex(50.000000,0.000000,-100.000000) #1
a2=obj.addVertex(50.000000,0.000000,0.000000) #2
a3=obj.addVertex(-50.000000,0.000000,0.000000) #3
a4=obj.addVertex(0.000000,150.0000,-50.000000) #4


obj.addFace([0,3,2,1])
obj.addFace([4,1,2])
obj.addFace([4,2,3])
obj.addFace([4,3,0])
obj.addFace([4,0,1])

doc.addObject( obj )
num = doc.numObject #オブジェクトの数
out("オブジェクトの数 %d" % num) #オブジェクトの数を表示


sui4.jpg
  • -
  • -

四角すいを移動する

変換行列を使ったエレガントなやり方があるのか勉強しているところです。とりあえず、無理矢理書いてみました。
前の記事で四角すいを描いておいて、オブジェクトパネルで選択しておく。スクリプトを実行すると移動して複製をつくる。そして選択していた四角すいは削除される。移動したように見える方法です。
各頂点の座標を平行移動変換行列にかけたもの。あまり良いとは言えませんが、とりあえず、動いた。ちょっと嬉しい。サンプルがほしい。ありがとうございます。


# show local coordinate of vertices
# meta_translate.py
doc = MQSystem.getDocument()

curidx = doc.currentObjectIndex
if curidx != -1:
obj = doc.object[curidx]
if not (obj is None):
MQSystem.println(obj.name)
# show global inverse matrix
mtx = doc.getGlobalInverseMatrix(obj)
for r in range(1,5):
MQSystem.println("|%(a) .3f %(b) .3f %(c) .3f %(d) .3f|" % {"a":mtx.get(r,1), "b":mtx.get(r,2), "c":mtx.get(r,3), "d":mtx.get(r,4)})

MQSystem.println(str(obj.translation))
trsl=obj.translation
trsl.x=100
trsl.y=0
trsl.z=-100
obj.translation=trsl
MQSystem.println(str(obj.translation))

mtx2 = doc.getGlobalMatrix(obj)
MQSystem.println(str(mtx2))

obj2 = MQSystem.newObject()

# show vertices
numVert = obj.numVertex
for i in range(0,numVert):
pos = obj.vertex[i].getPos()
MQSystem.println(" v[" + `i` + "] " + str(mtx2.mult(pos)))
obj2.addVertex(mtx2.mult(pos))

obj2.addFace([0,3,2,1]) #4kakusui
obj2.addFace([4,1,2])
obj2.addFace([4,2,3])
obj2.addFace([4,3,0])
obj2.addFace([4,0,1])
doc.deleteObject(curidx)
doc.addObject( obj2 )

  • -
  • -

1/1