# GUI编辑模式使用指南 ## 概述 主程序现在集成了完整的GUI编辑模式,基于 `test_qt_showbase.py` 中验证有效的方法实现。这个功能允许你在3D场景中轻松创建、编辑和管理各种GUI元素。 ## 功能特点 ### ✨ 核心功能 - **可视化GUI编辑**: 右侧浮动面板提供直观的工具选择 - **多种GUI类型**: 支持2D和3D GUI元素 - **实时预览**: 即时查看创建的GUI效果 - **属性编辑**: 通过属性面板编辑GUI元素属性 - **场景集成**: GUI元素与3D场景完美融合 ### 🎯 支持的GUI类型 #### 2D GUI元素 1. **按钮 (Button)**: 可点击的2D按钮 2. **标签 (Label)**: 显示文本信息的标签 3. **输入框 (Entry)**: 用户可输入文本的输入框 #### 3D GUI元素 1. **3D文本**: 在3D空间中显示的文本,支持广告牌效果 2. **虚拟屏幕**: 3D空间中的虚拟显示屏 ## 使用方法 ### 🚀 启动GUI编辑模式 #### 方法1: 通过菜单 1. 启动主程序 `python3 test.py` 2. 点击菜单栏 `GUI` -> `进入GUI编辑模式` 3. 右侧将出现GUI编辑面板 #### 方法2: 运行测试程序 ```bash cd /home/hello/eg python3 test_gui_edit_mode.py ``` ### 🎨 创建GUI元素 #### 步骤1: 选择工具 在右侧GUI编辑面板中: - 点击 `按钮` - 创建2D按钮 - 点击 `标签` - 创建2D标签 - 点击 `输入框` - 创建2D输入框 - 点击 `3D文本` - 创建3D文本 - 点击 `虚拟屏幕` - 创建3D虚拟屏幕 #### 步骤2: 放置元素 选择工具后: 1. 在3D场景中点击鼠标左键 2. GUI元素将在点击位置创建 3. 新创建的元素会自动选中并显示在层级树中 ### 📝 编辑GUI元素 #### 选择元素 - **方法1**: 在GUI编辑模式下直接点击GUI元素 - **方法2**: 在左侧层级树中点击GUI元素 #### 编辑属性 选中GUI元素后,右侧属性面板会显示可编辑的属性: **通用属性**: - 名称 - 位置 (X, Y, Z) - 缩放 **特定属性**: - **文本类元素**: 可编辑显示文本 - **2D元素**: 屏幕坐标和实际坐标 - **3D元素**: 世界坐标和旋转 ### 🔧 管理GUI元素 #### 删除元素 1. 选中要删除的GUI元素 2. 点击GUI编辑面板中的 `删除` 按钮 3. 或在层级树中右键选择 `删除GUI元素` #### 复制元素 1. 选中要复制的GUI元素 2. 点击GUI编辑面板中的 `复制` 按钮 3. 或在层级树中右键选择 `复制` #### 在层级树中查看 - 所有GUI元素显示在 `场景` -> `GUI元素` 节点下 - 显示格式: `类型: 文本内容` - 支持右键菜单操作 ### 🎮 交互控制 #### 鼠标操作 - **左键点击**: 选择GUI元素或创建新元素 - **右键拖拽**: 移动选中的GUI元素 (仅3D元素) - **中键拖拽**: Z轴移动 (仅3D元素) #### 键盘快捷键 - **Delete**: 删除选中的GUI元素 - **ESC**: 退出GUI编辑模式 (测试程序) ### 💾 保存和加载 #### 保存项目 GUI元素会随项目一起保存: 1. `文件` -> `保存` 2. GUI元素信息保存在BAM场景文件中 #### 加载项目 加载项目时GUI元素会自动恢复: 1. `文件` -> `打开` 2. 选择包含GUI的项目文件夹 ## 坐标系统说明 ### 2D GUI坐标 - **屏幕坐标系**: 范围 -1 到 1 - **逻辑坐标**: 用户友好的坐标,自动转换为屏幕坐标 - **转换公式**: `屏幕坐标 = 逻辑坐标 × 0.1` ### 3D GUI坐标 - **世界坐标系**: 与3D场景使用相同的坐标系 - **支持完整的3D变换**: 位置、旋转、缩放 ## 技术实现细节 ### 基于验证有效的方法 - 使用 `test_qt_showbase.py` 中验证的GUI创建逻辑 - 确保在Qt集成环境中的稳定性 - 统一的错误处理和调试输出 ### 关键组件 ```python # GUI编辑模式状态 self.guiEditMode = False self.guiEditPanel = None self.currentGUITool = None # GUI创建方法 (基于test_qt_showbase.py) def createGUIButton(pos, text, size) def createGUILabel(pos, text, size) def createGUIEntry(pos, placeholder, size) def createGUI3DText(pos, text, size) def createGUIVirtualScreen(pos, size, text) ``` ### 事件处理 - 鼠标事件优先处理GUI编辑模式 - 碰撞检测用于GUI元素选择 - 树形控件与场景实时同步 ## 常见问题解答 ### Q: GUI元素创建后看不到? **A**: 检查以下几点: 1. 确保已进入GUI编辑模式 2. 检查创建位置是否在视野范围内 3. 查看控制台输出确认创建成功 ### Q: 如何调整GUI元素大小? **A**: 1. 选中GUI元素 2. 在属性面板中修改 `缩放` 属性 3. 或通过代码设置: `element.setScale(new_scale)` ### Q: 2D GUI元素位置不准确? **A**: - 2D GUI使用屏幕坐标系 - 在属性面板中查看 `实际屏幕坐标` - 使用 `逻辑坐标` 进行编辑更容易 ### Q: 中文字体显示问题? **A**: - 程序会自动尝试加载系统中文字体 - 如果中文显示异常,检查系统是否安装了中文字体包 - 支持的字体路径: `/usr/share/fonts/truetype/wqy/` ### Q: 如何扩展新的GUI类型? **A**: 1. 在 `MyWorld` 类中添加新的创建方法 2. 在 `createGUIEditPanel()` 中添加对应按钮 3. 在 `createGUIAtPosition()` 中添加处理逻辑 ## 示例代码 ### 程序化创建GUI元素 ```python # 创建按钮 button = world.createGUIButton((0, 0, 5), "我的按钮", 0.1) # 创建3D文本 text3d = world.createGUI3DText((0, 5, 2), "3D文本", 0.5) # 创建虚拟屏幕 screen = world.createGUIVirtualScreen((3, 8, 0), (2, 1), "信息显示") ``` ### 编辑GUI属性 ```python # 修改文本 world.editGUIElement(gui_element, "text", "新文本") # 修改位置 world.editGUIElement(gui_element, "position", [x, y, z]) # 修改缩放 world.editGUIElement(gui_element, "scale", 1.5) ``` ## 未来扩展 ### 计划功能 - [ ] 更多GUI组件类型 (滑块、复选框等) - [ ] GUI动画系统 - [ ] 主题和样式编辑器 - [ ] GUI模板系统 - [ ] 导出为独立GUI文件 ### 贡献指南 如需添加新功能或修复问题: 1. 参考现有的GUI创建方法 2. 保持与 `test_qt_showbase.py` 验证逻辑的一致性 3. 添加适当的错误处理和调试输出 4. 更新文档和使用示例 --- *最后更新: 2024年*