17#include <unordered_map>
26 return { rect.min.x, rect.min.y };
74 MRVIEWER_API
void setAxesPos( const
int pixelXoffset = -100, const
int pixelYoffset = -100 );
104 MRVIEWER_API
bool draw(
const VisualObject& obj,
const AffineXf3f& xf,
const Matrix4f & projM,
116 void drawLines(
const std::vector<LineSegm3f>& lines,
const std::vector<SegmEndColors>& colors,
float width = 1,
bool depthTest =
true )
121 void drawPoints(
const std::vector<Vector3f>& points,
const std::vector<Vector4f>& colors,
float width = 1,
bool depthTest =
true )
130 MRVIEWER_API
void drawTris(
const std::vector<Triangle3f>& tris,
const std::vector<TriCornerColors>& colors,
const ModelRenderParams& params,
bool depthTest =
true );
131 MRVIEWER_API
void drawTris(
const std::vector<Triangle3f>& tris,
const std::vector<TriCornerColors>& colors,
const Matrix4f& modelM = {},
bool depthTest = true );
138 {
return { viewM_, projM,
id,
toVec4<int>( viewportRect_ ) }; }
142 const Matrix4f & modelM,
146 bool allowAlphaSort =
false
155 bool allowAlphaSort =
false
204 [[deprecated(
"Use `pickRenderObject()`")]]
211 [[deprecated(
"Use `pickRenderObject( objects } )`")]]
217 [[deprecated(
"Use `pickRenderObject( ... )`")]]
220 [[deprecated(
"Use `pickRenderObject( { .exactPickFirst = ... } )`")]]
227 [[deprecated(
"Use `pickRenderObject( { .point = ... } )`")]]
233 [[deprecated(
"Use `multiPickObjects( objects, { .point = ... } )`")]]
239 MRVIEWER_API std::vector<ObjAndPick>
multiPickObjects( std::span<VisualObject* const> objects,
const std::vector<Vector2f>& viewportPoints,
const BaseRenderParams* overrideRenderParams =
nullptr )
const;
246 int maxRenderResolutionSide = 512 )
const;
253 int maxRenderResolutionSide = 512 )
const;
260 [[deprecated(
"Use `pickRenderObject()`.")]]
266 [[deprecated(
"Use `pickRenderObject( objects )`.")]]
270 MRVIEWER_API std::vector<ConstObjAndPick>
constMultiPickObjects(
const std::vector<const VisualObject*>& objects,
const std::vector<Vector2f>& viewportPoints )
const;
357 [[nodiscard]] AffineXf3f
getViewXf()
const {
return AffineXf3f( viewM_ ); }
360 [[nodiscard]] Vector3f
getUpDirection()
const {
return Vector3f( viewM_.y.x, viewM_.y.y, viewM_.y.z ).normalized(); }
363 [[nodiscard]] Vector3f
getRightDirection()
const {
return Vector3f( viewM_.x.x, viewM_.x.y, viewM_.x.z ).normalized(); }
366 [[nodiscard]] Vector3f
getBackwardDirection()
const {
return Vector3f( viewM_.z.x, viewM_.z.y, viewM_.z.z ).normalized(); }
381 MRVIEWER_API std::vector<Vector3f>
projectToClipSpace(
const std::vector<Vector3f>& worldPoints )
const;
424 MRVIEWER_API
void fitData(
float fill = 1.0f,
bool snapView =
true );
429 MRVIEWER_API
void fitBox(
const Box3f& newSceneBox,
float fill = 1.0f,
bool snapView =
true );
496 void setupViewMatrix_();
498 AffineXf3f getViewXf_()
const;
501 void setupProjMatrix_();
503 void setupAxesProjMatrix_();
508 Matrix4f getFullViewportMatrix()
const {
return projM_ * viewM_; }
509 Matrix4f getFullViewportInversedMatrix()
const;
515 bool previewLinesDepthTest_ =
false;
516 bool previewPointsDepthTest_ =
false;
518 void draw_border()
const;
519 void draw_rotation_center()
const;
520 void draw_clipping_plane()
const;
521 void draw_global_basis()
const;
526 void drawAxesAndViewController()
const;
530 Matrix4f axesProjMat_;
531 Vector2f basisAxesPos_;
532 float basisAxesSize_;
535 int pixelXoffset_{ -100 };
536 int pixelYoffset_{ -100 };
537 int axisPixSize_{ 70 };
540 void setRotationPivot_(
const Vector3f& point );
541 void updateSceneBox_();
555 Box3f calcBox_(
const std::vector<std::shared_ptr<VisualObject>>& objs, Space space,
bool selectedPrimitives =
false )
const;
564 std::pair<float, bool> getZoomFOVtoScreen_( std::function<Box3f()> getBoxFn, Vector3f* cameraShift =
nullptr )
const;
569 void preciseFitToScreenBorder_( std::function<Box3f(
bool zoomFOV,
bool globalBasis )> getBoxFn,
const BaseFitParams& params );
571 bool rotation_{
false };
572 Vector3f rotationPivot_;
573 Vector3f static_point_;
574 Vector2f static_viewport_point;
575 float distToSceneCenter_;
577 bool needRedraw_{
false};
container of bits
Definition MRMesh/MRBitSet.h:27
Definition MRViewportGL.h:53
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:38
Definition MRViewport.h:46
MRVIEWER_API Vector3f projectToClipSpace(const Vector3f &worldPoint) const
MRVIEWER_API void showRotationCenter(bool on)
MRVIEWER_API ConstObjAndPick const_pick_render_object() const
MRVIEWER_API Vector3f projectToViewportSpace(const Vector3f &worldPoint) const
MRVIEWER_API void setCameraViewAngle(float newViewAngle)
MRVIEWER_API void setCameraZoom(float zoom)
MRVIEWER_API ObjAndPick pick_render_object(const std::vector< VisualObject * > &objects, uint16_t pickRadius, bool exactPickFirst=true) const
MR::BaseFitParams BaseFitParams
Definition MRViewport.h:432
MRVIEWER_API float getAxesSize() const
MRVIEWER_API ObjAndPick pick_render_object(const std::vector< VisualObject * > &objects, const Vector2f &viewportPoint) const
Vector3f getRightDirection() const
returns unit vector in world space corresponding to right-direction in camera space
Definition MRViewport.h:363
ModelRenderParams getModelRenderParams(const Matrix4f &modelM, Matrix4f *normM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, bool allowAlphaSort=false) const
Prepares rendering parameters to draw a model with given transformation in this viewport.
Definition MRViewport.h:141
MRVIEWER_API std::vector< Vector3f > unprojectFromViewportSpace(const std::vector< Vector3f > &viewportPoints) const
MRVIEWER_API void cameraLookAlong(const Vector3f &dir, const Vector3f &up)
MRVIEWER_API Vector3f unprojectFromClipSpace(const Vector3f &clipPoint) const
MRVIEWER_API ObjAndPick pick_render_object(uint16_t pickRadius) const
MRVIEWER_API ConstObjAndPick pickRenderObjectConst(std::span< const VisualObject *const > objects, const PickRenderObjectParams ¶ms=PickRenderObjectParams::defaults()) const
MRVIEWER_API void showGlobalBasis(bool on)
std::function< bool(const VisualObject *, ViewportMask)> PickRenderObjectPredicate
Definition MRViewport.h:159
MRVIEWER_API void cameraRotateAround(const Line3f &axis, float angle)
MRVIEWER_API ModelRenderParams getModelRenderParams(const Matrix4f &modelM, const Matrix4f &projM, Matrix4f *normM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, bool allowAlphaSort=false) const
Prepares rendering parameters to draw a model with given transformation in this viewport with custom ...
MRVIEWER_API void setCameraTranslation(const Vector3f &translation)
MRVIEWER_API ObjAndPick pickRenderObject(const PickRenderObjectParams ¶ms=PickRenderObjectParams::defaults()) const
bool getRedrawFlag() const
Definition MRViewport.h:277
BaseRenderParams getBaseRenderParams(const Matrix4f &projM) const
Prepares base rendering parameters for this viewport with custom projection matrix.
Definition MRViewport.h:137
MRVIEWER_API float getRatio() const
void setSelectable(bool on)
Definition MRViewport.h:472
MRVIEWER_API float getPixelSize() const
MRVIEWER_API ConstObjAndPick const_pick_render_object(const std::vector< const VisualObject * > &objects) const
MRVIEWER_API Vector3f unprojectFromViewportSpace(const Vector3f &viewportPoint) const
MRVIEWER_API const Vector2f & getAxesPosition() const
returns position of basis axes in viewport space
void drawLines(const std::vector< LineSegm3f > &lines, const std::vector< SegmEndColors > &colors, float width=1, bool depthTest=true)
Definition MRViewport.h:116
MRVIEWER_API float getPixelSizeAtPoint(const Vector3f &worldPoint) const
void resetRedrawFlag()
Definition MRViewport.h:278
MRVIEWER_API void preciseFitDataToScreenBorder(const FitDataParams ¶ms={})
MRVIEWER_API Vector3f viewportSpaceToClipSpace(const Vector3f &p) const
MR::ViewportRectangle ViewportRectangle
Definition MRViewport.h:48
MRVIEWER_API void setRotation(bool state)
MRVIEWER_API void setParameters(const Viewport::Parameters ¶ms)
MRVIEWER_API std::vector< Vector3f > clipSpaceToViewportSpace(const std::vector< Vector3f > &p) const
MRVIEWER_API bool draw(const VisualObject &obj, const AffineXf3f &xf, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, bool allowAlphaSort=false) const
MRVIEWER_API void setOrthographic(bool orthographic)
AffineXf3f getViewXf() const
converts directly from the view matrix
Definition MRViewport.h:357
MRVIEWER_API void showClippingPlane(bool on)
MRVIEWER_API const ViewportRectangle & getViewportRect() const
MRVIEWER_API void fitBox(const Box3f &newSceneBox, float fill=1.0f, bool snapView=true)
MRVIEWER_API void showAxes(bool on)
MRVIEWER_API std::vector< Vector3f > worldToCameraSpace(const std::vector< Vector3f > &p) const
MRVIEWER_API Vector3f getCameraPoint() const
MRVIEWER_API void drawTris(const std::vector< Triangle3f > &tris, const std::vector< TriCornerColors > &colors, const Matrix4f &modelM={}, bool depthTest=true)
MRVIEWER_API void drawTris(const std::vector< Triangle3f > &tris, const std::vector< TriCornerColors > &colors, const ModelRenderParams ¶ms, bool depthTest=true)
Draw triangles immediately (flat shaded)
MRVIEWER_API void setCameraTrackballAngle(const Quaternionf &rot)
MRVIEWER_API ObjAndPick pick_render_object(const std::vector< VisualObject * > &objects) const
Vector3f getBackwardDirection() const
returns unit vector in world space corresponding to direction toward camera in camera space
Definition MRViewport.h:366
MRVIEWER_API Line3f unprojectPixelRay(const Vector2f &viewportPoint) const
MRVIEWER_API std::vector< Vector3f > unprojectFromClipSpace(const std::vector< Vector3f > &clipPoints) const
Viewport clone() const
Definition MRViewport.h:61
MRVIEWER_API void setLabel(std::string s)
MRVIEWER_API bool draw(const VisualObject &obj, const AffineXf3f &xf, const Matrix4f &projM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, bool allowAlphaSort=false) const
MRVIEWER_API std::unordered_map< std::shared_ptr< ObjectMesh >, FaceBitSet > findVisibleFaces(const BitSet &includePixBs, int maxRenderResolutionSide=512) const
const Parameters & getParameters() const
Definition MRViewport.h:449
MRVIEWER_API std::vector< Vector3f > viewportSpaceToClipSpace(const std::vector< Vector3f > &p) const
MRVIEWER_API std::vector< Vector3f > projectToViewportSpace(const std::vector< Vector3f > &worldPoints) const
MRVIEWER_API void fitData(float fill=1.0f, bool snapView=true)
MRVIEWER_API void setAxesSize(const int axisPixSize=80)
MRVIEWER_API void drawPoints(const std::vector< Vector3f > &points, const std::vector< Vector4f > &colors, const LinePointImmediateRenderParams ¶ms)
Draw points immediately.
MRVIEWER_API const Box3f & getSceneBox() const
static MRVIEWER_API Viewport & get(ViewportId viewportId={})
MRVIEWER_API ObjAndPick pickRenderObject(std::span< VisualObject *const > objects, const PickRenderObjectParams ¶ms=PickRenderObjectParams::defaults()) const
MRVIEWER_API void setViewportRect(const ViewportRectangle &rect)
Viewport(Viewport &&) noexcept=default
MRVIEWER_API std::vector< ObjAndPick > multiPickObjects(std::span< VisualObject *const > objects, const std::vector< Vector2f > &viewportPoints, const BaseRenderParams *overrideRenderParams=nullptr) const
MRVIEWER_API void transformView(const AffineXf3f &xf)
MRVIEWER_API Vector3f worldToCameraSpace(const Vector3f &p) const
MRVIEWER_API ObjAndPick pick_render_object(bool exactPickFirst) const
MRVIEWER_API std::vector< ConstObjAndPick > constMultiPickObjects(const std::vector< const VisualObject * > &objects, const std::vector< Vector2f > &viewportPoints) const
MRVIEWER_API bool draw(const VisualObject &obj, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, bool allowAlphaSort=false) const
MRVIEWER_API AffineXf3f getUnscaledViewXf() const
returns orthonormal matrix with translation
const Matrix4f & getAxesProjectionMatrix() const
returns projection matrix that is used for basis axes and view controller rendering
Definition MRViewport.h:82
MRVIEWER_API void setClippingPlane(const Plane3f &plane)
MRVIEWER_API void preciseFitBoxToScreenBorder(const FitBoxParams ¶ms)
MRVIEWER_API bool allModelsInsideViewportRectangle() const
BaseRenderParams getBaseRenderParams() const
Prepares base rendering parameters for this viewport.
Definition MRViewport.h:134
MRVIEWER_API void drawLines(const std::vector< LineSegm3f > &lines, const std::vector< SegmEndColors > &colors, const LinePointImmediateRenderParams ¶ms)
Draw lines immediately.
void drawPoints(const std::vector< Vector3f > &points, const std::vector< Vector4f > &colors, float width=1, bool depthTest=true)
Definition MRViewport.h:121
MRVIEWER_API void setBackgroundColor(const Color &color)
MRVIEWER_API Vector3f getRotationPivot() const
MRVIEWER_API std::vector< std::shared_ptr< VisualObject > > findObjectsInRect(const Box2i &rect, int maxRenderResolutionSide=512) const
MRVIEWER_API void setAxesPos(const int pixelXoffset=-100, const int pixelYoffset=-100)
MRVIEWER_API void clearFramebuffers()
MRVIEWER_API ObjAndPick pick_render_object(const Vector2f &viewportPoint) const
MRVIEWER_API void setCameraPoint(const Vector3f &cameraWorldPos)
MRVIEWER_API Vector3f clipSpaceToViewportSpace(const Vector3f &p) const
ViewportId id
Definition MRViewport.h:281
MRVIEWER_API std::vector< Vector3f > projectToClipSpace(const std::vector< Vector3f > &worldPoints) const
MRVIEWER_API void rotationCenterMode(Parameters::RotationCenterMode mode)
Vector3f getUpDirection() const
returns unit vector in world space corresponding to up-direction in camera space
Definition MRViewport.h:360
MRVIEWER_API ObjAndPick pick_render_object() const
Visual Object.
Definition MRVisualObject.h:121
auto width(const Box< V > &box)
returns size along x axis
Definition MRMesh/MRBox.h:288
auto height(const Box< V > &box)
returns size along y axis
Definition MRMesh/MRBox.h:295
FitMode
Definition MRFitData.h:11
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:29
std::pair< std::shared_ptr< MR::VisualObject >, MR::PointOnObject > ObjAndPick
Definition MRViewerFwd.h:69
RenderModelPassMask
Various passes of the 3D rendering.
Definition MRRenderModelParameters.h:10
std::pair< std::shared_ptr< const MR::VisualObject >, MR::PointOnObject > ConstObjAndPick
Definition MRViewerFwd.h:70
Vector4< T > toVec4(const ViewportRectangle &rect)
Definition MRViewport.h:38
DepthFunction
Definition MRIRenderObject.h:18
Box2f ViewportRectangle
Viewport size.
Definition MRViewerFwd.h:12
Definition MRFitData.h:19
Common rendering parameters for meshes and UI.
Definition MRIRenderObject.h:33
Definition MRMesh/MRColor.h:9
Definition MRFitData.h:41
Definition MRFitData.h:28
Mesh rendering parameters for primary rendering (as opposed to the picker).
Definition MRIRenderObject.h:51
Definition MRVector4.h:20
Definition MRViewport.h:284
RotationCenterMode
Definition MRViewport.h:314
float cameraViewAngle
Definition MRViewport.h:291
Vector3f cameraTranslation
Definition MRViewport.h:289
Color backgroundColor
Definition MRViewport.h:285
bool orthographic
Definition MRViewport.h:296
float cameraDfar
Definition MRViewport.h:293
Color borderColor
Definition MRViewport.h:307
bool depthTest
Definition MRViewport.h:295
Plane3f clippingPlane
Definition MRViewport.h:311
std::string label
Definition MRViewport.h:309
float cameraZoom
Definition MRViewport.h:290
Quaternionf cameraTrackballAngle
Definition MRViewport.h:288
Vector3f lightPosition
Definition MRViewport.h:286
enum MR::Viewport::Parameters::GlobalBasisScaleMode Auto
bool selectable
Definition MRViewport.h:325
GlobalBasisScaleMode
Definition MRViewport.h:299
enum MR::Viewport::Parameters::RotationCenterMode Dynamic
bool operator==(const Viewport::Parameters &other) const =default
float cameraDnear
Definition MRViewport.h:292
bool compensateRotation
Definition MRViewport.h:322
float objectScale
Definition MRViewport.h:305
Definition MRViewport.h:162
int pickRadius
Definition MRViewport.h:171
PickRenderObjectPredicate predicate
Definition MRViewport.h:167
bool exactPickFirst
Definition MRViewport.h:175
static PickRenderObjectParams defaults()
Definition MRViewport.h:183
const BaseRenderParams * baseRenderParams
Definition MRViewport.h:178
std::optional< Vector2f > point
Definition MRViewport.h:164
Definition MRViewport.h:125
Vector4f c
Definition MRViewport.h:126
Vector4f b
Definition MRViewport.h:126
Vector4f a
Definition MRViewport.h:126