From bd7a18a917812194b5c6971ad4a13af725172188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=A8=AA?= <2938139566@qq.com> Date: Thu, 18 Sep 2025 10:51:50 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E7=A2=B0=E6=92=9E=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E4=BF=9D=E5=AD=98=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/property_panel.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/ui/property_panel.py b/ui/property_panel.py index 4903b708..d73175b1 100644 --- a/ui/property_panel.py +++ b/ui/property_panel.py @@ -14,7 +14,7 @@ from direct.actor.Actor import Actor from direct.gui import DirectGui from idna import check_label from jinja2.compiler import has_safe_repr -from panda3d.core import Vec3, Vec4, transpose, TransparencyAttrib, PartGroup, ColorAttrib, NodePath +from panda3d.core import Vec3, Vec4, transpose, TransparencyAttrib, PartGroup, ColorAttrib, NodePath, Point3 from scene import util from direct.gui.DirectGui import DirectLabel, DirectFrame from panda3d.core import TextNode @@ -179,6 +179,9 @@ class PropertyPanelManager: self._propertyLayout.addStretch() + # 重置碰撞相关标志,确保下次选择时正常显示 + self._just_added_collision = False + # 强制更新布局 if self._propertyLayout: self._propertyLayout.update() @@ -564,6 +567,19 @@ class PropertyPanelManager: if hasattr(self, '_current_info_panel'): del self._current_info_panel + # 清理碰撞相关控件引用 + collision_controls = [ + 'collision_status_text', 'collision_shape_combo', 'collision_shape_label', + 'collision_visibility_button', 'collision_button', 'collision_layout', 'collision_group', + 'collision_pos_x', 'collision_pos_y', 'collision_pos_z', + 'collision_radius', 'collision_width', 'collision_length', 'collision_height', + 'collision_capsule_radius', 'collision_capsule_height', + 'collision_normal_x', 'collision_normal_y', 'collision_normal_z' + ] + for name in collision_controls: + if hasattr(self, name): + delattr(self, name) + # 清理其他可能的控件引用 other_controls = ['scale_x', 'scale_y', 'scale_z', 'pos_x', 'pos_y', 'pos_z'] for name in other_controls: @@ -8762,7 +8778,7 @@ except Exception as e: # 清理之前的参数控件 self._clearCollisionParameterControls() - # 隐藏显示/隐藏按钮 + # 隐藏显示/隐藏按钮(如果存在) if hasattr(self, 'collision_visibility_button'): self.collision_visibility_button.setVisible(False) @@ -8775,6 +8791,8 @@ except Exception as e: except Exception as e: print(f"创建碰撞面板失败: {e}") + import traceback + traceback.print_exc() def _addCollisionParameterControls(self, model, layout, start_row, shape_type): """添加碰撞参数调整控件"""