14 m_torus(torus), m_parametrization(m_torus)
21 m_parametrization.Shape(m_torus);
39 return m_torus.Distance(p);
45 return m_torus.SignedDistance(p);
52 m_torus.Normal(p, &normal);
59 std::pair<float, float>* dn)
const
62 dn->first = m_torus.DistanceAndNormal(p, &normal);
63 dn->second = n.dot(normal);
69 m_torus.Project(p, pp);
87 numTests, epsilon, normalThresh, rms, pc, indices);
93 std::ostringstream ostr;
94 ostr <<
"Torus (minor=" << m_torus.MinorRadius() <<
" major=" << m_torus.MajorRadius() <<
")";
110 m_parametrization.Shape(m_torus);
122 std::pair<size_t, float>* score)
const
153 m_torus.Serialize(binary, o);
154 m_parametrization.Serialize(o, binary);
164 m_torus.Init(binary, i);
165 m_parametrization.Shape(m_torus);
166 m_parametrization.Deserialize(i, binary);
172 return m_torus.SerializedSize() + m_parametrization.SerializedSize() + 1;
178 m_torus.Transform(scale, translate);
184 visitor->
Visit(*
this);
202 for (
unsigned int i = 0; i < 5; ++i, u += uStep)
205 for (
unsigned int j = 0; j < 5; ++j, v += vStep)
208 if (m_torus.MajorRadius() < m_torus.MinorRadius() * 2)
210 bmpu = u * (m_torus.MajorRadius() + m_torus.MinorRadius());
214 bmpu = u * m_torus.MajorRadius();
216 InSpace(bmpu, v * m_torus.MinorRadius(), &samples[i * 5 + j], &samples[i * 5 + j + 25]);
219 size_t c = samples.
size() / 2;
226 for (
size_t i = 0; i <
c; ++i)
227 if (cone.
Distance(samples[i]) > distThresh)
235 suggestions->back()->Release();
243 for (
size_t i = 0; i <
c; ++i)
244 if (cylinder.
Distance(samples[i]) > distThresh)
252 suggestions->back()->Release();
256 if (sphere.
Init(samples))
260 for (
size_t i = 0; i <
c; ++i)
261 if (sphere.
Distance(samples[i]) > distThresh)
269 suggestions->back()->Release();
276 for (
size_t i = 0; i <
c; ++i)
277 if (plane.
Distance(samples[i]) > distThresh)
285 suggestions->back()->Release();
367 return m_torus.MajorRadius() <= (1.f + tolerance) * shape.m_torus.
MajorRadius() &&
368 (1.f + tolerance) * m_torus.MajorRadius() >= shape.m_torus.
MajorRadius() &&
369 m_torus.MinorRadius() <= (1.f + tolerance) * shape.m_torus.
MinorRadius() &&
370 (1.f + tolerance) * m_torus.MinorRadius() >= shape.m_torus.
MinorRadius();
376 m_parametrization.Parameters(p, param);
385 ParametersImpl(begin, end, bmpParams);
394 ParametersImpl(begin, end, bmpParams);
400 return m_parametrization.InSpace(u, v, p, n);
410 *uextent = std::ceil((bbox->
Max()[0] - bbox->
Min()[0]) / epsilon);
411 *vextent = std::ceil((bbox->
Max()[1] - bbox->
Min()[1]) / epsilon);
420 std::pair<int, int>* inBmp)
const
422 inBmp->first = std::floor((param.first - bbox.
Min()[0]) / epsilon);
423 inBmp->second = std::floor((param.second - bbox.
Min()[1]) / epsilon);
432 m_parametrization.WrapBitmap(bbox, epsilon, uwrap, vwrap);
443 m_parametrization.WrapComponents(bbox, epsilon, uextent, vextent, componentImg, labels);
466 return m_parametrization.InSpace(
467 (u + .5f) * epsilon + bbox.
Min()[0], (v + .5f) * epsilon + bbox.
Min()[1], p, n);
class DLL_LINKAGE CylinderPrimitiveShape
class DLL_LINKAGE SpherePrimitiveShape
class DLL_LINKAGE ConePrimitiveShape
class DLL_LINKAGE PlanePrimitiveShape
MiscLib::performance_t totalTime_torusConnected
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
bool LeastSquaresFit(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
float Distance(const Vec3f &p) const
bool InitAverage(const MiscLib::Vector< Vec3f > &samples)
bool LeastSquaresFit(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
float Distance(const Vec3f &p) const
bool InitAverage(const MiscLib::Vector< Vec3f > &samples)
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 LeastSquaresFit(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)
float Distance(const Vec3f &p) const
bool Init(const MiscLib::Vector< Vec3f > &samples)
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
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, size_t begin, size_t end, float epsilon)
LevMarFunc< float > * SignedDistanceFunc() const
bool Similar(float tolerance, const TorusPrimitiveShape &shape) 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 SetExtent(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, const MiscLib::Vector< int > &componentsImg, size_t uextent, size_t vextent, float epsilon, int label)
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)
const float MajorRadius() const
const float MinorRadius() const
IndexedIterator< IndexIteratorT, IteratorT > IndexIterate(IndexIteratorT idxIt, IteratorT it)