728x90
반응형
- 개요
이전에 만든 오브젝트 추가 Add-On에 대화상자를 추가하여 오브젝트의 이름을 설정하는 기능을 추가한다
대략적인 구성은 다음과 같다
- execute 함수를 통한 오브젝트의 이름과 스케일 설정
- invoke 함수를 통한 대화 상자의 팝업
- 대화 상자 클래스 구성
...
class WM_OT_myOp(bpy.types.Operator):
bl_label = "Add Cube Dialog Box"
bl_idname = "wm.myop"
# Use ":" in Blender 3.4+ versions
# This property can change Cube`s name
text : bpy.props.StringProperty(name="Enter Text", default="")
# This property can change Cube`s scale
scale : bpy.props.FloatVectorProperty(name="Scale:", default=(1, 1, 1))
def execute(self, context):
t = self.text
s = self.scale
bpy.ops.mesh.primitive_cube_add()
obj = bpy.context.object
obj.name = t
# obj.scale[2] = z value
bpy.ops.transform.resize(value=s)
return {'FINISHED'}
# This method open dialog box
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
...
WM_OT_myOp 클래스를 통해 대화상자를 구현한다
우선, 해당 클래스는 대화상자를 띄우는 액션으로 동작하므로 bpy.types.Operator 클래스를 상속받는다
다음으로 프로퍼티를 구성한다
우선 클래스를 사용하기 위해 라벨과 아이디이름을 추가하고 설정하였다
이어서 BPY의 속성인 StringProperty와 FloatVector를 사용하여 프로퍼티를 설정한다
설정한 2개의 프로퍼티는 오브젝트의 이름과 오브젝트의 Scale을 조정하는데 사용한다
execute 함수를 구현하여 해당 클래스의 동작방식을 정의한다
우선, 프로퍼티 중에서 오브젝트의 이름과 오브젝트의 Scale을 가져온다
이후 큐브를 추가하고 추가한 큐브의 이름과 Scale을 설정한다
invoke 함수를 구현하여 대화 상자를 팝업한다
대화 상자의 팝업은 추가한 오브젝트의 window_manager 속성을 통해 이뤄진다
- 메인 패널 클래스 및 대화 상자 클래스 등록

메인 패널인 TestPanel 클래스에서 큐브를 추가하던 행의 액션을 새로 추가한 대화 상자 클래스로 수행한다
따라서 대화 상자 클래스의 아이디이름을 인자로 추가한다

또 register 함수와 unregister 함수에 대화 상자 클래스를 추가하여 해당 클래스의 등록과 등록해제를 진행한다
- 최종 실행 결과
728x90
반응형
'blender > blender python' 카테고리의 다른 글
| 커스텀 노드 그룹 (0) | 2025.07.16 |
|---|---|
| 텍스트 Add-On (0) | 2025.07.09 |
| BPY를 이용한 키프레임 모디파이어 추가 (0) | 2025.07.02 |
| 다이아몬드 쉐이더 Add-On (0) | 2025.07.02 |
| BPY 스크립트를 Add-On으로 완성 (0) | 2025.06.25 |