Update
This commit is contained in:
140
2025/scripts/animation_tools/studiolibrary/__init__.py
Normal file
140
2025/scripts/animation_tools/studiolibrary/__init__.py
Normal file
@@ -0,0 +1,140 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user