This commit is contained in:
2025-11-24 23:42:22 +08:00
parent 6d2a21c30b
commit 7993c0f23c
2 changed files with 80 additions and 68 deletions

View File

@@ -5,6 +5,10 @@
Studio Library Wrapper Module
用于简化 Studio Library 的导入和使用
支持 Maya 2017-2026+ 所有版本
使用方法:
import animation_tools.studiolibrary
animation_tools.studiolibrary.show()
"""
import sys
@@ -13,52 +17,40 @@ import os
# 获取当前目录
_current_dir = os.path.dirname(os.path.abspath(__file__))
# 确保所有子模块路径都在 sys.path 中
_required_paths = [
_current_dir,
os.path.join(_current_dir, 'studiolibrary'),
os.path.join(_current_dir, 'studiolibrarymaya'),
os.path.join(_current_dir, 'mutils'),
os.path.join(_current_dir, 'studioqt'),
os.path.join(_current_dir, 'studiovendor'),
# 全局变量用于存储导入的模块
_studiolibrary_module = None
__version__ = "2.20.2"
def _ensure_studiolibrary_loaded():
"""确保 studiolibrary 模块已加载"""
global _studiolibrary_module
if _studiolibrary_module is not None:
return _studiolibrary_module
# 添加所有必要的路径
_inner_studiolibrary = os.path.join(_current_dir, 'studiolibrary')
for _subdir in ['studiolibrary', 'studiolibrarymaya', 'mutils', 'studioqt', 'studiovendor']:
_subdir_path = os.path.join(_current_dir, _subdir)
if _subdir_path not in sys.path:
sys.path.insert(0, _subdir_path)
# 导入 studiolibrary
import studiolibrary
_studiolibrary_module = studiolibrary
return _studiolibrary_module
def version():
return __version__
# 导出所有公共接口
__all__ = [
'__version__',
'version',
'show',
'main',
]
for _path in _required_paths:
if _path not in sys.path:
sys.path.insert(0, _path)
# 从内层 studiolibrary 模块导入所有功能
try:
from studiolibrary import (
__version__,
version,
config,
resource,
Library,
LibraryItem,
main,
)
# 导入工具函数
from studiolibrary.utils import *
# 导出所有公共接口
__all__ = [
'__version__',
'version',
'config',
'resource',
'Library',
'LibraryItem',
'main',
]
except ImportError as e:
import traceback
print("Failed to import studiolibrary:")
print(traceback.format_exc())
raise
def show(*args, **kwargs):
"""
@@ -70,8 +62,27 @@ def show(*args, **kwargs):
Returns:
LibraryWindow: Studio Library 窗口实例
Example:
>>> import animation_tools.studiolibrary
>>> animation_tools.studiolibrary.show()
"""
return main(*args, **kwargs)
lib = _ensure_studiolibrary_loaded()
return lib.main(*args, **kwargs)
def main(*args, **kwargs):
"""
启动 Studio Library 主窗口
Args:
*args: 传递给 main() 的位置参数
**kwargs: 传递给 main() 的关键字参数
Returns:
LibraryWindow: Studio Library 窗口实例
"""
lib = _ensure_studiolibrary_loaded()
return lib.main(*args, **kwargs)
def isMaya():
@@ -85,5 +96,5 @@ def isMaya():
import maya.cmds
maya.cmds.about(batch=True)
return True
except ImportError:
except (ImportError, AttributeError):
return False