From cea4964b3f05e2987bcb792ee9530136ee953cc1 Mon Sep 17 00:00:00 2001 From: Jeffreytsai1004 Date: Tue, 11 Feb 2025 02:11:53 +0800 Subject: [PATCH] Update meshes.py --- scripts/ui/meshes.py | 182 ++++++++++++++++++++++--------------------- 1 file changed, 94 insertions(+), 88 deletions(-) diff --git a/scripts/ui/meshes.py b/scripts/ui/meshes.py index ffb1189..aea3e35 100644 --- a/scripts/ui/meshes.py +++ b/scripts/ui/meshes.py @@ -110,8 +110,8 @@ class MeshesTab(QtWidgets.QWidget): # === 顶部工具栏 === self.toolbar = QtWidgets.QWidget() toolbar_layout = QtWidgets.QHBoxLayout(self.toolbar) - toolbar_layout.setContentsMargins(0, 0, 0, 0) - toolbar_layout.setSpacing(0) + toolbar_layout.setContentsMargins(4, 4, 4, 4) + toolbar_layout.setSpacing(4) # Meta-Human下拉框 self.preset_combo = QtWidgets.QComboBox() @@ -119,7 +119,7 @@ class MeshesTab(QtWidgets.QWidget): self.preset_combo.setFixedWidth(120) # 删除按钮移到LOD页面的功能按钮区域 - toolbar_layout.addStretch(0) + toolbar_layout.addStretch() # === 中间内容区 === self.content = QtWidgets.QWidget() @@ -183,7 +183,7 @@ class MeshesTab(QtWidgets.QWidget): # 创建功能按钮 load_btn = self._create_tool_button("自动加载模型", "load_meshes.png", "fileOpen.png") standardize_btn = self._create_tool_button("标准化命名", "standardized_naming.png", "setEdNormalize.png") - group_btn = self._create_tool_button("自动分组", "automatic_groupingg.png", "menuIconEdit.png") + group_btn = self._create_tool_button("自动分组", "automatic_grouping.png", "menuIconEdit.png") delete_btn = self._create_tool_button("清理", "delete.png", "delete.png") # 统一按钮高度 @@ -283,24 +283,19 @@ class MeshesTab(QtWidgets.QWidget): add_btn.setStyleSheet(""" QPushButton { background: #232323; - border: 2px solid #444444; - border-radius: 5px; + border: 2px solid #444444; /* 调整边框颜色 */ + border-radius: 5px; /* 减小圆角 */ padding: 2px 4px; color: #CCCCCC; - text-align: center; + text-align: center; /* 居中对齐 */ } QPushButton:hover { - background: #2A2A2A; - border: 2px solid #555555; + background: #454545; + border: 1px solid #555555; } QPushButton:pressed { - background: #1D1D1D; - border: 2px solid #666666; - } - QPushButton:disabled { - background: #1D1D1D; - border: 2px solid #333333; - color: #666666; + background: #2A2A2A; + border: 1px solid #666666; } """) @@ -314,37 +309,35 @@ class MeshesTab(QtWidgets.QWidget): """创建工具按钮""" btn = QtWidgets.QPushButton(text) - # 设置图标 + # 尝试使用自定义图标,如果失败则使用Maya内置图标 icon_path = f"{config.ICONS_PATH}/{icon_name}" + print(f"尝试加载图标: {icon_path}") # 添加调试输出 + if os.path.exists(icon_path): btn.setIcon(QtGui.QIcon(icon_path)) + print(f"成功加载自定义图标: {icon_path}") elif fallback_icon: btn.setIcon(QtGui.QIcon(f":{fallback_icon}")) + print(f"使用Maya内置图标: {fallback_icon}") + else: + print(f"未能找到图标: {icon_path}") - # 统一按钮样式 - btn.setFixedHeight(24) # 统一按钮高度为24px btn.setStyleSheet(""" QPushButton { - background: #232323; - border: 2px solid #444444; - border-radius: 5px; - padding: 2px 4px; + background: #3D3D3D; + border: 1px solid #555555; + border-radius: 2px; + padding: 4px 8px; color: #CCCCCC; - text-align: center; + text-align: left; icon-size: 16px; + min-height: 32px; # 统一按钮高度 } QPushButton:hover { - background: #2A2A2A; - border: 2px solid #555555; + background: #454545; } QPushButton:pressed { - background: #1D1D1D; - border: 2px solid #666666; - } - QPushButton:disabled { - background: #1D1D1D; - border: 2px solid #333333; - color: #666666; + background: #2A2A2A; } """) return btn @@ -353,61 +346,38 @@ class MeshesTab(QtWidgets.QWidget): """创建底部工具栏""" # === Widget === widget = QtWidgets.QWidget() - widget.setFixedHeight(160) # 减小总高度 + widget.setFixedHeight(180) # 增加高度 # === Main Layout === layout = QtWidgets.QVBoxLayout(widget) - layout.setContentsMargins(8, 4, 8, 8) # 上边距小一些 - layout.setSpacing(8) # 主布局间距 + layout.setContentsMargins(8, 8, 8, 8) # 增加边距 + layout.setSpacing(8) # === 第一行工具栏 - 预设和LOD === first_row = QtWidgets.QWidget() first_layout = QtWidgets.QHBoxLayout(first_row) first_layout.setContentsMargins(4, 0, 4, 0) - first_layout.setSpacing(8) + first_layout.setSpacing(4) # 预设名称 self.preset_label = QtWidgets.QLabel("预设名称:") self.preset_name_combo = QtWidgets.QComboBox() self.preset_name_combo.addItem("Meta-Human") self.preset_name_combo.setFixedWidth(150) - self.preset_name_combo.setFixedHeight(24) # 设置为与模型分离按钮相同的高度 - + self.preset_name_combo.setFixedHeight(32) # 设置为与模型分离按钮相同的高度 + # 选择LOD self.lod_label = QtWidgets.QLabel("选择LOD:") self.lod_combo = QtWidgets.QComboBox() self.lod_combo.addItems(["全部"] + [f"LOD{i}" for i in range(8)]) self.lod_combo.setFixedWidth(100) - self.lod_combo.setFixedHeight(24) # 设置为与模型分离按钮相同的高度 + self.lod_combo.setFixedHeight(32) # 设置为与模型分离按钮相同的高度 # 创建LOD按钮 self.create_lod_btn = QtWidgets.QPushButton() self.create_lod_btn.setIcon(QtGui.QIcon(f"{config.ICONS_PATH}/create_lod.png")) self.create_lod_btn.setText("创建LOD") - self.create_lod_btn.setFixedHeight(24) - self.create_lod_btn.setStyleSheet(""" - QPushButton { - background: #232323; - border: 2px solid #444444; - border-radius: 5px; - padding: 4px 8px; - color: #CCCCCC; - text-align: center; - } - QPushButton:hover { - background: #2A2A2A; - border: 2px solid #555555; - } - QPushButton:pressed { - background: #1D1D1D; - border: 2px solid #666666; - } - QPushButton:disabled { - background: #1D1D1D; - border: 2px solid #333333; - color: #666666; - } - """) + self.create_lod_btn.setFixedHeight(32) # 设置为与模型分离按钮相同的高度 first_layout.addWidget(self.preset_label) first_layout.addWidget(self.preset_name_combo) @@ -420,42 +390,78 @@ class MeshesTab(QtWidgets.QWidget): buttons_widget = QtWidgets.QWidget() buttons_layout = QtWidgets.QVBoxLayout(buttons_widget) buttons_layout.setContentsMargins(4, 4, 4, 4) - buttons_layout.setSpacing(4) # 统一行间距 + buttons_layout.setSpacing(8) # 创建按钮行 - for row_buttons in [ - [self.separate_btn, self.face_accessory_btn], - [self.fix_normal_btn, self.fix_vertex_order_btn], - [self.fix_seam_btn] - ]: - row = QtWidgets.QWidget() - row_layout = QtWidgets.QHBoxLayout(row) - row_layout.setContentsMargins(0, 0, 0, 0) - row_layout.setSpacing(4) # 统一按钮间距 - - # 添加按钮到行 - row_layout.addStretch(1) - for btn in row_buttons: - row_layout.addWidget(btn) - if btn != row_buttons[-1]: # 最后一个按钮后不添加间距 - row_layout.addSpacing(4) - row_layout.addStretch(1) - - buttons_layout.addWidget(row) + 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", "polySplitVertex.png") + self.face_accessory_btn = self._create_tool_button("生成面部配件", "supplement_meshes.png", "polyCreateFacet.png") + self.fix_normal_btn = self._create_tool_button("修复法线", "repair_normals.png", "polyNormal.png") + self.fix_vertex_order_btn = self._create_tool_button("修复点序", "repair_vertex_order.png", "polyNormalPerVertex.png") + self.fix_seam_btn = self._create_tool_button("修复接缝", "fix_seam.png", "polyChipOff.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]: + button_width = (widget.width() - 24) // 2 # 24是左右边距和按钮间距(8)的总和 + 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 + def _adjust_button_widths(self, event, buttons): + """调整按钮宽度以适应窗口大小""" + width = event.size().width() + button_width = (width - 24) // 2 # 24是左右边距和按钮间距(8)的总和 + for btn in buttons: + btn.setFixedWidth(button_width) + def _setup_style(self): """设置样式""" # 工具栏样式