VTK:Medical之TissueLens
发布日期:2021-05-08 07:46:08 浏览次数:19 分类:精选文章

本文共 1535 字,大约阅读时间需要 5 分钟。

VTK:Medical之TissueLens

描述

本示例使用两个vtkClipDataSet过滤器来实现"组织透镜"效果。首先,使用vtkSphere隐式函数在用vtkFlyingEdges3D或vtkMarchingCubes提取的等值面中裁剪球形孔。然后,几何vtkSphereSource样品使用原始体积数据vtkProbeFilter。vtkClipDataSet使用所得的标量点数据使用等值面值修剪球体表面。

代码

TissueLens.cxx

// 代码逻辑如下:
// 1. 创建隐式函数vtkSphere
vtkSphere* sphere = new vtkSphere();
sphere->SetRadius(5.0);
sphere->SetCenter(0.0, 0.0, 0.0);
// 2. 使用vtkFlyingEdges3D或vtkMarchingCubes提取等值面
vtkFlyingEdges3D* flyingEdges = new vtkFlyingEdges3D();
flyingEdges->SetInputConnection(sphere->GetOutput(), 0);
flyingEdges->Update();
// 3. 使用vtkProbeFilter获取样品数据
vtkProbeFilter* probeFilter = new vtkProbeFilter();
probeFilter->SetInputConnection(flyingEdges->GetOutput(), 0);
probeFilter->SetProbePoint(0.0, 0.0, 0.0);
probeFilter->Update();
// 4. 创建vtkSphereSource并设置样品数据
vtkSphereSource* sphereSource = new vtkSphereSource();
sphereSource->SetRadius(5.0);
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetSampleRadius(1.0);
// 5. 使用vtkClipDataSet进行剪裁
vtkClipDataSet* clipDataSet = new vtkClipDataSet();
clipDataSet->SetInputConnection(probeFilter->GetOutput(), 0);
clipDataSet->SetGeometry(0, 0, 0, 1, sphere->GetCenter()[0], sphere->GetCenter()[1], sphere->GetCenter()[2]);
clipDataSet->Update();
// 6. 使用等值面值修剪球体表面
double* scalarField = new double[sphere->GetRadius()];
for (int i = 0; i < sphere->GetRadius(); i++)
{
scalarField[i] = i;
}
vtkDoubleArray* scalarArray = new vtkDoubleArray();
scalarArray->SetData(scalarField, sphere->GetRadius());
clipDataSet->SetScalarField(scalarArray);
clipDataSet->Update();
上一篇:VTK:网格之AddCell
下一篇:VTK:Medical之MedicalDemo4

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月28日 02时35分53秒