アストラルプリズム

PC、スマホ、ゲームなどの備忘録と日記

Blender python メモ

忘れるのでどんどん追加していく予定

エディットモードで現在アクティブなものを取得(bmesh使用)

>>> bm.select_history.active
<BMEdge(0x0000019A368F74A0), index=2, verts=(0x0000019A22750120/2, 0x0000019A22750158/3)>

 bmeshのedgesの選択される順はindexの逆の数になってるっぽい?

BMEdgeとindexが2になってることからアクティブなのは

 

bm.faces[?].edges[辺の数-2-1]という事が分かる。

何番目の辺か取得したい場合は以下。

>>> bm.select_history.active.index

 

f:id:katsumi3:20191219224708p:plain

 

オブジェクトを削除するコマンド

なぜか忘れてしまう

objに何か入れる

(obj=bpy.context.objectとか)

bpy.data.objects.remove(obj)

 

多角形の角度(内角)

・meshの場合

import bpy,math,mathutils

plane = bpy.context.object

msh = bpy.data.meshes[plane.data.name]

edge1 = msh.vertices[1].co- msh.vertices[0].co

edge2 = msh.vertices[2].co- msh.vertices[1].co

angle=math.acos(edge1.normalized().dot(edge2.normalized()))

ラジアンで出力されるのでデグリー(度)に変換するには

math.degrees(angle)

angle*360/(2*math.pi)

 

pythonコンソールでは実行できるのにテキストエディタからだとエラーが出る

importしないといけないものが足りてない

pythonコンソールだとデフォでpi,sin,cos,tanは入ってるけどテキストエディタだと

import math

して

a=math.tan(ang-(math.pi))

という感じでmath.をつけないと動かない。面倒。

 

オブジェクトをアクティブにする

オブジェクトモードで bpy.opsで操作するために指定したオブジェクトをアクティブにしたいが選択とよく間違える。

アクティブにしないといけない。

2.8でコマンド表記が変わってるので注意。

bpy.context.view_layer.objects.active = bpy.data.objects['平面']

 

bmesh(編集モード)だと

bm.faces[0].edges[0].select_set(True)

 

mesh(オブジェクトモードで使用後編集モードにする)だと

msh=bpy.context.object.data

msh.vertices[0].select=True

でうまくいくので忘れがち。