Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
UI 界面

与 GUI 相关的文件、类,以及一些设计思路和解释。 更多...

文件

文件  menubar.h
 
文件  selection_helper.h
 
文件  settings.h
 在这个头文件中,定义了有关 GUI 的一些通用配置, 它被所有与 GUI 相关的 源文件 (.cpp) 共享。
 
文件  toolbar.h
 

class  Controller
 控制器管理所有的界面组件,并处理和预览视角操作(例如旋转、缩放或者平移)相关的输入。 更多...
 
struct  UI::DebugOptions
 辅助调试的 GUI 选项。 更多...
 
class  UI::Menubar
 菜单栏提供加载文件操作、调整日志级别等调试选项和一些帮助页面。 更多...
 
class  UI::Toolbar
 工具栏提供大部分对场景、物体、相机和光源的操作。 更多...
 

类型定义

using SelectableType
 场景中可被选择的元素类型。
 

变量

constexpr std::size_t UI::MAX_SCENE_NODES = 100
 场景中最大可容纳的节点数(组数量与物体数量的总和)。
 

详细描述

与 GUI 相关的文件、类,以及一些设计思路和解释。

Dandelion 是一个轻量的应用,没有什么 I/O 压力。我们借鉴 MVC (Model-View-Controller) 的设计思路实现了程序的交互界面。之所以说“借鉴”而非“采用”,是因为 MVC 是 RMGUI(保留模式 GUI)的设计思想,而 Dandelion 使用的 Dear ImGui 界面库是一种 IMGUI(立即模式 GUI)。在标准的 MVC 设计思路中,一个控制器 (Controller) 负责处理所有的用户输入,并根据输入调用相应 UI 组件的响应函数;而 Dear ImGui 的所有 UI 组件都是各自响应输入的,开发者既不需要、也不能够看到这些组件的状态,自然也不能有处理所有输入的控制器。

然而对于 Dandelion 来说,可见内容并不只有 Dear ImGui 组件,还有预览(编辑)三维模型的场景。预览场景是直接使用 OpenGL 渲染的,并没有处理输入的能力,因此一个 Controller 对象将处理对预览场景的操作——例如旋转视角。这个对象也“持有”其他的 UI 组件并负责渲染它们,与 UI 无关的部分统一通过 Controller 对象与 UI 组件交互,所以会被命名为“控制器”。

类型定义说明

◆ SelectableType

初始值:
std::variant<std::monostate, Object*, const Halfedge*, Vertex*, Edge*, Face*, Light*>

场景中可被选择的元素类型。

此类型包含所有选中元素的指针类型以及额外的 std::monostate 类型。 这些类型可分为三类:

  • std::monostate 表示选中元素为空(没有选中任何元素)
  • 指向 const 对象的指针表示该类型可选中但不可通过 GUI 修改
  • 一般指针表示该类型可选中且可通过 GUI 修改