14#define ENQUEUE_VIEWER_METHOD( NAME, METHOD ) MR::getViewerInstance().emplaceEvent( NAME, [] { \
15 MR::getViewerInstance() . METHOD (); \
17#define ENQUEUE_VIEWER_METHOD_ARGS( NAME, METHOD, ... ) MR::getViewerInstance().emplaceEvent( NAME, [__VA_ARGS__] { \
18 MR::getViewerInstance() . METHOD ( __VA_ARGS__ ); \
20#define ENQUEUE_VIEWER_METHOD_ARGS_SKIPABLE( NAME, METHOD, ... ) MR::getViewerInstance().emplaceEvent( NAME, [__VA_ARGS__] { \
21 MR::getViewerInstance() . METHOD ( __VA_ARGS__ ); \
51 std::string
name{
"MRViewer" };
98 template<
typename PluginType>
101 for (
auto& plugin : plugins )
103 auto p =
dynamic_cast< PluginType*
>( plugin );
119 MRVIEWER_API
bool loadFiles(
const std::vector< std::filesystem::path>& filesList );
122 MRVIEWER_API
bool saveToFile(
const std::filesystem::path & mesh_file_name );
125 MRVIEWER_API
bool keyPressed(
unsigned int unicode_key,
int modifier );
126 MRVIEWER_API
bool keyDown(
int key,
int modifier );
127 MRVIEWER_API
bool keyUp(
int key,
int modifier );
131 MRVIEWER_API
bool mouseMove(
int mouse_x,
int mouse_y );
136 MRVIEWER_API
bool drag(
int mouse_x,
int mouse_y );
137 MRVIEWER_API
bool spaceMouseMove(
const Vector3f& translate,
const Vector3f& rotate );
141 MRVIEWER_API
bool dragDrop(
const std::vector<std::filesystem::path>& paths );
145 MRVIEWER_API
bool touchEnd(
int id,
int x,
int y );
160 MRVIEWER_API
void draw(
bool force =
false );
173 MRVIEWER_API
void resize(
int w,
int h );
264 bool swapOnLastPostEventsRedraw{
true };
266 int forceRedrawMinimumIncrementAfterEvents{ 4 };
332 const Vector2i& pos = Vector2i(),
const Vector2i& size = Vector2i() );
416 MRVIEWER_API
void onSceneSaved(
const std::filesystem::path& savePath,
bool storeInRecent =
true );
426 template <
typename T>
427 std::shared_ptr<T>
getMenuPluginAs()
const {
return std::dynamic_pointer_cast<T>( getMenuPlugin() ); }
466 float pixelRatio{ 1.0f };
471 bool windowMaximized{
false };
474 bool isAnimating{
false };
476 int animationMaxFps{ 30 };
479 float scrollForce{ };
481 uint16_t glPickRadius{ };
483 bool experimentalFeatures{ };
502 MRVIEWER_API
void emplaceEvent( std::string name, ViewerEventCallback cb,
bool skipable =
false );
553 void shutdownPlugins_();
556 void mainLoopFunc_();
557 static void emsMainInfiniteLoop();
560 bool draw_(
bool force );
563 int forceRedrawFrames_{ 0 };
565 int forceRedrawFramesWithoutSwap_{ 0 };
567 std::unique_ptr<ViewerEventQueue> eventQueue_;
570 std::shared_ptr<ImGuiMenu> menuPlugin_;
572 std::unique_ptr<TouchpadController> touchpadController_;
573 std::unique_ptr<SpaceMouse::Controller> spaceMouseController_;
574 std::unique_ptr<TouchesController> touchesController_;
575 std::unique_ptr<MouseController> mouseController_;
576 std::unique_ptr<IDragDropHandler> dragDropAdvancedHandler_;
578 std::unique_ptr<RecentFilesStore> recentFilesStore_;
579 std::unique_ptr<FrameCounter> frameCounter_;
581 mutable struct EventsCounter
583 std::array<size_t, size_t( EventType::Count )> counter{};
587 mutable struct GLPrimitivesCounter
589 std::array<size_t, size_t( GLPrimitivesType::Count )> counter{};
591 } glPrimitivesCounter_;
595 bool tryCreateWindow_(
bool fullscreen,
int& width,
int& height,
const std::string& name,
int major,
int minor );
597 bool needRedraw_()
const;
600 void initGlobalBasisAxesObject_();
601 void initBasisAxesObject_();
602 void initBasisViewControllerObject_();
603 void initClippingPlaneObject_();
604 void initRotationCenterObject_();
607 void initSpaceMouseHandler_();
610 void updatePixelRatio_();
615 int getRequiredMSAA_(
bool sceneTextureOn,
bool forSceneTexture )
const;
617 bool stopEventLoop_{
false };
619 bool isLaunched_{
false };
621 bool focusRedrawReady_{
false };
623 std::unique_ptr<SceneTextureGL> sceneTexture_;
624 std::unique_ptr<AlphaSortGL> alphaSorter_;
625 std::unique_ptr<DepthPeelingGL> depthPeeler_;
627 bool alphaSortEnabled_{
false };
629 bool glInitialized_{
false };
631 bool isInDraw_{
false };
632 bool dirtyScene_{
false };
634 bool hasScaledFramebuffer_{
false };
636 bool sortDroppedFiles_{
true };
638 LaunchParams launchParams_;
640 ViewportId getFirstAvailableViewportId_()
const;
641 ViewportMask presentViewportsMask_;
643 std::unique_ptr<IViewerSettingsManager> settingsMng_;
645 std::unique_ptr<HistoryStore> globalHistoryStore_;
647 std::shared_ptr<SpaceMouse::Handler> spaceMouseHandler_;
650 std::unique_ptr<Connections> connections_;
651 std::unique_ptr<ViewerSignals> signals_;
class for easier rendering in framebuffer texture
Definition MRRenderGLHelpers.h:217
This class stores history stack for undo/redo.
Definition MRHistoryStore.h:16
Definition MRMouseController.h:24
Definition MRRecentFilesStore.h:20
Object that is parent of all scene.
Definition MRSceneRoot.h:14
this class stores maps spacemouse event - program action
Definition MRSpaceMouseController.h:11
Definition MRTouchpadController.h:35
Definition MRSetupViewer.h:16
GLFW-based mesh viewer.
Definition MRViewer.h:69
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
static ViewportMask all()
mask meaning all or any viewports
Definition MRViewportId.h:49
Definition MRViewport.h:49
MRVIEWER_API bool isDepthPeelingEnabled() const
Returns true if depth peeling is enabled, false otherwise.
bool hasScaledFramebuffer() const
returns true if the system framebuffer is scaled (valid for macOS and Wayland)
Definition MRViewer.h:447
MRVIEWER_API bool saveToFile(const std::filesystem::path &mesh_file_name)
Save first selected objects to file.
MRVIEWER_API bool keyUp(int key, int modifier)
WindowMode
Definition MRViewer.h:39
bool render3dSceneInTexture
Definition MRViewer.h:48
MouseMode
Standard mouse functions for camera control.
Definition MRMouse.h:22
bool console
If !startEventLoop close immediately after start, otherwise close on window close,...
Definition MRViewer.h:55
bool developerFeatures
If not set renders scene each frame.
Definition MRViewer.h:49
MRVIEWER_API void fitDataViewport(MR::ViewportMask vpList=MR::ViewportMask::all(), float fill=0.6f, bool snapView=true)
MRVIEWER_API bool isAlphaSortAvailable() const
Returns true if can enable alpha sort.
MRVIEWER_API ViewportId getHoveredViewportId() const
char ** argv
Pass argc.
Definition MRViewer.h:57
MRVIEWER_API void setViewportSettingsManager(std::unique_ptr< IViewerSettingsManager > mng)
MouseButton
Definition MRMouse.h:12
MRVIEWER_API void forceSwapOnFrame(int i=0)
Forces redraw no later than the specified number of frames.
bool startEventLoop
if true - resets config file on start of the application
Definition MRViewer.h:53
bool fullscreen
Definition MRViewer.h:35
MRVIEWER_API bool keyRepeat(int key, int modifier)
MRVIEWER_API std::vector< std::reference_wrapper< Viewport > > getViewports(ViewportMask mask=ViewportMask::any())
Returns viewports satisfying given mask.
const MouseController & mouseController() const
Definition MRViewer.h:514
MRVIEWER_API void appendHistoryAction(const std::shared_ptr< HistoryAction > &action)
std::shared_ptr< ViewerTitle > windowTitle
class that updates viewer title
Definition MRViewer.h:495
MRVIEWER_API PointInAllSpaces getMousePointInfo() const
Finds point under mouse in all spaces and under mouse viewport id.
MRVIEWER_API const std::shared_ptr< ImGuiMenu > & getMenuPlugin() const
Get/Set menu plugin (which is separated from other plugins to be inited first before splash window st...
MRVIEWER_API HistoryStore * getGlobalHistoryStore() const
Definition MRViewer.h:410
int animationMaxFps
if true - calls render without system events
Definition MRViewer.h:61
MRVIEWER_API void resize(int w, int h)
OpenGL context resize.
MRVIEWER_API bool mouseClick(MouseButton button, int modifier)
int argc
If true - shows developers console.
Definition MRViewer.h:56
std::vector< ViewerPlugin * > plugins
List of registered plugins.
Definition MRViewer.h:464
static MRVIEWER_API void parseLaunchParams(LaunchParams ¶ms)
Accumulate launch params from cmd args.
MRVIEWER_API Box2f getViewportsBounds() const
Vector2i windowSaveSize
pos to save
Definition MRViewer.h:469
EventType
types of counted events
Definition MRViewer.h:280
const SpaceMouse::Controller & spaceMouseController() const
Definition MRViewer.h:511
ViewportMask getPresentViewports() const
Returns mask of present viewports.
Definition MRViewer.h:313
MRVIEWER_API bool touchpadSwipeGestureEnd()
MRVIEWER_API bool erase_viewport(ViewportId viewport_id)
MRVIEWER_API void fitBoxViewport(const Box3f &box, MR::ViewportMask vpList=MR::ViewportMask::all(), float fill=0.6f, bool snapView=true)
const TouchpadController & touchpadController() const
Definition MRViewer.h:508
MRVIEWER_API size_t getEventsCount(EventType type) const
Returns number of events of given type.
MRVIEWER_API Viewer & getViewerInstance()
returns global instance of Viewer class
std::shared_ptr< SplashWindow > splashWindow
unload all extended libraries right before program exit
Definition MRViewer.h:64
std::shared_ptr< T > getMenuPluginAs() const
Get the menu plugin casted in given type.
Definition MRViewer.h:427
bool isGLInitialized() const
Definition MRViewer.h:441
angle
Definition MRObjectDimensionsEnum.h:16
MRVIEWER_API void onSceneSaved(const std::filesystem::path &savePath, bool storeInRecent=true)
This method is called after successful scene saving to update scene root, window title and undo.
MRVIEWER_API bool touchStart(int id, int x, int y)
Touch callbacks (now used in EMSCRIPTEN build only)
MRVIEWER_API void drawUiRenderObjects()
draw 2d (UI) part of objects in scene
MRVIEWER_API bool mouseMove(int mouse_x, int mouse_y)
std::shared_ptr< ObjectMesh > rotationSphere
Definition MRViewer.h:490
MRVIEWER_API void clearFramebuffers()
Cleans framebuffers for all viewports (sets its background)
Vector2i windowOldPos
size to save
Definition MRViewer.h:470
std::vector< std::string > commandArgs
command arguments, each parsed arg should be erased from here not to affect other parsers
Definition MRViewer.h:485
MRVIEWER_API Vector3f viewportToScreen(const Vector3f &viewportPoint, ViewportId id) const
MRVIEWER_API Image captureSceneScreenShot(const Vector2i &resolution=Vector2i(), bool transparentBg=false)
MRVIEWER_API bool isCurrentFrameSwapping() const
Returns true if current frame will be shown on display.
MRVIEWER_API double getPrevFrameDrawTimeMillisec() const
MRVIEWER_API void enableGlobalHistory(bool on)
Enables or disables global history (clears it on disable)
MRVIEWER_API int launch(const LaunchParams ¶ms)
Launch viewer with given params.
MRVIEWER_API size_t getSwappedFrames() const
MRVIEWER_API void popEventByName(const std::string &name)
pop all events from the queue while they have this name
const LaunchParams & getLaunchParams() const
get full parameters with witch viewer was launched
Definition MRViewer.h:89
std::function< void(Viewer *viewer)> resetSettingsFunction
Definition MRViewer.h:457
MRVIEWER_API bool touchMove(int id, int x, int y)
MRVIEWER_API bool erase_viewport(const size_t index)
MRVIEWER_API bool touchpadSwipeGestureBegin()
MRVIEWER_API bool dragDrop(const std::vector< std::filesystem::path > &paths)
MRVIEWER_API bool spaceMouseDown(int key)
MRVIEWER_API bool touchpadSwipeGestureUpdate(float dx, float dy, bool kinetic)
friend MRVIEWER_API Viewer & getViewerInstance()
returns global instance of Viewer class
bool unloadPluginsAtEnd
max fps if animating
Definition MRViewer.h:62
MRVIEWER_API PointInAllSpaces getPixelPointInfo(const Vector3f &screenPoint) const
Finds point in all spaces from screen space pixel point.
bool isAlphaSortEnabled() const
Returns true if alpha sort is enabled, false otherwise.
Definition MRViewer.h:340
MRVIEWER_API void emplaceEvent(std::string name, ViewerEventCallback cb, bool skipable=false)
MRVIEWER_API int getMSAA() const
MRVIEWER_API bool spaceMouseUp(int key)
MRVIEWER_API void incrementForceRedrawFrames(int i=1, bool swapOnLastOnly=false)
bool close
If false - does not start event loop.
Definition MRViewer.h:54
size_t selected_viewport_index
Definition MRViewer.h:461
bool multiViewport
If set shows some developer features useful for debugging.
Definition MRViewer.h:50
MRVIEWER_API void postSetMaximized(bool maximized)
external set position due to user interaction
MRVIEWER_API int getRequestedMSAA() const
Returns MSAA level that have been requested (might be different from actual MSAA using,...
static Viewer * instance()
provides non const access to viewer
Definition MRViewer.h:92
MRVIEWER_API bool mouseUp(MouseButton button, int modifier)
MRVIEWER_API bool enableAlphaSort(bool on)
PluginType * getPluginInstance()
Definition MRViewer.h:99
MRVIEWER_API bool mouseScroll(float delta_y)
bool isLaunched() const
Definition MRViewer.h:86
bool showMRVersionInTitle
Pass argv.
Definition MRViewer.h:59
MRVIEWER_API void postEmptyEvent()
static const Viewer * constInstance()
provide const access to viewer
Definition MRViewer.h:95
std::unique_ptr< ViewportGlobalBasis > globalBasis
Definition MRViewer.h:489
MRVIEWER_API size_t getFPS() const
MRVIEWER_API Vector3f screenToViewport(const Vector3f &screenPoint, ViewportId id) const
MRVIEWER_API bool dragEnd(MouseButton button, int modifier)
std::shared_ptr< ObjectMesh > clippingPlaneObject
Stores clipping plane mesh.
Definition MRViewer.h:492
MRVIEWER_API const Viewport & viewport(ViewportId viewportId={}) const
static const Viewer & constInstanceRef()
Definition MRViewer.h:96
MRVIEWER_API bool touchpadZoomGestureEnd()
void setSortDroppedFiles(bool value)
sets whether to sort the filenames received from Drag&Drop in lexicographical order before adding the...
Definition MRViewer.h:525
MRVIEWER_API bool touchpadRotateGestureBegin()
Touchpad gesture callbacks.
SpaceMouse::Controller & spaceMouseController()
Definition MRViewer.h:512
MRVIEWER_API bool mouseDown(MouseButton button, int modifier)
RecentFilesStore & recentFilesStore()
Definition MRViewer.h:519
bool enableTransparentBackground
Definition MRViewer.h:46
MRVIEWER_API void select_hovered_viewport()
Change selected_core_index to the viewport containing the mouse.
MRVIEWER_API ViewportId append_viewport(const ViewportRectangle &viewportRect, bool append_empty=false)
int height
Definition MRViewer.h:37
MRVIEWER_API bool touchpadRotateGestureUpdate(float angle)
MRVIEWER_API bool spaceMouseRepeat(int key)
MRVIEWER_API void incrementThisFrameGLPrimitivesCount(GLPrimitivesType type, size_t num)
Increment number of gl primitives drawed in this frame.
MRVIEWER_API void postRescale(float x, float y)
external focus handler due to user interaction
static Viewer & instanceRef()
Definition MRViewer.h:93
std::shared_ptr< ObjectMesh > basisAxes
Definition MRViewer.h:487
bool resetConfig
Window name.
Definition MRViewer.h:52
MRVIEWER_API bool touchpadZoomGestureBegin()
MRVIEWER_API void bindSceneTexture(bool bind)
MRVIEWER_API bool touchpadZoomGestureUpdate(float scale, bool kinetic)
MRVIEWER_API void set_root(SceneRootObject &newRoot)
called when close signal received
MRVIEWER_API void stopEventLoop()
sets stop event loop flag (this flag is glfwShouldWindowClose equivalent)
MRVIEWER_API void launchEventLoop()
Starts event loop.
MRVIEWER_API void drawScene(FramebufferData *framebuffer)
MRVIEWER_API bool isMultiViewportAvailable()
MRVIEWER_API void captureUIScreenShot(std::function< void(const Image &)> callback, const Vector2i &pos=Vector2i(), const Vector2i &size=Vector2i())
MRVIEWER_API void launchShut()
Terminate window.
MRVIEWER_API bool globalHistoryUndo()
MRVIEWER_API std::shared_ptr< RibbonMenu > getRibbonMenu() const
get menu plugin casted in RibbonMenu
MRVIEWER_API const std::unique_ptr< IViewerSettingsManager > & getViewerSettingsManager() const
Definition MRViewer.h:370
MRVIEWER_API void preciseFitDataViewport(MR::ViewportMask vpList=MR::ViewportMask::all())
Vector2i framebufferSize
Definition MRViewer.h:467
ViewerSignals & signals()
return the structure with all viewer's signals
Definition MRViewer.h:498
MRVIEWER_API int launchDefaultViewer(const Viewer::LaunchParams ¶ms, const ViewerSetup &setup)
starts default viewer with given params and setup
MRVIEWER_API bool keyDown(int key, int modifier)
bool getSortDroppedFiles() const
returns whether to sort the filenames received from Drag&Drop in lexicographical order before adding ...
Definition MRViewer.h:522
MRVIEWER_API void setupScene()
Setup viewports views.
MRVIEWER_API void setMenuPlugin(std::shared_ptr< ImGuiMenu > menu)
MRVIEWER_API Viewport & viewport(ViewportId viewportId={})
Multi-viewport methods ///.
MRVIEWER_API size_t getStaticGLBufferSize() const
Returns memory amount used by shared GL memory buffer.
GLPrimitivesType
types of gl primitives counters
Definition MRViewer.h:296
Vector2i windowSavePos
Definition MRViewer.h:468
MRVIEWER_API size_t getLastFrameGLPrimitivesCount(GLPrimitivesType type) const
Returns number of events of given type.
MRVIEWER_API bool dragStart(MouseButton button, int modifier)
bool preferOpenGL3
Definition MRViewer.h:47
MRVIEWER_API ViewportId getHoveredViewportIdOrInvalid() const
Same, but returns an invalid ID if no viewport is hovered, instead of returning the last selected vie...
MRVIEWER_API void drawFull(bool dirtyScene)
Draw 3d scene with UI.
std::unique_ptr< CornerControllerObject > basisViewController
Definition MRViewer.h:488
MRVIEWER_API bool loadFiles(const std::vector< std::filesystem::path > &filesList)
int width
if true starts fullscreen
Definition MRViewer.h:36
MRVIEWER_API bool loadFiles(const std::vector< std::filesystem::path > &filesList, const FileLoadOptions &options)
MRVIEWER_API void requestChangeMSAA(int newMSAA)
GLFWwindow * window
Member variables ///.
Definition MRViewer.h:453
enum MR::LaunchParams::WindowMode HideInit
MRVIEWER_API bool drag(int mouse_x, int mouse_y)
std::string name
If set allows to move the imgui (tool) windows outside the main () window. (unavailable for Apple,...
Definition MRViewer.h:51
MRVIEWER_API void postSetIconified(bool iconified)
external set maximized due to user interaction
MRVIEWER_API bool globalHistoryRedo()
MRVIEWER_API void makeTitleFromSceneRootPath()
update the title of the main window and, if any scene was opened, show its filename
MRVIEWER_API size_t getTotalFrames() const
MRVIEWER_API void postFocus(bool focused)
external set iconified due to user interaction
void setSceneDirty()
Call this function to force redraw scene into scene texture.
Definition MRViewer.h:167
MRVIEWER_API void resetAllCounters()
Restes frames counter and events counter.
MRVIEWER_API bool isSupportedFormat(const std::filesystem::path &file_name)
MRVIEWER_API void draw(bool force=false)
Draw everything.
MRVIEWER_API int getDepthPeelNumPasses() const
Returns number of passes performed by depth peeler.
MRVIEWER_API int viewport_index(ViewportId viewport_id) const
MRVIEWER_API bool touchpadRotateGestureEnd()
MouseController & mouseController()
Definition MRViewer.h:515
MRVIEWER_API bool isSceneTextureBound() const
Returns if scene texture is now bound.
MRVIEWER_API bool touchEnd(int id, int x, int y)
const RecentFilesStore & recentFilesStore() const
Store of recently opened files.
Definition MRViewer.h:518
TouchpadController & touchpadController()
Definition MRViewer.h:509
MRVIEWER_API bool interruptWindowClose()
This function is called when window should close, if return value is true, window will stay open.
MRVIEWER_API bool spaceMouseMove(const Vector3f &translate, const Vector3f &rotate)
MRVIEWER_API void preciseFitDataViewport(MR::ViewportMask vpList, const FitDataParams ¶m)
MRVIEWER_API void setDepthPeelNumPasses(int numPasses)
Sets desired number of passes to depth peeler.
bool isGlobalHistoryEnabled() const
Return true if global history is enabled, false otherwise.
Definition MRViewer.h:397
MRVIEWER_API void postResize(int w, int h)
explicitly set framebuffer size
MRVIEWER_API bool keyPressed(unsigned int unicode_key, int modifier)
Callbacks.
MRVIEWER_API bool isSceneTextureEnabled() const
Returns true if 3d scene is rendering in scene texture instead of main framebuffer.
MRVIEWER_API void postSetPosition(int xPos, int yPos)
external resize due to user interaction
MRVIEWER_API void clearScene()
removes all objects from scene
std::vector< Viewport > viewport_list
Stores all the viewing options.
Definition MRViewer.h:460
bool isAnimating
if true - print version info in window title
Definition MRViewer.h:60
const std::shared_ptr< SpaceMouse::Handler > & getSpaceMouseHandler() const
Return spacemouse handler.
Definition MRViewer.h:413
MRVIEWER_API void postClose()
external rescale due to user interaction
bool getStopEventLoopFlag() const
get stop event loop flag (this flag is glfwShouldWindowClose equivalent)
Definition MRViewer.h:432
@ HideInit
Show window immediately.
Definition MRViewer.h:41
@ NoWindow
Launches in "Hide" mode if OpenGL is present and "NoWindow" if it is not.
Definition MRViewer.h:44
@ TryHidden
Don't show window.
Definition MRViewer.h:43
@ Hide
Show window after init.
Definition MRViewer.h:42
@ Show
Definition MRViewer.h:40
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRFileLoadOptions.h:14
Definition MRFitData.h:32
This struct contains rules for viewer launch.
Definition MRViewer.h:34
Definition MRPointInAllSpaces.h:16
Definition MRViewerSignals.h:13