ui替换
This commit is contained in:
parent
99d4979af8
commit
385103e252
@ -630,7 +630,7 @@ class CoreWorld(Meta3DWorld):
|
||||
if hasattr(self, 'win') and self.win:
|
||||
width = self.win.getXSize()
|
||||
height = self.win.getYSize()
|
||||
print(f"从Panda3D窗口获取尺寸!!!!!!!!!!!!!!!!!!!!!: {width} x {height}")
|
||||
# print(f"从Panda3D窗口获取尺寸!!!!!!!!!!!!!!!!!!!!!: {width} x {height}")
|
||||
return width, height
|
||||
|
||||
# 最后的默认值
|
||||
|
||||
78
demo.py
78
demo.py
@ -830,14 +830,14 @@ class MyWorld(CoreWorld):
|
||||
imgui.menu_item("材质编辑器", "", False, True)
|
||||
imgui.menu_item("脚本编辑器", "", False, True)
|
||||
|
||||
# 窗口菜单
|
||||
with imgui_ctx.begin_menu("窗口") as window_menu:
|
||||
if window_menu:
|
||||
_, self.showDemoWindow = imgui.menu_item("ImGui演示", "", self.showDemoWindow, True)
|
||||
if self.testTexture:
|
||||
imgui.menu_item("关闭纹理测试", "", False, True)
|
||||
else:
|
||||
imgui.menu_item("显示纹理测试", "", False, True)
|
||||
# 窗口菜单 - 已隐藏
|
||||
# with imgui_ctx.begin_menu("窗口") as window_menu:
|
||||
# if window_menu:
|
||||
# _, self.showDemoWindow = imgui.menu_item("ImGui演示", "", self.showDemoWindow, True)
|
||||
# if self.testTexture:
|
||||
# imgui.menu_item("关闭纹理测试", "", False, True)
|
||||
# else:
|
||||
# imgui.menu_item("显示纹理测试", "", False, True)
|
||||
|
||||
# 帮助菜单
|
||||
with imgui_ctx.begin_menu("帮助") as help_menu:
|
||||
@ -5076,7 +5076,7 @@ class MyWorld(CoreWorld):
|
||||
self.clipboard_mode = "cut"
|
||||
|
||||
# 删除原节点
|
||||
self.scene_manager.deleteNode(selected_node)
|
||||
self._delete_node(selected_node)
|
||||
self.selection.clearSelection()
|
||||
|
||||
self.add_success_message(f"已剪切节点: {node_name}")
|
||||
@ -5145,7 +5145,7 @@ class MyWorld(CoreWorld):
|
||||
|
||||
# 删除节点
|
||||
if hasattr(self, 'scene_manager') and self.scene_manager:
|
||||
self.scene_manager.deleteNode(selected_node)
|
||||
self._delete_node(selected_node)
|
||||
self.selection.clearSelection()
|
||||
self.add_success_message(f"已删除节点: {node_name}")
|
||||
else:
|
||||
@ -5153,6 +5153,64 @@ class MyWorld(CoreWorld):
|
||||
except Exception as e:
|
||||
self.add_error_message(f"删除操作失败: {e}")
|
||||
|
||||
def _delete_node(self, node):
|
||||
"""删除节点的通用方法"""
|
||||
try:
|
||||
if not node or node.isEmpty():
|
||||
return False
|
||||
|
||||
node_name = node.getName() or "未命名节点"
|
||||
|
||||
# 从场景管理器的模型列表中移除(如果是模型)
|
||||
if hasattr(self, 'scene_manager') and self.scene_manager:
|
||||
if node in self.scene_manager.models:
|
||||
self.scene_manager.models.remove(node)
|
||||
print(f"[场景管理器] 从模型列表移除: {node_name}")
|
||||
|
||||
# 停止所有与该节点相关的脚本
|
||||
if hasattr(self, 'script_manager') and self.script_manager:
|
||||
try:
|
||||
# 移除该节点上的所有脚本
|
||||
if node in self.script_manager.object_scripts:
|
||||
del self.script_manager.object_scripts[node]
|
||||
print(f"[脚本系统] 移除节点 {node_name} 的所有脚本")
|
||||
except Exception as e:
|
||||
print(f"[脚本系统] 移除脚本失败: {e}")
|
||||
|
||||
# 清理碰撞体
|
||||
if hasattr(self, 'collision_manager') and self.collision_manager:
|
||||
try:
|
||||
self.collision_manager.remove_collision_for_node(node)
|
||||
print(f"[碰撞系统] 移除节点 {node_name} 的碰撞体")
|
||||
except Exception as e:
|
||||
print(f"[碰撞系统] 移除碰撞体失败: {e}")
|
||||
|
||||
# 清理Actor缓存(如果有动画)
|
||||
if hasattr(self, '_actor_cache') and node in self._actor_cache:
|
||||
actor = self._actor_cache[node]
|
||||
try:
|
||||
# 清理相关任务
|
||||
taskMgr.remove(f"maintain_anim_pos_{id(actor)}")
|
||||
# 清理Actor
|
||||
if not actor.isEmpty():
|
||||
actor.cleanup()
|
||||
actor.removeNode()
|
||||
print(f"[动画系统] 清理节点 {node_name} 的Actor缓存")
|
||||
except Exception as e:
|
||||
print(f"[动画系统] 清理Actor缓存失败: {e}")
|
||||
finally:
|
||||
del self._actor_cache[node]
|
||||
|
||||
# 从父节点中移除
|
||||
node.removeNode()
|
||||
|
||||
print(f"[删除] 成功删除节点: {node_name}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"[删除] 删除节点失败: {e}")
|
||||
return False
|
||||
|
||||
# ==================== 对话框绘制函数 ====================
|
||||
|
||||
def _draw_new_project_dialog(self):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user