231 lines
6.0 KiB
Markdown
231 lines
6.0 KiB
Markdown
# 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年* |