アストラルプリズム

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

Blender python コンソールでは動くのにテキストエディタからだと動かない場合

分からん具合が高まって死にそうになる
テキストエディタから実行した時とpythonコンソールで結果が違う場合も同じ

原因

・前のデータが残ってる
・importするものが足りない
・bmeshにbm.faces.ensure_lookup_table()が必要
・変更が更新されてない

前のデータが残ってる

「コンソール→すべてクリア」をやっても消えないのでblenderを再起動してからやってみる

importするものが足りない

pythonコンソールではsinやcosなど最初からimportしてあるものがあってテキストエディタでは
import math
したうえ
math.sin()
としなければならない
pythonコンソールに合わせたい、計算式が長くなって困るなら
from math import sin,cos,tan,acos,pi
などとしておくといい

bmeshにbm.faces.ensure_lookup_table()が必要

何度も嵌ってるので何度も書くが
bm = bmesh.from_edit_mesh(.data)
の後に
bm.faces.ensure_lookup_table()が必要な事がある。

変更が更新されていない

matrix_worldで変更が更新されないことがあった。

mat = obj.matrix_world
#オブジェクトを移動
mat = obj.matrix_world
するとmatが変更前のmatorixと同じになってる恐怖
変更後
bpy.context.view_layer.update()
実行する事。
ただし、
mat_copy = obj.matrix_world.copy()
を使ってる場合はupdateできないので
自力で変更後のmatrix_worldを計算するか物体をリンクしてからmatrix_worldを取得するしかない


bpy.context.view_layer.update()はメッシュ変更後に画面の表示が変更されない場合にも有効