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 |