Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
toolbar.h
浏览该文件的文档.
1#ifndef DANDELION_UI_TOOLBAR_H
2#define DANDELION_UI_TOOLBAR_H
3
4#include <cstddef>
5#include <optional>
6#include <functional>
7
8#include "selection_helper.h"
9#include "../scene/scene.h"
11
12/*!
13 * \file ui/toolbar.h
14 * \ingroup ui
15 */
16
17namespace UI {
18
19/*!
20 * \ingroup ui
21 * \~chinese
22 * \brief 场景中最大可容纳的节点数(组数量与物体数量的总和)。
23 */
24constexpr std::size_t MAX_SCENE_NODES = 100;
25
26/*!
27 * \ingroup ui
28 * \~chinese
29 * \brief 工具栏提供大部分对场景、物体、相机和光源的操作。
30 */
32{
33public:
34 /*!
35 * \~chinese
36 * \brief 工具栏持有对工作模式的引用和对选中元素的引用,构造时必须传递。
37 *
38 * 工具栏还有 `on_element_selected` 和 `on_selection_canceled`
39 * 两个与选择和拾取有关的回调函数,如果没有设置这两个回调函数,工具栏将不能正常工作。
40 * 但构造函数并不会设置它们,而是由控制器在创建工具栏时设置。目前,
41 *
42 * - `on_element_selected` 回调对应 `Controller::select`
43 * - `on_selection_canceled` 回调对应 `Controller::unselect`
44 */
46 ~Toolbar();
47 /*! \~chinese 显示工具栏。 */
48 void render(Scene& scene);
49
50 /*! \~chinese 选中元素时的回调函数。 */
51 std::function<void(SelectableType)> on_element_selected;
52 /*! \~chinese 取消选中时的回调函数。 */
53 std::function<void()> on_selection_canceled;
54
55private:
56 /*! \~chinese 将场景层次结构展示为一个树形列表。 */
57 void scene_hierarchies(Scene& scene);
58 /*! \~chinese 显示标签分别为 x, y, z 的三个 `ImGui::DragFloat` 控件。 */
59 void xyz_drag(float* x, float* y, float* z, float v_speed, const char* format = "%.2f");
60 /*! \~chinese 显示并编辑单个物体的材质属性。 */
61 void material_editor(GL::Material& material);
62 /*! \~chinese 布局模式对应的标签页。 */
63 void layout_mode(Scene& scene);
64 /*! \~chinese 建模模式对应的标签页。 */
65 void model_mode(Scene& scene);
66 /*! \~chinese 渲染模式对应的标签页。 */
67 void render_mode(Scene& scene);
68 /*! \~chinese 物理模拟模式对应的标签页。 */
69 void simulate_mode(Scene& scene);
70
71 /*! \~chinese 与 Dandelion 的工作模式一一对应,`render` 方法据此调整渲染行为。 */
73 /*! \~chinese 工具栏需要了解当前被选中的元素才能显示相应的操作。 */
75 /*! \~chinese 用于在渲染模式下展示渲染结果的 OpenGL 纹理描述符。 */
76 unsigned int gl_rendered_texture;
77};
78
79} // namespace UI
80
81#endif // DANDELION_UI_TOOLBAR_H
表示一个包含相机、光源、物体的完整场景。
定义 scene.h:46
const SelectableType & selected_element
定义 toolbar.h:74
void render_mode(Scene &scene)
定义 toolbar.cpp:343
void render(Scene &scene)
定义 toolbar.cpp:67
void model_mode(Scene &scene)
定义 toolbar.cpp:198
void material_editor(GL::Material &material)
定义 toolbar.cpp:132
void scene_hierarchies(Scene &scene)
定义 toolbar.cpp:81
void layout_mode(Scene &scene)
定义 toolbar.cpp:150
void xyz_drag(float *x, float *y, float *z, float v_speed, const char *format="%.2f")
定义 toolbar.cpp:115
void simulate_mode(Scene &scene)
定义 toolbar.cpp:497
std::function< void(SelectableType)> on_element_selected
定义 toolbar.h:51
WorkingMode & mode
定义 toolbar.h:72
unsigned int gl_rendered_texture
定义 toolbar.h:76
std::function< void()> on_selection_canceled
定义 toolbar.h:53
Toolbar(WorkingMode &mode, const SelectableType &selected_element)
工具栏持有对工作模式的引用和对选中元素的引用,构造时必须传递。
定义 toolbar.cpp:49
constexpr std::size_t MAX_SCENE_NODES
场景中最大可容纳的节点数(组数量与物体数量的总和)。
定义 toolbar.h:24
std::variant< std::monostate, Object *, const Halfedge *, Vertex *, Edge *, Face *, Light * > SelectableType
场景中可被选择的元素类型。
定义 selection_helper.h:38
这个文件定义了一些和渲染(离线渲染或场景预览)相关的常量、枚举等。
WorkingMode
定义 rendering.hpp:46
物体材质。
定义 gl.hpp:189