blender/blender python

BPY 스크립트를 Add-On으로 완성

monstro 2025. 6. 25. 20:08
728x90
반응형

- 개요

이전에 만든 BPY 스크립트에 기능(클래스)을 더 추가하여 스크립트를 완성한다

스크립트를 실행시켜야 확장기능을 사용가능하고 에디터를 종료하면 사라지는 문제를 수정하여

스크립트를 Add-On으로 만들어 한번 추가하면 Blender 에디터에서 영구히 사용할 수 있도록 구성한다

 

- BPY 스크립트

1) TestPanel 클래스

 

추가한 기능을 실제 에디터에 그려주는 draw 함수에서 레이아웃의 세로 길이를 늘려주는 코드를 추가한다

 

2) PanelA 클래스

class PanelA(bpy.types.Panel):
    bl_label = "Panel_A"
    bl_idname = "PT_PanelA"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "My First Addon"
    bl_parent_id = "PT_TestPanel"
    bl_options = {"DEFAULT_CLOSED"}
    
    def draw(self, context):
        layout = self.layout
        layout.scale_y = 1.4
        obj = context.object # 뷰포트에 오브젝트가 없다면 obj는 None으로 설정됨
        
        row = layout.row()
        row.label(text = "Select an option to scale object", icon = "OUTLINER_OB_FONT")
        row = layout.row()
        row.operator("transform.resize")
        row = layout.row()
        
        col = layout.column()
        col.prop(obj, "scale")

 

PanelA 클래스 TestPanel 클래스의 서브 패널로 동작한다

이를 구현하기 위해 PanelA 클래스의 프로퍼티 구성과 차이점이 존재한다

  • bl_parent_id : 해당 클래스를 인자로 넣은 패널서브 패널로 설정한다
  • bl_options = {"DEFAULT_CLOSED"} : n 키를 눌러 사이드 바를 열면 해당 패널을 기본적으로 닫아 둔다

 

PanelA 클래스의 기능은 다음과 같이 구성하였다

  • operator("transform.resize") : 단축키 s를 누르지 않고, 해당 버튼을 눌러 크기를 조정할 수 있다
  • operator("transform.resize") : X / Y / Z 축의 특정 축에 따른 크기를 조정할 수 있다

 

3) PanelB 클래스

class PanelB(bpy.types.Panel):
    bl_label = "Specials"
    bl_idname = "PT_PanelB"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "My First Addon"
    bl_parent_id = "PT_TestPanel"
    bl_options = {"DEFAULT_CLOSED"}
    
    def draw(self, context):
        layout = self.layout
        
        row = layout.row()
        row.label(text = "Select a Special Option", icon = "COLOR_BLUE")
        
        row = layout.row()
        row.operator("object.shade_smooth", icon = "MOD_SMOOTH", text = "Shade Smooth")
        row.operator("object.subdivision_set", icon = "PIVOT_INDIVIDUAL", text = "Subdivide")

        row = layout.row()
        row.operator("object.modifier_add", icon = "MODIFIER", text = "Add Modifier")

 

PanelB 클래스 역시 TestPanel의 서브 패널로서 동작하므로 프로퍼티 구성이 PanelA와 동일하다

따라서 프로퍼티와 관련된 설명은 생략한다

 

PanelB 클래스의 기능은 다음과 같이 구현하였다

  • row.operator("object.shade_smooth", icon = "MOD_SMOOTH", text = "Shade Smooth")
    • 오브젝트를 우클릭하지 않고도 해당 버튼을 눌러 shade smooth를 적용한다
  • row.operator("object.subdivision_set", icon = "PIVOT_INDIVIDUAL", text = "Subdivide")
    • 직접 모디파이어를 추가하지 않고도 해당 버튼을 눌러 모디파이어 추가와 subdivision을 자동수행한다
  • row.operator("object.modifier_add", icon = "MODIFIER", text = "Add Modifier")
    • 오브젝트를 선택하고 모디파이어 패널이동하지 않아도 모디파이어를 추가할 수 있다

 

- 스크립트를 Add-On으로 사용

bl_info = {
    "name" : "Object Adder",
    "author" : "monstro",
    "version" : (1, 0), 
    "blender" : (4, 1, 0),
    "location" : "View3d > Tool",
    "warning" : "",
    "wiki_url" : "",
    "category" : "Add Mesh",
}

...

 

 

지금까지 만든 BPY 스크립트를 Add-On으로 만들기 위해서는 위와 같이 bl_info가 포함되어야 한다

bl_info 구조체의 속성값은 다음과 같다

  • name : 해당 Add-On의 이름
  • author : 해당 Add-On의 제작자
  • version : 해당 Add-On의 버전
  • blender : 해당 Add-On을 사용할 수 있는 Blender의 버전
  • location : 해당 Add-On이 Blender에서 존재할 위치
  • warning : 해당 Add-On 사용중에 버그나 문제 발생시 보여줄 메세지
  • wiki_url : 해당 Add-On에 대한 정보를 담은 wiki의 주소
  • category : 해당 Add-On의 종류

위와 같이 구성하였으면, BPY 스크립트를 Add-On으로 전환할 수 있다

 

 

이후 Edit - Preference - Add-Ons에서 Install을 선택한다

 

 

 

전환할 BPY 스크립트를 선택하고 Install Add-On을 선택한다

 

 

전환된 Add-On을 선택하여 프로젝트에 설치한다

 

- 최종 실행 결과

 

728x90
반응형

'blender > blender python' 카테고리의 다른 글

텍스트 Add-On  (0) 2025.07.09
대화 상자  (0) 2025.07.09
BPY를 이용한 키프레임 모디파이어 추가  (0) 2025.07.02
다이아몬드 쉐이더 Add-On  (0) 2025.07.02
BPY 스크립트로 Blender에 기능 추가  (0) 2025.06.25