struct mrpt::gui::WxSubsystem::TRequestToWxMainThread

The data structure for each inter-thread request:

#include <mrpt/gui/WxSubsystem.h>

struct TRequestToWxMainThread
{
    //
fields

    mrpt::gui::CDisplayWindow* source2D {nullptr};
    mrpt::gui::CDisplayWindow3D* source3D {nullptr};
    mrpt::gui::CDisplayWindowPlots* sourcePlots {nullptr};
    bool sourceCameraSelectDialog {false};
    std::string str;
    void* voidPtr {nullptr};
    void* voidPtr2 {nullptr};
    int x {400};
    int y {400};
    bool boolVal {false};
    mrpt::math::CVectorFloat vector_x;
    mrpt::math::CVectorFloat vector_y;
    std::string plotName;
    int OPCODE;
    std::function<void(void)> userFunction;

    // construction

    TRequestToWxMainThread();
};

Fields

mrpt::gui::CDisplayWindow* source2D {nullptr}

Only one of source* can be non-nullptr, indicating the class that generated the request.

mrpt::gui::CDisplayWindow3D* source3D {nullptr}

Only one of source* can be non-nullptr, indicating the class that generated the request.

mrpt::gui::CDisplayWindowPlots* sourcePlots {nullptr}

Only one of source* can be non-nullptr, indicating the class that generated the request.

bool sourceCameraSelectDialog {false}

Only one of source* can be non-nullptr, indicating the class that generated the request.

std::string str

Parameters, depending on OPCODE.

void* voidPtr {nullptr}

Parameters, depending on OPCODE.

int OPCODE

Valid codes are: For CDisplayWindow :

  • 200: Create a new 2D window, with caption “str” and initial size “x” & “y”, and save the “wxFrame*” in the “void**” passed in voidPtr.

  • 201: Updates the image shown in the window, from a “wxImage*” passed in voidPtr2. The wxImage object will be freed with delete after that. voidPtr must be a “wxFrame*”, a “CWindowDialog*” actually.

  • 202: Set position to x,y

  • 203: Change size to x,y

  • 204: Change title to “str”

  • 299: Delete the window associated with this source object.

For CDisplayWindow3D :

  • 300: Create a new 3D window, with caption “str” and initial size “x” & “y”, and save the “wxFrame*” in the “void**” passed in voidPtr.

  • 302: Set position to x,y

  • 303: Change size to x,y

  • 304: Change title to “str”

    • 350: Force refresh

    • [Removed in MRPT2] 360: Add a 2D text message:

    • [Removed in MRPT2] 361: Clear all 2D text messages.

    • [Removed in MRPT2] 362: Add a 2D text message (vector font)

    • 370: Change min/max range: min=vector_x[0], max=vector_x[1]

  • 399: Delete the window associated with this source object.

For CDisplayWindowPlots :

  • 400: Create a new Plots window, with caption “str” and initial size “x” & “y”,and save the “wxFrame*” in the “void**” passed in voidPtr.

  • 402: Set position to x,y

  • 403: Change size to x,y

  • 404: Change title to “str”

  • 499: Delete the window associated with this source object.

    • 410: Depending on “boolVal”, enable/disable the mouse-zoom & pan

    • 411: Depending on “boolVal”, enable/disable the aspect ratio fix

    • 412: Zoom over a rectangle vectorx[0-1] & vectory[0-1]

    • 413: Axis fit, with aspect ratio fix to boolVal.

    • 414: Clear all plot objects.

    • 420: Add/update a 2D line/points plot: x/y data= vector_x/vector_y, format string=str, plot name =plotName.

    • 421: Add/update a 2D ellipse: format string=str, plot name =plotName, vector_x[0,1]:X/Y center, vector_x[2]:quantiles, vector_y[0,1,2]: Covariance matrix entries 00,11,01, boolVal=showName?

    • 422: Add/update a bitmap: plot name =plotName, vector_x[0,1]:X/Y corner, vector_x[2,3]: X/Y widths, voidPtr2: pointer to a newly created wxImage with the bitmap.

    • 440: Insert submenu in the popup menu. plotName=menu label, x=user-defined ID.

    • 700: Shows a camera-pick-dialog and wait for user selection. “voidPtr” must point to a CSemaphore, which will be signaled twice (1st upon construction, 2nd upon dialog close); voidPtr2 must point to a “mrpt::gui::CPanelCameraSelection*” which will be filled with the selection (the panel must be deleted by the caller)

      - 800: Executes `userFunction` in the GUI thread.