Update
This commit is contained in:
@@ -9,16 +9,267 @@ Behaviour function module
|
||||
#===================================== IMPORT MODULES =====================================
|
||||
import maya.cmds as cmds
|
||||
import pymel.core as pm
|
||||
import maya.mel as mel
|
||||
from maya import OpenMayaUI as omui
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from Qt.QtCompat import wrapInstance
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import importlib
|
||||
import traceback
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 导入配置
|
||||
import config
|
||||
from scripts.ui import localization
|
||||
LANG = localization.LANG
|
||||
|
||||
#========================================== FUNCTIONS ========================================
|
||||
|
||||
# 左侧面板功能
|
||||
# 搜索相关功能
|
||||
def filter_controls(text):
|
||||
"""
|
||||
过滤控制列表
|
||||
"""
|
||||
print(f"过滤控制列表: {text}")
|
||||
# 这里实现过滤控制列表的功能
|
||||
return True
|
||||
|
||||
# 控制列表相关功能
|
||||
def control_selected(item):
|
||||
"""
|
||||
控制项目被选中
|
||||
"""
|
||||
print(f"控制项目被选中: {item.text()}")
|
||||
# 这里实现控制项目选中的功能
|
||||
return True
|
||||
|
||||
def update_control_selection():
|
||||
"""
|
||||
更新控制选择
|
||||
"""
|
||||
print("更新控制选择")
|
||||
# 这里实现更新控制选择的功能
|
||||
return True
|
||||
|
||||
def update_control_value(value):
|
||||
"""
|
||||
更新控制值
|
||||
"""
|
||||
print(f"更新控制值: {value}")
|
||||
# 这里实现更新控制值的功能
|
||||
return True
|
||||
|
||||
# 页码相关功能
|
||||
def switch_page(page):
|
||||
"""
|
||||
切换页面
|
||||
"""
|
||||
print(f"切换页面: {page}")
|
||||
# 这里实现切换页面的功能
|
||||
return True
|
||||
|
||||
# 范围相关功能
|
||||
def decrease_range():
|
||||
"""
|
||||
减小范围
|
||||
"""
|
||||
print("减小范围")
|
||||
# 这里实现减小范围的功能
|
||||
return True
|
||||
|
||||
def increase_range():
|
||||
"""
|
||||
增加范围
|
||||
"""
|
||||
print("增加范围")
|
||||
# 这里实现增加范围的功能
|
||||
return True
|
||||
|
||||
# 右侧面板功能
|
||||
# BlendShapes相关功能
|
||||
def blendshape_selected(item):
|
||||
"""
|
||||
混合形状项目被选中
|
||||
"""
|
||||
print(f"混合形状项目被选中: {item.text()}")
|
||||
# 这里实现混合形状项目选中的功能
|
||||
return True
|
||||
|
||||
def update_blendshape_selection():
|
||||
"""
|
||||
更新混合形状选择
|
||||
"""
|
||||
print("更新混合形状选择")
|
||||
# 这里实现更新混合形状选择的功能
|
||||
return True
|
||||
|
||||
def update_blendshape_value(value):
|
||||
"""
|
||||
更新混合形状值
|
||||
"""
|
||||
print(f"更新混合形状值: {value}")
|
||||
# 这里实现更新混合形状值的功能
|
||||
return True
|
||||
|
||||
# BlendShape操作相关功能
|
||||
def reset_blendshape():
|
||||
"""
|
||||
重置混合形状
|
||||
"""
|
||||
print("重置混合形状")
|
||||
# 这里实现重置混合形状的功能
|
||||
return True
|
||||
|
||||
def mirror_blendshape():
|
||||
"""
|
||||
镜像混合形状
|
||||
"""
|
||||
print("镜像混合形状")
|
||||
# 这里实现镜像混合形状的功能
|
||||
return True
|
||||
|
||||
def add_blendshape():
|
||||
"""
|
||||
添加混合形状
|
||||
"""
|
||||
print("添加混合形状")
|
||||
# 这里实现添加混合形状的功能
|
||||
return True
|
||||
|
||||
def remove_blendshape():
|
||||
"""
|
||||
移除混合形状
|
||||
"""
|
||||
print("移除混合形状")
|
||||
# 这里实现移除混合形状的功能
|
||||
return True
|
||||
|
||||
def update_blendshape():
|
||||
"""
|
||||
更新混合形状
|
||||
"""
|
||||
print("更新混合形状")
|
||||
# 这里实现更新混合形状的功能
|
||||
return True
|
||||
|
||||
def isolate_blendshape():
|
||||
"""
|
||||
隔离混合形状
|
||||
"""
|
||||
print("隔离混合形状")
|
||||
# 这里实现隔离混合形状的功能
|
||||
return True
|
||||
|
||||
def new_blendshape():
|
||||
"""
|
||||
新建混合形状
|
||||
"""
|
||||
print("新建混合形状")
|
||||
# 这里实现新建混合形状的功能
|
||||
return True
|
||||
|
||||
def combine_blendshape():
|
||||
"""
|
||||
组合混合形状
|
||||
"""
|
||||
print("组合混合形状")
|
||||
# 这里实现组合混合形状的功能
|
||||
return True
|
||||
|
||||
# 标签页相关功能
|
||||
def switch_tab(tab):
|
||||
"""
|
||||
切换标签页
|
||||
"""
|
||||
print(f"切换标签页: {tab}")
|
||||
# 这里实现切换标签页的功能
|
||||
return True
|
||||
|
||||
# 底部相关功能
|
||||
def update_main_value(value):
|
||||
"""
|
||||
更新主值
|
||||
"""
|
||||
print(f"更新主值: {value}")
|
||||
# 这里实现更新主值的功能
|
||||
return True
|
||||
|
||||
def exchange_from_expression():
|
||||
"""
|
||||
交换从表情
|
||||
"""
|
||||
print("交换从表情")
|
||||
# 这里实现交换从表情的功能
|
||||
return True
|
||||
|
||||
def reset_selected_expression():
|
||||
"""
|
||||
重置选定表情
|
||||
"""
|
||||
print("重置选定表情")
|
||||
# 这里实现重置选定表情的功能
|
||||
return True
|
||||
|
||||
def import_expression():
|
||||
"""
|
||||
导入表情
|
||||
"""
|
||||
print("导入表情")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Expression Files (*.exp);;JSON Files (*.json);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入表情的功能
|
||||
print(f"将从{file_path[0]}导入表情")
|
||||
except Exception as e:
|
||||
print(f"导入表情时出错: {e}")
|
||||
return True
|
||||
|
||||
def control_panel_search():
|
||||
"""
|
||||
控制面板搜索
|
||||
"""
|
||||
print("控制面板搜索")
|
||||
# 这里实现控制面板搜索的功能
|
||||
return True
|
||||
|
||||
def select_related_keys():
|
||||
"""
|
||||
选择相关键值
|
||||
"""
|
||||
print("选择相关键值")
|
||||
# 这里实现选择相关键值的功能
|
||||
return True
|
||||
|
||||
def import_map_expression():
|
||||
"""
|
||||
导入表情映射
|
||||
"""
|
||||
print("导入表情映射")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Map Files (*.map);;JSON Files (*.json);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入表情映射的功能
|
||||
print(f"将从{file_path[0]}导入表情映射")
|
||||
except Exception as e:
|
||||
print(f"导入表情映射时出错: {e}")
|
||||
return True
|
||||
|
||||
# 保留原来的函数作为兼容性考虑
|
||||
def behaviour_temp_utils_function():
|
||||
"""
|
||||
Placeholder function for behaviour module
|
||||
This function will be replaced with actual functionality in future updates
|
||||
"""
|
||||
print("Behaviour module temporary function called")
|
||||
print("Behaviour module temporary function called")
|
||||
return True
|
@@ -3,21 +3,278 @@
|
||||
|
||||
"""
|
||||
Definition function module
|
||||
定义统工具函数模块 - 提供定义统UI所需的所有功能函数
|
||||
定义系统工具函数模块 - 提供定义系统UI所需的所有功能函数
|
||||
"""
|
||||
|
||||
#===================================== IMPORT MODULES =====================================
|
||||
import maya.cmds as cmds
|
||||
import pymel.core as pm
|
||||
import maya.mel as mel
|
||||
from maya import OpenMayaUI as omui
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from Qt.QtCompat import wrapInstance
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import importlib
|
||||
import traceback
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 导入配置
|
||||
import config
|
||||
from scripts.ui import localization
|
||||
LANG = localization.LANG
|
||||
|
||||
#========================================== FUNCTIONS ========================================
|
||||
|
||||
# 左侧面板功能
|
||||
# LODs相关功能
|
||||
def lod_selected(item):
|
||||
"""
|
||||
LOD项目被选中
|
||||
"""
|
||||
print(f"LOD项目被选中: {item.text()}")
|
||||
# 这里实现LOD项目选中的功能
|
||||
return True
|
||||
|
||||
def update_lod_selection():
|
||||
"""
|
||||
更新LOD选择
|
||||
"""
|
||||
print("更新LOD选择")
|
||||
# 这里实现更新LOD选择的功能
|
||||
return True
|
||||
|
||||
def define_lod_relations():
|
||||
"""
|
||||
定义LOD关联
|
||||
"""
|
||||
print("定义LOD关联")
|
||||
# 这里实现定义LOD关联的功能
|
||||
return True
|
||||
|
||||
# Meshes相关功能
|
||||
def mesh_selected(item):
|
||||
"""
|
||||
网格项目被选中
|
||||
"""
|
||||
print(f"网格项目被选中: {item.text()}")
|
||||
# 这里实现网格项目选中的功能
|
||||
return True
|
||||
|
||||
def update_mesh_selection():
|
||||
"""
|
||||
更新网格选择
|
||||
"""
|
||||
print("更新网格选择")
|
||||
# 这里实现更新网格选择的功能
|
||||
return True
|
||||
|
||||
def create_geometry():
|
||||
"""
|
||||
创建几何体
|
||||
"""
|
||||
print("创建几何体")
|
||||
# 这里实现创建几何体的功能
|
||||
return True
|
||||
|
||||
# 右侧面板功能
|
||||
# Joints相关功能
|
||||
def joint_selected(item):
|
||||
"""
|
||||
关节项目被选中
|
||||
"""
|
||||
print(f"关节项目被选中: {item.text()}")
|
||||
# 这里实现关节项目选中的功能
|
||||
return True
|
||||
|
||||
def update_joint_selection():
|
||||
"""
|
||||
更新关节选择
|
||||
"""
|
||||
print("更新关节选择")
|
||||
# 这里实现更新关节选择的功能
|
||||
return True
|
||||
|
||||
# BlendShapes相关功能
|
||||
def blendshape_selected(item):
|
||||
"""
|
||||
形状混合项目被选中
|
||||
"""
|
||||
print(f"形状混合项目被选中: {item.text()}")
|
||||
# 这里实现形状混合项目选中的功能
|
||||
return True
|
||||
|
||||
def update_blendshape_selection():
|
||||
"""
|
||||
更新形状混合选择
|
||||
"""
|
||||
print("更新形状混合选择")
|
||||
# 这里实现更新形状混合选择的功能
|
||||
return True
|
||||
|
||||
# AnimatedMap相关功能
|
||||
def animatedmap_selected(item):
|
||||
"""
|
||||
动画贴图项目被选中
|
||||
"""
|
||||
print(f"动画贴图项目被选中: {item.text()}")
|
||||
# 这里实现动画贴图项目选中的功能
|
||||
return True
|
||||
|
||||
def update_animatedmap_selection():
|
||||
"""
|
||||
更新动画贴图选择
|
||||
"""
|
||||
print("更新动画贴图选择")
|
||||
# 这里实现更新动画贴图选择的功能
|
||||
return True
|
||||
|
||||
# 底部工具面板功能
|
||||
# 导入部分功能
|
||||
def import_joint_system():
|
||||
"""
|
||||
导入关节系统
|
||||
"""
|
||||
print("导入关节系统")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;FBX Files (*.fbx);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入关节系统的功能
|
||||
print(f"将从{file_path[0]}导入关节系统")
|
||||
except Exception as e:
|
||||
print(f"导入关节系统时出错: {e}")
|
||||
return True
|
||||
|
||||
def import_geometry():
|
||||
"""
|
||||
导入几何体
|
||||
"""
|
||||
print("导入几何体")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;FBX Files (*.fbx);;OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入几何体的功能
|
||||
print(f"将从{file_path[0]}导入几何体")
|
||||
except Exception as e:
|
||||
print(f"导入几何体时出错: {e}")
|
||||
return True
|
||||
|
||||
def import_blendshape_target():
|
||||
"""
|
||||
导入形状混合目标
|
||||
"""
|
||||
print("导入形状混合目标")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;FBX Files (*.fbx);;OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入形状混合目标的功能
|
||||
print(f"将从{file_path[0]}导入形状混合目标")
|
||||
except Exception as e:
|
||||
print(f"导入形状混合目标时出错: {e}")
|
||||
return True
|
||||
|
||||
def import_animated_map():
|
||||
"""
|
||||
导入动画贴图
|
||||
"""
|
||||
print("导入动画贴图")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Image Files (*.jpg *.jpeg *.png *.tif *.tiff);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入动画贴图的功能
|
||||
print(f"将从{file_path[0]}导入动画贴图")
|
||||
except Exception as e:
|
||||
print(f"导入动画贴图时出错: {e}")
|
||||
return True
|
||||
|
||||
# 创建部分功能
|
||||
def create_neutral_pose():
|
||||
"""
|
||||
创建中性姿势
|
||||
"""
|
||||
print("创建中性姿势")
|
||||
# 这里实现创建中性姿势的功能
|
||||
return True
|
||||
|
||||
def bind_geometry():
|
||||
"""
|
||||
绑定几何体
|
||||
"""
|
||||
print("绑定几何体")
|
||||
# 这里实现绑定几何体的功能
|
||||
return True
|
||||
|
||||
def take_pose():
|
||||
"""
|
||||
取消姿势
|
||||
"""
|
||||
print("取消姿势")
|
||||
# 这里实现取消姿势的功能
|
||||
return True
|
||||
|
||||
def unbind_skin():
|
||||
"""
|
||||
取消蒙皮
|
||||
"""
|
||||
print("取消蒙皮")
|
||||
# 这里实现取消蒙皮的功能
|
||||
return True
|
||||
|
||||
# 工具部分功能
|
||||
def reposition_all_joints():
|
||||
"""
|
||||
重新定位所有关节
|
||||
"""
|
||||
print("重新定位所有关节")
|
||||
# 这里实现重新定位所有关节的功能
|
||||
return True
|
||||
|
||||
def reposition_selected_joints():
|
||||
"""
|
||||
重新定位选定关节
|
||||
"""
|
||||
print("重新定位选定关节")
|
||||
# 这里实现重新定位选定关节的功能
|
||||
return True
|
||||
|
||||
def reposition_all_head_joints():
|
||||
"""
|
||||
重新定位所有头部关节
|
||||
"""
|
||||
print("重新定位所有头部关节")
|
||||
# 这里实现重新定位所有头部关节的功能
|
||||
return True
|
||||
|
||||
def quick_preset():
|
||||
"""
|
||||
快速预设
|
||||
"""
|
||||
print("快速预设")
|
||||
# 这里实现快速预设的功能
|
||||
return True
|
||||
|
||||
# 保留原来的函数作为兼容性考虑
|
||||
def definition_temp_utils_function():
|
||||
"""
|
||||
Placeholder function for definition module
|
||||
This function will be replaced with actual functionality in future updates
|
||||
"""
|
||||
print("Definition module temporary function called")
|
||||
print("Definition module temporary function called")
|
||||
return True
|
@@ -3,17 +3,362 @@
|
||||
|
||||
"""
|
||||
Geometry function module
|
||||
几何模型工具函数模块 - 提供几何模型UI所需的所有功能函数
|
||||
"""
|
||||
|
||||
#===================================== IMPORT MODULES =====================================
|
||||
import maya.cmds as cmds
|
||||
import pymel.core as pm
|
||||
import maya.mel as mel
|
||||
from maya import OpenMayaUI as omui
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from Qt.QtCompat import wrapInstance
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import importlib
|
||||
import traceback
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 导入配置
|
||||
import config
|
||||
from scripts.ui import localization
|
||||
LANG = localization.LANG
|
||||
|
||||
#========================================== FUNCTIONS ========================================
|
||||
|
||||
# 左侧面板功能
|
||||
# LOD相关功能
|
||||
def lod_selected(item):
|
||||
"""
|
||||
LOD项目被选中
|
||||
"""
|
||||
print(f"LOD项目被选中: {item.text()}")
|
||||
# 这里实现LOD项目选中的功能
|
||||
return True
|
||||
|
||||
def update_lod_selection():
|
||||
"""
|
||||
更新LOD选择
|
||||
"""
|
||||
print("更新LOD选择")
|
||||
# 这里实现更新LOD选择的功能
|
||||
return True
|
||||
|
||||
def add_lod():
|
||||
"""
|
||||
添加LOD
|
||||
"""
|
||||
print("添加LOD")
|
||||
# 这里实现添加LOD的功能
|
||||
return True
|
||||
|
||||
def remove_lod():
|
||||
"""
|
||||
移除LOD
|
||||
"""
|
||||
print("移除LOD")
|
||||
# 这里实现移除LOD的功能
|
||||
return True
|
||||
|
||||
def duplicate_lod():
|
||||
"""
|
||||
复制LOD
|
||||
"""
|
||||
print("复制LOD")
|
||||
# 这里实现复制LOD的功能
|
||||
return True
|
||||
|
||||
# 模型相关功能
|
||||
def model_selected(item):
|
||||
"""
|
||||
模型项目被选中
|
||||
"""
|
||||
print(f"模型项目被选中: {item.text()}")
|
||||
# 这里实现模型项目选中的功能
|
||||
return True
|
||||
|
||||
def update_model_selection():
|
||||
"""
|
||||
更新模型选择
|
||||
"""
|
||||
print("更新模型选择")
|
||||
# 这里实现更新模型选择的功能
|
||||
return True
|
||||
|
||||
def add_model():
|
||||
"""
|
||||
添加模型
|
||||
"""
|
||||
print("添加模型")
|
||||
# 这里实现添加模型的功能
|
||||
return True
|
||||
|
||||
def remove_model():
|
||||
"""
|
||||
移除模型
|
||||
"""
|
||||
print("移除模型")
|
||||
# 这里实现移除模型的功能
|
||||
return True
|
||||
|
||||
def duplicate_model():
|
||||
"""
|
||||
复制模型
|
||||
"""
|
||||
print("复制模型")
|
||||
# 这里实现复制模型的功能
|
||||
return True
|
||||
|
||||
# 右侧面板功能
|
||||
# 模型属性相关功能
|
||||
def update_model_name(text):
|
||||
"""
|
||||
更新模型名称
|
||||
"""
|
||||
print(f"更新模型名称: {text}")
|
||||
# 这里实现更新模型名称的功能
|
||||
return True
|
||||
|
||||
def update_model_type(index):
|
||||
"""
|
||||
更新模型类型
|
||||
"""
|
||||
print(f"更新模型类型: {index}")
|
||||
# 这里实现更新模型类型的功能
|
||||
return True
|
||||
|
||||
def toggle_model_visibility(state):
|
||||
"""
|
||||
切换模型可见性
|
||||
"""
|
||||
print(f"切换模型可见性: {state}")
|
||||
# 这里实现切换模型可见性的功能
|
||||
return True
|
||||
|
||||
def apply_properties():
|
||||
"""
|
||||
应用属性
|
||||
"""
|
||||
print("应用属性")
|
||||
# 这里实现应用属性的功能
|
||||
return True
|
||||
|
||||
def reset_properties():
|
||||
"""
|
||||
重置属性
|
||||
"""
|
||||
print("重置属性")
|
||||
# 这里实现重置属性的功能
|
||||
return True
|
||||
|
||||
# 模型工具相关功能
|
||||
def standardize_names():
|
||||
"""
|
||||
标准化命名
|
||||
"""
|
||||
print("标准化命名")
|
||||
# 这里实现标准化命名的功能
|
||||
return True
|
||||
|
||||
def auto_group():
|
||||
"""
|
||||
自动分组
|
||||
"""
|
||||
print("自动分组")
|
||||
# 这里实现自动分组的功能
|
||||
return True
|
||||
|
||||
def generate_accessories():
|
||||
"""
|
||||
生成配件
|
||||
"""
|
||||
print("生成配件")
|
||||
# 这里实现生成配件的功能
|
||||
return True
|
||||
|
||||
def fix_seams():
|
||||
"""
|
||||
修复接缝
|
||||
"""
|
||||
print("修复接缝")
|
||||
# 这里实现修复接缝的功能
|
||||
return True
|
||||
|
||||
def fix_vertex_order():
|
||||
"""
|
||||
修复点序
|
||||
"""
|
||||
print("修复点序")
|
||||
# 这里实现修复点序的功能
|
||||
return True
|
||||
|
||||
# 底部工具面板功能
|
||||
# 导入相关功能
|
||||
def import_model():
|
||||
"""
|
||||
导入模型
|
||||
"""
|
||||
print("导入模型")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入模型的功能
|
||||
print(f"将从{file_path[0]}导入模型")
|
||||
except Exception as e:
|
||||
print(f"导入模型时出错: {e}")
|
||||
return True
|
||||
|
||||
def import_fbx():
|
||||
"""
|
||||
导入FBX
|
||||
"""
|
||||
print("导入FBX")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="FBX Files (*.fbx);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入FBX的功能
|
||||
print(f"将从{file_path[0]}导入FBX")
|
||||
mel.eval(f'FBXImport -file "{file_path[0]}";')
|
||||
except Exception as e:
|
||||
print(f"导入FBX时出错: {e}")
|
||||
return True
|
||||
|
||||
def import_obj():
|
||||
"""
|
||||
导入OBJ
|
||||
"""
|
||||
print("导入OBJ")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导入OBJ的功能
|
||||
print(f"将从{file_path[0]}导入OBJ")
|
||||
cmds.file(file_path[0], i=True, type="OBJ", ignoreVersion=True, options="mo=1")
|
||||
except Exception as e:
|
||||
print(f"导入OBJ时出错: {e}")
|
||||
return True
|
||||
|
||||
# 导出相关功能
|
||||
def export_model():
|
||||
"""
|
||||
导出模型
|
||||
"""
|
||||
print("导出模型")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=2
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导出模型的功能
|
||||
print(f"将模型导出到{file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"导出模型时出错: {e}")
|
||||
return True
|
||||
|
||||
def export_fbx():
|
||||
"""
|
||||
导出 FBX
|
||||
"""
|
||||
print("导出 FBX")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="FBX Files (*.fbx);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=2
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导出 FBX的功能
|
||||
print(f"将模型导出到{file_path[0]}")
|
||||
mel.eval('FBXExportSmoothingGroups -v true;')
|
||||
mel.eval('FBXExportHardEdges -v false;')
|
||||
mel.eval('FBXExportTangents -v false;')
|
||||
mel.eval('FBXExportSmoothMesh -v true;')
|
||||
mel.eval('FBXExportInstances -v false;')
|
||||
mel.eval('FBXExportReferencedContainersContent -v false;')
|
||||
mel.eval('FBXExportBakeComplexAnimation -v false;')
|
||||
mel.eval('FBXExportUseSceneName -v false;')
|
||||
mel.eval('FBXExportQuaternion -v euler;')
|
||||
mel.eval('FBXExportShapes -v true;')
|
||||
mel.eval('FBXExportSkins -v true;')
|
||||
mel.eval('FBXExportConstraints -v false;')
|
||||
mel.eval('FBXExportCameras -v false;')
|
||||
mel.eval('FBXExportLights -v false;')
|
||||
mel.eval('FBXExportEmbeddedTextures -v false;')
|
||||
mel.eval('FBXExportInputConnections -v false;')
|
||||
mel.eval('FBXExportUpAxis y;')
|
||||
mel.eval(f'FBXExport -f "{file_path[0]}" -s;')
|
||||
except Exception as e:
|
||||
print(f"导出 FBX时出错: {e}")
|
||||
return True
|
||||
|
||||
def export_obj():
|
||||
"""
|
||||
导出 OBJ
|
||||
"""
|
||||
print("导出 OBJ")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=2
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现导出 OBJ的功能
|
||||
print(f"将模型导出到{file_path[0]}")
|
||||
cmds.file(file_path[0], force=True, options="groups=1;ptgroups=1;materials=1;smoothing=1;normals=1", type="OBJexport", pr=True, exportSelected=True)
|
||||
except Exception as e:
|
||||
print(f"导出 OBJ时出错: {e}")
|
||||
return True
|
||||
|
||||
# 工具相关功能
|
||||
def check_model():
|
||||
"""
|
||||
检查模型
|
||||
"""
|
||||
print("检查模型")
|
||||
# 这里实现检查模型的功能
|
||||
return True
|
||||
|
||||
def optimize_model():
|
||||
"""
|
||||
优化模型
|
||||
"""
|
||||
print("优化模型")
|
||||
# 这里实现优化模型的功能
|
||||
return True
|
||||
|
||||
def clean_model():
|
||||
"""
|
||||
清理模型
|
||||
"""
|
||||
print("清理模型")
|
||||
# 这里实现清理模型的功能
|
||||
return True
|
||||
|
||||
def uv_tools():
|
||||
"""
|
||||
UV工具
|
||||
"""
|
||||
print("UV工具")
|
||||
# 这里实现UV工具的功能
|
||||
return True
|
||||
|
||||
# 保留原来的函数作为兼容性考虑
|
||||
def geometry_temp_utils_function():
|
||||
"""
|
||||
Placeholder function for geometry module
|
||||
|
@@ -4,12 +4,233 @@
|
||||
#===================================== IMPORT MODULES =====================================
|
||||
import maya.cmds as cmds
|
||||
import pymel.core as pm
|
||||
import maya.mel as mel
|
||||
from maya import OpenMayaUI as omui
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from Qt.QtCompat import wrapInstance
|
||||
import webbrowser
|
||||
import subprocess
|
||||
import importlib
|
||||
import traceback
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 导入配置
|
||||
import config
|
||||
from scripts.ui import localization
|
||||
LANG = localization.LANG
|
||||
|
||||
#========================================== FUNCTIONS ========================================
|
||||
|
||||
# 第一行按钮功能
|
||||
def new_file():
|
||||
"""
|
||||
创建新文件
|
||||
"""
|
||||
print("创建新文件")
|
||||
try:
|
||||
if cmds.file(q=True, modified=True):
|
||||
result = cmds.confirmDialog(
|
||||
title=LANG.get("confirm_save", "确认保存"),
|
||||
message=LANG.get("save_changes", "是否保存更改?"),
|
||||
button=[LANG.get("save", "保存"), LANG.get("dont_save", "不保存"), LANG.get("cancel", "取消")],
|
||||
defaultButton=LANG.get("save", "保存"),
|
||||
cancelButton=LANG.get("cancel", "取消"),
|
||||
dismissString=LANG.get("cancel", "取消")
|
||||
)
|
||||
|
||||
if result == LANG.get("save", "保存"):
|
||||
cmds.file(save=True)
|
||||
elif result == LANG.get("cancel", "取消"):
|
||||
return
|
||||
|
||||
cmds.file(new=True, force=True)
|
||||
print("新文件已创建")
|
||||
except Exception as e:
|
||||
print(f"创建新文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def open_file():
|
||||
"""
|
||||
打开文件
|
||||
"""
|
||||
print("打开文件")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
cmds.file(file_path[0], open=True, force=True)
|
||||
print(f"文件已打开: {file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"打开文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def link_file():
|
||||
"""
|
||||
链接文件
|
||||
"""
|
||||
print("链接文件")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 这里实现链接文件的功能
|
||||
print(f"文件已链接: {file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"链接文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def unlink_file():
|
||||
"""
|
||||
取消链接
|
||||
"""
|
||||
print("取消链接")
|
||||
# 这里实现取消链接的功能
|
||||
return True
|
||||
|
||||
def import_file():
|
||||
"""
|
||||
导入文件
|
||||
"""
|
||||
print("导入文件")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;FBX Files (*.fbx);;OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=1
|
||||
)
|
||||
if file_path:
|
||||
# 根据文件扩展名选择导入方法
|
||||
file_ext = os.path.splitext(file_path[0])[1].lower()
|
||||
if file_ext == ".fbx":
|
||||
cmds.file(file_path[0], i=True, type="FBX")
|
||||
elif file_ext == ".obj":
|
||||
cmds.file(file_path[0], i=True, type="OBJ")
|
||||
else: # .ma or .mb
|
||||
cmds.file(file_path[0], i=True)
|
||||
print(f"文件已导入: {file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"导入文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def export_file():
|
||||
"""
|
||||
导出文件
|
||||
"""
|
||||
print("导出文件")
|
||||
try:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya Files (*.ma *.mb);;FBX Files (*.fbx);;OBJ Files (*.obj);;All Files (*.*)",
|
||||
dialogStyle=2,
|
||||
fileMode=0
|
||||
)
|
||||
if file_path:
|
||||
# 根据文件扩展名选择导出方法
|
||||
file_ext = os.path.splitext(file_path[0])[1].lower()
|
||||
if file_ext == ".fbx":
|
||||
cmds.file(file_path[0], force=True, options="v=0;", type="FBX export", pr=True, ea=True)
|
||||
elif file_ext == ".obj":
|
||||
cmds.file(file_path[0], force=True, options="groups=1;ptgroups=1;materials=1;smoothing=1;normals=1", type="OBJexport", pr=True, ea=True)
|
||||
else: # .ma or .mb
|
||||
cmds.file(file_path[0], force=True, type="mayaAscii" if file_ext == ".ma" else "mayaBinary", pr=True, ea=True)
|
||||
print(f"文件已导出: {file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"导出文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def save_file():
|
||||
"""
|
||||
保存文件
|
||||
"""
|
||||
print("保存文件")
|
||||
try:
|
||||
current_file = cmds.file(q=True, sceneName=True)
|
||||
if current_file:
|
||||
cmds.file(save=True)
|
||||
print(f"文件已保存: {current_file}")
|
||||
else:
|
||||
file_path = cmds.fileDialog2(
|
||||
fileFilter="Maya ASCII (*.ma);;Maya Binary (*.mb)",
|
||||
dialogStyle=2,
|
||||
fileMode=0
|
||||
)
|
||||
if file_path:
|
||||
file_ext = os.path.splitext(file_path[0])[1].lower()
|
||||
file_type = "mayaAscii" if file_ext == ".ma" else "mayaBinary"
|
||||
cmds.file(rename=file_path[0])
|
||||
cmds.file(save=True, type=file_type)
|
||||
print(f"文件已保存: {file_path[0]}")
|
||||
except Exception as e:
|
||||
print(f"保存文件时出错: {e}")
|
||||
return True
|
||||
|
||||
def show_user_info():
|
||||
"""
|
||||
显示用户信息
|
||||
"""
|
||||
print("显示用户信息")
|
||||
# 这里实现显示用户信息的功能
|
||||
return True
|
||||
|
||||
def show_help():
|
||||
"""
|
||||
显示帮助信息
|
||||
"""
|
||||
print("显示帮助信息")
|
||||
try:
|
||||
if hasattr(config, "TOOL_HELP_URL") and config.TOOL_HELP_URL:
|
||||
webbrowser.open(config.TOOL_HELP_URL)
|
||||
else:
|
||||
cmds.confirmDialog(
|
||||
title=LANG.get("help", "帮助"),
|
||||
message=LANG.get("help_not_available", "帮助文档暂不可用"),
|
||||
button=[LANG.get("ok", "确定")],
|
||||
defaultButton=LANG.get("ok", "确定")
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"显示帮助信息时出错: {e}")
|
||||
return True
|
||||
|
||||
def show_settings():
|
||||
"""
|
||||
显示设置
|
||||
"""
|
||||
print("显示设置")
|
||||
# 这里实现显示设置的功能
|
||||
return True
|
||||
|
||||
def print_file():
|
||||
"""
|
||||
打印文件
|
||||
"""
|
||||
print("打印文件")
|
||||
# 这里实现打印文件的功能
|
||||
return True
|
||||
|
||||
# 第二行按钮功能
|
||||
def change_view(view_type):
|
||||
"""
|
||||
切换视图类型
|
||||
"""
|
||||
print(f"切换到{view_type}视图")
|
||||
# 这里实现切换视图的功能
|
||||
return True
|
||||
|
||||
def model_changed(index):
|
||||
"""
|
||||
模型选择改变
|
||||
"""
|
||||
print(f"模型选择改变: {index}")
|
||||
# 这里实现模型选择改变的功能
|
||||
return True
|
||||
|
||||
# 保留原来的函数作为兼容性考虑
|
||||
def toolbar_temp_utils_function():
|
||||
"""
|
||||
Placeholder function for toolbar module
|
||||
|
Reference in New Issue
Block a user