void pcl::ihs::Integration::addToMesh (const PointIHS& pt_0, const PointIHS& pt_1, const PointIHS& pt_2, const PointIHS& pt_3, VertexIndex& vi_0, VertexIndex& vi_1, VertexIndex& vi_2, VertexIndex& vi_3, const MeshPtr& mesh) const { // Treated bitwise // 2 - 1 // | | // 3 - 0 const unsigned char is_finite = static_cast <unsigned char> ( (1 * !boost::math::isnan (pt_0.x)) | (2 * !boost::math::isnan (pt_1.x)) | (4 * !boost::math::isnan (pt_2.x)) | (8 * !boost::math::isnan (pt_3.x))); switch (is_finite) { case 7: this->addToMesh (pt_0, pt_1, pt_2, vi_0, vi_1, vi_2, mesh); break; // 0-1-2 case 11: this->addToMesh (pt_0, pt_1, pt_3, vi_0, vi_1, vi_3, mesh); break; // 0-1-3 case 13: this->addToMesh (pt_0, pt_2, pt_3, vi_0, vi_2, vi_3, mesh); break; // 0-2-3 case 14: this->addToMesh (pt_1, pt_2, pt_3, vi_1, vi_2, vi_3, mesh); break; // 1-2-3 case 15: // 0-1-2-3 { if (!distanceThreshold (pt_0, pt_1, pt_2, pt_3)) break; if (!vi_0.isValid ()) vi_0 = mesh->addVertex (pt_0); if (!vi_1.isValid ()) vi_1 = mesh->addVertex (pt_1); if (!vi_2.isValid ()) vi_2 = mesh->addVertex (pt_2); if (!vi_3.isValid ()) vi_3 = mesh->addVertex (pt_3); if (vi_0==vi_1 || vi_0==vi_2 || vi_0==vi_3 || vi_1==vi_2 || vi_1==vi_3 || vi_2==vi_3) { return; } mesh->addTrianglePair (vi_0, vi_1, vi_2, vi_3); break; } } }