| 492 | //////////////////////////////////////////////////////////////////////////////// |
| 493 | |
| 494 | void |
| 495 | pcl::ihs::Integration::addToMesh(const PointIHS& pt_0, |
| 496 | const PointIHS& pt_1, |
| 497 | const PointIHS& pt_2, |
| 498 | const PointIHS& pt_3, |
| 499 | VertexIndex& vi_0, |
| 500 | VertexIndex& vi_1, |
| 501 | VertexIndex& vi_2, |
| 502 | VertexIndex& vi_3, |
| 503 | const MeshPtr& mesh) const |
| 504 | { |
| 505 | // Treated bitwise |
| 506 | // 2 - 1 |
| 507 | // | | |
| 508 | // 3 - 0 |
| 509 | const unsigned char is_finite = |
| 510 | static_cast<unsigned char>((1 * !std::isnan(pt_0.x)) | (2 * !std::isnan(pt_1.x)) | |
| 511 | (4 * !std::isnan(pt_2.x)) | (8 * !std::isnan(pt_3.x))); |
| 512 | |
| 513 | switch (is_finite) { |
| 514 | case 7: |
| 515 | this->addToMesh(pt_0, pt_1, pt_2, vi_0, vi_1, vi_2, mesh); |
| 516 | break; // 0-1-2 |
| 517 | case 11: |
| 518 | this->addToMesh(pt_0, pt_1, pt_3, vi_0, vi_1, vi_3, mesh); |
| 519 | break; // 0-1-3 |
| 520 | case 13: |
| 521 | this->addToMesh(pt_0, pt_2, pt_3, vi_0, vi_2, vi_3, mesh); |
| 522 | break; // 0-2-3 |
| 523 | case 14: |
| 524 | this->addToMesh(pt_1, pt_2, pt_3, vi_1, vi_2, vi_3, mesh); |
| 525 | break; // 1-2-3 |
| 526 | case 15: // 0-1-2-3 |
| 527 | { |
| 528 | if (!distanceThreshold(pt_0, pt_1, pt_2, pt_3)) |
| 529 | break; |
| 530 | if (!vi_0.isValid()) |
| 531 | vi_0 = mesh->addVertex(pt_0); |
| 532 | if (!vi_1.isValid()) |
| 533 | vi_1 = mesh->addVertex(pt_1); |
| 534 | if (!vi_2.isValid()) |
| 535 | vi_2 = mesh->addVertex(pt_2); |
| 536 | if (!vi_3.isValid()) |
| 537 | vi_3 = mesh->addVertex(pt_3); |
| 538 | if (vi_0 == vi_1 || vi_0 == vi_2 || vi_0 == vi_3 || vi_1 == vi_2 || vi_1 == vi_3 || |
| 539 | vi_2 == vi_3) { |
| 540 | return; |
| 541 | } |
| 542 | mesh->addTrianglePair(vi_0, vi_1, vi_2, vi_3); |
| 543 | |
| 544 | break; |
| 545 | } |
| 546 | } |
| 547 | } |
| 548 | |
| 549 | //////////////////////////////////////////////////////////////////////////////// |
| 550 |
no test coverage detected