34 m_sphere(s), m_parametrization(m_sphere)
41 m_parametrization.Shape(m_sphere);
55 size_t upperuextent, uppervextent, loweruextent, lowervextent;
60 i->read((
char*)&size,
sizeof(size));
64 i->read((
char*)&bboxUpper,
sizeof(bboxUpper));
66 i->read((
char*)&upperuextent,
sizeof(upperuextent));
67 i->read((
char*)&uppervextent,
sizeof(uppervextent));
68 for (
size_t j = 0; j < size; ++j)
72 i->read((
char*)&numPolys,
sizeof(numPolys));
73 for (
size_t k = 0; k < numPolys; ++k)
77 i->read((
char*)&numPoints,
sizeof(numPoints));
79 for (
size_t l = 0; l < numPoints; ++l)
81 i->read((
char*)&pp,
sizeof(pp));
88 i->read((
char*)&size,
sizeof(size));
92 i->read((
char*)&bboxLower,
sizeof(bboxLower));
94 i->read((
char*)&loweruextent,
sizeof(loweruextent));
95 i->read((
char*)&lowervextent,
sizeof(lowervextent));
96 for (
size_t j = 0; j < size; ++j)
100 i->read((
char*)&numPolys,
sizeof(numPolys));
101 for (
size_t k = 0; k < numPolys; ++k)
105 i->read((
char*)&numPoints,
sizeof(numPoints));
107 for (
size_t l = 0; l < numPoints; ++l)
109 i->read((
char*)&pp,
sizeof(pp));
123 (*i) >> bboxUpper.
Min()[0] >> bboxUpper.
Max()[0] >> bboxUpper.
Min()[1] >>
126 (*i) >> upperuextent >> uppervextent;
127 for (
size_t j = 0; j < size; ++j)
132 for (
size_t k = 0; k < numPolys; ++k)
138 for (
size_t l = 0; l < numPoints; ++l)
140 (*i) >> pp[0] >> pp[1];
150 (*i) >> bboxLower.
Min()[0] >> bboxLower.
Max()[0] >> bboxLower.
Min()[1] >>
153 (*i) >> loweruextent >> lowervextent;
154 for (
size_t j = 0; j < size; ++j)
159 for (
size_t k = 0; k < numPolys; ++k)
165 for (
size_t l = 0; l < numPoints; ++l)
167 (*i) >> pp[0] >> pp[1];
185 return m_sphere.Distance(p);
191 return m_sphere.SignedDistance(p);
198 m_sphere.Normal(p, &normal);
199 return n.dot(normal);
205 std::pair<float, float>* dn)
const
208 dn->first = m_sphere.DistanceAndNormal(p, &normal);
209 dn->second = n.dot(normal);
215 m_sphere.Project(p, pp);
221 m_sphere.Normal(p, n);
233 numTests, epsilon, normalThresh, rms, pc, indices);
254 m_parametrization.Shape(m_sphere);
266 std::pair<size_t, float>* score)
const
292 m_sphere.Serialize(binary, o);
293 m_parametrization.Serialize(o, binary);
303 m_sphere.Init(binary, i);
304 m_parametrization.Shape(m_sphere);
305 m_parametrization.Deserialize(i, binary);
311 return m_sphere.SerializedSize() + m_parametrization.SerializedSize() + 1;
323 m_sphere.Transform(scale, translate);
329 visitor->
Visit(*
this);
345 size_t c = samples.
size() / 2;
349 for (
unsigned int i = 0; i < 5; ++i, u += uStep)
352 for (
unsigned int j = 0; j < 5; ++j, v += vStep)
353 m_parametrization.InSpace(u, v, &samples[i * 5 + j], &samples[i * 5 + j +
c]);
360 for (
size_t i = 0; i <
c; ++i)
361 if (plane.
Distance(samples[i]) > distThresh)
369 suggestions->back()->Release();
440 m_parametrization.Optimize(
458 return m_sphere.Radius() <= (1.f + tolerance) * shape.m_sphere.
Radius() &&
459 (1.f + tolerance) * m_sphere.Radius() >= shape.m_sphere.
Radius();
465 m_parametrization.Parameters(p, param);
474 ParametersImpl(begin, end, bmpParams);
483 ParametersImpl(begin, end, bmpParams);
489 return m_parametrization.InSpace(u, v, p, n);
499 *uextent = std::ceil((bbox->
Max()[0] - bbox->
Min()[0]) / epsilon);
500 *vextent = std::ceil((bbox->
Max()[1] - bbox->
Min()[1]) / epsilon);
509 std::pair<int, int>* inBmp)
const
511 inBmp->first = std::floor((param.first - bbox.
Min()[0]) / epsilon);
512 inBmp->second = std::floor((param.second - bbox.
Min()[1]) / epsilon);
521 m_parametrization.WrapBitmap(bbox, epsilon, uwrap, vwrap);
532 m_parametrization.WrapComponents(bbox, epsilon, uextent, vextent, componentImg, labels);
545 return m_parametrization.InSpace(
546 (u + .5f) * epsilon + bbox.
Min()[0], (v + .5f) * epsilon + bbox.
Min()[1], p, n);
class DLL_LINKAGE PlanePrimitiveShape
MiscLib::performance_t totalTime_sphereConnected
unsigned int ConfidenceTests(unsigned int numTests, float epsilon, float normalThresh, float rms, const PointCloud &pc, const MiscLib::Vector< size_t > &indices) const
GfxTL::AABox< GfxTL::Vector2Df > m_extBbox
void resize(size_type s, const value_type &v)
const Point * const_iterator
bool LeastSquaresFit(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
float Distance(const Vec3f &pos) const
virtual void Visit(const PlanePrimitiveShape &plane)=0
PrimtiveShape is a shape primitive in conjunction with a parametrization.
bool Similar(float tolerance, const SpherePrimitiveShape &shape) const
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
void DistanceAndNormalDeviation(const Vec3f &p, const Vec3f &n, std::pair< float, float > *dn) const
void Deserialize(std::istream *i, bool binary)
unsigned int ConfidenceTests(unsigned int numTests, float epsilon, float normalThresh, float rms, const PointCloud &pc, const MiscLib::Vector< size_t > &indices) const
size_t SerializedSize() const
float SignedDistance(const Vec3f &p) const
float NormalDeviation(const Vec3f &p, const Vec3f &n) const
bool Init(bool binary, std::istream *i)
PrimitiveShape * Clone() const
void Normal(const Vec3f &p, Vec3f *n) const
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
void InBitmap(const std::pair< float, float > ¶m, float epsilon, const GfxTL::AABox< GfxTL::Vector2Df > &bbox, size_t uextent, size_t vextent, std::pair< int, int > *inBmp) const
void Transform(float scale, const Vec3f &translate)
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
size_t Identifier() const
void Visit(PrimitiveShapeVisitor *visitor) const
void Project(const Vec3f &p, Vec3f *pp) const
void OptimizeParametrization(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end, float epsilon)
LevMarFunc< float > * SignedDistanceFunc() const
bool Fit(const PointCloud &pc, float epsilon, float normalThresh, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
void WrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, bool *uwrap, bool *vwrap) const
float Distance(const Vec3f &p) const
void Serialize(std::ostream *o, bool binary=true) const
This is the one and only serialization function It stores all the parameters of the shape as well as ...
void BitmapExtent(float epsilon, GfxTL::AABox< GfxTL::Vector2Df > *bbox, MiscLib::Vector< std::pair< float, float > > *params, size_t *uextent, size_t *vextent)
void Description(std::string *s) const
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
bool InSpace(float u, float v, Vec3f *p, Vec3f *n) const
bool LeastSquaresFit(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
IndexedIterator< IndexIteratorT, IteratorT > IndexIterate(IndexIteratorT idxIt, IteratorT it)