PlanePrimitiveShape.h
Go to the documentation of this file.
1#ifndef PLANEPRIMITIVESHAPE_HEADER
2#define PLANEPRIMITIVESHAPE_HEADER
4#include "LevMarFunc.h"
5#include "Plane.h"
6#include <GfxTL/AABox.h>
8#include <GfxTL/MatrixXX.h>
9#include <GfxTL/VectorXD.h>
10
11#ifndef DLL_LINKAGE
12#define DLL_LINKAGE
13#endif
14
16{
17public:
18 PlanePrimitiveShape(const Vec3f& a, const Vec3f& b, const Vec3f& c);
19 PlanePrimitiveShape(const Plane& plane);
20 size_t Identifier() const;
21
22 unsigned int
24 {
26 }
27
28 PrimitiveShape* Clone() const;
29 float Distance(const Vec3f& p) const;
30 float SignedDistance(const Vec3f& p) const;
31 float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
32 void
33 DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
34 void Project(const Vec3f& p, Vec3f* pp) const;
35 void Normal(const Vec3f& p, Vec3f* n) const;
36 unsigned int ConfidenceTests(unsigned int numTests,
37 float epsilon,
38 float normalThresh,
39 float rms,
40 const PointCloud& pc,
41 const MiscLib::Vector<size_t>& indices) const;
42 void Description(std::string* s) const;
43 bool Fit(const PointCloud& pc,
44 float epsilon,
45 float normalThresh,
49 float epsilon,
50 float normalThresh,
53 std::pair<size_t, float>* score) const;
55 void Serialize(std::ostream* o, bool binary = true) const;
56 size_t SerializedSize() const;
57
58 virtual void
59 Serialize(float* array) const
60 {
61 m_plane.Serialize(array);
62 }
63
64 virtual size_t
66 {
67 return m_plane.SerializedFloatSize();
68 }
69
70 void Transform(float scale, const Vec3f& translate);
71 void Transform(const GfxTL::MatrixXX<3, 3, float>& rot, const GfxTL::Vector3Df& trans);
72 void Visit(PrimitiveShapeVisitor* visitor) const;
73 bool Similar(float tolerance, const PlanePrimitiveShape&) const;
74
75 const Plane&
76 Internal() const
77 {
78 return m_plane;
79 }
80
81 void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
82 void Parameters(
85 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
88 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
89 bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
90 void BitmapExtent(float epsilon,
92 MiscLib::Vector<std::pair<float, float>>* params,
93 size_t* uextent,
94 size_t* vextent);
95 void InBitmap(const std::pair<float, float>& param,
96 float epsilon,
98 size_t uextent,
99 size_t vextent,
100 std::pair<int, int>* inBmp) const;
102 float epsilon,
103 bool* uwrap,
104 bool* vwrap) const;
105 void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
106 const MiscLib::Vector<int>& componentsImg,
107 size_t uextent,
108 size_t vextent,
109 float epsilon,
110 int label);
111 bool InSpace(size_t u,
112 size_t v,
113 float epsilon,
115 size_t uextent,
116 size_t vextent,
117 Vec3f* p,
118 Vec3f* n) const;
119
120private:
121 template <class IteratorT>
122 void ParametersImpl(IteratorT begin,
123 IteratorT end,
124 MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
125
126private:
127 Plane m_plane;
129};
130
131template <class IteratorT>
132void
133PlanePrimitiveShape::ParametersImpl(IteratorT begin,
134 IteratorT end,
135 MiscLib::Vector<std::pair<float, float>>* bmpParams) const
136{
137 bmpParams->resize(end - begin);
138 size_t j = 0;
139 for (IteratorT i = begin; i != end; ++i, ++j)
140 {
141 Vec3f pp = *i - m_plane.getPosition();
142 (*bmpParams)[j].first = pp.dot(m_hcs[0].Data());
143 (*bmpParams)[j].second = pp.dot(m_hcs[1].Data());
144 }
145}
146
148{
149public:
150 PlaneLevMarFunc(const Plane& plane)
151 {
152 for (unsigned int i = 0; i < 3; ++i)
153 {
154 m_plane[i] = plane.getNormal()[i];
155 }
156 m_plane[3] = plane.SignedDistToOrigin();
157 }
158
159 float
160 operator()(const float* x) const
161 {
162 return m_plane[0] * x[0] + m_plane[1] * x[1] + m_plane[2] * x[2] - m_plane[3];
163 }
164
165 void
166 operator()(const float* x, float* gradient) const
167 {
168 for (unsigned int i = 0; i < 3; ++i)
169 {
170 gradient[i] = m_plane[i];
171 }
172 }
173
174private:
175 GfxTL::Vector4Df m_plane;
176};
177
178#endif
class DLL_LINKAGE PlanePrimitiveShape
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 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
PlaneLevMarFunc(const Plane &plane)
void operator()(const float *x, float *gradient) const
float operator()(const float *x) const
const Plane & Internal() const
virtual void Serialize(float *array) const
unsigned int RequiredSamples() const
virtual size_t SerializedFloatSize() const
PlanePrimitiveShape(const Vec3f &a, const Vec3f &b, const Vec3f &c)
Definition Plane.h:19
const Vec3f & getNormal() const
Definition Plane.h:72
@ RequiredSamples
Definition Plane.h:23
float SignedDistToOrigin() const
Definition Plane.h:86
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 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
float dot(const Vec3f &v) const
Definition basic.h:104
VectorXD< 3, float > Vec3f
Definition VectorXD.h:733
VectorXD< 4, float > Vector4Df
Definition VectorXD.h:720
VectorXD< 3, float > Vector3Df
Definition VectorXD.h:718
This file offers overloads of toIce() and fromIce() functions for STL container types.