5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Blender] EnumPropertyの選択項目を動的に設定する方法

Posted at

Blenderには、ユーザから値を指定できるようにUIを提供するためのProperty系の関数があり、その中でもセレクトボックスを作成するEnumPropertyというものがあります。
この関数、選択項目を静的に設定する分には問題なかったのですが、選択項目を動的に設定する場合に少し戸惑ってしまったので、同じ問題に当たってしまっている人向けに紹介したいと思います。

選択項目を静的に設定

動的に設定する場合との比較のため、選択項目を静的に設定するサンプルコードを以下に示します。
あらかじめ作成しておいたリストをitemsに指定することで、セレクトボックスを作成しています。

static_append.py
import bpy
from by.props import *

# セレクトボックスに表示したい項目
axis = (
    ("X", "X-axis", ""),      # (識別子, UI表示名, 説明文)
    ("Y", "Y-axis", ""),
    ("Z", "Z-axis", ""))

transform_axis = EnumProperty(
    name = "Transform Axis",          # 名称
    description = "Transform Axis",   # 説明文
    items = axis)                     # セレクトボックスに表示したい項目リスト

選択項目を動的に設定

続いて選択項目を動的に設定するサンプルコードを以下に示します。
こちらでは、itemに項目リストを作成する関数を指定しています。

項目リストを作成する関数内で設定したい項目を設定し、作成した項目リストを関数の戻り値として返しています。
変数object_listが参照される度にitemsに指定した関数が呼ばれるため、選択項目を動的に設定することができます。

dynamic_append.py
import bpy
from bpy.props import *

# セレクトボックスに表示したい項目リストを作成する関数
def get_object_list_callback(scene, context):
    items = []
    # itemsに項目を追加する処理...

    return items

object_list = EnumProperty(
    name = "Object List",               # 名称
    description = "Object List",        # 説明文
    items = get_object_list_callback)   # 項目リストを作成する関数

参考情報

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?