MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRadiusMeasurementObject.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace MR
6{
9
10
12class MRMESH_CLASS RadiusMeasurementObject : public MeasurementObject
13{
16public:
18
20 RadiusMeasurementObject& operator=( RadiusMeasurementObject&& ) noexcept = default;
21
22 constexpr static const char* StaticTypeName() noexcept { return "RadiusMeasurementObject"; }
23 const char* typeName() const override { return StaticTypeName(); }
24
25 constexpr static const char* StaticClassName() noexcept { return "Radius"; }
26 virtual std::string className() const override { return StaticClassName(); }
27
28 constexpr static const char* StaticClassNameInPlural() noexcept { return "Radii"; }
29 virtual std::string classNameInPlural() const override { return StaticClassNameInPlural(); }
30
33
34 MRMESH_API std::shared_ptr<Object> clone() const override;
35 MRMESH_API std::shared_ptr<Object> shallowClone() const override;
36
38 [[nodiscard]] MRMESH_API Vector3f getWorldCenter() const;
40 [[nodiscard]] MRMESH_API Vector3f getLocalCenter() const;
41
43 [[nodiscard]] MRMESH_API Vector3f getWorldRadiusAsVector() const;
44 [[nodiscard]] MRMESH_API Vector3f getLocalRadiusAsVector() const;
45
47 [[nodiscard]] MRMESH_API Vector3f getWorldNormal() const;
48 [[nodiscard]] MRMESH_API Vector3f getLocalNormal() const;
49
50 MRMESH_API virtual void setLocalCenter( const MR::Vector3f& center );
54 MRMESH_API virtual void setLocalRadiusAsVector( const MR::Vector3f& radiusVec, const Vector3f& normal );
56 void setLocalRadiusAsVector( const MR::Vector3f& radiusVec ) { setLocalRadiusAsVector( radiusVec, radiusVec.furthestBasisVector() ); }
57
59 [[nodiscard]] bool getDrawAsDiameter() const { return drawAsDiameter_; }
60 MRMESH_API virtual void setDrawAsDiameter( bool value );
61
63 [[nodiscard]] bool getIsSpherical() const { return isSpherical_; }
64 virtual void setIsSpherical( bool value ) { isSpherical_ = value; }
65
68 [[nodiscard]] float getVisualLengthMultiplier() const { return visualLengthMultiplier_; }
69 virtual void setVisualLengthMultiplier( float value ) { visualLengthMultiplier_ = value; }
70
72 [[nodiscard]] MRMESH_API float computeRadiusOrDiameter() const;
73
74 [[nodiscard]] MRMESH_API std::vector<std::string> getInfoLines() const override;
75
76protected:
78
79 MRMESH_API void swapBase_( Object& other ) override;
80
81 MRMESH_API void serializeFields_( Json::Value& root ) const override;
82 MRMESH_API void deserializeFields_( const Json::Value& root ) override;
83
84 MRMESH_API void setupRenderObject_() const override;
85
86 MRMESH_API void onWorldXfChanged_() override;
87
88private:
90
92 bool drawAsDiameter_ = false;
94 bool isSpherical_ = false;
95
98 float visualLengthMultiplier_ = 2 / 3.f;
99
101 mutable std::optional<float> cachedValue_;
102};
103
104}
Definition MRMeasurementObject.h:14
named object in the data model
Definition MRObject.h:62
Represents a radius measurement.
Definition MRRadiusMeasurementObject.h:13
MRMESH_API std::shared_ptr< Object > shallowClone() const override
MRMESH_API Vector3f getWorldNormal() const
The preferred radius normal, for non-spherical radiuses.
virtual void setVisualLengthMultiplier(float value)
Definition MRRadiusMeasurementObject.h:69
MRMESH_API void swapBase_(Object &other) override
swaps this object with other
static constexpr const char * StaticClassName() noexcept
Definition MRRadiusMeasurementObject.h:25
MRMESH_API Vector3f getWorldCenter() const
Get the center in world coordinates.
virtual MRMESH_API void setDrawAsDiameter(bool value)
virtual MRMESH_API void setLocalRadiusAsVector(const MR::Vector3f &radiusVec, const Vector3f &normal)
RadiusMeasurementObject(RadiusMeasurementObject &&) noexcept=default
MRMESH_API Vector3f getLocalCenter() const
Get the center in local coordinates.
RadiusMeasurementObject(ProtectedStruct, const RadiusMeasurementObject &obj)
For std::make_shared() in clone().
Definition MRRadiusMeasurementObject.h:32
MRMESH_API void setupRenderObject_() const override
virtual std::string classNameInPlural() const override
Definition MRRadiusMeasurementObject.h:29
MRMESH_API Vector3f getLocalNormal() const
virtual void setIsSpherical(bool value)
Definition MRRadiusMeasurementObject.h:64
void setLocalRadiusAsVector(const MR::Vector3f &radiusVec)
Same, but without a preferred normal.
Definition MRRadiusMeasurementObject.h:56
virtual MRMESH_API void setLocalCenter(const MR::Vector3f &center)
float getVisualLengthMultiplier() const
Definition MRRadiusMeasurementObject.h:68
bool getIsSpherical() const
Whether this is a sphere radius, as opposed to circle/cylinder radius.
Definition MRRadiusMeasurementObject.h:63
MRMESH_API std::vector< std::string > getInfoLines() const override
return several info lines that can better describe the object in the UI
virtual std::string className() const override
Definition MRRadiusMeasurementObject.h:26
bool getDrawAsDiameter() const
Whether we should draw this as a diameter instead of a radius.
Definition MRRadiusMeasurementObject.h:59
MRMESH_API Vector3f getWorldRadiusAsVector() const
The length of this vector is the radius, and the direction is the preferred line drawing direction.
MRMESH_API Vector3f getLocalRadiusAsVector() const
MRMESH_API float computeRadiusOrDiameter() const
Computes the radius/diameter value, as if by getLocalRadiusAsVector(), possibly multiplied by two if ...
MRMESH_API std::shared_ptr< Object > clone() const override
MRMESH_API void deserializeFields_(const Json::Value &root) override
const char * typeName() const override
Definition MRRadiusMeasurementObject.h:23
static constexpr const char * StaticClassNameInPlural() noexcept
Definition MRRadiusMeasurementObject.h:28
MRMESH_API void serializeFields_(Json::Value &root) const override
RadiusMeasurementObject(const RadiusMeasurementObject &other)=default
RadiusMeasurementObject()
Definition MRRadiusMeasurementObject.h:17
MRMESH_API void onWorldXfChanged_() override
Emits worldXfChangedSignal, but derived classes can add additional behavior to it.
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRObject.h:284