@@ -1667,6 +1667,59 @@ pcl::GreedyProjectionTriangulation<PointInT>::getTriangleList (const pcl::Polygo
16671667#define PCL_INSTANTIATE_GreedyProjectionTriangulation (T ) \
16681668 template class PCL_EXPORTS pcl::GreedyProjectionTriangulation<T>;
16691669
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+
16701723#endif // PCL_SURFACE_IMPL_GP3_H_
16711724
16721725
0 commit comments