夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Blenderでポリゴン数が多い順にオブジェクトを表示する その③UIパネル状にポリゴン数を表示する

本日は昨日に引き続きBlenderで数が多い順にオブジェクトを表示する機能を作成します。

昨日はUI上で実行できるようにしました。

redhologerbera.hatenablog.com

今回はこちらを改良してUI上に結果も表示するようにします。

〇コード

前回まではコンソールウィンドウに結果を表示するようにしていました。

この状態では使いにくいという問題があります。

今回はこちらを改修していきます。

今回は以下のコードを使用します。

import bpy

class OBJECT_OT_calculate_polygons(bpy.types.Operator):
    bl_idname = "object.calculate_polygons"
    bl_label = "Calculate Polygons"

    def execute(self, context):
        selected_objects = bpy.context.selected_objects
        for obj in selected_objects:
            if obj.type == 'MESH':
                poly_count = len(obj.data.polygons)
                obj["poly_count"] = poly_count
        return {'FINISHED'}

class CustomPanel(bpy.types.Panel):
    bl_idname = "OBJECT_PT_custom_panel"
    bl_label = "Custom Panel"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = 'Custom'

    def draw(self, context):
        layout = self.layout
        layout.operator("object.calculate_polygons", text="Calculate Polygons")
        
        for obj in bpy.context.selected_objects:
            if obj.type == 'MESH':
                row = layout.row()
                row.label(text=f'Object: {obj.name}')
                row.prop(obj, '["poly_count"]', text="Polygons")

def register():
    bpy.utils.register_class(OBJECT_OT_calculate_polygons)
    bpy.utils.register_class(CustomPanel)

def unregister():
    bpy.utils.unregister_class(OBJECT_OT_calculate_polygons)
    bpy.utils.unregister_class(CustomPanel)

if __name__ == "__main__":
    register()

こちらのコードを実行すると前回まで同様に3Dビューポート上にアドオンと同様にUIが表示されます。

今回の場合はCalculate Polygonsを選択するとオブジェクト名とポリゴン数がUI上に表示されるようになります。

この処理は以下のfor文で行っています。

      for obj in bpy.context.selected_objects:
            if obj.type == 'MESH':
                row = layout.row()
                row.label(text=f'Object: {obj.name}')
                row.prop(obj, '["poly_count"]', text="")

bpy.context.selected_objectで現在選択してるオブジェクトの数ループ処理を行います

                row = layout.row()

layout.rowメソッドはUIの行を追加するコードです。

ここで枠を追加し、ラベルとプロパティを追加しています。

ラベルはテキストとしてオブジェクト名、プロパティはポリゴン数を表示しています。

この改修によってポリゴン数が多い順というソートが外れてしまっています。

こちらは次回改善していきます。