Files
Nexus/2023/scripts/animation_tools/studiolibrary/__init__.py
2025-11-25 00:49:53 +08:00

141 lines
3.6 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Studio Library Wrapper Module
Simplify Studio Library import and usage
Support Maya 2017-2026+ all versions
Usage:
import animation_tools.studiolibrary
animation_tools.studiolibrary.show()
"""
import sys
import os
# Get current directory
_current_dir = os.path.dirname(os.path.abspath(__file__))
# Global variable to store imported module
_studiolibrary_module = None
__version__ = "2.20.2"
def _ensure_studiolibrary_loaded():
"""Ensure studiolibrary module is loaded"""
global _studiolibrary_module
if _studiolibrary_module is not None:
return _studiolibrary_module
# Add all necessary paths in correct order
_inner_studiolibrary = os.path.join(_current_dir, 'studiolibrary')
# Add the parent directory so packages can be imported correctly
# e.g., "import studioqt" will find studiolibrary/studioqt/
if _current_dir not in sys.path:
sys.path.insert(0, _current_dir)
# Also add inner studiolibrary for direct imports
if _inner_studiolibrary not in sys.path:
sys.path.insert(0, _inner_studiolibrary)
# Load main.py directly to get the main function
_main_module = None
_load_error = None
# Try Python 3.4+ first
try:
import importlib.util
spec = importlib.util.spec_from_file_location(
"studiolibrary_main",
os.path.join(_inner_studiolibrary, "main.py")
)
_main_module = importlib.util.module_from_spec(spec)
sys.modules["studiolibrary_main"] = _main_module
spec.loader.exec_module(_main_module)
except Exception as e:
_load_error = e
# Try Python 2.7 fallback
try:
import imp
_main_module = imp.load_source(
"studiolibrary_main",
os.path.join(_inner_studiolibrary, "main.py")
)
except Exception as e2:
# If both fail, raise the original error
raise _load_error if _load_error else e2
# Create a simple module object with main function
class StudioLibraryModule:
def __init__(self):
self.main = _main_module.main
self.__version__ = "2.20.2"
def version(self):
return self.__version__
_studiolibrary_module = StudioLibraryModule()
return _studiolibrary_module
def version():
return __version__
# Export all public interfaces
__all__ = [
'__version__',
'version',
'show',
'main',
]
def show(*args, **kwargs):
"""
Convenience function: Launch Studio Library
Args:
*args: Positional arguments passed to main()
**kwargs: Keyword arguments passed to main()
Returns:
LibraryWindow: Studio Library window instance
Example:
>>> import animation_tools.studiolibrary
>>> animation_tools.studiolibrary.show()
"""
lib = _ensure_studiolibrary_loaded()
return lib.main(*args, **kwargs)
def main(*args, **kwargs):
"""
Launch Studio Library main window
Args:
*args: Positional arguments passed to main()
**kwargs: Keyword arguments passed to main()
Returns:
LibraryWindow: Studio Library window instance
"""
lib = _ensure_studiolibrary_loaded()
return lib.main(*args, **kwargs)
def isMaya():
"""
Check if running in Maya environment
Returns:
bool: True if in Maya, False otherwise
"""
try:
import maya.cmds
maya.cmds.about(batch=True)
return True
except (ImportError, AttributeError):
return False