VTK系列——vtkPolyLine的长度计算

        很多时候我们需要测量3D模型的尺寸,其中不少需要求取截面线的长度。我们可以很容易得到很多点组成的vtkPolyLine;但是对于计算其长度,官方并没有给出相关的API函数;

        折线是由许多直线段组成的,可以通过将各线段长度进行累加从而得到折线的长度[2] ,也只是给出了思路,并没有具体的实现过程,这里我根据这种思路实现了vtkPolyLine的长度计算,供大家参考。

void Get_polyline_lens(vtkSmartPointer<vtkPolyLine> PolyLine,float& length)
{
	vtkSmartPointer<vtkCellArray> cells =
            vtkSmartPointer<vtkCellArray>::New();
    cells->InsertNextCell(PolyLine);
    //计算Polyline的长度
    vtkIdType *indices;
    vtkIdType npts;
    unsigned int line_count=0;
    std::vector<double> ls_contour;
    for(cells->InitTraversal();cells->GetNextCell(npts,indices);line_count++)
    {
        double len=0.0;
        for(vtkIdType i=0;i<npts;i++)
        {
            double p1[3];
            double p2[3];
            xHullPoints->GetPoint(indices[i],p1);
            xHullPoints->GetPoint(indices[(i+1)%npts],p2);
            len+=sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+
                    (p1[1]-p2[1])*(p1[1]-p2[1])+
                    (p1[2]-p2[2])*(p1[2]-p2[2])) ;
        }
        ls_contour.push_back(len);
    }
    //计算截面线的和
    if(!ls_contour.empty())
    {
        double sum=0.0;
        for(int i=0;i<ls_contour.size();i++)
        {

             sum+=ls_contour[i];
        }
        length=(float)sum*100;
    }
}

参考:

[1] https://blog.csdn.net/Q1302182594/article/details/46391283

[2] http://vtk.1045678.n5.nabble.com/how-to-compute-the-length-of-spline-td5729305.html#a5729341

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值