| 727 | } |
| 728 | |
| 729 | bool TriangleMetric::faceConeTest(Point& p, int tri_idx) { |
| 730 | //m_ft_types[tri_idx] = VERTEX; |
| 731 | //m_ft_idx[tri_idx] = 0; |
| 732 | //if (vertexConeTest(p, tri_idx)) { |
| 733 | // return false; |
| 734 | //} |
| 735 | //m_ft_types[tri_idx] = VERTEX; |
| 736 | //m_ft_idx[tri_idx] = 1; |
| 737 | //if (vertexConeTest(p, tri_idx)) { |
| 738 | // return false; |
| 739 | //} |
| 740 | //m_ft_types[tri_idx] = VERTEX; |
| 741 | //m_ft_idx[tri_idx] = 2; |
| 742 | //if (vertexConeTest(p, tri_idx)) { |
| 743 | // return false; |
| 744 | //} |
| 745 | |
| 746 | //m_ft_types[tri_idx] = EDGE; |
| 747 | //m_ft_idx[tri_idx] = 0; |
| 748 | //if (edgeConeTest(p, tri_idx)) { |
| 749 | // return false; |
| 750 | //} |
| 751 | //m_ft_types[tri_idx] = EDGE; |
| 752 | //m_ft_idx[tri_idx] = 1; |
| 753 | //if (edgeConeTest(p, tri_idx)) { |
| 754 | // return false; |
| 755 | //} |
| 756 | //m_ft_types[tri_idx] = EDGE; |
| 757 | //m_ft_idx[tri_idx] = 2; |
| 758 | //if (edgeConeTest(p, tri_idx)) { |
| 759 | // return false; |
| 760 | //} |
| 761 | |
| 762 | //m_ft_types[tri_idx] = FACE; |
| 763 | //m_ft_idx[tri_idx] = 0; |
| 764 | //return true; |
| 765 | |
| 766 | |
| 767 | |
| 768 | Point& f1 = m_tris[tri_idx][0]; |
| 769 | Point& f2 = m_tris[tri_idx][1]; |
| 770 | Point& f3 = m_tris[tri_idx][2]; |
| 771 | Vector e1 = f2 - f1; |
| 772 | Vector e2 = f3 - f2; |
| 773 | Vector e3 = f1 - f3; |
| 774 | |
| 775 | // Check vertex cones. |
| 776 | Vector v = p - f1; |
| 777 | if (v * e1 < epsilon && v * e3 > -epsilon) { |
| 778 | m_ft_types[tri_idx] = VERTEX; |
| 779 | m_ft_idx[tri_idx] = 0; |
| 780 | return false; |
| 781 | } |
| 782 | v = p - f2; |
| 783 | if (v * e2 < epsilon && v * e1 > -epsilon) { |
| 784 | m_ft_types[tri_idx] = VERTEX; |
| 785 | m_ft_idx[tri_idx] = 1; |
| 786 | return false; |