MeshLib C++ Docs
Loading...
Searching...
No Matches
MRObjectComparableWithReference.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMesh/MRMeshFwd.h"
4#include "MRMesh/MRVector3.h"
5
6#include <optional>
7#include <variant>
8
9namespace MR
10{
13
14
17{
18 public:
19 virtual ~ObjectComparableWithReference() = default;
20
27
28
30
32 [[nodiscard]] virtual std::size_t numComparableProperties() const = 0;
33
35 [[nodiscard]] virtual std::string_view getComparablePropertyName( std::size_t i ) const = 0;
36
38 {
39 float value = 0;
40
45 std::optional<float> referenceValue = 0.f;
46 };
47
53 [[nodiscard]] virtual std::optional<ComparableProperty> computeComparableProperty( std::size_t i ) const = 0;
54
55
57
59 {
61 float positive = 0;
64 float negative = 0;
65 };
66
69 [[nodiscard]] virtual std::optional<ComparisonTolerance> getComparisonTolerence( std::size_t i ) const = 0;
70
73 virtual void setComparisonTolerance( std::size_t i, std::optional<ComparisonTolerance> newTolerance ) = 0;
74
77 [[nodiscard]] virtual bool comparisonToleranceIsAlwaysOnlyPositive( std::size_t i ) const { (void)i; return false; }
78
79
81
83 [[nodiscard]] virtual std::size_t numComparisonReferenceValues() const { return numComparableProperties(); }
84
86 [[nodiscard]] virtual std::string_view getComparisonReferenceValueName( std::size_t i ) const = 0;
87
90 {
91 using Var = std::variant<float, Vector3f>;
92
93 bool isSet = false;
94
97 };
98
102 [[nodiscard]] virtual ComparisonReferenceValue getComparisonReferenceValue( std::size_t i ) const = 0;
107 virtual void setComparisonReferenceValue( std::size_t i, std::optional<ComparisonReferenceValue::Var> value ) = 0;
108 void setComparisonReferenceVal( std::size_t i, const ComparisonReferenceValue& value )
109 {
110 if ( value.isSet )
111 setComparisonReferenceValue( i, value.var );
112 else
113 setComparisonReferenceValue( i, std::nullopt );
114 }
115};
116
117}
A base class for a data-model object that is a feature/measurement that can be compared between two m...
Definition MRObjectComparableWithReference.h:17
void setComparisonReferenceVal(std::size_t i, const ComparisonReferenceValue &value)
Definition MRObjectComparableWithReference.h:108
virtual ComparisonReferenceValue getComparisonReferenceValue(std::size_t i) const =0
virtual std::optional< ComparableProperty > computeComparableProperty(std::size_t i) const =0
ObjectComparableWithReference()=default
We have no member variables, so lack of the implicit copy operations wouldn't matter,...
ObjectComparableWithReference & operator=(ObjectComparableWithReference &&)=default
virtual std::size_t numComparableProperties() const =0
Comparing properties:
virtual void setComparisonTolerance(std::size_t i, std::optional< ComparisonTolerance > newTolerance)=0
virtual std::size_t numComparisonReferenceValues() const
Reference values:
Definition MRObjectComparableWithReference.h:83
virtual ~ObjectComparableWithReference()=default
bool isSet
Definition MRObjectComparableWithReference.h:93
ObjectComparableWithReference(ObjectComparableWithReference &&)=default
std::variant< float, Vector3f > Var
Definition MRObjectComparableWithReference.h:91
Var var
If isSet == false, this will hold zeroes, or some other default values.
Definition MRObjectComparableWithReference.h:96
virtual bool comparisonToleranceIsAlwaysOnlyPositive(std::size_t i) const
Definition MRObjectComparableWithReference.h:77
virtual std::string_view getComparisonReferenceValueName(std::size_t i) const =0
i goes up to numComparisonReferenceValues(), exclusive.
virtual void setComparisonReferenceValue(std::size_t i, std::optional< ComparisonReferenceValue::Var > value)=0
ObjectComparableWithReference & operator=(const ObjectComparableWithReference &)=default
virtual std::string_view getComparablePropertyName(std::size_t i) const =0
i goes up to numComparableProperties(), exclusive.
virtual std::optional< ComparisonTolerance > getComparisonTolerence(std::size_t i) const =0
ObjectComparableWithReference(const ObjectComparableWithReference &)=default
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRObjectComparableWithReference.h:38
This can't be std::optional<Var>, because we still need the variant to know the correct type.
Definition MRObjectComparableWithReference.h:90
Tolerances:
Definition MRObjectComparableWithReference.h:59