Update
This commit is contained in:
@@ -21,7 +21,7 @@ def get_maya_version():
|
||||
# Maya 版本格式可能是 "2023" 或 "2023.1" 等,取主版本号
|
||||
return maya_version.split('.')[0]
|
||||
except Exception as e:
|
||||
print(f"Failed to get Maya version: {e}")
|
||||
print("Failed to get Maya version: " + str(e))
|
||||
return None
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ def find_compatible_plugin(plugin_dir, maya_version):
|
||||
try:
|
||||
maya_ver_int = int(maya_version)
|
||||
except ValueError:
|
||||
print(f"Invalid Maya version format: {maya_version}")
|
||||
print("Invalid Maya version format: " + str(maya_version))
|
||||
return None
|
||||
|
||||
# 列出所有可用的插件版本
|
||||
@@ -68,18 +68,18 @@ def find_compatible_plugin(plugin_dir, maya_version):
|
||||
# 首先尝试完全匹配
|
||||
for ver, plugin_name in available_versions:
|
||||
if ver == maya_ver_int:
|
||||
print(f"Found exact match plugin for Maya {maya_version}: {plugin_name}")
|
||||
print("Found exact match plugin for Maya " + str(maya_version) + ": " + plugin_name)
|
||||
return plugin_name
|
||||
|
||||
# 如果没有完全匹配,使用小于等于当前版本的最高版本
|
||||
for ver, plugin_name in available_versions:
|
||||
if ver <= maya_ver_int:
|
||||
print(f"Using compatible plugin for Maya {maya_version}: {plugin_name} (version {ver})")
|
||||
print("Using compatible plugin for Maya " + str(maya_version) + ": " + plugin_name + " (version " + str(ver) + ")")
|
||||
return plugin_name
|
||||
|
||||
# 如果当前版本比所有可用版本都旧,使用最旧的版本
|
||||
oldest_ver, oldest_plugin = available_versions[-1]
|
||||
print(f"Warning: Maya {maya_version} is older than available plugins. Using oldest: {oldest_plugin} (version {oldest_ver})")
|
||||
print("Warning: Maya " + str(maya_version) + " is older than available plugins. Using oldest: " + oldest_plugin + " (version " + str(oldest_ver) + ")")
|
||||
return oldest_plugin
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ def load_plugin():
|
||||
print("Warning: Could not determine Maya version")
|
||||
return False
|
||||
|
||||
print(f"Detected Maya version: {maya_version}")
|
||||
print("Detected Maya version: " + str(maya_version))
|
||||
|
||||
# 查找兼容的插件
|
||||
mgpicker_path = get_mgpicker_path()
|
||||
@@ -108,44 +108,99 @@ def load_plugin():
|
||||
plugin_name = find_compatible_plugin(plugin_dir, maya_version)
|
||||
|
||||
if not plugin_name:
|
||||
print(f"Error: No compatible MGPicker plugin found for Maya {maya_version}")
|
||||
print("Error: No compatible MGPicker plugin found for Maya " + str(maya_version))
|
||||
return False
|
||||
|
||||
# Check if plugin is already loaded
|
||||
try:
|
||||
if cmds.pluginInfo(plugin_name, query=True, loaded=True):
|
||||
print(f"MGPicker plugin already loaded: {plugin_name}")
|
||||
print("MGPicker plugin already loaded: " + plugin_name)
|
||||
return True
|
||||
except RuntimeError:
|
||||
# Plugin not registered yet, will try to load
|
||||
pass
|
||||
|
||||
# Get the plugin path
|
||||
plugin_path = os.path.join(plugin_dir, f"{plugin_name}.mll")
|
||||
plugin_path = os.path.join(plugin_dir, plugin_name + ".mll")
|
||||
plugin_path = plugin_path.replace("\\", "/")
|
||||
|
||||
if not os.path.exists(plugin_path):
|
||||
print(f"Error: Plugin file not found: {plugin_path}")
|
||||
print("Error: Plugin file not found: " + plugin_path)
|
||||
return False
|
||||
|
||||
try:
|
||||
cmds.loadPlugin(plugin_path)
|
||||
print(f"MGPicker plugin loaded successfully: {plugin_path}")
|
||||
print("MGPicker plugin loaded successfully: " + plugin_path)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Failed to load MGPicker plugin: {e}")
|
||||
print("Failed to load MGPicker plugin: " + str(e))
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
|
||||
def start(mode=1):
|
||||
def is_window_open():
|
||||
"""
|
||||
检查 MGPicker 窗口是否已经打开
|
||||
|
||||
Returns:
|
||||
bool: 如果窗口已打开返回 True
|
||||
"""
|
||||
# MGPicker 的主窗口名称
|
||||
window_names = [
|
||||
'MG_PickerStudio_Window',
|
||||
'MGPickerStudioWindow',
|
||||
'mgPickerStudioWindow'
|
||||
]
|
||||
|
||||
for window_name in window_names:
|
||||
if cmds.window(window_name, exists=True):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def show_existing_window():
|
||||
"""
|
||||
显示已存在的 MGPicker 窗口
|
||||
|
||||
Returns:
|
||||
bool: 如果成功显示窗口返回 True
|
||||
"""
|
||||
window_names = [
|
||||
'MG_PickerStudio_Window',
|
||||
'MGPickerStudioWindow',
|
||||
'mgPickerStudioWindow'
|
||||
]
|
||||
|
||||
for window_name in window_names:
|
||||
if cmds.window(window_name, exists=True):
|
||||
try:
|
||||
# 尝试显示窗口
|
||||
cmds.showWindow(window_name)
|
||||
print("MGPicker window already open, bringing to front")
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def start(mode=1, force_new=False):
|
||||
"""
|
||||
Start MG-Picker Studio
|
||||
|
||||
Args:
|
||||
mode (int): 0 for designer mode, 1 for animator mode (default)
|
||||
force_new (bool): 如果为 True,强制创建新窗口(不推荐)
|
||||
"""
|
||||
# 检查窗口是否已经打开
|
||||
if not force_new and is_window_open():
|
||||
if show_existing_window():
|
||||
return
|
||||
else:
|
||||
print("Warning: MGPicker window exists but cannot be shown. Will try to create new window.")
|
||||
|
||||
# Load plugin first
|
||||
if not load_plugin():
|
||||
cmds.warning("Failed to load MGPicker plugin")
|
||||
@@ -156,7 +211,7 @@ def start(mode=1):
|
||||
program_path = os.path.join(mgpicker_path, "MGPicker_Program")
|
||||
|
||||
# Set global variables
|
||||
mel.eval(f'global string $MGPicker_ProgramPath = "{mgpicker_path}/"')
|
||||
mel.eval('global string $MGPicker_ProgramPath = "' + mgpicker_path + '/"')
|
||||
mel.eval('global string $MGPicker_ProgramFolder = "MGPicker_Program"')
|
||||
mel.eval('global string $MGPicker_ScriptEntry = "MG_PickerStudio"')
|
||||
|
||||
@@ -164,13 +219,13 @@ def start(mode=1):
|
||||
main_mel = os.path.join(program_path, "MGPicker_WrittenByMiguel.mel").replace("\\", "/")
|
||||
|
||||
try:
|
||||
mel.eval(f'source "{main_mel}"')
|
||||
mel.eval('source "' + main_mel + '"')
|
||||
# Open MGPicker window with mode parameter
|
||||
# mode 0: designer mode, mode 1: animator mode
|
||||
mel.eval(f'MG_PickerStudio {mode}')
|
||||
print(f"MG-Picker Studio started in {'designer' if mode == 0 else 'animator'} mode")
|
||||
mel.eval('MG_PickerStudio ' + str(mode))
|
||||
print("MG-Picker Studio started in " + ("designer" if mode == 0 else "animator") + " mode")
|
||||
except Exception as e:
|
||||
cmds.warning(f"Failed to start MG-Picker Studio: {e}")
|
||||
cmds.warning("Failed to start MG-Picker Studio: " + str(e))
|
||||
|
||||
|
||||
__all__ = ['start', 'load_plugin']
|
||||
|
||||
Reference in New Issue
Block a user