VTK- vtkStripper

news/2025/3/15 11:19:15/

前言:本博文主要研究接口vtkStripper的实现原理及主要的应用场景,希望对各位小伙伴有所帮助。

描述:vtkStripper是一个过滤器,用于从输入多边形、三角形带和线中生成三角形带和/或折线。输入多边形仅当它们是三角形时才被组装成三角形条;其他类型的多边形被传递到输出,而不是剥离。(如果需要剥离所有数据,在运行此过滤器之前使用vtkTriangleFilter对非三角形多边形进行三角化。)如果顶点出现在输入polydata中,过滤器将通过(到输出)顶点。还要注意,如果在输入中定义了三角形条或折线,它们将被传递,而不是连接或扩展。(如果你希望剥离这些,在运行vtkStripper之前,使用vtkTriangleFilter将输入分割成三角形和行。)

变量MaximumLength可以用来控制三角形带和折线的最大允许长度。

默认情况下,此筛选器会丢弃与输入相关的任何单元格数据。

这是因为单元格结构发生了变化,并且旧的单元格数据不再有效。当设置了PassCellDataAsFieldData标志时,单元格数据将通过以下规则作为FieldData传递到输出:

1)对于输出中每个不是三角形带的单元格,在输出字段数据中每个单元格插入一次单元格数据。

2)对于输出中的每个三角形条形单元:

Ii)条带中每个点(j|j>=2)插入1个元组。

这是输入中(j-2, j-1, j)形成的单元格的单元格数据。

字段数据的顺序与单元格数据相同,即(vert,line, polyys,tsrips)。

如果输入数据中存在三角形条或折线,它们将被传递到输出数据。如果三角形多边形可用,这个过滤器只会构造三角形条带;并且只在线可用时构造折线。

实例:

1. 针对PolyData数据,通过 vtkFeatureEdges获取边线,得到edges对应的PolyData数据。

vtkIdType numPts   = edges->GetOutput()->GetNumberOfPoints();
vtkIdType numLines = edges->GetOutput()->GetNumberOfLines();
vtkIdType numCells = edges->GetOutput()->GetNumberOfCells();
分别为:526,530,530

2. edges通过Stripper进行整合,得到stripper对应的PolyData数据。

vtkIdType snumPts   = stripper->GetOutput()->GetNumberOfPoints();
vtkIdType snumLines = stripper->GetOutput()->GetNumberOfLines();
vtkIdType snumCells = stripper->GetOutput()->GetNumberOfCells();
分别为:526,6,6

vtkStripper将分散的线连接为折线。

相关代码为:

vtkFeatureEdges* edges = vtkFeatureEdges::New();
edges->SetInputData(m_selectObject->GetPolyData());
edges->BoundaryEdgesOff();
edges->FeatureEdgesOn();
edges->ManifoldEdgesOff();
edges->NonManifoldEdgesOff();
edges->Update();
if (nullptr == edges->GetOutput())
{edges->Delete();edges = nullptr;return;
}
vtkIdType numPts   = edges->GetOutput()->GetNumberOfPoints();
vtkIdType numLines = edges->GetOutput()->GetNumberOfLines();
vtkIdType numCells = edges->GetOutput()->GetNumberOfCells();vtkStripper* stripper = vtkStripper::New();
stripper->SetInputData(edges->GetOutput());
stripper->Update();
if (nullptr == stripper->GetOutput())
{edges->Delete();edges = nullptr;stripper->Delete();stripper = nullptr;return;
}
vtkIdType snumPts   = stripper->GetOutput()->GetNumberOfPoints();
vtkIdType snumLines = stripper->GetOutput()->GetNumberOfLines();
vtkIdType snumCells = stripper->GetOutput()->GetNumberOfCells();


http://www.ppmy.cn/news/372523.html

相关文章

git 提交到远程仓库 报错 error: failed to push some refs to ‘https://xxxxxx.git‘

git 学习地址 参考链接 报错如下 error: failed to push some refs to https://github.com/GDDXZ/RobotDenso.git hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushi…

2014世界10大DRAM公司

DRAM(Dynamic Random Access Memory),即动态随机存取存储器,是一种 最常见的半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。据IHS调查显示,2013年世界DRAM的销售值比上年窜升了32.5%…

linux新机怎么下载软件,新机安装linux日记

新主机: CPU: AMD 闪龙2800 主板:昂达N61V (芯片组nVIDIA MPC61) 安装fc5 插入第一张光盘,在:kernel_thread_helper0x4/0xb 就在这里就停住不动了.诸处寻因不得果. 开始以为主板不支持linux,后得知只要芯片组支持就可以了,而且这个芯片组是支持了,因为据说安装uBUNTU没问题. 后…

SDRAM 命名规则

 一般内存条上面如果没有贴标的话,只有通过芯片(港台地区还习惯称为内存颗粒)来看容量了。 例如HY 57V658010CTC-10s, HY表示现代的芯片,57代表SDRAM,65是64M和4K refresh cycles…

JavaScript之创建对象的模式

使用Object的构造函数可以创建对象或者使用对象字面量来创建单个对象,但是这些方法有一个明显的缺点:使用相同的一个接口创建很多对象,会产生大量的重复代码。 (一)工厂模式 这种模式抽象了创建具体对象的过程。考虑…

2011-8-9

2011-8-9 2011年08月09日 第四课 内存 课前导读 内存概述 如何选购内存 安装内存 内存的使用与维护 课后练习 课前导读 基础知识 重点知识 了解知识 基础知识 内存的作用、内存的种类,让读者初步认识和了解内存。 重点知识 内存的性能指标、内存的安装,…

mysql(聚合/字符串/日期与时间)函数(含实战练习)

本博文源于mysql,旨在对mysql中的函数进行详细训练。 数值型函数 数值型函数,大家可以理解为高级语言中的函数,直接跟高级语言函数一般使用就行了。 ABS函数 格式ABS(x) SELECT ABS(5),ABS(-2.4),ABS(0);MOD函数 求余函数,格…

MySQL:函数

函数 一、数学函数 1、绝对值函数ABS(x): x为插入的数据,返回绝对值 2、返回圆周率函数PI(): 无需插入数据,返回圆周率的值,默认为小数点后6位 3、平方根函数SQRT(x): 返回非负数的二次根 4、求余函数MOD(x,y)&#xf…