ConePrimitiveShape.h
Go to the documentation of this file.
1#ifndef CONEPRIMITIVESHAPE_HEADER
2#define CONEPRIMITIVESHAPE_HEADER
4#include "Cone.h"
5#include "LevMarFunc.h"
6
7#ifndef DLL_LINKAGE
8#define DLL_LINKAGE
9#endif
10
12{
13public:
14 size_t Identifier() const;
15
16 unsigned int
18 {
20 }
21
22 ConePrimitiveShape(const Cone& cone);
23 PrimitiveShape* Clone() const;
24 float Distance(const Vec3f& p) const;
25 float SignedDistance(const Vec3f& p) const;
26 float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
27 void
28 DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
29 void Project(const Vec3f& p, Vec3f* pp) const;
30 void Normal(const Vec3f& p, Vec3f* n) const;
31 unsigned int ConfidenceTests(unsigned int numTests,
32 float epsilon,
33 float normalThresh,
34 float rms,
35 const PointCloud& pc,
36 const MiscLib::Vector<size_t>& indices) const;
37 void Description(std::string* s) const;
38 bool Fit(const PointCloud& pc,
39 float epsilon,
40 float normalThresh,
44 float epsilon,
45 float normalThresh,
48 std::pair<size_t, float>* score) const;
50 void Serialize(std::ostream* o, bool binary = true) const;
51 size_t SerializedSize() const;
52
53 virtual void
54 Serialize(float* array) const
55 {
56 m_cone.Serialize(array);
57 }
58
59 virtual size_t
61 {
62 return m_cone.SerializedFloatSize();
63 }
64
65 void Transform(float scale, const Vec3f& translate);
66 void Transform(const GfxTL::MatrixXX<3, 3, float>& rot, const GfxTL::Vector3Df& trans);
67 void Visit(PrimitiveShapeVisitor* visitor) const;
69 const PointCloud& pc,
72 float distThresh,
74 bool Similar(float tolerance, const ConePrimitiveShape& shape) const;
75
76 const Cone&
77 Internal() const
78 {
79 return m_cone;
80 }
81
82 void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
83 void Parameters(
86 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
89 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
90 bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
91 void BitmapExtent(float epsilon,
93 MiscLib::Vector<std::pair<float, float>>* params,
94 size_t* uextent,
95 size_t* vextent);
96 void InBitmap(const std::pair<float, float>& param,
97 float epsilon,
99 size_t uextent,
100 size_t vextent,
101 std::pair<int, int>* inBmp) const;
103 float epsilon,
104 size_t uextent,
105 size_t vextent,
106 MiscLib::Vector<char>* bmp) 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);
124 bool InSpace(size_t u,
125 size_t v,
126 float epsilon,
128 size_t uextent,
129 size_t vextent,
130 Vec3f* p,
131 Vec3f* n) const;
132
133private:
134 template <class IteratorT>
135 void ParametersImpl(IteratorT begin,
136 IteratorT end,
137 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
138
139private:
140 Cone m_cone;
141};
142
143template <class IteratorT>
144void
145ConePrimitiveShape::ParametersImpl(IteratorT begin,
146 IteratorT end,
147 MiscLib::Vector<std::pair<float, float>>* bmpParams) const
148{
149 bmpParams->resize(end - begin);
150 size_t j = 0;
151 for (IteratorT i = begin; i != end; ++i, ++j)
152 {
153 m_cone.Parameters(*i, &(*bmpParams)[j]);
154 }
155 if (m_cone.Angle() < float(M_PI / 4)) // angle of cone less than 45 degrees
156 {
157 for (size_t j = 0; j < bmpParams->size(); ++j)
158 {
159 float r = m_cone.RadiusAtLength((*bmpParams)[j].first);
160 // convert to arc length and centralize
161 (*bmpParams)[j].second = ((*bmpParams)[j].second - float(M_PI)) * r;
162 }
163 }
164 else
165 {
166 for (size_t j = 0; j < bmpParams->size(); ++j)
167 {
168 float l = (*bmpParams)[j].first;
169 (*bmpParams)[j].first = std::sin((*bmpParams)[j].second) * l;
170 (*bmpParams)[j].second = std::cos((*bmpParams)[j].second) * l;
171 }
172 }
173}
174
176{
177public:
178 ConeLevMarFunc(const Cone& c) : m_cone(c)
179 {
180 }
181
182 float
183 operator()(const float* x) const
184 {
185 return m_cone.SignedDistance(*((const Vec3f*)x));
186 }
187
188 void
189 operator()(const float* x, float* gradient) const
190 {
191 m_cone.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
192 }
193
194private:
195 Cone m_cone;
196};
197
198#endif
#define float
Definition 16_Level.h:22
#define M_PI
Definition MathTools.h:17
class DLL_LINKAGE ConePrimitiveShape
constexpr T c
#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 void PreWrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, size_t uextent, size_t vextent, MiscLib::Vector< char > *bmp) const
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
void operator()(const float *x, float *gradient) const
ConeLevMarFunc(const Cone &c)
float operator()(const float *x) const
void SetExtent(const GfxTL::AABox< GfxTL::Vector2Df > &bbox)
ConePrimitiveShape(const Cone &cone)
const Cone & Internal() const
virtual void Serialize(float *array) const
unsigned int RequiredSamples() const
virtual size_t SerializedFloatSize() const
Definition Cone.h:25
@ RequiredSamples
Definition Cone.h:36
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
Definition Cone.cpp:492
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 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
Definition basic.h:18
VectorXD< 3, float > Vector3Df
Definition VectorXD.h:718
This file offers overloads of toIce() and fromIce() functions for STL container types.