vtkPointDataToCellData使用

#include <vtkDataArray.h>
#include <vtkCellData.h>
#include <vtkDataSet.h>
#include <vtkDataSetTriangleFilter.h>
#include <vtkDoubleArray.h>
#include <vtkImageData.h>
#include <vtkPointData.h>
#include <vtkPointDataToCellData.h>
#include <vtkRTAnalyticSource.h>
#include <vtkUnstructuredGrid.h>
#include <vtkThreshold.h>
#include <vtkTestUtilities.h>

int TestPointDataToCellData (int, char*[])
{
  char const name [] = "RTData";
  vtkNew<vtkRTAnalyticSource> wavelet;
    wavelet->SetWholeExtent(-2, 2, -2, 2, -2, 2);
    wavelet->SetCenter(0, 0, 0);
    wavelet->SetMaximum(255);
    wavelet->SetStandardDeviation(.5);
    wavelet->SetXFreq(60);
    wavelet->SetYFreq(30);
    wavelet->SetZFreq(40);
    wavelet->SetXMag(10);
    wavelet->SetYMag(18);
    wavelet->SetZMag(5);
    wavelet->SetSubsampleRate(1);
    wavelet->Update();

  vtkNew<vtkDoubleArray> dist;
  dist->SetNumberOfComponents(1);
  dist->SetName("Dist");

  vtkImageData *original = wavelet->GetOutput();
  for (vtkIdType i = 0; i < original->GetNumberOfPoints(); ++i)
  {
    double p[3];
    original->GetPoint(i, p);
    dist->InsertNextValue(p[0]*p[0] + p[1]*p[1] + p[2]*p[2]);
  }
  original->GetPointData()->AddArray(dist);

  vtkNew<vtkPointDataToCellData> p2c;
  p2c->SetInputData(original);
  p2c->SetProcessAllArrays(false);
  p2c->AddPointDataArray(name);
  p2c->PassPointDataOff();
  p2c->Update();

  // test if selective CellDataToPointData operates on the correct
  int outNumPArrays = p2c->GetOutput()->GetPointData()->GetNumberOfArrays(); // should be 0
  int outNumCArrays = p2c->GetOutput()->GetCellData()->GetNumberOfArrays(); // should be 1
  std::string cArrayName = p2c->GetOutput()->GetCellData()->GetArrayName(0); // should be RTData

  if (outNumPArrays != 0)
  {
    std::cerr << "Wrong number of PointData arrays." << std::endl;
    return EXIT_FAILURE;
  }

  if (outNumCArrays != 1)
  {
    std::cerr << "Wrong number of CellData arrays." << std::endl;
    return EXIT_FAILURE;
  }

  if (cArrayName != name)
  {
    std::cerr << "Array name not matching original name." << std::endl;
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vtk.js 是一个用于在网页中显示和操作三维数据的 JavaScript 库。 它提供了许多过滤器,可以对三维数据进行操作,包括缩放、旋转、剪切、平移等。 要在 vtk.js 中编写一个自定义的过滤器,需要先引入 vtk.js 库,然后创建一个新的过滤器类。 这个类应该继承自 vtk.js 中的 vtkImageAlgorithm 类,并实现它的 requestData 方法。 requestData 方法是过滤器的主要方法,在这个方法中,可以通过调用 vtk.js 中的函数来对输入的三维数据进行操作,然后将结果输出到输出端。 下面是一个简单的 vtk.js 过滤器的示例代码,它实现了一个简单的翻转图像的功能: ``` import vtk from 'vtk.js'; class FlipFilter extends vtk.Algorithm { constructor() { super(); this.setInputData(input); } requestData(inData, outData) { const input = inData[0]; const output = outData[0]; // 获取输入数据的维度信息 const dims = input.getDimensions(); const [width, height, depth] = dims; // 创建一个新的图像数据,并将输入数据的内容复制到新的图像数据中 const outputData = vtk.DataArray.newInstance({ name: 'Output', numberOfComponents: 1, values: new Uint8Array(width * height * depth) }); outputData.copy(input.getPointData().getScalars()); // 对新的图像数据进行 ### 回答2: vtk.js是一个用于可视化的JavaScript库,它提供了一系列的过滤器(filter)用于在可视化过程中对数据进行处理和转换。要使用vtk.js的filter,首先需要引入相关的库文件。 vtk.js的过滤器有很多种类,比如数据转换,几何操作,数据分析等。每个过滤器都有对应的API和用法,我们可以根据需要选择合适的过滤器来处理数据。 以数据转换为例,vtk.js提供了很多用于转换数据的过滤器,如ClipFilter、ContourFilter、SliceFilter等。我们可以根据需求选择对应的过滤器进行数据转换。 首先,我们需要创建一个vtk.js的数据源,例如vtk.js提供的PolyData或ImageData对象。然后,我们可以通过添加过滤器来对数据进行处理和转换。 例如,我们可以使用ClipFilter过滤器来将PolyData对象裁剪为指定的范围。我们可以通过设置过滤器的输入数据对象和参数来实现裁剪操作。最后,我们可以使用渲染器将处理后的数据显示出来。 使用vtk.js的过滤器需要熟悉其API和用法,具体可以参考vtk.js的官方文档和示例代码。通过学习和实践,我们可以掌握vtk.js的filter的编写和使用技巧,从而实现定制化和高效的数据处理和可视化。 ### 回答3: vtk.js 是一个用于在Web上进行科学可视化的JavaScript库。它提供了许多用于处理和操作大规模数据的工具和功能。 在vtk.js中,使用filter来对数据进行处理和转换。filter可以分为两类:数据转换过滤器和几何过滤器。 1. 数据转换过滤器: 数据转换过滤器用于对数据进行转换和处理,常用的过滤器有: - vtkCalculator:根据用户定义的表达式计算新的标量和矢量数据。 - vtkCleanPolyData:删除重复和冗余的几何数据。 - vtkClipDataSet:根据一个公共平面或几何数据,将数据进行剪裁。 - vtkContourFilter:根据等值面提取数据,用于生成等值面图像。 - vtkExtractEdges:提取网格中的边。 - vtkExtractPolyDataGeometry:根据指定的几何数据提取数据。 - vtkGlyph3D:用于将矢量数据呈现为图标(glyphs)。 - vtkPointDataToCellData:将点数据转化为元胞数据。 2. 几何过滤器: 几何过滤器用于对几何数据的处理和转换,常用的过滤器有: - vtkPolyDataNormals:计算表面法向量。 - vtkSmoothPolyDataFilter:对表面进行平滑处理。 - vtkTriangleFilter:使用三角剖分算法将数据转换为三角形。 - vtkTubeFilter:为线条数据添加外壁效果,常用于绘制管道或流体流动的效果。 - vtkWarpScalar:根据标量数据调整几何体的形状。 filter的使用通常需要以下几个步骤: 1. 创建一个vtk.js对象,例如vtkCalculator或vtkClipDataSet。 2. 为过滤器设置输入数据,可以是vtk.js中的任何数据类型。 3. 设置过滤器的各种参数和选项,如过滤条件、转换方式等。 4. 调用过滤器的update()方法来执行数据转换。 5. 获取转换后的输出数据,可以使用getOutputData()方法获取。 使用vtk.js的filter,可以方便地对数据进行处理和转换,实现自定义的科学可视化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值