TorusPrimitiveShape.h
Go to the documentation of this file.
1#ifndef TORUSPRIMITIVESHAPE_HEADER
2#define TORUSPRIMITIVESHAPE_HEADER
6#include "Torus.h"
7
8#ifndef DLL_LINKAGE
9#define DLL_LINKAGE
10#endif
11
13{
14public:
16
17 TorusPrimitiveShape() : m_parametrization(m_torus)
18 {
19 }
20
21 TorusPrimitiveShape(const Torus& torus);
23 size_t Identifier() const;
24
25 unsigned int
27 {
29 }
30
31 PrimitiveShape* Clone() const;
32 float Distance(const Vec3f& p) const;
33 float SignedDistance(const Vec3f& p) const;
34 float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
35 void
36 DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
37 void Project(const Vec3f& p, Vec3f* pp) const;
38 void Normal(const Vec3f& p, Vec3f* n) const;
39 unsigned int ConfidenceTests(unsigned int numTests,
40 float epsilon,
41 float normalThresh,
42 float rms,
43 const PointCloud& pc,
44 const MiscLib::Vector<size_t>& indices) const;
45 void Description(std::string* s) const;
46 // refitting
47 bool Fit(const PointCloud& pc,
48 float epsilon,
49 float normalThresh,
53 float epsilon,
54 float normalThresh,
57 std::pair<size_t, float>* score) const;
59 void Serialize(std::ostream* o, bool binary = true) const;
60 void Deserialize(std::istream* i, bool binary);
61 size_t SerializedSize() const;
62
63 virtual void
64 Serialize(float* array) const
65 {
66 m_torus.Serialize(array);
67 }
68
69 virtual size_t
71 {
72 return m_torus.SerializedFloatSize();
73 }
74
75 void Transform(float scale, const Vec3f& translate);
76 void Visit(PrimitiveShapeVisitor* visitor) const;
78 const PointCloud& pc,
81 float distThresh,
83 void OptimizeParametrization(const PointCloud& pc, size_t begin, size_t end, float epsilon);
84 bool Similar(float tolerance, const TorusPrimitiveShape& shape) const;
85
86 // implementation of BitmapPrimitiveShape
87 void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
88 void Parameters(
91 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
94 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
95 bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
96 void BitmapExtent(float epsilon,
98 MiscLib::Vector<std::pair<float, float>>* params,
99 size_t* uextent,
100 size_t* vextent);
101 void InBitmap(const std::pair<float, float>& param,
102 float epsilon,
104 size_t uextent,
105 size_t vextent,
106 std::pair<int, int>* inBmp) const;
108 float epsilon,
109 bool* uwrap,
110 bool* vwrap) const;
112 float epsilon,
113 size_t uextent,
114 size_t vextent,
115 MiscLib::Vector<int>* componentImg,
116 MiscLib::Vector<std::pair<int, size_t>>* labels) const;
117 void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
118 const MiscLib::Vector<int>& componentsImg,
119 size_t uextent,
120 size_t vextent,
121 float epsilon,
122 int label);
123 bool InSpace(size_t u,
124 size_t v,
125 float epsilon,
127 size_t uextent,
128 size_t vextent,
129 Vec3f* p,
130 Vec3f* n) const;
131
132 const Torus&
133 Internal() const
134 {
135 return m_torus;
136 }
137
138private:
139 template <class IteratorT>
140 void ParametersImpl(IteratorT begin,
141 IteratorT end,
142 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
143
144private:
145 Torus m_torus;
146 ParametrizationType m_parametrization;
147};
148
149template <class IteratorT>
150void
151TorusPrimitiveShape::ParametersImpl(IteratorT begin,
152 IteratorT end,
153 MiscLib::Vector<std::pair<float, float>>* bmpParams) const
154{
155 bmpParams->resize(end - begin);
156 size_t j = 0;
157 for (IteratorT i = begin; i != end; ++i, ++j)
158 {
159 m_parametrization.Parameters(*i, &(*bmpParams)[j]);
160 }
161}
162
164{
165public:
166 TorusLevMarFunc(const Torus& t) : m_torus(t)
167 {
168 }
169
170 float
171 operator()(const float* x) const
172 {
173 return m_torus.SignedDistance(*((const Vec3f*)x));
174 }
175
176 void
177 operator()(const float* x, float* gradient) const
178 {
179 m_torus.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
180 }
181
182private:
183 Torus m_torus;
184};
185
186#endif
class DLL_LINKAGE TorusPrimitiveShape
#define DLL_LINKAGE
Definition basic.h:12
unsigned int ConfidenceTests(unsigned int numTests, float epsilon, float normalThresh, float rms, const PointCloud &pc, const MiscLib::Vector< size_t > &indices) const
virtual void WrapComponents(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, size_t uextent, size_t vextent, MiscLib::Vector< int > *componentImg, MiscLib::Vector< std::pair< int, size_t > > *labels) const
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
virtual void WrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, bool *uwrap, bool *vwrap) const =0
virtual bool InSpace(float u, float v, Vec3f *p, Vec3f *n) const =0
virtual void InBitmap(const std::pair< float, float > &param, float epsilon, const GfxTL::AABox< GfxTL::Vector2Df > &bbox, size_t uextent, size_t vextent, std::pair< int, int > *inBmp) const =0
virtual void BitmapExtent(float epsilon, GfxTL::AABox< GfxTL::Vector2Df > *bbox, MiscLib::Vector< std::pair< float, float > > *params, size_t *uextent, size_t *vextent)=0
const Point * const_iterator
Definition Vector.h:25
PrimtiveShape is a shape primitive in conjunction with a parametrization.
virtual size_t SerializedSize() const =0
virtual void Project(const Vec3f &p, Vec3f *pp) const =0
virtual float NormalDeviation(const Vec3f &p, const Vec3f &n) const =0
virtual PrimitiveShape * LSFit(const PointCloud &pc, float epsilon, float normalThresh, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end, std::pair< size_t, float > *score) const =0
virtual void Visit(PrimitiveShapeVisitor *visitor) const =0
virtual void Transform(float scale, const Vec3f &translate)=0
virtual float SignedDistance(const Vec3f &p) const =0
virtual size_t Identifier() const =0
virtual void OptimizeParametrization(const PointCloud &pc, size_t begin, size_t end, float epsilon)
virtual LevMarFunc< float > * SignedDistanceFunc() const =0
virtual void Normal(const Vec3f &p, Vec3f *n) const =0
virtual void SuggestSimplifications(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end, float distThresh, MiscLib::Vector< MiscLib::RefCountPtr< PrimitiveShape > > *suggestions) const
virtual void Description(std::string *s) const =0
virtual void DistanceAndNormalDeviation(const Vec3f &p, const Vec3f &n, std::pair< float, float > *dn) const =0
virtual float Distance(const Vec3f &p) const =0
virtual void Serialize(std::ostream *o, bool binary=true) const =0
This is the one and only serialization function It stores all the parameters of the shape as well as ...
virtual bool Fit(const PointCloud &pc, float epsilon, float normalThresh, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)=0
virtual PrimitiveShape * Clone() const =0
TorusLevMarFunc(const Torus &t)
void operator()(const float *x, float *gradient) const
float operator()(const float *x) const
virtual void Serialize(float *array) const
unsigned int RequiredSamples() const
LowStretchTorusParametrization ParametrizationType
virtual size_t SerializedFloatSize() const
const Torus & Internal() const
Definition Torus.h:21
@ RequiredSamples
Definition Torus.h:25
Definition basic.h:18
This file offers overloads of toIce() and fromIce() functions for STL container types.