MeshLib C++ Docs
Loading...
Searching...
No Matches
MRDistanceMeasurementObject.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace MR
7{
10
11
14{
16public:
18
20 DistanceMeasurementObject& operator=( DistanceMeasurementObject&& ) noexcept = default;
21
22 constexpr static const char* StaticTypeName() noexcept { return "DistanceMeasurementObject"; }
23 const char* typeName() const override { return StaticTypeName(); }
24
25 constexpr static const char* StaticClassName() noexcept { return "Distance"; }
26 virtual std::string className() const override { return StaticClassName(); }
27
28 constexpr static const char* StaticClassNameInPlural() noexcept { return "Distances"; }
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 getWorldPoint() const;
40 [[nodiscard]] MRMESH_API Vector3f getLocalPoint() const;
41
43 [[nodiscard]] MRMESH_API Vector3f getWorldDelta() const;
44 [[nodiscard]] MRMESH_API Vector3f getLocalDelta() const;
45
47 MRMESH_API virtual void setLocalPoint( const MR::Vector3f& point );
49 MRMESH_API virtual void setLocalDelta( const MR::Vector3f& delta );
50
52 [[nodiscard]] MRMESH_API bool isNegative() const;
53 MRMESH_API virtual void setIsNegative( bool value );
54
66
69
72 [[nodiscard]] MRMESH_API float computeDistance() const;
73
74 [[nodiscard]] MRMESH_API std::vector<std::string> getInfoLines() const override;
75
77 [[nodiscard]] MRMESH_API std::size_t numComparableProperties() const override;
78 [[nodiscard]] MRMESH_API std::string_view getComparablePropertyName( std::size_t i ) const override;
79 [[nodiscard]] MRMESH_API std::optional<ComparableProperty> computeComparableProperty( std::size_t i ) const override;
80 [[nodiscard]] MRMESH_API std::optional<ComparisonTolerance> getComparisonTolerence( std::size_t i ) const override;
81 MRMESH_API void setComparisonTolerance( std::size_t i, std::optional<ComparisonTolerance> newTolerance ) override;
82 MRMESH_API std::string_view getComparisonReferenceValueName( std::size_t i ) const override;
83 [[nodiscard]] MRMESH_API ComparisonReferenceValue getComparisonReferenceValue( std::size_t i ) const override;
84 MRMESH_API void setComparisonReferenceValue( std::size_t i, std::optional<ComparisonReferenceValue::Var> value ) override;
85
86protected:
88
89 MRMESH_API void swapBase_( Object& other ) override;
90
91 MRMESH_API void serializeFields_( Json::Value& root ) const override;
92 MRMESH_API void deserializeFields_( const Json::Value& root ) override;
93
94 MRMESH_API void setupRenderObject_() const override;
95
97
98private:
100
102 bool isNegative_ = false;
103
105 DistanceMode perCoordDeltas_ = DistanceMode::euclidean;
106
108 mutable std::optional<float> cachedValue_;
109
110 std::optional<ComparisonTolerance> tolerance_;
111
112 std::optional<float> referenceValue_;
113};
114
115}
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
named object in the data model
Definition MRObject.h:62
void setupRenderObject_() const override
virtual void setLocalPoint(const MR::Vector3f &point)
Set the start point in the local coordinates.
ComparisonReferenceValue getComparisonReferenceValue(std::size_t i) const override
DistanceMeasurementObject(const DistanceMeasurementObject &other)=default
ObjectComparableWithReference()=default
We have no member variables, so lack of the implicit copy operations wouldn't matter,...
void onWorldXfChanged_() override
Emits worldXfChangedSignal, but derived classes can add additional behavior to it.
virtual std::string classNameInPlural() const override
Definition MRDistanceMeasurementObject.h:29
static constexpr const char * StaticClassNameInPlural() noexcept
Definition MRDistanceMeasurementObject.h:28
DistanceMeasurementObject()
The xf encodes the distance: the origin is one point, and (1,0,0) is another.
Definition MRDistanceMeasurementObject.h:17
virtual void setLocalDelta(const MR::Vector3f &delta)
Set the delta vector in the local coordinates.
Vector3f getWorldPoint() const
Get the starting point in world coordinates.
std::shared_ptr< Object > shallowClone() const override
std::shared_ptr< Object > clone() const override
DistanceMode getDistanceMode() const
Whether we should draw the individual X/Y/Z deltas in addition to the distance itself.
const char * typeName() const override
Definition MRDistanceMeasurementObject.h:23
Vector3f getWorldDelta() const
The delta from the starting point to the other point.
std::optional< ComparisonTolerance > getComparisonTolerence(std::size_t i) const override
DistanceMeasurementObject(DistanceMeasurementObject &&) noexcept=default
std::size_t numComparableProperties() const override
Implement ObjectComparableWithReference:
std::string_view getComparisonReferenceValueName(std::size_t i) const override
i goes up to numComparisonReferenceValues(), exclusive.
DistanceMeasurementObject(ProtectedStruct, const DistanceMeasurementObject &obj)
For std::make_shared() in clone().
Definition MRDistanceMeasurementObject.h:32
void setComparisonReferenceValue(std::size_t i, std::optional< ComparisonReferenceValue::Var > value) override
std::string_view getComparablePropertyName(std::size_t i) const override
i goes up to numComparableProperties(), exclusive.
void setComparisonTolerance(std::size_t i, std::optional< ComparisonTolerance > newTolerance) override
virtual void setDistanceMode(DistanceMode mode)
std::optional< ComparableProperty > computeComparableProperty(std::size_t i) const override
void serializeFields_(Json::Value &root) const override
Vector3f getLocalDelta() const
static constexpr const char * StaticClassName() noexcept
Definition MRDistanceMeasurementObject.h:25
static constexpr const char * StaticTypeName() noexcept
Definition MRDistanceMeasurementObject.h:22
DistanceMode
Definition MRDistanceMeasurementObject.h:56
bool isNegative() const
Whether the distance should be displayed as a negative one.
virtual std::string className() const override
Definition MRDistanceMeasurementObject.h:26
void deserializeFields_(const Json::Value &root) override
void swapBase_(Object &other) override
swaps this object with other
std::vector< std::string > getInfoLines() const override
return several info lines that can better describe the object in the UI
virtual void setIsNegative(bool value)
Vector3f getLocalPoint() const
Get the starting point in local coordinates.
@ other
Angle, normally float. Measure in radians.
Definition MRFeatureObject.h:27
@ xAbsolute
Definition MRDistanceMeasurementObject.h:62
@ euclidean
Definition MRDistanceMeasurementObject.h:57
@ euclideanWithSignedDeltasPerAxis
Euclidean distance.
Definition MRDistanceMeasurementObject.h:58
@ yAbsolute
Definition MRDistanceMeasurementObject.h:63
@ euclideanWithAbsoluteDeltasPerAxis
Euclidean distance, but also display per-axis deltas with signs.
Definition MRDistanceMeasurementObject.h:59
@ zAbsolute
Definition MRDistanceMeasurementObject.h:64
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
This can't be std::optional<Var>, because we still need the variant to know the correct type.
Definition MRObjectComparableWithReference.h:90
Definition MRObject.h:284