Takunojiの日記

自分が勉強したプログラム技術メモ

Blender Python BMesh 〜点の座標について学ぶ〜

前回スクリプトで点を作成し、線を作りました。※イマイチな感じでしたが。。。
今回は、復習がてらに線を作成してから始めます。

一回作成したものは、元のソースから持って来れば良いので
速攻でできます。
>> ob = bpy.context.object
>>> bm = bmesh.from_edit_mesh(ob.data)
>>> bm.verts
<BMVertSeq object at 0x114fb5900>
>>> v1 = bm.verts.new( (0,0,0) )
>>> v2 = bm.verts.new( (1,1,0) )
>>> v3 = bm.verts.new( (-1,-1,0) )
>> bm.edges.new( (v1, v2) )
<BMEdge(0x115000150), index=-1, verts=(0x10bba2af0/-1, 0x10bba2b28/-1)>

>>> bm.edges.new( (v2, v3) )
<BMEdge(0x1150001a0), index=-1, verts=(0x10bba2b28/-1, 0x10bba2b60/-1)>

>>> bm.edges.new( (v3, v1) )

<実行結果>

f:id:Takunoji:20180327202643p:plain    f:id:Takunoji:20180327203241p:plain

左のものは、作成した点が平面状にあり、隠れていたので動かしました。
右のものは、移動した、板の上に点を作成したものです。

くどいようですが、座標が確認できるように下記のスクリプトを実行しました。

import bpy, bmesh

ob = bpy.context.object
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(ob.data)

v1 = bm.verts.new( (0,0,0) )
v2 = bm.verts.new( (1,0,0) )
v3 = bm.verts.new( (0,1,0) )

bm.edges.new( (v1, v2) )
bm.edges.new( (v2, v3) )
bm.edges.new*1

f:id:Takunoji:20180327205651p:plain


次に板を180度回転させて、以下のようにして同じスクリプトを実行します。

f:id:Takunoji:20180327210050p:plain    f:id:Takunoji:20180327210221p:plain

ちょっとわかりづらいのですが、回転後も同じ場所に点が作成されました。
作成する点を以下のように変更し再度スクリプトを実行します。
v1 = bm.verts.new*2
v2 = bm.verts.new*3
v3 = bm.verts.new*4

f:id:Takunoji:20180327210502p:plain

どうやらBMeshで点を作成するときは、オブジェクト(Plane)の座標に依存するようです。

つまり、元々の位置の中心=(0,0,0)で回転させてもオブジェクト上の座標は変わらないということがわかりました。

なるほど!!

*1:v3, v1

*2:0,0,0

*3:-1,0,0

*4:0,-1,0