141 lines
3.6 KiB
Python
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
|