本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
シェーディングタイプを切り替える選択肢ボタンを並べて配置する
複数の選択肢から一つのボタンを選択可能なプロパティは EnumProperty で作成します。
docs.blender.org
また EnumProperty の選択肢を並べて表示するには prop() 関数の expand 引数に True を設定します。
shading_column.prop(context.scene.holomon_control_view, "prop_shadingselect", expand=True)
シェーディングタイプの情報は View3DShading 型で変更と取得が可能です。
docs.blender.org
サンプルスクリプト
スクリプトを実行すると3つのシェーディングタイプを切り替えるボタンを3Dビューのサイドバーに追加します。
・Addon_control_view.py
# 定数の定義 ADDON_TITLE = "3DView Control" ADDON_COMMONNAME = "holomon_control_view" # bl_infoでプラグインに関する情報の定義を行う bl_info = { "name": ADDON_TITLE + " Addon by HoloMon", # プラグイン名 "author": "HoloMon", # 制作者名 "version": (1, 0), # バージョン "blender": (2, 90, 0), # 動作可能なBlenderバージョン "support": "TESTING", # サポートレベル "category": "3D View", # カテゴリ名 "location": "View3D > Sidebar > HMToolkit", # ロケーション "description": ADDON_TITLE + "Addon", # 説明文 "location": "", # 機能の位置付け "warning": "", # 注意点やバグ情報 "doc_url": "", # ドキュメントURL } # 利用するタイプやメソッドのインポート import bpy from bpy.types import Panel, PropertyGroup from bpy.props import PointerProperty, EnumProperty # 継承するクラスの命名規則は以下の通り # [A-Z][A-Z0-9_]*_(継承クラスごとの識別子)_[A-Za-z0-9_]+ # クラスごとの識別子は以下の通り # bpy.types.Operator OT # bpy.types.Panel PT # bpy.types.Header HT # bpy.types.MENU MT # bpy.types.UIList UL # Panelクラスの作成 # 参考URL:https://docs.blender.org/api/current/bpy.types.Panel.html class HOLOMON_PT_holomon_control_view(Panel): # パネルのラベル名を定義する # パネルを折りたたむパネルヘッダーに表示される bl_label = "表示画面のカスタマイズ" # クラスのIDを定義する # 命名規則は CATEGORY_PT_name bl_idname = "HOLOMON_PT_" + ADDON_COMMONNAME # パネルを使用する領域を定義する # 利用可能な識別子は以下の通り # EMPTY:無し # VIEW_3D:3Dビューポート # IMAGE_EDITOR:UV/画像エディター # NODE_EDITOR:ノードエディター # SEQUENCE_EDITOR:ビデオシーケンサー # CLIP_EDITOR:ムービークリップエディター # DOPESHEET_EDITOR:ドープシート # GRAPH_EDITOR:グラフエディター # NLA_EDITOR:非線形アニメーション # TEXT_EDITOR:テキストエディター # CONSOLE:Pythonコンソール # INFO:情報、操作のログ、警告、エラーメッセージ # TOPBAR:トップバー # STATUSBAR:ステータスバー # OUTLINER:アウトライナ # PROPERTIES:プロパティ # FILE_BROWSER:ファイルブラウザ # PREFERENCES:設定 bl_space_type = 'VIEW_3D' # パネルが使用される領域を定義する # 利用可能な識別子は以下の通り # ['WINDOW'、 'HEADER'、 'CHANNELS'、 'TEMPORARY'、 'UI'、 # 'TOOLS'、 'TOOL_PROPS'、 'PREVIEW'、 'HUD'、 'NAVIGATION_BAR'、 # 'EXECUTE'、 'FOOTER'の列挙型、 'TOOL_HEADER'] bl_region_type = 'UI' # パネルタイプのオプションをset型で定義する # DEFAULT_CLOSED:作成時にパネルを開くか折りたたむ必要があるかを定義する。 # HIDE_HEADER:ヘッダーを非表示するかを定義する。Falseに設定するとパネルにはヘッダーが表示される。 # デフォルトはオプション無し bl_options = set() # パネルの表示順番を定義する # 小さい番号のパネルは、大きい番号のパネルの前にデフォルトで順序付けられる # デフォルトは 0 bl_order = 0 # パネルのカテゴリ名称を定義する # 3Dビューポートの場合、サイドバーの名称になる # デフォルトは名称無し bl_category = "HMToolkit" # 描画の定義 def draw(self, context): # Operatorをボタンとして配置する draw_layout = self.layout # ボックス要素を作成する shading_box = draw_layout.box() # 要素行を作成する shading_row = shading_box.row() # テキストを配置する shading_row.label(text="シェーディング切替") # 要素列を作成する shading_column = shading_box.column(align=True) # シェーディングタイプの選択肢を配置する # row(列)要素に expand=True を指定して EnumProperty を設定すると縦並びに表示される shading_column.prop(context.scene.holomon_control_view, "prop_shadingselect", expand=True) # PropertyGroupクラスの作成 # 参考URL:https://docs.blender.org/api/current/bpy.types.PropertyGroup.html class HOLOMON_PROP_holomon_control_view(PropertyGroup): # 選択肢の更新時に実行する関数を定義する def change_shadingselect(self, context): # 指定された選択肢を取得する target_shadingselect = context.scene.holomon_control_view.prop_shadingselect # 選択したIDを元にシェーディングタイプを設定する # (https://docs.blender.org/api/current/bpy.types.View3DShading.html#bpy.types.View3DShading.type) if target_shadingselect == "Wireframe": context.space_data.shading.type = 'WIREFRAME' elif target_shadingselect == "Solid": context.space_data.shading.type = 'SOLID' elif target_shadingselect == "Material": context.space_data.shading.type = 'MATERIAL' # シーン上のパネルに表示する選択肢のカスタムプロパティを定義する # 選択肢(ID,名前,説明)を作成する # EnumPropertyの選択肢要素のマニュアル # (https://docs.blender.org/api/current/bpy.props.html#bpy.props.EnumProperty) prop_shadingselect: EnumProperty( name="シェーディングの選択", # プロパティ名 items= [ ("Wireframe","ワイヤーフレーム表示","ワイヤーフレーム表示に切り替え","SHADING_WIRE",0), ("Solid","ソリッド表示","ソリッド表示に切り替え","SHADING_SOLID",1), ("Material","マテリアル表示","マテリアル表示に切り替え","SHADING_TEXTURE",2), ], # 選択肢 default="Solid", # デフォルト値 description = "3Dビューのシェーディング処理を指定します", # 説明文 update = change_shadingselect, # 更新時実行関数 ) # 登録に関する処理 # 登録対象のクラス名 regist_classes = ( HOLOMON_PT_holomon_control_view, HOLOMON_PROP_holomon_control_view, ) # 作成クラスと定義の登録メソッド def register(): # カスタムクラスを登録する for regist_cls in regist_classes: bpy.utils.register_class(regist_cls) # シーン情報にカスタムプロパティを登録する bpy.types.Scene.holomon_control_view = \ PointerProperty(type=HOLOMON_PROP_holomon_control_view) # 作成クラスと定義の登録解除メソッド def unregister(): # シーン情報のカスタムプロパティを削除する del bpy.types.Scene.holomon_control_view # カスタムクラスを解除する for regist_cls in regist_classes: bpy.utils.unregister_class(regist_cls) # エディター実行時の処理 if __name__ == "__main__": # 作成クラスと定義を登録する register()