第05章 18 vtkCutter切割类及与之相似的类说明

news/2025/2/1 8:42:53 标签: 算法, VTK, 信息可视化

vtkCutter 是 VTK(Visualization Toolkit)中的一个类,用于通过几何体(如多边形网格、曲面等)进行切割操作,生成切割后的等值面或多段线。它通常用于生成等值线图、等值面或其他类型的切割效果。

vtkCutter 的主要功能:

  • 切割操作:根据用户指定的标量值或函数,对输入的几何体进行切割,生成等值线或多段线。
  • 支持多种切割类型:可以生成等值线、等值面、曲线等。
  • 与数据集配合使用:可以处理标量数据、向量数据等多种类型的数据集。

vtkCutter 的主要参数和方法:

  • SetCutFunction:设置切割函数。可以是一个标量值(如等值面),也可以是一个函数(如平面、球体等)。
  • SetInputData:设置输入的几何体或数据集。
  • Update:更新操作,生成切割结果。
  • GetOutput:获取切割后的输出数据。

示例:使用 vtkCutter 生成平面切割效果

以下是一个简单的例子,展示如何使用 vtkCutter 对一个立方体进行平面切割,并显示切割后的多段线。

#include <vtkSmartPointer.h>
#include <vtkCubeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCutter.h>
#include <vtkPlane.h>
#include <vtkProperty.h>

int main(int, char *[])
{
    // 创建一个立方体
    vtkSmartPointer<vtkCubeSource> cubeSource = vtkSmartPointer<vtkCubeSource>::New();
    cubeSource->Update();

    // 创建一个平面作为切割函数
    vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
    plane->SetOrigin(0.0, 0.0, 0.0);
    plane->SetNormal(0.0, 1.0, 0.0); // 切割平面法向量为 y 轴

    // 创建 vtkCutter 对象
    vtkSmartPointer<vtkCutter> cutter = vtkSmartPointer<vtkCutter>::New();
    cutter->SetInputConnection(cubeSource->GetOutputPort());
    cutter->SetCutFunction(plane);
    cutter->Update();

    // 创建映射器和 Actor 来显示切割后的多段线
    vtkSmartPointer<vtkPolyDataMapper> cutterMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    cutterMapper->SetInputConnection(cutter->GetOutputPort());

    vtkSmartPointer<vtkActor> cutterActor = vtkSmartPointer<vtkActor>::New();
    cutterActor->SetMapper(cutterMapper);
    cutterActor->GetProperty()->SetColor(1.0, 0.0, 0.0); // 设置切割线的颜色为红色

    // 创建渲染器、渲染窗口和交互器
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // 将 Actor 添加到渲染器中
    renderer->AddActor(cutterActor);
    renderer->SetBackground(0.5, 0.5, 0.5); // 设置背景颜色为灰色

    // 渲染和启动交互器
    renderWindow->Render();
    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

代码解释:

  1. 立方体生成:使用 vtkCubeSource 创建一个立方体。
  2. 切割平面定义:使用 vtkPlane 定义一个平面作为切割函数,平面的法向量为 y 轴。
  3. 切割操作:使用 vtkCutter 对立方体进行切割,生成切割后的多段线。
  4. 显示结果:将切割后的多段线通过 vtkPolyDataMapper 和 vtkActor 显示在渲染窗口中。

运行效果:

运行上述代码后,你将看到一个立方体的切割效果,切割平面沿着 y 轴切割,生成的多段线显示为红色。

总结:

vtkCutter 是一个非常实用的工具,用于在 VTK 中进行几何切割操作。它可以通过简单的设置生成复杂的切割效果,广泛应用于科学可视化、工程模拟等领域。

VTK(Visualization Toolkit)中,除了 vtkCutter 之外,还有其他一些类可以用于不同的切割和提取操作。以下是一些类似的类及其用途的举例说明:

1. vtkContourFilter

  • 用途:生成等值面,适用于标量数据的等值面提取。
  • 示例:从标量场数据中提取特定标量值的等值面。
vtkSmartPointer<vtkContourFilter> contourFilter = vtkSmartPointer<vtkContourFilter>::New();
contourFilter->SetInputConnection(dataSource->GetOutputPort());
contourFilter->SetValue(0, scalarValue); // 设置等值面的标量值
contourFilter->Update();

2. vtkFlyingEdges3D

  • 用途:生成高质量的等值面,特别适用于大规模数据集。
  • 示例:从三维体数据中提取等值面。
vtkSmartPointer<vtkFlyingEdges3D> flyingEdges = vtkSmartPointer<vtkFlyingEdges3D>::New();
flyingEdges->SetInputConnection(dataSource->GetOutputPort());
flyingEdges-> SetValue(0, scalarValue);
flyingEdges->Update();

3. vtkClipDataSet

  • 用途:根据切割函数对数据集进行裁剪,生成被切割部分的数据。
  • 示例:使用平面裁剪几何体,保留平面一侧的数据。
vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
plane->SetOrigin(0.0, 0.0, 0.0);
plane->SetNormal(0.0, 1.0, 0.0);

vtkSmartPointer<vtkClipDataSet> clipper = vtkSmartPointer<vtkClipDataSet>::New();
clipper->SetInputConnection(dataSource->GetOutputPort());
clipper->SetClipFunction(plane);
clipper->InsideOutOff(); // 保留平面外的数据
clipper->Update();

4. vtkExtractGeometry

  • 用途:根据几何条件提取数据,如提取在特定区域内的数据。
  • 示例:提取几何体中位于某个箱子(box)内的部分。
vtkSmartPointer<vtkBox> box = vtkSmartPointer<vtkBox>::New();
box->SetBounds(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

vtkSmartPointer<vtkExtractGeometry> extractor = vtkSmartPointer<vtkExtractGeometry>::New();
extractor->SetInputConnection(dataSource->GetOutputPort());
extractor->SetImplicitFunction(box);
extractor->ExtractInsideOn();
extractor->Update();

5. vtkExtractRectilinearGrid

  • 用途:从 rectilinear grid 中提取子网格。
  • 示例:从 rectilinear grid 中提取特定范围的子网格。
vtkSmartPointer<vtkExtractRectilinearGrid> extractor = vtkSmartPointer<vtkExtractRectilinearGrid>::New();
extractor->SetInputConnection(dataSource->GetOutputPort());
extractor->SetVOI(0, 10, 0, 10, 0, 10); // 设置提取的体积范围
extractor->Update();

6. vtkExtractVolume

  • 用途:从体积数据中提取子体积。
  • 示例:从体积数据中提取特定区域的子体积。
vtkSmartPointer<vtkExtractVolume> extractor = vtkSmartPointer<vtkExtractVolume>::New();
extractor->SetInputConnection(dataSource->GetOutputPort());
extractor->SetSampleRate(2, 2, 2); // 设置采样率
extractor->SetIncludeBoundary(1);
extractor->Update();

7. vtkGlyph3D

  • 用途:在数据点上放置图标(glyphs),常用于向量场的可视化。
  • 示例:在点云数据上放置箭头表示向量方向。
vtkSmartPointer<vtkArrowSource> arrowSource = vtkSmartPointer<vtkArrowSource>::New();
vtkSmartPointer<vtkGlyph3D> glyph3D = vtkSmartPointer<vtkGlyph3D>::New();
glyph3D->SetInputConnection(dataSource->GetOutputPort());
glyph3D->SetSourceConnection(arrowSource->GetOutputPort());
glyph3D->SetVectorModeToUseVector();
glyph3D->SetScaleModeToScaleByVector();
glyph3D->SetScaleFactor(0.1);
glyph3D->Update();

这些类各自具有不同的功能和适用场景,可以根据具体的需求选择合适的类来进行数据处理和可视化。

 


http://www.niftyadmin.cn/n/5839214.html

相关文章

Keepalived高可用集群入门学习

一、高可用集群 1.LB&#xff1a;load Balance 负载均衡 HA&#xff1a;High Availability 高可用集群 HPC: High Performance Computing 高性能集群 2.提高系统高用性的解决方案&#xff1a;降低MTTR&#xff08;mean time to repair&#xff09;平均故障时间 建立冗余机制…

Solon Cloud Gateway 开发:熟悉 Cloud Gateway

Solon Cloud Gateway 是基于 Solon Cloud、Vert.X 和 Solon-Rx(reactive-streams) 接口实现&#xff0c;响应式的接口体验。因为内置了 solon-boot-vertx &#xff0c;同时也支持 常规的 web 开发。 1、完整的配置说明&#xff08;对应的配置结构类为&#xff1a;GatewayPrope…

22.Word:小张-经费联审核结算单❗【16】

目录 NO1.2 NO3.4​ NO5.6.7 NO8邮件合并 MS搜狗输入法 NO1.2 用ms打开文件&#xff0c;而不是wps❗不然后面都没分布局→页面设置→页面大小→页面方向→上下左右&#xff1a;页边距→页码范围&#xff1a;多页&#xff1a;拼页光标处于→布局→分隔符&#xff1a;分节符…

python项目之requirements.txt文件

Python项目中可以包含一个 requirements.txt 文件&#xff0c;用于记录所有依赖包及其精确的版本号用以新环境部署。 当我们开发新项目的时候&#xff0c;会用virtualenv创建很多python独立环境&#xff0c;这时候就会出现在不同环境下安装相同的模块的情况&#xff0c;这时候…

Flask数据的增删改查(CRUD)_flask删除数据自动更新

查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询&#xff0c;使用like&#xff0c;查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据&#xff0c;%任何数据 st…

Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) )

Teleporters&#xff08; Educational Codeforces Round 126 (Rated for Div. 2) &#xff09; There are n 1 n1 n1 teleporters on a straight line, located in points 0 0 0, a 1 a_1 a1​, a 2 a_2 a2​, a 3 a_3 a3​, …, a n a_n an​. It’s possible to tele…

前端学习:Axios Http请求库入门与实战应用

什么是Promise&#xff1f; Promise 是一个表示异步操作最终完成或失败的对象。它允许你更优雅地处理异步操作&#xff0c;避免回调地狱&#xff08;Callback Hell&#xff09;。 特点&#xff1a; 异步性&#xff1a;Promise 代表一个异步操作的最终完成或失败。 不可更改&…

对比DeepSeek、ChatGPT和Kimi的学术写作撰写引言能力

引言 引言部分引入研究主题&#xff0c;明确研究背景、问题陈述&#xff0c;并提出研究的目的和重要性&#xff0c;最后&#xff0c;概述研究方法和论文结构。 下面我们使用DeepSeek、ChatGPT4以及Kimi辅助引言撰写。 提示词&#xff1a; 你现在是一名[计算机理论专家]&#…