@@ -1667,6 +1667,59 @@ pcl::GreedyProjectionTriangulation<PointInT>::getTriangleList (const pcl::Polygo
1667
1667
#define PCL_INSTANTIATE_GreedyProjectionTriangulation (T ) \
1668
1668
template class PCL_EXPORTS pcl::GreedyProjectionTriangulation<T>;
1669
1669
1670
+ template <typename PointT>
1671
+ inline float
1672
+ pcl::computeTriangleMeshArea (const shared_ptr<pcl::PointCloud<PointT>>& cloud,
1673
+ std::vector<pcl::Vertices>& triangleMesh)
1674
+ {
1675
+ const pcl::PointCloud<PointT>::ConstPtr input_ = cloud;
1676
+ double area = 0 ;
1677
+ for (auto & triangle_ : triangleMesh) {
1678
+ if (triangle_.vertices .size () == 3 ) {
1679
+ const Eigen::Matrix<double , 3 , 1 > P (
1680
+ (*input_)[triangle_.vertices [0 ]].x - (*input_)[triangle_.vertices [2 ]].x ,
1681
+ (*input_)[triangle_.vertices [0 ]].y - (*input_)[triangle_.vertices [2 ]].y ,
1682
+ (*input_)[triangle_.vertices [0 ]].z - (*input_)[triangle_.vertices [2 ]].z );
1683
+ const Eigen::Matrix<double , 3 , 1 > Q (
1684
+ (*input_)[triangle_.vertices [1 ]].x - (*input_)[triangle_.vertices [2 ]].x ,
1685
+ (*input_)[triangle_.vertices [1 ]].y - (*input_)[triangle_.vertices [2 ]].y ,
1686
+ (*input_)[triangle_.vertices [1 ]].z - (*input_)[triangle_.vertices [2 ]].z );
1687
+ area += 0.5 * P.cross (Q).norm ();
1688
+ }
1689
+ }
1690
+ return area;
1691
+ }
1692
+
1693
+ template <typename PointT>
1694
+ inline float
1695
+ pcl::computeTriangleMeshArea (const shared_ptr<pcl::PointCloud<PointT>>& cloud,
1696
+ const shared_ptr<Indices>& indices,
1697
+ std::vector<pcl::Vertices>& triangleMesh)
1698
+ {
1699
+ const pcl::PointCloud<PointT>::ConstPtr input_ = cloud;
1700
+ double area = 0 ;
1701
+ for (auto & triangle_ : triangleMesh) {
1702
+ if (triangle_.vertices .size () == 3 ) {
1703
+ const Eigen::Matrix<double , 3 , 1 > P (
1704
+ (*input_)[(*indices_)[triangle_.vertices [0 ]]].x -
1705
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].x ,
1706
+ (*input_)[(*indices_)[triangle_.vertices [0 ]]].y -
1707
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].y ,
1708
+ (*input_)[(*indices_)[triangle_.vertices [0 ]]].z -
1709
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].z );
1710
+ const Eigen::Matrix<double , 3 , 1 > Q (
1711
+ (*input_)[(*indices_)[triangle_.vertices [1 ]]].x -
1712
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].x ,
1713
+ (*input_)[(*indices_)[triangle_.vertices [1 ]]].y -
1714
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].y ,
1715
+ (*input_)[(*indices_)[triangle_.vertices [1 ]]].z -
1716
+ (*input_)[(*indices_)[triangle_.vertices [2 ]]].z );
1717
+ area += 0.5 * P.cross (Q).norm ();
1718
+ }
1719
+ }
1720
+ return area;
1721
+ }
1722
+
1670
1723
#endif // PCL_SURFACE_IMPL_GP3_H_
1671
1724
1672
1725
0 commit comments