51 const Vector3f&
getCenter()
const {
return center_; }
52 MRVIEWER_API
void setCenter(
const Vector3f& center );
72 virtual void init( std::shared_ptr<Object> parent ) = 0;
94 controls_{ controls },
97 virtual std::string
name()
const override {
return name_; }
101 auto center = controls_.getCenter();
102 controls_.setCenter( center_ );
106 [[nodiscard]]
virtual size_t heapBytes()
const override {
return name_.capacity(); }
128 bool pickThrough_{
false };
148 MRVIEWER_API
void update(
const Box3f& box );
176 MRVIEWER_API
virtual void init( std::shared_ptr<Object> parent )
override;
177 MRVIEWER_API
virtual void update()
override;
179 virtual float getRadius()
const override {
return params_.radius; }
200 void resetSizeInPixel_();
202 MRVIEWER_API
virtual ControlBit hover_(
bool pickThrough )
override;
203 MRVIEWER_API
virtual void stopModify_()
override;
204 MRVIEWER_API
virtual void updateVisualTransformMode_(
ControlBit showMask,
ViewportMask viewportMask )
override;
209 std::array<std::shared_ptr<ObjectMesh>, size_t(
Axis::Count )> translateControls_;
210 std::array<std::shared_ptr<ObjectMesh>, size_t(
Axis::Count )> rotateControls_;
213 std::shared_ptr<ObjectLines> activeLine_;
214 std::array<std::shared_ptr<ObjectLines>, size_t(
Axis::Count )> translateLines_;
215 std::array<std::shared_ptr<ObjectLines>, size_t(
Axis::Count )> rotateLines_;
217 std::shared_ptr<ObjectMesh> hoveredObject_;
218 int findHoveredIndex_()
const;
219 void setActiveLineFromPoints_(
const Contour3f& points );
231 MRVIEWER_API
void create(
const Box3f& box,
const AffineXf3f& xf, std::shared_ptr<ITransformControls> controls = {} );
260 std::shared_ptr<ITransformControls>
getControls()
const {
return controls_; }
262 std::shared_ptr<T>
getControlsAs()
const {
return std::dynamic_pointer_cast< T >( controls_ ); }
286 void setAddXfCallback( std::function<
void(
const AffineXf3f& )> callback ) { addXfCallback_ = callback; }
289 void setApproveXfCallback( std::function<
bool(
const AffineXf3f& )> callback ) { approveXfCallback_ = callback; }
299 if ( widget_.controlsRoot_ )
301 xf_ = widget_.controlsRoot_->xfsForAllViewports();
302 scaledXf_ = widget_.scaledXf_;
306 virtual std::string
name()
const override
313 if ( !widget_.controlsRoot_ )
315 auto tmpXf = widget_.controlsRoot_->xfsForAllViewports();
316 widget_.controlsRoot_->setXfsForAllViewports( xf_ );
319 std::swap( scaledXf_, widget_.scaledXf_ );
324 return name_.capacity();
334 MRVIEWER_API
virtual bool onMouseDown_(
MouseButton button,
int modifier )
override;
335 MRVIEWER_API
virtual bool onMouseUp_(
MouseButton button,
int modifier )
override;
336 MRVIEWER_API
virtual bool onMouseMove_(
int mouse_x,
int mouse_y )
override;
337 MRVIEWER_API
virtual void preDraw_()
override;
338 MRVIEWER_API
virtual void postDraw_()
override;
340 void activeMove_(
bool press =
false );
342 void processScaling_(
Axis ax,
bool press );
343 void processTranslation_(
Axis ax,
bool press );
344 void processRotation_(
Axis ax,
bool press );
346 void setControlsXf_(
const AffineXf3f& xf,
bool updateScaled,
ViewportId id = {} );
348 std::weak_ptr<Object> visibilityParent_;
351 void addXf_(
const AffineXf3f& addXf );
355 std::shared_ptr<Object> controlsRoot_;
356 std::shared_ptr<ITransformControls> controls_;
358 AxisTransformMode axisTransformMode_{ AxisTranslation };
367 ActiveEditMode activeEditMode_{ TranslationMode };
371 Vector3f boxDiagonal_;
373 ViewportProperty<AffineXf3f> scaledXf_;
375 float currentScaling_ = 1.0f;
377 Vector3f prevScaling_;
378 Vector3f startTranslation_;
379 Vector3f prevTranslation_;
380 float accumShift_ = 0;
382 float startAngle_ = 0;
383 float accumAngle_ = 0;
385 ViewportProperty<ControlBit> transformModeMask_{ ControlBit::FullMask };
386 bool picked_{
false };
388 std::function<void(
float )> scaleTooltipCallback_;
389 std::function<void(
float )> translateTooltipCallback_;
390 std::function<void(
float )> rotateTooltipCallback_;
392 std::function<void()> startModifyCallback_;
393 std::function<void()> stopModifyCallback_;
394 std::function<void(
const AffineXf3f& )> addXfCallback_;
395 std::function<bool(
const AffineXf3f& )> approveXfCallback_;
396 bool approvedChange_ =
true;
397 boost::signals2::connection xfValidatorConnection_;
#define MR_MAKE_FLAG_OPERATORS(T)
Generates operators for a enum (at namespace scope).
Definition MRFlagOperators.h:6
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Definition MRViewportProperty.h:17
auto width(const Box< V > &box)
returns size along x axis
Definition MRBox.h:354
virtual void init(std::shared_ptr< Object > parent) override
Called once on widget created to init internal objects.
virtual void stopModify_()=0
float width
Definition MRObjectTransformWidget.h:154
Axis
Definition MRAxis.h:9
const Vector3f & getCenter() const
get center of the widget in local space
Definition MRObjectTransformWidget.h:51
static constexpr Color green() noexcept
Definition MRColor.h:32
virtual std::string name() const override
Definition MRObjectTransformWidget.h:306
virtual void updateVisualTransformMode_(ControlBit showMask, ViewportMask viewportMask)=0
void setWidth(float width)
set width for this widget
MouseButton
Definition MRMouse.h:13
void hover()
Called for hover checks.
Definition MRObjectTransformWidget.h:77
Contour3< float > Contour3f
Definition MRMeshFwd.h:375
float radius
Definition MRObjectTransformWidget.h:151
float negativeLineExtension
extension of the translation line in the negative direction relative to the radius
Definition MRObjectTransformWidget.h:162
virtual ~TransformControls()
std::array< Color, size_t(Axis::Count)> translationColors
Definition MRObjectTransformWidget.h:167
virtual void updateTranslation(Axis ax, const Vector3f &startMove, const Vector3f &endMove, ViewportId vpId)=0
One have to implement these functions to have visualization of translation and rotation.
void setStartModifyCallback(std::function< void()> callback)
Sets callback that will be called when modification of widget starts.
Definition MRObjectTransformWidget.h:284
AffineXf3f getControlsXf(ViewportId id={}) const
void setAddXfCallback(std::function< void(const AffineXf3f &)> callback)
Sets callback that will be called when widget gets additive transform.
Definition MRObjectTransformWidget.h:286
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRObjectTransformWidget.h:106
void setRotateTooltipCallback(std::function< void(float)> callback)
Sets callback that will be called in draw function during rotation with current angle in rad.
Definition MRObjectTransformWidget.h:279
virtual float getRadius() const override
should return current radius of the widget
Definition MRObjectTransformWidget.h:179
void updateVisualTransformMode(ControlBit showMask, ViewportMask viewportMask, const AffineXf3f &xf)
Called each frame for each viewport to update available transformation modes.
std::function< ControlBit(const Vector3f ¢er, const AffineXf3f &xf, ViewportId)> TransformModesValidator
Definition MRObjectTransformWidget.h:41
Color activeLineColor
Definition MRObjectTransformWidget.h:169
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRObjectTransformWidget.h:322
void stopModify()
This is called to stop drawing active visualization when modification is stopped.
Definition MRObjectTransformWidget.h:79
static constexpr Color black() noexcept
Definition MRColor.h:29
virtual void update() override
Color helperLineColor
Definition MRObjectTransformWidget.h:168
virtual void updateRotation(Axis ax, const AffineXf3f &xf, float startAngle, float endAngle, ViewportId vpId)=0
xf - widget current xf
virtual void updateTranslation(Axis ax, const Vector3f &startMove, const Vector3f &endMove, ViewportId vpId) override
One have to implement these functions to have visualization of translation and rotation.
ChangeXfAction(const std::string &name, ObjectTransformWidget &widget)
Definition MRObjectTransformWidget.h:295
ControlBit getHoveredControl() const
Returns currently hovered control.
Definition MRObjectTransformWidget.h:69
void setPickThrough(bool on)
Enables or disables pick through mode, in this mode controls will be picked even if they are occluded...
Definition MRObjectTransformWidget.h:65
bool getPickThrough() const
Definition MRObjectTransformWidget.h:66
std::array< Color, size_t(Axis::Count)> rotationColors
colors of widget
Definition MRObjectTransformWidget.h:166
void setTransformModesValidator(TransformModesValidator validator)
Definition MRObjectTransformWidget.h:62
void setCenter(const Vector3f ¢er)
AxisTransformMode getAxisTransformMode() const
Returns current axis transform mode (translate/scale object while dragging an axis)
Definition MRObjectTransformWidget.h:252
ControlBit
Definition MRObjectTransformWidget.h:25
const VisualParams & getVisualParams() const
Definition MRObjectTransformWidget.h:172
virtual ControlBit hover_(bool pickThrough)=0
virtual void updateSizeInPixel() override
calculates and sets the matrix to set the size in pixels
virtual void init(std::shared_ptr< Object > parent)=0
Called once on widget created to init internal objects.
ChangeCenterAction(const std::string &name, ITransformControls &controls)
Definition MRObjectTransformWidget.h:93
void setStopModifyCallback(std::function< void()> callback)
Sets callback that will be called when modification of widget stops.
Definition MRObjectTransformWidget.h:282
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRObjectTransformWidget.h:311
virtual std::string name() const override
Definition MRObjectTransformWidget.h:97
static constexpr Color red() noexcept
Definition MRColor.h:31
std::shared_ptr< Object > getRootObject() const
Returns root object of widget.
Definition MRObjectTransformWidget.h:257
void setTransformMode(ControlBit mask, ViewportId id={})
Sets transform mode mask (enabling or disabling corresponding widget controls)
SizeType sizeType
sets the type of widget size units (metric length or pixels units)
Definition MRObjectTransformWidget.h:156
void setVisualParams(const VisualParams ¶ms)
ControlBit getTransformModeMask(ViewportId id={}) const
Returns current transform mode mask.
Definition MRObjectTransformWidget.h:237
float positiveLineExtension
extension of the translation line in the positive direction relative to the radius
Definition MRObjectTransformWidget.h:164
void setControlsXf(const AffineXf3f &xf, ViewportId id={})
virtual void updateRotation(Axis ax, const AffineXf3f &xf, float startAngle, float endAngle, ViewportId vpId) override
xf - widget current xf
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRObjectTransformWidget.h:99
Type
Definition MRHistoryAction.h:27
SizeType
type of length measurement units
Definition MRObjectTransformWidget.h:141
void setTranslateTooltipCallback(std::function< void(float)> callback)
Sets callback that will be called in draw function during translation with current shift arg.
Definition MRObjectTransformWidget.h:277
static constexpr Color blue() noexcept
Definition MRColor.h:33
float coneRadiusFactor
the product of this factor and width gives cone radius of the arrows
Definition MRObjectTransformWidget.h:158
void update(const Box3f &box)
updates radius and width with given box
virtual void updateSizeInPixel()
should calculates and sets the matrix to set the size in pixels
Definition MRObjectTransformWidget.h:58
HistoryAction()=default
explicitly define ctors to avoid warning C5267: definition of implicit copy constructor is deprecated...
void setRadius(float radius)
float getWidth() const
Definition MRObjectTransformWidget.h:185
float coneSizeFactor
the product of this factor and width gives cone size of the arrows
Definition MRObjectTransformWidget.h:160
AxisTransformMode
Transform operation applying to object while dragging an axis. This parameter does not apply to activ...
Definition MRObjectTransformWidget.h:243
std::shared_ptr< T > getControlsAs() const
Definition MRObjectTransformWidget.h:262
std::shared_ptr< ITransformControls > getControls() const
Returns controls object, that visualize widget.
Definition MRObjectTransformWidget.h:260
void setAxisTransformMode(AxisTransformMode mode)
Sets current axis transform mode (translate/scale object while dragging an axis)
Definition MRObjectTransformWidget.h:254
void create(const Box3f &box, const AffineXf3f &xf, std::shared_ptr< ITransformControls > controls={})
static TransformModesValidator ThresholdDotValidator(float thresholdDot)
returns TransformModesValidator by threshold dot value (this value is duty for hiding widget controls...
void setApproveXfCallback(std::function< bool(const AffineXf3f &)> callback)
Definition MRObjectTransformWidget.h:289
void setScaleTooltipCallback(std::function< void(float)> callback)
Sets callback that will be called in draw function during scaling with current scale arg.
Definition MRObjectTransformWidget.h:275
virtual ~ITransformControls()=default
virtual float getRadius() const
should return current radius of the widget
Definition MRObjectTransformWidget.h:55
void followObjVisibility(const std::weak_ptr< Object > &obj)
void setSizeType(VisualParams::SizeType type)
sets the type of widget size units ( recalculates the current values into new units of measurement )
static constexpr Color white() noexcept
Definition MRColor.h:28
@ Count
Definition MRAxis.h:13
@ RotZ
Definition MRObjectTransformWidget.h:29
@ FullMask
Definition MRObjectTransformWidget.h:35
@ RotY
Definition MRObjectTransformWidget.h:28
@ MoveX
Definition MRObjectTransformWidget.h:31
@ RotMask
Definition MRObjectTransformWidget.h:30
@ None
Definition MRObjectTransformWidget.h:26
@ MoveZ
Definition MRObjectTransformWidget.h:33
@ MoveMask
Definition MRObjectTransformWidget.h:34
@ MoveY
Definition MRObjectTransformWidget.h:32
@ RotX
Definition MRObjectTransformWidget.h:27
@ LengthUnit
metric units of measurement
Definition MRObjectTransformWidget.h:143
@ Pixels
pixel units of measurement
Definition MRObjectTransformWidget.h:145
@ AxisScaling
object inflates or deflates along an axis depending on drag direction (away from center or toward cen...
Definition MRObjectTransformWidget.h:247
@ AxisTranslation
object moves along an axis
Definition MRObjectTransformWidget.h:245
@ UniformScaling
object inflates or deflates along all axes depending on drag direction (away from center or toward ce...
Definition MRObjectTransformWidget.h:249
@ None
special value not to limit path in one slice
Definition MRVoxelPath.h:33
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRViewerEventsListener.h:32