vtk部分filter介绍

vtkAdaptiveSubdivisionFilter
基于边缘和/或面积度量细分三角形。

vtkAdaptiveSubdivisionFilter是一个基于最大边长和/或三角形区域细分三角形的滤镜。

通过指定任何给定三角形可能具有的最大边长和/或三角形区域来控制三角形细分。细分继续进行,直到满足其标准。请注意,使用过小的标准值会产生巨大的网格,可能会耗尽系统内存。此外,如果要忽略特定标准值(例如,三角形区域),则只需将标准值设置为非常大的值(例如,VTK_DOUBLE_MAX)。

注意:

细分沿边缘是线性的。因此,不要指望发生平滑或混合效果。如果需要平滑生成的网格,请使用vtkWindowedSincPolyDataFilter或vtkSmoothPolyDataFilter等算法。

过滤器需要三角形网格。如有必要,使用vtkTriangleFilter对网格进行细分。

vtkAppendPolyData
vtkAppendPolyData是一个过滤器,它将一个或多个多边形数据集附加到单个多边形数据集中。提取并附加所有几何体,但仅当所有数据集都具有可用的点和/或单元属性时,才提取并附加点和单元属性(即标量,向量,法线)。(例如,如果一个数据集具有点标量而另一个没有点标量,则不会追加点标量。)

vtkArcSource
创造一个圆弧。

vtkAxes
创建一个xyz轴。

vtkBooleanOperationPolyDataFilter
用两个输入曲面定义体积的并集,交集、补集。

vtkBoundedPointSource
在指定的边界框内创建随机的点云。

vtkButtonSource
用于创建各种类型按钮的抽象类。

vtkBYUReader
读取MOVIE.BYU多边形文件。

vtkCellCenters
在单元中心产生点。

vtkCellCenters是一个过滤器,它将任何数据集作为输入,并在数据集单元格的中心生成输出点。这些点可用于放置字形(vtkGlyph3D)或标记(vtkLabeledDataMapper)。(中心是单元格的参数中心,不一定是几何或边界框中心。)单元格属性将与输出上的点相关联。

vtkCleanPolyData
vtkCleanPolyData是一个过滤器,它将多边形数据作为输入,并生成多边形数据作为输出。vtkCleanPolyData将合并重复点(在指定的容差内并且如果启用),消除未在任何单元格中使用的点,如果启用,则将简并单元格转换为适当的形式(例如,如果两个三角形点,则将三角形转换为线条合并)。

vtkClipClosedSurface
使用平面集合剪切闭合曲面。

vtkClipClosedSurface将剪切一个封闭的polydata曲面,其中包含一组剪裁平面。它将通过创建剪切输入数据的新多边形面来生成新的闭合曲面。

vtkClipPolyData
使用用户指定的隐式函数或输入标量数据剪辑多边形数据

vtkCollisionDetectionFilter
确定两个多面体表面之间的碰撞

vtkCollisionDetectionFilter使用两个vtkOBBTree实例在两个多面体表面之间执行碰撞确定。设置多数据输入,容差和变换或矩阵。如果CollisionMode设置为AllContacts,则Contacts输出将是联系线。如果CollisionMode是FirstContact或HalfContacts,那么Contacts输出将是顶点。

此类可用于将一个polydata曲面与另一个聚合在一起。

vtkContourFilter
从标量值生成等值面/等值线。

vtkContourGrid
从标量值生成等值面/等值线。(专门用于非结构化网格)

vtkContourLoopExtraction
从线和折线中提取闭环(多边形)

请注意,此过滤器的输入结构由点和线或折线单元组成。所有其他拓扑类型(顶点,多边形,三角形条)都将被忽略。此滤镜的输出默认为多个多边形。

vtkConvexHull2D
围绕一组点生成填充凸包。

vtkCookieCutter
用一个或多个多边形切割二维平面上定义的vtkPolyData。

vtkCursor2D
生成2D光标。

vtkCursor3D
生成3D光标。

vtkCurvatures
计算Polydata对象的曲率(高斯和均值)

vtkCylinderSource
生成以原点为中心的圆柱 。

vtkDataSetSurfaceFilter
提取外(多边形)表面。

vtkDecimatePolylineFilter
减少折线中的线条数量。

vtkDecimatePro
减少网格中的三角形数量。

vtkDelaunay2D
创建输入点的2D Delaunay三角剖分

vtkDelaunay2D是一个过滤器,它从输入点列表构造2D Delaunay三角剖分。这些点可以由vtkPointSet和子类类型的任何数据集表示。

过滤器的输出是多边形数据集。通常输出是三角形网格,但如果指定了非零alpha距离值(称为“alpha”值),则仅输出放置在alpha半径内的三角形,边和顶点。换句话说,非零alpha值可能导致三角形,线条和顶点的任意组合。

vtkDensifyPointCloudFilter
将点添加到点云以使其更密集 。

对于每个输入点,计算到其邻域中所有点的距离。如果其任何邻居超过目标距离,则连接点与其邻居的边缘被平分,并且在二分点处插入新点(可选地,也对内插属性数据进行插值)。一旦访问了所有输入点,就完成单次传递。然后,该过程重复到最大迭代次数的极限。

vtkDensifyPolyData
通过在质心上添加点来增加输入的密度。

该滤波器将任何多边形数据作为输入,并将网格划分为平面多边形,由其质心向外展开三角形。其他单元格直接传递到输出。点数据(如果存在)通过线性插值进行插值。对于任何镶嵌的单元格,CellData都只是从其父单元格复制过来。

vtkDepthSortPolyData
根据相机视图方向对多边形数据进行排序

vtkDepthSortPolyData重新排列单元格的顺序,以便某些渲染操作(例如透明度或Painter的算法)生成正确的结果。要使用此过滤器,您必须指定方向向量,以便对单元格进行排序。您可以通过指定摄像机和/或道具来定义视图方向来完成此操作; 或明确设置视图方向。

vtkDiscreteFlyingEdges2D
从2D图像数据生成等值线。

vtkDiscreteFlyingEdges3D
从3D图像数据(体积)生成等值面。

vtkDiskSource
在中心创建一个带孔的盘

vtkDistancePolyDataFilter
计算从一个vtkPolyData到另一个vtkPolyData的带正负号的距离。

vtkEarthSource
生成地球的多边形。

vtkEarthSource 数据源,用圆球形的样式来生产地球的版块轮廓形状。

vtkEllipseArcSource
创建一个椭圆弧。

vtkExtractEdges
从任何类型的数据中提取单元格边缘。

vtkExtractPolyDataGeometry
提取完全位于指定隐式函数内部或外部的vtkPolyData单元格

vtkFillHolesFilter
识别并填充网格中的洞

vtkFillHolesFilter是一个过滤器,用于标识和填充输入vtkPolyData网格中的孔。通过定位边界边缘,将它们连接在一起形成环,然后对产生的环进行三角测量来识别孔。

vtkFitToHeightMapFilter
调整polydata以适合图像高度贴图。

vtkFitToHeightMapFilter通过将(沿z方向)投影到高度图上来确定输入多边形的新点坐标,从而“覆盖”或“覆盖”高度图图像。可以使用不同的投影方法,包括投影点,或平均/取最小值/取最大值的单元点或采样的内部点。过滤器将输入传递给输出,但会生成新的新点坐标,并且不会传递点法线。请注意,覆盖支持顶点,线,多边形和三角形条。

vtkGenericOutlineFilter
为任意通用数据集创建线框轮廓。

vtkGeometryFilter
从数据中提取几何(或将数据转换为多边形)。

vtkGlyph3D
vtkGlyph3D 实际上是一种符号化的算法工具,可以使用一个源(如球体)为输入数据集的每一个点生成一个符号,

并且可以设置符号的方向以及缩放比例,简单点说就是对于你想关注的数据点添加符号标注,符号的样式由自己指定。

比如你有一个曲面数据,希望将曲面数据的每个点都用锥体标注出来并且锥体的方向表示该点的法向量方向,这个时候就可以使用vtkGlyph3D。

vtkGlyphSource2D
创建由vtkPolyData表示的2D标注

vtkGraphLayoutFilter
3D中无向图的漂亮布局

vtkGridSynchronizedTemplates3D
从结构化网格生成等值面

vtkHierarchicalBinningFilter
将点均匀分级为分层结构 。

vtkIntersectionPolyDataFilter
计算两个vtkPolyData对象之间的交集。

vtkLinkEdgels
将边缘连接在一起以形成曲线。

vtkMassProperties
估计三角形网格的体积,表面积和标准化形状索引。

vtkmLevelOfDetail
减少网格中三角形的数量

vtkOutlineFilter
为任意数据集或复合数据集创建线框轮廓 。

vtkPlaneSource
创建一个平面。

vtkPointSource
创建一个随机的点云

vtkPointSource是一个源对象,它在指定半径内围绕指定中心点创建用户指定的点数。默认情况下,点的位置在球体内是随机的。也可以仅在球体表面上生成随机点。输出PolyData具有指定的点数和1个单元格 - 包含所有点的vtkPolyVertex。

vtkPolyDataConnectivityFilter
基于几何连通性提取多边形数据

vtkPolyDataNormals
计算多边形网格的法线。

vtkPolyDataNormals是一个为多边形网格计算点和/或单元法线的过滤器。用户指定是否希望通过设置ComputeCellNormals和ComputePointNormals标志来计算点和/或单元格法线。

计算得到的法线(vtkFloatArray)被设置为PointData和/或输出PolyData的CellData(分别使用SetNormals())的活动法线。这些数组的名称是“Normals”,因此可以使用vtkArrayDownCast(output->GetPointData()->GetNormals())或vtkArrayDownCast(output->GetPointData()->GetArray(“Normals”)检索它们。

该滤波器可以重新排序多边形,以确保跨多边形邻居的方向一致。尖锐的边缘可以被分割,点复制与单独的法线,以提供清晰(渲染)的表面。也可以全局翻转法向。

该算法的工作原理是确定每个多边形的法线,然后在共享点对它们进行平均。当尖锐的边缘出现时,边缘被分割并生成新的点,以防止模糊的边缘(Gouraud阴影)。

注意:

法线只计算多边形和三角形带。法线不是为线或顶点计算的。

三角形条被分成三角形多边形。您可能想要重新剥离三角形。

vtkPolyDataPointSampler
从vtkPolyData生成点

vtkPolyDataPointSampler从输入的vtkPolyData生成点。这些点之间大约有一段指定的距离。

这个过滤器的功能如下。首先,它返回所有输入点,然后对所有直线以及与输入多边形和三角形条带相关的边进行采样,以生成边缘点。最后,对多边形和三角形带的内部进行子采样以生成点。所有这些函数都可以单独启用或禁用。注意,此算法仅近似地生成指定距离内的点。一般来说,点密度比要求的要细。

vtkPolyDataSilhouette
沿着摄像机视图方向排序多边形数据

vtkPolyDataSilhouette提取多边形网格边的子集以生成相应3D对象的轮廓(轮廓)。此外,此滤镜还可以提取锐边(也称为特征角)。要使用此过滤器,您必须指定视点(原点)或方向(矢量)。给定此方向或原点,在表面法线与视图方向正交的任何地方都会生成轮廓。

注意:

当使用有源相机时,几乎所有帧都会重新计算,在处理极大的表面数据集时请记住这一点。

vtkPolyDataTangents
计算三角化多边形的切线

vtkPolyDataTangents是一个过滤器,用于计算三角化多边形数据的点和/或单元格切线。此滤镜需要在点上输入法线和tcoords。

vtkProjectedTerrainPath
将折线投影到地形上。

vtkProjectedTerrainPath将输入折线投影到地形上。(地形由2D高度图像定义,是过滤器的第二个输入。)折线投影通过以下几种模式进行控制。

1)简单模式考虑高度偏移实例变量,将折线点投影到地形上。

2)非遮挡模式确保折线的任何部分不会被地形遮挡(例如一条线穿过一座山)。这可能需要对折线进行递归细分。

3)拥抱模式确保多边形点与表面保持恒定的距离。这也可能需要折线的递归细分。注意,非遮挡模式和拥抱模式都考虑了高度偏移量,因此可以创建拥抱地形一定距离的路径。

要使用此过滤器,请定义两个输入:1)折线和2)一个图像,其标量值表示高度字段。然后指定模式和要使用的高度偏移量。

算法描述如下。过滤器首先将折线点投射到图像上(由指定的高度偏移量偏移)。如果模式是非闭塞的或闭合的,则计算每个线段的最大错误,并将其放入优先队列。然后将每个线段在最大误差处分割,并对两个新的线段求最大误差。这个过程一直持续到线条没有被地形遮挡(非遮挡模式)或满足从表面变化的误差(闭合模式)。(注意,这个过程对输入中的每个折线重复。此外,最大误差的计算分为两部分:最大正误差和最大负误差。如果折线位于地形之上,即,高度偏移量为正-在无遮挡或拥抱模式下,所有负误差被消除。如果折线位于地形以下,即,高度偏移量为负——在非遮挡或拥抱模式下,所有正误差均被消除。)

注意:

该算法要求整个输入图像都在内存中,因此它可能不适用于非常大的图像。

假设输入高度图像位于x-y平面,因此标量值为z坐标,即高度值。

使用优先级队列,使1)可以控制线段总数,2)当队列中的错误小于指定的容错量时,算法可以终止。

vtkQuadricClustering
减少网格中的三角形数量

vtkQuadricDecimation
减少网格中的三角形数量

vtkRectilinearGridGeometryFilter
提取直线网格的几何图形

vtkRectilinearGridOutlineFilter
为直线网格创建线框轮廓。

vtkRectilinearSynchronizedTemplates
从直线网格生成等值面

vtkRecursiveDividingCubes
在等值面上创建点(使用递归方法)

vtkRegularPolygonSource
创建一个常规的n边多边形和/或折线

vtkRemoveDuplicatePolys
删除重复/退化多边形

vtkReverseSense
反转多边形单元格和/或顶点法线的排序

vtkReverseSense是一种过滤器,可以反转多边形单元格的顺序和/或反转点和单元法线的方向。两个标志用于控制这些操作。单元格反转意味着反转单元连接列表中的索引顺序。正常反转意味着将法向量乘以-1(点和法线法则,如果存在)。

注意:

只有在数据中存在法线时才可以操作法线。

vtkScalarsToTextureFilter
基于标量场生成纹理坐标和纹理图像

vtkSelectVisiblePoints
提取可见的点(基于z缓冲区计算)

vtkSmoothPolyDataFilter
使用拉普拉斯平滑来调整点位置。

vtkSmoothPolyDataFilter是一个使用拉普拉斯平滑调整点坐标的滤镜。效果是“松弛”网格,使细胞形状更好,顶点分布更均匀。请注意,此过滤器对组成vtkPolyData实例的线,多边形和三角形条进行操作。永远不会修改顶点或多顶点单元格。

算法如下进行。对于每个顶点v,执行拓扑和几何分析以确定哪些顶点连接到v,以及哪些单元连接到v。然后,为每个顶点构造连通性阵列。(连接数组是直接连接到每个顶点的顶点列表的列表。)接下来,迭代阶段从所有顶点开始。对于每个顶点v,根据连接顶点的平均值修改v的坐标。(松弛因子可用于控制v的位移量)。该过程针对每个顶点重复。对顶点列表的传递是单次迭代。重复许多次迭代(通常约20次左右)直到获得所需结果。

有一些特殊的实例变量用于控制此过滤器的执行。(这些ivars基本上控制了哪些顶点可以平滑,以及连接数组的创建。)BoundarySmoothing ivar启用/禁用网格“边界”上的顶点的平滑操作。边界顶点是由多边形的半周期(或由单个线使用)围绕的边界顶点。

另一个重要的ivar是FeatureEdgeSmoothing。如果启用此ivar,则内部顶点被分类为“简单”,“内部边缘”或“固定”,并且以不同方式平滑。(内部顶点是由多边形循环包围的多个顶点;或由两个线单元使用。)分类基于附加到v的特征边的数量。当多边形的两个表面法线之间的角度出现时,会出现特征边缘共享边缘比FeatureAngle ivar更大。然后,没有特征边缘使用的顶点被分类为“简单”,恰好两个特征边缘使用的顶点被分类为“内部边缘”,而所有其他顶点被分类为“固定”顶点。

一旦知道了分类,就会以不同的方式对顶点进行平滑处理。角落(即固定)顶点根本不平滑。如前所述平滑简单顶点(即,连接的顶点坐标的平均值)。内部边缘顶点仅沿其两个连接边缘平滑,并且仅在边缘之间的角度小于EdgeAngle ivar时才进行平滑。

通过使用两个ivars可以控制总平滑。NumberOfIterations是最大平滑过程数的上限。收敛ivar是对最大点运动的限制。如果迭代期间的最大运动小于收敛,则平滑过程终止。(收敛性表示为边界框对角线的一部分。)

有两个实例变量可以控制错误数据的生成。如果启用了ivar GenerateErrorScalars,则计算指示每个顶点距其原始位置的距离的标量值。如果启用了ivar GenerateErrorVectors,则计算表示位置变化的向量。

您可以选择通过定义第二个输入来进一步控制平滑过程:Source。如果已定义,则输入网格被约束为位于由源ivar定义的曲面上。

注意:

拉普拉斯算子减少了网格几何中的高频信息。由于过度平滑,重要细节可能会丢失,并且表面可能朝向质心收缩。启用FeatureEdgeSmoothing有助于减少此影响,但不能完全消除它。您可能还希望尝试vtkWindowedSincPolyDataFilter。它可以更好地减少收缩。

vtkSpherePuzzle
创建一个以原点为中心的多边形球体

vtkSphereSource
创建以原点为中心的多边形球体

vtkSphereSource创建一个以原点为中心的指定半径的球体(由多边形表示)。可以指定纬度(phi)和经度(θ)方向上的分辨率(多边形离散化)。也可以通过指定最大phi和θ角来创建部分球体。默认情况下,球体的曲面细分使用三角形; 但是,您可以设置LatLongTessellation以使用四边形生成曲面细分。

注意:

分辨率表示完整球体的纬度或经度线数。如果创建部分球体,则纬度/经度线的数量可能会偏离一个。

vtkSplineFilter
使用vtkSpline 从一组输入折线生成均匀细分的折线

vtkStaticCleanPolyData
合并重复点,和/或移除未使用的点和/或移除简并单元

vtkStaticCleanPolyData是一个过滤器,它将多边形数据作为输入,并生成多边形数据作为输出。vtkStaticCleanPolyData将合并重复点(在指定的容差范围内),如果启用,则将退化单元格转换为适当的形式(例如,如果合并两个三角形点,则将三角形转换为线条)。

注意:

合并点可以改变拓扑,包括引入非流形形式。应仔细选择公差以避免这些问题。较大的公差(大小>定位器箱宽度)可能会产生较差的结果。

将公差> 0.0的近点合并本质上是一个不稳定的问题,因为结果是依赖于顺序的(例如,处理点的顺序)。当并行计算时,处理点的顺序是不可预测的,因此结果可能在运行之间变化。

如果您希望对一组没有单元格的坐标进行操作,则必须在使用vtkStaticCleanPolyData过滤器之前将包含所有点的vtkPolyVertex单元添加到PolyData(或使用vtkVertexGlyphFilter)。

该类已与vtkSMPTools进行了线程化。使用TBB或其他非顺序类型(在CMake变量VTK_SMP_IMPLEMENTATION_TYPE中设置)可以显着提高性能。

vtkStripper
vtkStripper是一个过滤器,可以从输入多边形,三角形条带和线条生成三角形条带和/或多边形线条。

vtkTableToPolyData
过滤器用于将转换vtkTable到vtkPolyData。

vtkTextSource
vtkTextSource将文本字符串转换为多边形。这样您就可以在渲染中插入文本。它使用X Windows中的9x15字体。您可以指定是否要绘制背景。通过扫描将光栅字体转换为四边形来形成字符。使用标量数据将颜色分配给字母。要使用source的actor属性设置字符的颜色,请在文本源上设置BackingOff,在关联的vtkPolyDataMapper上设置ScalarVisibilityOff。然后,可以使用关联的actor的属性设置颜色。

vtkVectorText生成更高质量的字符多边形表示。

vtkTexturedSphereSource
创建一个以原点为中心的球体

vtkTexturedSphereSource创建一个以原点为中心的指定半径的多边形球体。可以指定纬度(phi)和经度(θ)方向上的分辨率(多边形离散化)。也可以通过指定最大phi和θ角度来创建部分球体。

vtkTransformPolyDataFilter
转换多边形数据集的点、关联的法线和向量

vtkTransformPolyDataFilter是一个过滤器,用于变换点坐标和相关的点和单元法线和向量。其他点和单元数据通过过滤器不变。此过滤器专用于多边形数据。有关更多常规数据,请参阅vtkTransformFilter。

另一种转换方法是使用vtkActor的方法来缩放,旋转和转换对象。两种方法的区别在于vtkActor的转换只会影响渲染对象的位置(通过图形管道),而vtkTransformPolyDataFilter实际上会修改可视化管道中的点坐标。对于需要点坐标作为输入的某些对象(例如,vtkProbeFilter),这是必需的。

vtkTriangleFilter
vtkTriangleFilter从输入多边形和三角形条带生成三角形。

vtkTriangleMeshPointNormals
计算三角网格点的法线。

vtkTriangleMeshPointNormals是一个过滤器,它计算三角形网格的点法线以启用高性能渲染。它是vtkPolyDataNormals过滤器的快速路径版本,以便能够计算快速变形的三角形网格的法线。

vtkTubeFilter
在线周围生成管的过滤器

vtkUncertaintyTubeFilter
沿折线生成不确定管

vtkVectorText
创建多边形文本

vtkVectorText从输入文本字符串生成vtkPolyData。除ASCII字母数字字符az,AZ,0-9外,vtkVectorText还支持ASCII标点符号。(支持的ASCII字符集是代码(33-126),包括在内。)支持的唯一控制字符是换行符“\ n”,它前进到一个新行。

要使用此类,通常将它与vtkPolyDataMapper和vtkActor结合使用。在这种情况下,您将使用vtkActor的转换方法来定位,定向和缩放文本。您可能还希望使用vtkFollower定位文本,使其始终面向相机。

vtkWindowedSincPolyDataFilter
使用窗口的sinc内核函数插值调整点位置。

vtkWindowedSincPolyDataFiler使用窗口sinc函数插值内核调整点坐标。效果是“松弛”网格,使单元形状更好,顶点分布更均匀。请注意,此过滤器操作组成vtkPolyData实例的线条,多边形和三角形条带。永远不会修改顶点或多顶点单元格。

算法如下进行。对于每个顶点v,执行拓扑和几何分析以确定哪些顶点连接到v,以及哪些单元连接到v。然后,为每个顶点构造连通性阵列。(连接数组是直接连接到每个顶点的顶点列表的列表。)接下来,迭代阶段从所有顶点开始。对于每个顶点v,使用sinc内核函数插值修改v的坐标。

使用标准信号处理低通滤波器(特别是窗口sinc函数)来平滑多面体。低通滤波器的传递函数与切比雪夫多项式近似。这有助于在迭代扩散过程中应用滤波器(与内核卷积相反)。应用的平滑迭代越多,近似于低通滤波器传递函数的多项式的程度越高。因此,每次平滑迭代将切比雪夫滤波器近似的下一个更高项应用于多面体。由于切比雪夫多项式是正交的,即将滤波器解耦为迭代应用的多项式是可能的。

注意:必须注意避免迭代过少而平滑。具有太少项的切比雪夫近似是差的近似。前几次平滑迭代表示数据的严重缩放和转换。随后的迭代使得平滑多面体收敛到对象的真实位置和比例。我们试图通过自动调整滤波器来防止这种情况,从而有效地扩大了通带。只有当迭代次数大于1时才能进行此调整。请注意,这会牺牲某种程度的平滑以保证模型的完整性。对于那些感兴趣的人,通过搜索值sigma来调整滤波器,使得实际通带为k_pb + sigma并且使得滤波器传递函数在k_pb处求值为1,即f(k_pb)= 1。

为了提高解的数值稳定性并最小化平移效果,算法可以将位置坐标平移并缩放到单位立方体[-1,1]内,执行平滑,并将位置坐标平移和缩放回原始坐标系。此模式由NormalizeCoordinatesOn() / NormalizeCoordinatesOff()方法控制。由于遗留原因,默认值为NormalizeCoordinatesOff。

该实现目前仅限于使用基于汉明窗口的内插内核。可以使用其他窗口(例如Hann,Blackman,Kaiser,Lanczos,Gaussian和指数窗口)。

有一些特殊的实例变量用于控制此过滤器的执行。(这些ivars基本上控制了哪些顶点可以平滑,以及连接数组的创建。)BoundarySmoothing ivar启用/禁用网格“边界”上的顶点的平滑操作。边界顶点是由多边形的半周期(或由单个线使用)围绕的边界顶点。

另一个重要的ivar是FeatureEdgeSmoothing。如果启用此ivar,则内部顶点被分类为“简单”,“内部边缘”或“固定”,并且以不同方式平滑。(内部顶点是由多边形循环包围的多个顶点;或由两个线单元使用。)分类基于附加到v的特征边的数量。当多边形的两个表面法线之间的角度出现时,会出现特征边缘共享边缘比FeatureAngle ivar更大。然后,没有特征边缘使用的顶点被分类为“简单”,恰好两个特征边缘使用的顶点被分类为“内部边缘”,而所有其他顶点被分类为“固定”顶点。

一旦知道了分类,就会以不同的方式对顶点进行平滑处理。角落(即固定)顶点根本不平滑。像以前一样平滑简单顶点。内部边缘顶点仅沿其两个连接边缘平滑,并且仅在边缘之间的角度小于EdgeAngle ivar时才进行平滑。

通过使用两个ivars可以控制总平滑。NumberOfIterations确定平滑过程的最大数量。NumberOfIterations对应于用于近似窗口sinc函数的多项式的次数。通常需要十到二十次迭代。将其与vtkSmoothPolyDataFilter进行对比,后者通常需要100到200次平滑迭代。vtkSmoothPolyDataFilter也不是理想的低通滤波器的近似值,这可能会导致几何体随着平滑量的增加而缩小。

第二个ivar是窗口sinc滤波器的PassBand规范。根据设计,PassBand被指定为0到2之间的双点数。较低的PassBand值产生更平滑。PassBand的一个好的默认值是0.1.

有两个实例变量可以控制错误数据的生成。如果启用了ivar GenerateErrorScalars,则计算指示每个顶点距其原始位置的距离的标量值。如果启用了ivar GenerateErrorVectors,则计算表示位置变化的向量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vtk是一个用于三维计算可视化的开源软件工具包,它包含了许多可以处理和可视化三维数据的函数和类。在 vtk 中,filter 是一种用于处理数据的组件。 要编写 vtk filter,首先需要继承 vtkAlgorithm 类或其子类,并实现其中的虚函数。 例如,可以创建一个名为 MyFiltervtk filter,继承 vtkAlgorithm 类,并实现其中的虚函数: ``` #include <vtkAlgorithm.h> class MyFilter : public vtkAlgorithm { public: static MyFilter* New(); vtkTypeMacro(MyFilter, vtkAlgorithm); // 这是 vtkAlgorithm 类中的虚函数,需要在子类中实现 int RequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) override; }; ``` 然后,可以在 MyFilter 的实现中实现 RequestData 函数,在其中编写处理数据的代码。 ``` int MyFilter::RequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) { // 在这里编写处理数据的代码 return 1; } ``` 在 vtk 中,filter 通常是在 pipeline 中使用的,即通过将输入数据传递给 filter,并将 filter 的输出数据传递给下一个组件来实现数据处理流程。 例如,可以使用下面的代码将 MyFilter 添加到 pipeline 中: ``` #include <vtkPolyData.h> #include <vtkSmartPointer.h> int main() { // 创建输入数 ### 回答2: vtk(Visualization Toolkit)是一个功能强大的开源软件库,用于进行科学数据可视化和图形处理。vtk中的filter(过滤器)用于对输入数据进行处理和转换,以生成输出数据。这些filtervtk中有多种类型,可以用于实现各种不同的功能。 要编写vtkfilter,通常需要遵循以下步骤: 1. 导入必要的模块和类:首先需要导入vtk相关的模块和类,例如vtk.vtkXXX类,其中XXX代表具体的filter类型,例如vtk.vtkImageNoise、vtk.vtkContourFilter等。 2. 创建filter对象:使用vtk的类创建一个filter对象,例如vtkXXXFilter(),其中XXX为具体的filter名称。 3. 设置输入数据:使用SetInputData()或者SetInputConnection()方法将待处理的输入数据设置给filter对象。输入数据可以是各种vtk数据结构,例如vtkImageData、vtkPolyData等。 4. 配置filter参数:根据需要,可以使用filter的SetXXX方法设置相关的参数,以控制filter的行为,例如设置阈值、平滑系数等。 5. 执行filter:调用filter对象的Update()或者UpdateWholeExtent()方法执行filter处理,并生成输出数据。 6. 获取输出数据:使用GetOutputDataObject()或者GetOutputPort()方法获取处理后的输出数据对象,可以进一步用于后续的可视化、存储等操作。 7. 可选:如果有多个filter需要按照一定的顺序进行组合,可以使用vtk管线(pipeline)的方式,将多个filter按照一定的顺序连接在一起。通过SetInputConnection()方法设置filter之间的连接关系。 需要注意的是,不同的filter类型可能有不同的参数和方法,具体使用时需要参考vtk的官方文档和示例代码进行调用。并且,对于一些复杂的应用场景,可能需要组合多个不同类型的filter,以实现更为复杂的数据处理和转换。 ### 回答3: vtk(Visualization Toolkit)是一个用于处理和可视化科学数据的开源工具包。vtk提供了一系列的filter(过滤器),用于对数据进行处理和转换。 在vtk中,我们可以通过以下步骤来编写一个filter: 1. 导入vtk模块:首先,我们需要导入vtk模块,以便使用vtk提供的相关类和函数。 2. 创建数据对象:通过vtk提供的各种数据对象类,我们可以创建不同类型的数据,例如点、线、面等。 3. 创建filter对象:根据需要的功能,实例化一个相应的filter对象。例如,如果我们想进行数据平滑处理,可以使用vtkSmoothPolyDataFilter类。 4. 设置filter的输入数据:通过filter对象的SetInputConnection方法,将待处理的数据对象传递给filter。 5. 设置filter的参数:根据实际需求,设置filter的参数。例如,在进行数据平滑时,可以调整平滑的迭代次数、平滑因子等。 6. 执行filter:调用filter对象的Update方法,执行filter操作。 7. 获取filter的输出数据:通过filter对象的GetOutput方法,获取处理后的数据对象。 8. 可选:将结果进行可视化:使用vtk提供的可视化类,例如vtkRenderWindow和vtkRenderer,可以将处理后的数据对象显示出来,以便进行观察和分析。 需要注意的是,不同的filter可能有不同的使用方法和参数设置,具体的编写方式和步骤可能会有所不同。在使用过程中,可以参考vtk官方文档和相关教程,以获取更详细的信息和指导。 总之,vtkfilter编写主要包括导入模块、创建数据对象、实例化filter对象、设置输入数据和参数、执行filter操作、获取输出数据以及可视化展示等步骤。通过合理应用和组合各种filter,我们可以实现对科学数据的不同处理和可视化需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值