FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メタセコイアでPythonスクリプト

・メタセコイアでスクリプトを使う方法

metaseq_script1.png

1. 画面上部のメニューバーの パネル(P)->スクリプトエディタ(S) を押してScriptEditorを出す。
2. エディターにPythonコードを書く。
(メタセコイアのインストールフォルダの中にPythonスクリプトのリファレンスが用意されている。)
C:/Program Files/Metaseq24/help/python/index.html
3. エディタのメニューバーの スクリプト(S)->実行(R) を押す。

・シェルピンスキーのギャスケット

フラクタル図形の1種であり、自己相似的な無数の三角形からなる図形。(詳しくは、Wikipedia シェルピンスキーのギャスケット 参照)
fractal03.png

・Pythonスクリプト例 (シェルピンスキーのギャスケット)

# fractal generate

doc = MQSystem.getDocument()

num = doc.numObject
obj = doc.object[0]

# field

x = 100
y = 100
z = 100
rn = 4 # recursive number

# Primitive

p01 = MQSystem.newPoint(x/2,y,z/2)
p02 = MQSystem.newPoint(0,0,0)
p03 = MQSystem.newPoint(x,0,0)
p04 = MQSystem.newPoint(x,0,z)
p05 = MQSystem.newPoint(0,0,z)

# function fractal()

def fractal(number,p1,p2,p3,p4):

if number == 1:

#left

v = []
v.append( obj.addVertex(p1) )
v.append( obj.addVertex(p2) )
v.append( obj.addVertex(p3) )

obj.addFace(v)

#right

v = []
v.append( obj.addVertex(p1) )
v.append( obj.addVertex(p3) )
v.append( obj.addVertex(p4) )

obj.addFace(v)

# bottom

v = []
v.append( obj.addVertex(p4) )
v.append( obj.addVertex(p3) )
v.append( obj.addVertex(p2) )

obj.addFace(v)

else:
p5 = MQSystem.newPoint((p1.x + p2.x)/2, (p1.y + p2.y)/2, (p1.z + p2.z)/2)
p6 = MQSystem.newPoint((p2.x + p3.x)/2, (p2.y + p3.y)/2, (p2.z + p3.z)/2)
p7 = MQSystem.newPoint((p3.x + p1.x)/2, (p3.y + p1.y)/2, (p3.z + p1.z)/2)
p8 = MQSystem.newPoint((p3.x + p4.x)/2, (p3.y + p4.y)/2, (p3.z + p4.z)/2)
p9 = MQSystem.newPoint((p4.x + p1.x)/2, (p4.y + p1.y)/2, (p4.z + p1.z)/2)
p10 = MQSystem.newPoint((p4.x + p2.x)/2, (p4.y + p2.y)/2, (p4.z + p2.z)/2)

fractal(number-1,p1,p5,p7,p9)
fractal(number-1,p5,p2,p6,p10)
fractal(number-1,p7,p6,p3,p8)
fractal(number-1,p9,p10,p8,p4)
fractal(number-1,p7,p8,p10,p6)

# endfunction fractal()

#main()

fractal(rn,p01,p02,p03,p04)
fractal(rn,p01,p04,p05,p02)



・実行例 (n = 4)

fractal02.png


・補足

rnの数字を変えると分割数を変えれます。
スクリプト作って何かできたら教えてもらえるとうれしいです。
立方体でやったり、インバースつくったりするといいかも。

・追記

シェルピンスキーのギャスケット勘違いして四角錘で作ってました。
三角錘Ver.作ったので載せときます。

Sierpinski gasket01



# fractal generate (Sierpinski gasket)

doc = MQSystem.getDocument()

num = doc.numObject
obj = doc.object[0]

# field

x = 100
y = 100
z = 100
rn = 5 # recursive number

# primitive Cube

p01 = MQSystem.newPoint(0,0,0)
p02 = MQSystem.newPoint(x,0,0)
p03 = MQSystem.newPoint(x,0,-z)
p04 = MQSystem.newPoint(0,0,-z)
p05 = MQSystem.newPoint(0,y,0)
p06 = MQSystem.newPoint(x,y,0)
p07 = MQSystem.newPoint(x,y,-z)
p08 = MQSystem.newPoint(0,y,-z)

# function fractal()

def fractal(number,p1,p2,p3,p4):

if number == 1:

# front

v = []
v.append( obj.addVertex(p1) )
v.append( obj.addVertex(p4) )
v.append( obj.addVertex(p2) )

obj.addFace(v)

# left

v = []
v.append( obj.addVertex(p1) )
v.append( obj.addVertex(p3) )
v.append( obj.addVertex(p4) )

obj.addFace(v)

# right

v = []
v.append( obj.addVertex(p2) )
v.append( obj.addVertex(p4) )
v.append( obj.addVertex(p3) )

obj.addFace(v)

# bottom

v = []
v.append( obj.addVertex(p1) )
v.append( obj.addVertex(p2) )
v.append( obj.addVertex(p3) )

obj.addFace(v)

else:
p5 = MQSystem.newPoint((p1.x + p2.x)/2, (p1.y + p2.y)/2, (p1.z + p2.z)/2)
p6 = MQSystem.newPoint((p2.x + p3.x)/2, (p2.y + p3.y)/2, (p2.z + p3.z)/2)
p7 = MQSystem.newPoint((p3.x + p1.x)/2, (p3.y + p1.y)/2, (p3.z + p1.z)/2)
p8 = MQSystem.newPoint((p3.x + p4.x)/2, (p3.y + p4.y)/2, (p3.z + p4.z)/2)
p9 = MQSystem.newPoint((p4.x + p1.x)/2, (p4.y + p1.y)/2, (p4.z + p1.z)/2)
p10 = MQSystem.newPoint((p4.x + p2.x)/2, (p4.y + p2.y)/2, (p4.z + p2.z)/2)

fractal(number-1,p1,p5,p7,p9)
fractal(number-1,p5,p2,p6,p10)
fractal(number-1,p7,p6,p3,p8)
fractal(number-1,p9,p10,p8,p4)

# endfunction fractal()

# main()

fractal(rn,p02,p04,p05,p07)

スポンサーサイト

テーマ : 3DCG
ジャンル : コンピュータ

trackback


この記事にトラックバックする(FC2ブログユーザー)

シェルピンスキーのギャスケット

「模擬実験録(仮)3DCGの備忘録的な何か」からコピーして実行してみた。凄いですね。可能性は感じますが、メタセコイアでPythonスクリプト作成、いろいろと研究しなければなりません。勉強します。ありがとうございま...

コメント

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。