1/1

連続した面の生成

メタセコイアPython API面白いです。
CGの基礎となる原理を理解するのに役立ちます。
二つの面をリストを設けて、そのつどaddFace()していると、面はばらばらでつながっていません。頂点が共有されていないです。
そこで、下記のようなモデルをつくり、Obj出力してみました。
men-1.jpg

# Created by Metasequoia

v 50.000000 0.000000 100.000000
v -50.000000 0.000000 100.000000
v -50.000000 0.000000 0.000000
v 50.000000 0.000000 0.000000
v -50.000000 0.000000 -100.000000
v 50.000000 0.000000 -100.000000
# 6 vertices

f 4 3 2 1
f 4 6 5 3
# 2 elements

頂点情報と面の情報が書かれています。
これを参考にしてMetasequoia Pythonで書いてみることにしました。
addFace()の中は
obj.addFace([a1,a2,a3,a4])
obj.addFace([a3,a5,a6,a4])
と書いてもリストで頂点のインデックス番号でもOKなんですね。
obj.addFace([0,1,2,3])
obj.addFace([2,5,4,3])
リストの中の順番が重要です。反時計回りに並んでます。
この番号は、以下のa5からa1まで順に記述した番号を0から5までを割り当てています。だから以下のa5をコメントアウトすると、次行のa6が0番になります。

以下、サンプルファイルです。実験君ですね。ありがとうございます。

# 基本図形、新規オブジェクトで平面をつくる
#meta_4men2.py
doc = MQSystem.getDocument()

obj = MQSystem.newObject() #新規オブジェクト
out = MQSystem.println
out(obj.name)
a=doc.getObjectIndex(obj) #オブジェクトのインデックスを取得

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

a5=obj.addVertex(-50.000000,0.000000,-100.000000) #0
a6=obj.addVertex(50.000000,0.000000,-100.000000) #1

a4=obj.addVertex(50.000000,0.000000,0.000000) #2
a3=obj.addVertex(-50.000000,0.000000,0.000000) #3
a2=obj.addVertex(-50.000000,0.000000,100.000000) #4
a1=obj.addVertex(50.000000,0.000000,100.000000) #5

#obj.addFace([a1,a2,a3,a4])
#obj.addFace([a3,a5,a6,a4])
obj.addFace([0,1,2,3])
obj.addFace([2,5,4,3])

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

#obj.deleteFace(1)
  • -
  • -

8角すいの生成

検索して見つけたサイトのサンプルは面が表示されていないワイヤーフレーム状態だったので、下記のように修正して面を張りました。頂点番号を順番に呼んであげるということですね。
底面については宿題です。

#kaku_8.py
segment = 8
radius=20.0

from math import *
crad = pi / 180 * 45
irad = 2*pi/segment

doc = MQSystem.getDocument()
obj = MQSystem.newObject();
obj.name = "circle_%d" % segment

for i in range(segment) :
obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) )
crad += irad

obj.addVertex( MQSystem.newPoint( 0.0, 10.0, 0.0 ) )

for i in range(segment) :
obj.addFace( [(i+1)%segment,i,segment] ) #側面
#obj.addFace( [0,i, segment] )

doc.addObject( obj )

04.jpg
  • -
  • -

Metasequoia Python Interface

Pythonのバージョンを確認するスクリプト

import sys
MQSystem.println("%x" % sys.hexversion)

出力結果は
20203f0

メタセコイアが対応しているPythonのバージョンはVer2.2.3ということですね。
  • -
  • -

1/1