SpherePrimitiveShape.h
Go to the documentation of this file.
1#ifndef SPHEREPRIMITIVESHAPE_HEADER
2#define SPHEREPRIMITIVESHAPE_HEADER
3#include <istream>
4
6#include "LevMarFunc.h"
8#include "Sphere.h"
9#include <GfxTL/AABox.h>
10#include <GfxTL/Covariance.h>
12#include <GfxTL/Jacobi.h>
13#include <GfxTL/MathHelper.h>
14#include <GfxTL/Mean.h>
15
16#ifndef DLL_LINKAGE
17#define DLL_LINKAGE
18#endif
19
21{
22public:
24
25 SpherePrimitiveShape() : m_parametrization(m_sphere)
26 {
27 }
28
31 size_t Identifier() const;
32
33 unsigned int
35 {
37 }
38
39 bool Init(bool binary, std::istream* i);
40 PrimitiveShape* Clone() const;
41 float Distance(const Vec3f& p) const;
42 float SignedDistance(const Vec3f& p) const;
43 float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
44 void
45 DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
46 void Project(const Vec3f& p, Vec3f* pp) const;
47 void Normal(const Vec3f& p, Vec3f* n) const;
48 unsigned int ConfidenceTests(unsigned int numTests,
49 float epsilon,
50 float normalThresh,
51 float rms,
52 const PointCloud& pc,
53 const MiscLib::Vector<size_t>& indices) const;
54 void Description(std::string* s) const;
55 bool Fit(const PointCloud& pc,
56 float epsilon,
57 float normalThresh,
61 float epsilon,
62 float normalThresh,
65 std::pair<size_t, float>* score) const;
67 void Serialize(std::ostream* o, bool binary = true) const;
68 void Deserialize(std::istream* i, bool binary);
69 size_t SerializedSize() const;
70
71 virtual void
72 Serialize(float* array) const
73 {
74 m_sphere.Serialize(array);
75 }
76
77 virtual size_t
79 {
80 return m_sphere.SerializedFloatSize();
81 }
82
83 void Transform(float scale, const Vec3f& translate);
84 void Visit(PrimitiveShapeVisitor* visitor) const;
86 const PointCloud& pc,
89 float distThresh,
94 float epsilon);
95 void OptimizeParametrization(const PointCloud& pc, size_t begin, size_t end, float epsilon);
96 bool Similar(float tolerance, const SpherePrimitiveShape& shape) const;
97
98 const Sphere&
99 Internal() const
100 {
101 return m_sphere;
102 }
103
104 // implementation of bitmap primitive shape
105 void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
106 void Parameters(
109 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
112 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
113 bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
114 void BitmapExtent(float epsilon,
116 MiscLib::Vector<std::pair<float, float>>* params,
117 size_t* uextent,
118 size_t* vextent);
119 void InBitmap(const std::pair<float, float>& param,
120 float epsilon,
122 size_t uextent,
123 size_t vextent,
124 std::pair<int, int>* inBmp) const;
126 float epsilon,
127 bool* uwrap,
128 bool* vwrap) const;
130 float epsilon,
131 size_t uextent,
132 size_t vextent,
133 MiscLib::Vector<int>* componentImg,
134 MiscLib::Vector<std::pair<int, size_t>>* labels) const;
135 bool InSpace(size_t u,
136 size_t v,
137 float epsilon,
139 size_t uextent,
140 size_t vextent,
141 Vec3f* p,
142 Vec3f* n) const;
143
144private:
145 template <class IteratorT>
146 void ParametersImpl(IteratorT begin,
147 IteratorT end,
148 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
149
150private:
151 Sphere m_sphere;
152 ParametrizationType m_parametrization;
153};
154
155template <class IteratorT>
156void
157SpherePrimitiveShape::ParametersImpl(IteratorT begin,
158 IteratorT end,
159 MiscLib::Vector<std::pair<float, float>>* bmpParams) const
160{
161 bmpParams->resize(end - begin);
162 size_t j = 0;
163 for (IteratorT i = begin; i != end; ++i, ++j)
164 {
165 m_parametrization.Parameters(*i, &(*bmpParams)[j]);
166 }
167}
168
170{
171public:
172 SphereLevMarFunc(const Sphere& s) : m_sphere(s)
173 {
174 }
175
176 float
177 operator()(const float* x) const
178 {
179 return m_sphere.SignedDistance(*((const Vec3f*)x));
180 }
181
182 void
183 operator()(const float* x, float* gradient) const
184 {
185 m_sphere.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
186 }
187
188private:
189 Sphere m_sphere;
190};
191
192#endif
class DLL_LINKAGE SpherePrimitiveShape
#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
bool Init(bool binary, std::istream *i)
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
void operator()(const float *x, float *gradient) const
SphereLevMarFunc(const Sphere &s)
float operator()(const float *x) const
const Sphere & Internal() const
virtual void Serialize(float *array) const
unsigned int RequiredSamples() const
virtual size_t SerializedFloatSize() const
LowStretchSphereParametrization ParametrizationType
@ RequiredSamples
Definition Sphere.h:32
Definition basic.h:18
This file offers overloads of toIce() and fromIce() functions for STL container types.