Open3D C++系列教程 (七)继承窗口类

Open3D C++系列教程 (七)继承窗口类

前置:
Open3D C++系列教程 (一)环境搭建
Open3D C++系列教程 (二)第一个GUI窗口
Open3D C++系列教程 (三)关于程序异常退出的探讨
Open3D C++系列教程 (四)动画 Tick事件
Open3D C++系列教程 (五)创建菜单栏
Open3D C++系列教程 (六)菜单栏-文件拾取


在之前的几节中介绍了直接在main中使用gui::Windowgui::SceneWidget创建窗口,这在一些简单的应用中是足够的。但如果需要自定义布局,或者添加键盘、鼠标的一些功能,上面的方法就无法做到。

因此接下来会慢慢介绍继承Window、继承SceneWidget等内容,从而能够创建更为复杂的窗口应用。

本节将会重新组织项目代码,并以继承Window的方式重现之前的窗口及功能,以方便之后的讨论。

文章目录

  • Open3D C++系列教程 (七)继承窗口类
    • 1. 项目结构及CMakeLists
    • 2. 辅助函数
    • 3. 继承窗口类
    • 4. Application类
    • 5. main()函数
    • 6. 运行结果
    • 7. 完整代码下载

1. 项目结构及CMakeLists

在这里我们将与窗口相关的代码放在window.hwindow.cpp中,将辅助函数放在utility.hutility.cpp中,组成下面的项目结构:

exp07
 ├── CMakeLists.txt
 ├── main.cpp
 ├── utility.cpp
 ├── utility.h
 ├── window.cpp
 └── window.h

调整CMakeLists.txt文件,将新增的.h.cpp添加到项目中:

// CMakeLists.txt
...
add_executable(main main.cpp window.h window.cpp utility.h utility.cpp)
...

2. 辅助函数

将辅助函数全部放到utility.hutility.cpp中。

// utility.h

// 获取rgb颜色
Eigen::Vector3d rgb(int r, int g, int b);
Eigen::Vector3d RandomColor();

// 获取程序运行目录
std::filesystem::path GetProgramDirPath();

3. 继承窗口类

首先我们继承一个窗口,并在窗口中添加一个场景控件(gui::SceneWidget):

// window.h
class MyWindow : public gui::Window
{
   
public:
    std::shared_ptr<gui::SceneWidget> main_scene_;

public:
    explicit MyWindow(const std::string &title, int width, int height);

    // Layout
    void Layout(const gui::LayoutContext &context

你可能感兴趣的:(Open3D-GUI,c++,开发语言,gui,open3d)