class mola::MolaViz

Overview

MOLA GUI and visualization API

#include <MolaViz.h>

class MolaViz:
    public mola::ExecutableBase,
    public mola::VizInterface
{
public:
    // typedefs

    typedef std::string window_name_t;
    typedef std::string subwindow_name_t;
    typedef std::function<void(const mrpt::rtti::CObject::Ptr&, nanogui::Window*subWin, window_name_t parentWin, MolaViz*instance)> update_handler_t;
    typedef std::string class_name_t;

    // structs

    struct DataPerDatasetUI;
    struct PerWindowData;

    // fields

    static const window_name_t DEFAULT_WINDOW_NAME = "main";
    double console_text_font_size_ = 9.0;
    unsigned int max_console_lines_ = 5;
    bool show_rgbd_as_point_cloud_ = false;

    // methods

    virtual std::future<nanogui::Window*> create_subwindow(
        const std::string& subWindowTitle,
        const std::string& parentWindow = DEFAULT_WINDOW_NAME
        );

    virtual std::future<bool> subwindow_update_visualization(
        const mrpt::rtti::CObject::Ptr& obj,
        const std::string& subWindowTitle,
        const std::string& parentWindow = DEFAULT_WINDOW_NAME
        );

    virtual std::future<bool> update_3d_object(
        const std::string& objName,
        const std::shared_ptr<mrpt::opengl::CSetOfObjects>& obj,
        const std::string& viewportName = "main",
        const std::string& parentWindow = DEFAULT_WINDOW_NAME
        );

    virtual std::future<bool> update_viewport_look_at(
        const mrpt::math::TPoint3Df& lookAt,
        const std::string& viewportName = "main",
        const std::string& parentWindow = DEFAULT_WINDOW_NAME
        );

    virtual std::future<bool> output_console_message(
        const std::string& msg,
        const std::string& parentWindow = "main"
        );

    virtual std::future<void> enqueue_custom_nanogui_code(const std::function<void(void)>& userCode);
    static bool IsRunning();
    static MolaViz* Instance();

    static void register_gui_handler(
        class_name_t name,
        update_handler_t handler
        );

    virtual void initialize(const Yaml& cfg);
    virtual void spinOnce();
    void markWindowForReLayout(const window_name_t& name);
};

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<VizInterface> Ptr;

    // methods

    virtual void initialize(const Yaml& cfg) = 0;

    virtual std::future<nanogui::Window*> create_subwindow(
        const std::string& title,
        const std::string& parentWindow = "main"
        ) = 0;

    virtual std::future<bool> subwindow_update_visualization(
        const mrpt::rtti::CObject::Ptr& obj,
        const std::string& subWindowTitle,
        const std::string& parentWindow = "main"
        ) = 0;

    virtual std::future<bool> update_3d_object(
        const std::string& objName,
        const std::shared_ptr<mrpt::opengl::CSetOfObjects>& obj,
        const std::string& viewportName = "main",
        const std::string& parentWindow = "main"
        ) = 0;

    virtual std::future<bool> update_viewport_look_at(
        const mrpt::math::TPoint3Df& lookAt,
        const std::string& viewportName = "main",
        const std::string& parentWindow = "main"
        ) = 0;

    virtual std::future<void> enqueue_custom_nanogui_code(const std::function<void(void)>& userCode) = 0;

    virtual std::future<bool> output_console_message(
        const std::string& msg,
        const std::string& parentWindow = "main"
        ) = 0;

Methods

virtual std::future<nanogui::Window*> create_subwindow(
    const std::string& subWindowTitle,
    const std::string& parentWindow = DEFAULT_WINDOW_NAME
    )

Returned object is owned by the VizInterface, do NOT delete it. Updates to it must be done via enqueue_custom_nanogui_code()

virtual std::future<bool> subwindow_update_visualization(
    const mrpt::rtti::CObject::Ptr& obj,
    const std::string& subWindowTitle,
    const std::string& parentWindow = DEFAULT_WINDOW_NAME
    )

Updates the contents of a subwindow from a given object, typically a mrpt::obs::CObservation, but custom handlers can be installed for arbitrary classes.

Depending on the object class RTTI, the corresponding handler is called.

Returns:

false if no handler is found for the given object.

See also:

virtual std::future<bool> update_3d_object(
    const std::string& objName,
    const std::shared_ptr<mrpt::opengl::CSetOfObjects>& obj,
    const std::string& viewportName = "main",
    const std::string& parentWindow = DEFAULT_WINDOW_NAME
    )

Update (or adds if not found) a 3D object in the main 3D view area.

virtual std::future<void> enqueue_custom_nanogui_code(const std::function<void(void)>& userCode)

Updates to nanogui window controls must happen via this method to ensure it is run by the correct thread, in the next available time slot.

virtual void initialize(const Yaml& cfg)

This must be implemented to read all the required parameters

This should be reimplemented to read all the required parameters

virtual void spinOnce()

Runs any required action on a timely manner