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
55 enum class DistanceMode
56 {
57 euclidean,
58 euclideanWithSignedDeltasPerAxis,
59 euclideanWithAbsoluteDeltasPerAxis,
62 xAbsolute,
63 yAbsolute,
64 zAbsolute,
65 };
67 [[nodiscard]] MRMESH_API DistanceMode getDistanceMode() const;
68 MRMESH_API virtual void setDistanceMode( DistanceMode mode );
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
96 MRMESH_API void onWorldXfChanged_() override;
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}
Represents a distance measurement.
Definition MRDistanceMeasurementObject.h:14
Definition MRMeasurementObject.h:14
A base class for a data-model object that is a feature/measurement that can be compared between two m...
Definition MRObjectComparableWithReference.h:17
named object in the data model
Definition MRObject.h:62
virtual MRMESH_API void setLocalDelta(const MR::Vector3f &delta)
Set the delta vector in the local coordinates.
MRMESH_API Vector3f getLocalPoint() const
Get the starting point in local coordinates.
MRMESH_API void setComparisonTolerance(std::size_t i, std::optional< ComparisonTolerance > newTolerance) override
virtual MRMESH_API void setLocalPoint(const MR::Vector3f &point)
Set the start point in the local coordinates.
DistanceMeasurementObject(const DistanceMeasurementObject &other)=default
virtual std::string classNameInPlural() const override
Definition MRDistanceMeasurementObject.h:29
MRMESH_API void deserializeFields_(const Json::Value &root) override
static constexpr const char * StaticClassNameInPlural() noexcept
Definition MRDistanceMeasurementObject.h:28
MRMESH_API std::string_view getComparisonReferenceValueName(std::size_t i) const override
i goes up to numComparisonReferenceValues(), exclusive.
MRMESH_API float computeDistance() const
DistanceMeasurementObject()
The xf encodes the distance: the origin is one point, and (1,0,0) is another.
Definition MRDistanceMeasurementObject.h:17
MRMESH_API Vector3f getLocalDelta() const
MRMESH_API void serializeFields_(Json::Value &root) const override
virtual MRMESH_API void setDistanceMode(DistanceMode mode)
MRMESH_API std::optional< ComparisonTolerance > getComparisonTolerence(std::size_t i) const override
const char * typeName() const override
Definition MRDistanceMeasurementObject.h:23
MRMESH_API std::size_t numComparableProperties() const override
Implement ObjectComparableWithReference:
MRMESH_API void setupRenderObject_() const override
MRMESH_API Vector3f getWorldPoint() const
Get the starting point in world coordinates.
DistanceMeasurementObject(DistanceMeasurementObject &&) noexcept=default
MRMESH_API std::shared_ptr< Object > shallowClone() const override
DistanceMeasurementObject(ProtectedStruct, const DistanceMeasurementObject &obj)
For std::make_shared() in clone().
Definition MRDistanceMeasurementObject.h:32
MRMESH_API ComparisonReferenceValue getComparisonReferenceValue(std::size_t i) const override
virtual MRMESH_API void setIsNegative(bool value)
MRMESH_API std::string_view getComparablePropertyName(std::size_t i) const override
i goes up to numComparableProperties(), exclusive.
MRMESH_API Vector3f getWorldDelta() const
The delta from the starting point to the other point.
MRMESH_API void onWorldXfChanged_() override
Emits worldXfChangedSignal, but derived classes can add additional behavior to it.
MRMESH_API bool isNegative() const
Whether the distance should be displayed as a negative one.
MRMESH_API std::optional< ComparableProperty > computeComparableProperty(std::size_t i) const override
MRMESH_API std::shared_ptr< Object > clone() const override
static constexpr const char * StaticClassName() noexcept
Definition MRDistanceMeasurementObject.h:25
DistanceMode
Definition MRDistanceMeasurementObject.h:56
virtual std::string className() const override
Definition MRDistanceMeasurementObject.h:26
MRMESH_API DistanceMode getDistanceMode() const
Whether we should draw the individual X/Y/Z deltas in addition to the distance itself.
MRMESH_API void swapBase_(Object &other) override
swaps this object with other
MRMESH_API void setComparisonReferenceValue(std::size_t i, std::optional< ComparisonReferenceValue::Var > value) override
MRMESH_API std::vector< std::string > getInfoLines() const override
return several info lines that can better describe the object in the UI
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