Initial commit
This commit is contained in:
134
skills/addon/__init__.py
Normal file
134
skills/addon/__init__.py
Normal file
@@ -0,0 +1,134 @@
|
||||
"""
|
||||
Blender Toolkit WebSocket Server
|
||||
Claude Code와 통신하기 위한 WebSocket 서버 애드온
|
||||
|
||||
설치 방법:
|
||||
1. Blender > Edit > Preferences > Add-ons > Install
|
||||
2. 이 파일 선택
|
||||
3. "Blender Toolkit WebSocket Server" 활성화
|
||||
"""
|
||||
|
||||
# flake8: noqa: E402
|
||||
# Blender addon requires bl_info at top of file
|
||||
|
||||
bl_info = { # type: ignore[misc]
|
||||
"name": "Blender Toolkit WebSocket Server",
|
||||
"author": "Dev GOM",
|
||||
"version": (1, 0, 0),
|
||||
"blender": (4, 0, 0),
|
||||
"location": "View3D > Sidebar > Blender Toolkit",
|
||||
"description": (
|
||||
"WebSocket server for Claude Code integration "
|
||||
"with animation retargeting"
|
||||
),
|
||||
"category": "Animation",
|
||||
}
|
||||
|
||||
# Add bundled dependencies to sys.path
|
||||
import sys
|
||||
import os
|
||||
_addon_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
_libs_dir = os.path.join(_addon_dir, 'libs')
|
||||
if os.path.exists(_libs_dir) and _libs_dir not in sys.path:
|
||||
sys.path.insert(0, _libs_dir)
|
||||
|
||||
import bpy
|
||||
|
||||
# Logging utilities
|
||||
from .utils.logger import get_logger
|
||||
|
||||
# WebSocket Server
|
||||
from .websocket_server import BlenderWebSocketServer
|
||||
|
||||
# UI Classes
|
||||
from .ui import (
|
||||
BoneMappingItem,
|
||||
BLENDERTOOLKIT_PT_Panel,
|
||||
BLENDERTOOLKIT_PT_BoneMappingPanel,
|
||||
BLENDERTOOLKIT_OT_StartServer,
|
||||
BLENDERTOOLKIT_OT_StopServer,
|
||||
BLENDERTOOLKIT_OT_AutoRemap,
|
||||
BLENDERTOOLKIT_OT_ApplyRetargeting,
|
||||
)
|
||||
|
||||
# 모듈 로거 초기화
|
||||
logger = get_logger('addon')
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# 등록/해제
|
||||
# ============================================================================
|
||||
|
||||
def register():
|
||||
"""Blender 애드온 클래스 및 속성 등록."""
|
||||
# Register property groups first
|
||||
bpy.utils.register_class(BoneMappingItem)
|
||||
|
||||
# Register UI panels
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_PT_Panel)
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_PT_BoneMappingPanel)
|
||||
|
||||
# Register operators
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_OT_StartServer)
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_OT_StopServer)
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_OT_AutoRemap)
|
||||
bpy.utils.register_class(BLENDERTOOLKIT_OT_ApplyRetargeting)
|
||||
|
||||
# 포트 설정 속성
|
||||
bpy.types.Scene.blender_toolkit_port = bpy.props.IntProperty(
|
||||
name="Port",
|
||||
description="WebSocket server port",
|
||||
default=9400,
|
||||
min=1024,
|
||||
max=65535
|
||||
)
|
||||
|
||||
# 본 매핑 속성
|
||||
bpy.types.Scene.bone_mapping_items = bpy.props.CollectionProperty(
|
||||
type=BoneMappingItem,
|
||||
name="Bone Mapping Items"
|
||||
)
|
||||
bpy.types.Scene.bone_mapping_source_armature = bpy.props.StringProperty(
|
||||
name="Source Armature",
|
||||
description="Source armature name"
|
||||
)
|
||||
bpy.types.Scene.bone_mapping_target_armature = bpy.props.StringProperty(
|
||||
name="Target Armature",
|
||||
description="Target armature name"
|
||||
)
|
||||
bpy.types.Scene.bone_mapping_status = bpy.props.StringProperty(
|
||||
name="Bone Mapping Status",
|
||||
description="Current status of bone mapping operation",
|
||||
default=""
|
||||
)
|
||||
|
||||
print("✅ Blender Toolkit WebSocket Server registered")
|
||||
|
||||
|
||||
def unregister():
|
||||
"""Blender 애드온 클래스 및 속성 등록 해제."""
|
||||
# Unregister operators
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_OT_ApplyRetargeting)
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_OT_AutoRemap)
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_OT_StopServer)
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_OT_StartServer)
|
||||
|
||||
# Unregister UI panels
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_PT_BoneMappingPanel)
|
||||
bpy.utils.unregister_class(BLENDERTOOLKIT_PT_Panel)
|
||||
|
||||
# Unregister property groups
|
||||
bpy.utils.unregister_class(BoneMappingItem)
|
||||
|
||||
# Delete properties
|
||||
del bpy.types.Scene.bone_mapping_status
|
||||
del bpy.types.Scene.bone_mapping_target_armature
|
||||
del bpy.types.Scene.bone_mapping_source_armature
|
||||
del bpy.types.Scene.bone_mapping_items
|
||||
del bpy.types.Scene.blender_toolkit_port
|
||||
|
||||
print("🔌 Blender Toolkit WebSocket Server unregistered")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
Reference in New Issue
Block a user