Blender Python 本番3〜Pythonのrange関数〜
前回は、頂点〜面を作成について勉強しました。
前回のお残し部分は、以下の部分です。
ちょっとみづらいので前回のソースを修正しました。→緑色になってます。
--------------------------------------------------
# Utility functions
def vert(column, row):
print('""" Create a single vert """')
print ( (column * size, row * size, 0) )
return (column * size, row * size, 0)
def face(column, row):
print('""" Create a single face """')
print(
(column* rows + row, (column + 1) * rows + row, (column + 1) * rows + 1 + row, column * rows + 1 +row)
)
return (
column* rows + row, (column + 1) * rows + row, (column + 1) * rows + 1 + row, column * rows + 1 +row
)
# Looping to create the grid
verts = [(-1,-1,0), (1,-1,0), (1,1,0), (-1,1,0)]
faces = [(0,1,2,3)]
# Create Mesh Datablock
mesh = bpy.data.meshes.new(name)
mesh.from_pydata(verts, , faces)
# Create Object and link to scene
obj = bpy.data.objects.new(name, mesh)
bpy.context.scene.objects.link(obj)
--------------------------------------------------
参考にしたサイトでは、上記の青い部分に緑色の関数が入っていました。
それをわかりづらいので削除したのでした(笑)
なので今回は、ちゃんとやります。
定義してある関数は2あります。
・vert
・face
その前に、「range関数」を実行してみましょう。
コードと結果を以下に示します。range(開始, 終了, 間隔)で数字までの数を順に返す。
そして、写経します。
※写経は最も簡単な、コーディング力 アップ法だと思います。
import bpy
name = 'Gridtastic'
rows = 5
columns = 10
size = 1
# デバックモード 唵
bpy.app.debug = True
def vert(column, row):
return (column * size, row * size, 0)
def face(column, row):
return (column * row + row
, (column + 1 ) * rows + row
, (column + 1 ) * rows + 1 + row
, column * rows + 1 + row)
verts = [vert(x, y) for x in range(columns) for y in range(rows)]
faces = [face(x, y) for x in range(columns -1) for y in range(rows - 1)]
mesh = bpy.data.meshes.new(name)
mesh.from_pydata(verts, [], faces)
obj = bpy.data.objects.new(name, mesh)
bpy.context.scene.objects.link(obj)
実行結果が以下です。
でも、変なゴミの様な三角な様なものがあります。なんなのでしょうか?
それはさておきにして、先ほどの「お残し」を退治しようと思います。
※インデント(tab)が表示されないので、コピペした時にtabが入っていないとエラります
なので1行に書きました。
【お残し_その1】
def vert(column, row): return (column * size, row * size, 0)
この関数を単純に起動します。
コードは以下になります。
--------------------------------------------------
size = 1
rows = 5
columns = 10
def vert(column, row): return (column * size, row * size, 0)
print(vert(columns, rows))
--------------------------------------------------
そして、実行結果が以下になります。エラーはスペルミスなど上記のコードを作成するのに手間取ったものなので気にしないでください。
1.Blenderの初期画面から左下(Viewの左となり)をクリックしてTextEditorを開きます。
2.下にあるText -> Run Scriptをクリックして実行します。
キャプチャの下部にある「(10〜」とある部分が関数から出力されたものです。
(10, 5,0)のタプルです。 pythonではリスト、タプル、配列、集合と変数の種類がある様です。変数については、良い記事があったのでそちらを参照ください。
ここのポイントは、内包表記になるのですがそれは次回
今回は、ここまでにします。