曲面数据文件的生成

生成vtkSurfaceReconstructionFilter 曲面数据


数组生成vtk可以调用的曲面数据

曲面数据文件的生成

在搜索生成VTK曲面时总是会看到很多代码上来就贴出一段不知道怎么生成的点数组,或者就是直接读一个保存很多点的文件,很是不解。实际使用时我们可能最先得到的就是一个有不同标量值的数组。
假设现在有一个N*M的二维数组DataArray,现在我们来生成这样的一个点集,并保存成 本地文件:

  vtkPolyData plydata = vtkPolyData.New();
  vtkPoints pts = vtkPoints.New();
  for (int y = 0; y < N; y++)
  {
      for (int x = 0; x < M; x++)
      {
          pts.InsertNextPoint(x, y, DataArray[y * M+ x]);
      }
  }
  plydata.SetPoints(pts);
  vtkSurfaceReconstructionFilter filter = vtkSurfaceReconstructionFilter.New();
  //filter 在实例化时默认的NeighborhoodSize为20,对于大多数应用程序,默认值20是够用的,
  //如果点的分布不均匀,可以指定更高的值。对某些曲面10就可以产生足够的效果。
  //该值越大,算法所需时间越长。
  filter.SetNeighborhoodSize(10);
  filter.SetInput(plydata);
  filter.Update();
  vtkContourFilter contour = vtkContourFilter.New();
  contour.SetInput(filter.GetOutput());
  contour.Update();
  
  //vtkPolyDataMapper pointMapper=vtkPolyDataMapper.New(); 
  //pointMapper.SetInput(contour.GetOutput()); 
  //vtkActor actor=vtkActor.New(); 
  //actor.SetMapper(pointMapper);
  
  vtkPolyDataWriter writer = vtkPolyDataWriter.New();
  writer.SetFileName("polydata.vtp");
  writer.SetInput(contour.GetOutput());
  writer.Write();

之后我们就可以读取这个文件并快速渲染出来

   vtkPolyDataReader reader = vtkPolyDataReader.New();
   reader.SetFileName("polydata.vtp");
   reader.Update();
   //此处无需再次调用vtkSurfaceReconstructionFilter
   vtkPolyDataMapper pointMapper=vtkPolyDataMapper.New(); 
   pointMapper.SetInput(reader.GetOutput()); 
   vtkActor actor=vtkActor.New(); 
   actor.SetMapper(pointMapper); 

由于vtkSurfaceReconstructionFilter 在执行时很耗时,一直没有找到好办法去优化,尝试在生成vtkPolyData时指定其单元属性,并没有达到预期效果。目前把上一段代码放在后台线程中执行,后一段代码放在UI线程中,以实现快速渲染

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值