忘れるのでどんどん追加していく予定
エディットモードで現在アクティブなものを取得(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
オブジェクトを削除するコマンド
なぜか忘れてしまう
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
でうまくいくので忘れがち。