很多时候我们需要测量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.youkuaiyun.com/Q1302182594/article/details/46391283
[2] http://vtk.1045678.n5.nabble.com/how-to-compute-the-length-of-spline-td5729305.html#a5729341