This commit is contained in:
Jeffreytsai1004 2025-02-10 00:59:57 +08:00
parent 693a9663b9
commit b755d26810
4 changed files with 448 additions and 199 deletions

View File

@ -281,72 +281,19 @@ Reference\UI\17_Definitions.jpg
- LOD6: ["头部", "牙齿", "左眼", "右眼"] - LOD6: ["头部", "牙齿", "左眼", "右眼"]
- LOD7: ["头部", "牙齿", "左眼", "右眼"] - LOD7: ["头部", "牙齿", "左眼", "右眼"]
####### 功能按钮 ####### 功能按钮 是在LOD0-LOD7中的底部
1. 自动选择模型 自动加载模型icons\load_meshes.png标准化命名icons\standardize_name.png自动分组icons\auto_group.png
- 功能根据当前LOD级别自动选择对应的模型组件
- 使用场景快速选择特定LOD级别下的所有相关模型
2. 标准化命名
- 功能:将选中模型重命名为标准命名格式
- 使用场景:确保模型命名符合项目规范
3. 自动分组
- 功能:根据模型类型自动创建和整理分组
- 使用场景:快速组织和管理模型层级结构
####### 工具栏功能 ####### 工具栏功能
1. 模型显示控制 第一行:拓扑结构(下拉框,默认MetaHuman选择LOD下拉框默认LOD0LOD1~LOD7创建LODicons\create_lod.png
- 切换模型显示/隐藏
- 透明度调节
- 线框模式切换
2. LOD选择工具 第二行模型分离icons\separate.png生成面部配件icons\face_accessory.png
- LOD级别快速切换
- 多级别对比视图
- 模型细节程度预览
3. 辅助功能 第三行修复法线icons\fix_normal.png修复点序icons\fix_vertex_order.png
- 模型分离与合并
- 顶点/面数统计
- 模型检查与修复
####### 右侧工具面板 第四行修复接缝icons\fix_seam.png
1. 添加功能
- 为每个模型类别提供快速添加功能
- 支持拖拽导入
- 批量导入支持
2. 模型属性编辑
- 材质分配
- UV设置
- 变形器设置
3. 高级功能
- 模型优化建议
- LOD自动生成
- 网格简化工具
####### 注意事项
1. 模型命名规则
- 所有模型必须遵循标准命名规范
- LOD0级别模型名称前需添加"*"标记
- 确保命名无特殊字符
2. 模型层级要求
- 保持正确的层级关系
- 避免深层嵌套
- 确保正确的父子关系
3. 性能优化建议
- 根据实际需求选择合适的LOD级别
- 注意模型面数控制
- 合理使用材质和贴图
###### 2. 绑定视图 (Rigging)
####### DNA预设浏览器 ####### DNA预设浏览器

View File

@ -19,8 +19,8 @@ class MetaFusion(QtWidgets.QMainWindow):
# === 设置窗口属性 === # === 设置窗口属性 ===
self.setWindowTitle(f"{config.TOOL_NAME} {config.TOOL_VERSION}") self.setWindowTitle(f"{config.TOOL_NAME} {config.TOOL_VERSION}")
# 设置初始大小和最小大小 # 设置初始大小和最小大小
self.resize(550, 700) # 初始大小 self.resize(550, 900) # 初始大小
self.setMinimumSize(550, 700) # 最小大小限制 self.setMinimumSize(550, 900) # 最小大小限制
# === 创建中心部件 === # === 创建中心部件 ===
self.central_widget = QtWidgets.QWidget() self.central_widget = QtWidgets.QWidget()

View File

@ -9,7 +9,9 @@ import webbrowser
import datetime import datetime
import sys import sys
import os import os
__version__ = "2.1.1" __version__ = "2.1.1"
# Base Information # Base Information
TOOL_NAME = str("MetaFusion") TOOL_NAME = str("MetaFusion")
TOOL_VERSION = str("Beta v1.0.0") TOOL_VERSION = str("Beta v1.0.0")

View File

@ -31,6 +31,83 @@ except ImportError:
QtCore = QtGui = QtWidgets = None QtCore = QtGui = QtWidgets = None
wrapInstance = None wrapInstance = None
class MeshItem(QtWidgets.QWidget):
"""单个网格项控件"""
def __init__(self, mesh_name, parent=None):
super(MeshItem, self).__init__(parent)
self._setup_ui(mesh_name)
self._create_connections()
def _setup_ui(self, mesh_name):
"""设置UI布局"""
# === Main Layout ===
self.main_layout = QtWidgets.QHBoxLayout(self)
self.main_layout.setContentsMargins(2, 2, 2, 2)
self.main_layout.setSpacing(4)
# === Widgets ===
# 网格名称标签
self.name_label = QtWidgets.QLabel(mesh_name)
self.name_label.setMinimumWidth(100)
# 网格路径输入框
self.path_edit = QtWidgets.QLineEdit()
self.path_edit.setReadOnly(True)
# 添加按钮
self.add_btn = QtWidgets.QPushButton("添加...")
self.add_btn.setFixedWidth(60)
# === Layout ===
self.main_layout.addWidget(self.name_label)
self.main_layout.addWidget(self.path_edit)
self.main_layout.addWidget(self.add_btn)
# === Style ===
self._setup_style()
def _setup_style(self):
"""设置样式"""
self.setStyleSheet("""
QWidget {
background: #2D2D2D;
}
QLabel {
color: #CCCCCC;
font-size: 12px;
}
QLineEdit {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px 8px;
color: #CCCCCC;
}
QPushButton {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px 12px;
color: #CCCCCC;
min-width: 60px;
}
QPushButton:hover {
background: #454545;
}
QPushButton:pressed {
background: #2A2A2A;
}
""")
def _create_connections(self):
"""创建信号连接"""
self.add_btn.clicked.connect(self._on_add_clicked)
def _on_add_clicked(self):
"""添加按钮点击"""
# TODO: 实现添加逻辑
pass
class MeshesTab(QtWidgets.QWidget): class MeshesTab(QtWidgets.QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super(MeshesTab, self).__init__(parent) super(MeshesTab, self).__init__(parent)
@ -41,213 +118,436 @@ class MeshesTab(QtWidgets.QWidget):
"""设置UI布局""" """设置UI布局"""
# === Main Layout === # === Main Layout ===
self.main_layout = QtWidgets.QVBoxLayout(self) self.main_layout = QtWidgets.QVBoxLayout(self)
self.main_layout.setContentsMargins(2, 2, 2, 2) self.main_layout.setContentsMargins(0, 0, 0, 0)
self.main_layout.setSpacing(2) self.main_layout.setSpacing(0)
# 创建各个部件 # === 顶部工具栏 ===
self.toolbar_widget = self._create_toolbar() self.toolbar = QtWidgets.QWidget()
self.lod_tab_widget = self._create_lod_tabs() toolbar_layout = QtWidgets.QHBoxLayout(self.toolbar)
self.bottom_toolbar_widget = self._create_bottom_toolbar() toolbar_layout.setContentsMargins(4, 4, 4, 4)
toolbar_layout.setSpacing(4)
# 添加到主布局 # Meta-Human下拉框
self.main_layout.addWidget(self.toolbar_widget)
self.main_layout.addWidget(self.lod_tab_widget)
self.main_layout.addWidget(self.bottom_toolbar_widget)
def _create_toolbar(self):
"""创建顶部工具栏"""
# === Widget ===
widget = QtWidgets.QWidget()
# === Layout ===
layout = QtWidgets.QHBoxLayout(widget)
layout.setContentsMargins(2, 2, 2, 2)
layout.setSpacing(2)
# 预设下拉框
self.preset_combo = QtWidgets.QComboBox() self.preset_combo = QtWidgets.QComboBox()
self.preset_combo.addItem("MetaHuman") self.preset_combo.addItem("Meta-Human")
layout.addWidget(self.preset_combo) self.preset_combo.setFixedWidth(120)
# 垃圾桶按钮 # 删除按钮移到LOD页面的功能按钮区域
self.trash_btn = QtWidgets.QPushButton() toolbar_layout.addStretch()
self.trash_btn.setIcon(QtGui.QIcon(f"{config.ICONS_PATH}/trash.png"))
self.trash_btn.setFixedSize(24, 24)
layout.addWidget(self.trash_btn)
layout.addStretch() # === 中间内容区 ===
self.content = QtWidgets.QWidget()
content_layout = QtWidgets.QVBoxLayout(self.content)
content_layout.setContentsMargins(0, 0, 0, 0)
content_layout.setSpacing(0)
return widget # LOD标签页
self.lod_tabs = QtWidgets.QTabWidget()
def _create_lod_tabs(self):
"""创建LOD选项卡"""
# === Widget ===
self.lod_tab = QtWidgets.QTabWidget()
# 添加LOD页面
for i in range(8): for i in range(8):
lod_widget = self._create_lod_page(i) tab = self._create_lod_page(i)
self.lod_tab.addTab(lod_widget, f"LOD{i}") self.lod_tabs.addTab(tab, f"LOD{i}")
return self.lod_tab content_layout.addWidget(self.lod_tabs)
# === 底部工具栏 ===
self.bottom_toolbar = self._create_bottom_toolbar()
# === 添加到主布局 ===
self.main_layout.addWidget(self.toolbar)
self.main_layout.addWidget(self.content)
self.main_layout.addWidget(self.bottom_toolbar)
# === 设置样式 ===
self._setup_style()
def _create_lod_page(self, lod_index): def _create_lod_page(self, lod_index):
"""创建单个LOD页面""" """创建单个LOD页面"""
# === Widget === # === Widget ===
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
# === Layout === # === Main Layout ===
layout = QtWidgets.QVBoxLayout(widget) layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5) layout.setContentsMargins(8, 8, 8, 8)
layout.setSpacing(2) layout.setSpacing(12) # 增加间距
# 创建网格列表 # === 网格列表区域 ===
scroll_area = QtWidgets.QScrollArea() scroll = QtWidgets.QScrollArea()
scroll_area.setWidgetResizable(True) scroll.setWidgetResizable(True)
scroll_widget = QtWidgets.QWidget() scroll.setFrameShape(QtWidgets.QFrame.NoFrame)
scroll_layout = QtWidgets.QVBoxLayout(scroll_widget)
# 获取当前LOD级别的网格列表 content = QtWidgets.QWidget()
content_layout = QtWidgets.QVBoxLayout(content)
content_layout.setContentsMargins(0, 0, 0, 0)
content_layout.setSpacing(2) # 调整项目间距
# 创建网格项
meshes = config.LOD_MESHES[f"LOD{lod_index}"] meshes = config.LOD_MESHES[f"LOD{lod_index}"]
self.mesh_items = [] # 存储所有mesh item的引用
for mesh in meshes: for mesh in meshes:
mesh_item = self._create_mesh_item(mesh) item = self._create_mesh_item(mesh)
scroll_layout.addWidget(mesh_item) content_layout.addWidget(item)
self.mesh_items.append(mesh_item)
scroll_layout.addStretch() content_layout.addStretch()
scroll_area.setWidget(scroll_widget) scroll.setWidget(content)
layout.addWidget(scroll_area)
# 添加底部按钮 # === 底部功能按钮 ===
button_widget = QtWidgets.QWidget() buttons = QtWidgets.QWidget()
button_layout = QtWidgets.QHBoxLayout(button_widget) button_layout = QtWidgets.QHBoxLayout(buttons)
button_layout.setContentsMargins(0, 0, 0, 0) button_layout.setContentsMargins(0, 8, 0, 8)
button_layout.setSpacing(12)
self.auto_select_btn = QtWidgets.QPushButton("自动选择模型") # 创建功能按钮
self.standardize_btn = QtWidgets.QPushButton("标准化命名") load_btn = self._create_tool_button("自动加载模型", "load_meshes.png", "fileOpen.png")
self.auto_group_btn = QtWidgets.QPushButton("自动分组") standardize_btn = self._create_tool_button("标准化命名", "standardize_name.png", "setEdNormalize.png")
group_btn = self._create_tool_button("自动分组", "auto_group.png", "menuIconEdit.png")
delete_btn = self._create_tool_button("清理", "delete.png", "delete.png")
button_layout.addWidget(self.auto_select_btn) # 设置按钮固定宽度
button_layout.addWidget(self.standardize_btn) button_width = (widget.width() - 36) // 4 # 调整宽度以适应四个按钮
button_layout.addWidget(self.auto_group_btn) for btn in [load_btn, standardize_btn, group_btn, delete_btn]:
btn.setFixedWidth(button_width)
button_layout.addWidget(btn)
layout.addWidget(button_widget) # === 添加到主布局 ===
layout.addWidget(scroll)
layout.addWidget(buttons)
return widget return widget
def _create_mesh_item(self, mesh_name): def _create_mesh_item(self, mesh_name):
"""创建单个网格项""" """创建网格项"""
# === Widget === item = QtWidgets.QWidget()
widget = QtWidgets.QWidget() layout = QtWidgets.QHBoxLayout(item)
layout.setContentsMargins(4, 4, 4, 4)
# === Layout === layout.setSpacing(8)
layout = QtWidgets.QHBoxLayout(widget)
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(2)
# 网格名称标签 # 网格名称标签
label = QtWidgets.QLabel(mesh_name) name_label = QtWidgets.QLabel(mesh_name)
label.setFixedWidth(80) name_label.setMinimumWidth(100)
layout.addWidget(label)
# 网格路径输入框 # 网格路径输入框 - 可编辑
path_edit = QtWidgets.QLineEdit() path_edit = QtWidgets.QLineEdit()
layout.addWidget(path_edit) path_edit.setPlaceholderText("输入或选择模型路径...")
# 添加按钮 # 添加按钮
add_btn = QtWidgets.QPushButton("添加...") add_btn = QtWidgets.QPushButton()
add_btn.setFixedWidth(60) add_btn.setIcon(QtGui.QIcon(":fileOpen.png")) # 使用Maya内置图标
add_btn.setToolTip("浏览...")
add_btn.setFixedSize(28, 28)
layout.addWidget(name_label)
layout.addWidget(path_edit)
layout.addWidget(add_btn) layout.addWidget(add_btn)
return widget # 设置样式
item.setStyleSheet("""
QWidget {
background: #2D2D2D;
}
QLabel {
color: #CCCCCC;
font-size: 12px;
}
QLineEdit {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px 8px;
color: #CCCCCC;
}
QLineEdit:hover {
border: 1px solid #666666;
}
QLineEdit:focus {
border: 1px solid #777777;
background: #404040;
}
QPushButton {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
}
QPushButton:hover {
background: #454545;
}
QPushButton:pressed {
background: #2A2A2A;
}
""")
return item
def _create_tool_button(self, text, icon_name, fallback_icon=None):
"""创建工具按钮"""
btn = QtWidgets.QPushButton(text)
# 尝试使用自定义图标如果失败则使用Maya内置图标
icon_path = f"{config.ICONS_PATH}/{icon_name}"
if os.path.exists(icon_path):
btn.setIcon(QtGui.QIcon(icon_path))
elif fallback_icon:
btn.setIcon(QtGui.QIcon(f":{fallback_icon}"))
btn.setStyleSheet("""
QPushButton {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px 8px;
color: #CCCCCC;
text-align: left;
icon-size: 16px;
min-height: 32px; # 统一按钮高度
}
QPushButton:hover {
background: #454545;
}
QPushButton:pressed {
background: #2A2A2A;
}
""")
return btn
def _create_bottom_toolbar(self): def _create_bottom_toolbar(self):
"""创建底部工具栏""" """创建底部工具栏"""
# === Widget === # === Widget ===
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
widget.setFixedHeight(180) # 增加高度
# === Layout === # === Main Layout ===
layout = QtWidgets.QHBoxLayout(widget) layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(5, 5, 5, 5) layout.setContentsMargins(8, 8, 8, 8) # 增加边距
layout.setSpacing(5) layout.setSpacing(8)
# 预设选择 # === 第一行工具栏 - 预设和LOD ===
preset_label = QtWidgets.QLabel("预设:") first_row = QtWidgets.QWidget()
self.preset_combo_bottom = QtWidgets.QComboBox() first_layout = QtWidgets.QHBoxLayout(first_row)
self.preset_combo_bottom.addItem("MetaHuman") first_layout.setContentsMargins(4, 0, 4, 0)
first_layout.setSpacing(4)
# LOD选择 # 预设名称
lod_label = QtWidgets.QLabel("选择LOD:") self.preset_label = QtWidgets.QLabel("预设名称:")
self.preset_name_combo = QtWidgets.QComboBox()
self.preset_name_combo.addItem("Meta-Human")
self.preset_name_combo.setFixedWidth(150)
# 选择LOD
self.lod_label = QtWidgets.QLabel("选择LOD:")
self.lod_combo = QtWidgets.QComboBox() self.lod_combo = QtWidgets.QComboBox()
self.lod_combo.addItem("全部") self.lod_combo.addItems(["全部"] + [f"LOD{i}" for i in range(8)])
self.lod_combo.setFixedWidth(100)
# 功能按钮 # 创建LOD按钮
self.create_lod_btn = QtWidgets.QPushButton("生成当前LOD") self.create_lod_btn = QtWidgets.QPushButton()
self.modify_btn = QtWidgets.QPushButton("修复线性") self.create_lod_btn.setIcon(QtGui.QIcon(f"{config.ICONS_PATH}/create_lod.png"))
self.save_btn = QtWidgets.QPushButton("修复存储") self.create_lod_btn.setText("生成当前LOD")
# 添加到布局 first_layout.addWidget(self.preset_label)
layout.addWidget(preset_label) first_layout.addWidget(self.preset_name_combo)
layout.addWidget(self.preset_combo_bottom) first_layout.addStretch()
layout.addStretch() first_layout.addWidget(self.lod_label)
layout.addWidget(lod_label) first_layout.addWidget(self.lod_combo)
layout.addWidget(self.lod_combo) first_layout.addWidget(self.create_lod_btn)
layout.addWidget(self.create_lod_btn)
layout.addWidget(self.modify_btn) # === 功能按钮区域 ===
layout.addWidget(self.save_btn) buttons_widget = QtWidgets.QWidget()
buttons_layout = QtWidgets.QVBoxLayout(buttons_widget)
buttons_layout.setContentsMargins(4, 4, 4, 4)
buttons_layout.setSpacing(8)
# 创建按钮行
row1 = QtWidgets.QWidget()
row1_layout = QtWidgets.QHBoxLayout(row1)
row1_layout.setContentsMargins(0, 0, 0, 0)
row1_layout.setSpacing(8)
row2 = QtWidgets.QWidget()
row2_layout = QtWidgets.QHBoxLayout(row2)
row2_layout.setContentsMargins(0, 0, 0, 0)
row2_layout.setSpacing(8)
row3 = QtWidgets.QWidget()
row3_layout = QtWidgets.QHBoxLayout(row3)
row3_layout.setContentsMargins(0, 0, 0, 0)
row3_layout.setSpacing(8)
# 创建按钮
self.separate_btn = self._create_tool_button("模型分离", "separate.png", "polyUnite.png")
self.face_accessory_btn = self._create_tool_button("生成面部配件", "face_accessory.png", "polyCreateFacet.png")
self.fix_normal_btn = self._create_tool_button("修复法线", "fix_normal.png", "polyNormal.png")
self.fix_vertex_order_btn = self._create_tool_button("修复点序", "fix_vertex_order.png", "polyNormalPerVertex.png")
self.fix_seam_btn = self._create_tool_button("修复接缝", "fix_seam.png", "polyMergeVertex.png")
# 设置按钮固定宽度
button_width = (widget.width() - 24) // 2 # 24是左右边距和按钮间距的总和
for btn in [self.separate_btn, self.face_accessory_btn,
self.fix_normal_btn, self.fix_vertex_order_btn,
self.fix_seam_btn]:
btn.setFixedWidth(button_width)
# 添加按钮到行
row1_layout.addStretch()
row1_layout.addWidget(self.separate_btn)
row1_layout.addWidget(self.face_accessory_btn)
row1_layout.addStretch()
row2_layout.addStretch()
row2_layout.addWidget(self.fix_normal_btn)
row2_layout.addWidget(self.fix_vertex_order_btn)
row2_layout.addStretch()
# 修复接缝按钮不居中
row3_layout.addWidget(self.fix_seam_btn)
row3_layout.addStretch()
# 添加行到布局
buttons_layout.addWidget(row1)
buttons_layout.addWidget(row2)
buttons_layout.addWidget(row3)
# === 添加到主布局 ===
layout.addWidget(first_row)
layout.addWidget(buttons_widget)
# 添加窗口大小变化事件处理
widget.resizeEvent = lambda event: self._adjust_button_widths(event, [
self.separate_btn, self.face_accessory_btn,
self.fix_normal_btn, self.fix_vertex_order_btn,
self.fix_seam_btn
])
return widget return widget
def _adjust_button_widths(self, event, buttons):
"""调整按钮宽度以适应窗口大小"""
width = event.size().width()
button_width = (width - 24) // 2 # 24是左右边距和按钮间距的总和
for btn in buttons:
btn.setFixedWidth(button_width)
def _setup_style(self):
"""设置样式"""
# 工具栏样式
self.toolbar.setStyleSheet("""
QWidget {
background: #2D2D2D;
}
QComboBox {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px;
color: #CCCCCC;
}
""")
# 标签页样式
self.lod_tabs.setStyleSheet("""
QTabWidget::pane {
border: none;
background: #2D2D2D;
}
QTabBar::tab {
background: #3D3D3D;
border: none;
min-width: 40px; # 减小最小宽度
padding: 4px 8px; # 减小内边距
color: #CCCCCC;
margin-right: 1px;
}
QTabBar::tab:selected {
background: #4D4D4D;
color: #FFFFFF;
}
QTabBar::tab:hover:!selected {
background: #454545;
}
QTabBar::tab:first {
margin-left: 0px;
}
""")
# 应用样式到下拉框
for combo in [self.preset_combo, self.preset_name_combo, self.lod_combo]:
combo.setStyleSheet("""
QComboBox {
background: #3D3D3D;
border: 1px solid #555555;
border-radius: 2px;
padding: 4px;
color: #CCCCCC;
}
""")
# 应用样式到标签
for label in [self.preset_label, self.lod_label]:
label.setStyleSheet("color: #CCCCCC;")
def _create_connections(self): def _create_connections(self):
"""创建信号连接""" """创建信号连接"""
# 顶部工具栏 # 顶部工具栏
self.trash_btn.clicked.connect(self._on_trash_clicked)
self.preset_combo.currentIndexChanged.connect(self._on_preset_changed) self.preset_combo.currentIndexChanged.connect(self._on_preset_changed)
# LOD页面按钮
for i in range(self.lod_tab.count()):
page = self.lod_tab.widget(i)
auto_select_btn = page.findChild(QtWidgets.QPushButton, "自动选择模型")
if auto_select_btn:
auto_select_btn.clicked.connect(self._on_auto_select)
# 底部工具栏 # 底部工具栏
self.create_lod_btn.clicked.connect(self._on_create_lod) self.create_lod_btn.clicked.connect(self._on_create_lod)
self.modify_btn.clicked.connect(self._on_modify) self.separate_btn.clicked.connect(self._on_separate)
self.save_btn.clicked.connect(self._on_save) self.face_accessory_btn.clicked.connect(self._on_face_accessory)
self.fix_normal_btn.clicked.connect(self._on_fix_normal)
def _on_trash_clicked(self): self.fix_vertex_order_btn.clicked.connect(self._on_fix_vertex_order)
"""垃圾桶按钮点击""" self.fix_seam_btn.clicked.connect(self._on_fix_seam)
# TODO: 实现清除功能
pass
# === Event Handlers ===
def _on_preset_changed(self, index): def _on_preset_changed(self, index):
"""预设改变""" """预设改变"""
# TODO: 实现预设切换 # TODO: 实现预设切换
pass pass
def _on_auto_select(self):
"""自动选择模型"""
# TODO: 实现自动选择
pass
def _on_create_lod(self): def _on_create_lod(self):
"""生成当前LOD""" """生成当前LOD"""
# TODO: 实现LOD生成 # TODO: 实现生成当前LOD
pass pass
def _on_modify(self): def _on_separate(self):
"""修复线性""" """模型分离"""
# TODO: 实现修复 # TODO: 实现模型分离
pass pass
def _on_save(self): def _on_face_accessory(self):
"""修复存储""" """生成面部配件"""
# TODO: 实现存储 # TODO: 实现生成面部配件
pass pass
def _on_fix_normal(self):
"""修复法线"""
# TODO: 实现修复法线
pass
def _on_fix_vertex_order(self):
"""修复点序"""
# TODO: 实现修复点序
pass
def _on_fix_seam(self):
"""修复接缝"""
# TODO: 实现修复接缝
pass
def _on_load_meshes(self, lod_index):
"""自动加载模型"""
# TODO: 实现自动加载模型
print(f"加载 LOD{lod_index} 的模型")
pass
def _on_standardize_names(self, lod_index):
"""标准化命名"""
# TODO: 实现标准化命名
print(f"标准化 LOD{lod_index} 的命名")
pass
def _on_auto_group(self, lod_index):
"""自动分组"""
# TODO: 实现自动分组
print(f"自动分组 LOD{lod_index}")
pass
if __name__ == "__main__": if __name__ == "__main__":
pass pass