1
0
forked from Rowland/EG

添加更多保存节点

This commit is contained in:
陈横 2025-09-11 17:03:20 +08:00
parent 6b4dcd14e6
commit ace7804578
5 changed files with 835 additions and 90 deletions

View File

@ -188,9 +188,12 @@ class GUIManager:
button.setTag("gui_id", f"button_{len(self.gui_elements)}")
button.setTag("gui_text", text)
button.setTag("is_gui_element", "1")
button.setTag("is_scene_element", "1")
button.setTag("is_scene_element", "1") # 确保这个标签被设置
button.setTag("saved_gui_type", "button") # 添加这个标签以确保兼容性
button.setTag("gui_element_type","button")
button.setTag("created_by_user", "1")
button.setTag("gui_parent_type", "gui" if parent_gui_node else "3d")
button.setTag("name", button_name)
button.setName(button_name)
# 如果有GUI父节点建立引用关系
@ -200,6 +203,7 @@ class GUIManager:
# 添加到GUI元素列表
self.gui_elements.append(button)
button.reparentTo(self.world.aspect2d)
print(f"✅ 为 {parent_item.text(0)} 创建GUI按钮成功: {button_name}")

File diff suppressed because it is too large Load Diff

View File

@ -296,6 +296,7 @@ class InterfaceManager:
addNodeToTree(model, sceneRoot,force=True)
# 添加所有GUI元素
print(f"GUIGUIGUIGUIGUIGUIGUIGUIGUIGUIGUIGUIUGIUGI{self.world.gui_elements}")
for gui in self.world.gui_elements:
# 检查是否是有效的GUI节点具有getTag方法的NodePath
if hasattr(gui, 'getTag') and hasattr(gui, 'getName'):
@ -314,10 +315,19 @@ class InterfaceManager:
groundItem.setData(0,Qt.UserRole + 1, "SCENE_NODE")
#添加灯光节点
for light in self.world.Spotlight + self.world.Pointlight:
if not light.isEmpty:
for light in self.world.Spotlight:
if light:
addNodeToTree(light, sceneRoot, force=True)
for light in self.world.Pointlight:
if light:
addNodeToTree(light, sceneRoot, force=True)
# for light in self.world.Spotlight + self.world.Pointlight:
# if not light.isEmpty:
# print(f"33333333333333333333333333333{light}")
# addNodeToTree(light, sceneRoot, force=True)
#添加 Cesium tilesets
if hasattr(self.world,'scene_manager') and hasattr(self.world.scene_manager,'tilesets'):
for i , tileset_info in enumerate(self.world.scene_manager.tilesets):

View File

@ -168,7 +168,7 @@ class PropertyPanelManager:
elif model and hasattr(model,'getTag') and model.getTag("element_type") == "cesium_tileset":
self._showCesiumTilesetProperties(model,item)
elif model and hasattr(model, 'getTag') and model.getTag("gui_type"):
self.updateGUIPropertyPanel(model)
self.updateGUIPropertyPanel(model, item)
elif model and hasattr(model, 'getTag') and model.getTag("light_type"):
self.updateLightPropertyPanel(model)
elif model:
@ -1282,11 +1282,11 @@ class PropertyPanelManager:
def updateGUIPropertyPanel(self, gui_element):
def updateGUIPropertyPanel(self, gui_element,item):
"""更新GUI元素属性面板"""
self.clearPropertyPanel()
itemText = gui_element.getTag("gui_type") or "未命名GUI元素"
itemText = gui_element.getTag("name") or "未命名GUI元素"
user_visible = True
user_visible = gui_element.getPythonTag("user_visible")
@ -1305,9 +1305,11 @@ class PropertyPanelManager:
def updateGUIName(text):
# 更新GUI元素的标签
gui_element.setTag("name", text)
self.world.treeWidget.update_item_name(self.name_input.text(), item)
# gui_element.setName(text)
# 如果有场景管理器,也需要更新场景树
if hasattr(self.world, 'scene_manager') and hasattr(self.world.scene_manager, 'updateSceneTree'):
self.world.scene_manager.updateSceneTree()
# if hasattr(self.world, 'scene_manager') and hasattr(self.world.scene_manager, 'updateSceneTree'):
# self.world.scene_manager.updateSceneTree()
self.name_input.returnPressed.connect(lambda: updateGUIName(self.name_input.text()))
@ -1351,10 +1353,10 @@ class PropertyPanelManager:
def updateText():
text = textEdit.text()
success = self.world.gui_manager.editGUIElement(gui_element, "text", text)
if success:
# 更新场景树显示的名称
if hasattr(self.world, 'scene_manager') and hasattr(self.world.scene_manager, 'updateSceneTree'):
self.world.scene_manager.updateSceneTree()
# if success:
# # 更新场景树显示的名称
# if hasattr(self.world, 'scene_manager') and hasattr(self.world.scene_manager, 'updateSceneTree'):
# self.world.scene_manager.updateSceneTree()
# 只在按下回车键或失去焦点时更新
textEdit.returnPressed.connect(updateText)

View File

@ -2216,7 +2216,6 @@ class CustomTreeWidget(QTreeWidget):
def add_node_to_tree_widget(self, node, parent_item, node_type):
"""将node元素添加到树形控件"""
# BLACK_LIST 和依赖项导入保持不变
BLACK_LIST = {'', '**', 'temp', 'collision'}
from panda3d.core import CollisionNode, ModelRoot