
VTK笔记-图形相关
文章平均质量分 78
VTK中关于几何图形的相关内容
黑山老妖的笔记本
这个作者很懒,什么都没留下…
展开
-
VTK笔记-使用vtkCutter类对多边形取切面轮廓
vtkCutter类vtkCutter可以使用使用用户指定的隐式函数切割vtkDataSet。vtkCutter是一个过滤器,可以使用vtkImplicitFunction 的任何子类来切割数据。也就是说,对应于隐式函数 F(x,y,z) = value(s) 创建了一个多边形表面,可以在其中指定一个或多个用于切割的值。在VTK中,切割意味着将尺寸为N的单元减少为尺寸为N-1的切割表面。例如,一个四面体在被平面切割时(即vtkPlane隐函数)会生成三角形。(相比之下,裁剪采用 N 维单元并创建 N原创 2022-01-09 17:06:40 · 9594 阅读 · 14 评论 -
VTK笔记-使用vtkImageStencilData转换polygon时出现random bad lines
使用vtkImageStencilData转换polygon到image时,偶尔会出现丢失数据的情况,如下图;查了很多资料,发现vtkImageStencilData会出现random bad lines的错误;1.使用vtkFeatureEdges和vtkCleanPolyData并不能解决这个问题;2.设置tolerance = 1.0只是将四舍五入扩大了,并不能解决问题;...原创 2021-12-29 19:58:00 · 547 阅读 · 0 评论 -
VTK笔记-使用vtkHull类获取多边形数据的凸包
1.vtkHull类 vtkHull是一个过滤器,它将在给定一组n个平面的情况下生成一个n边凸包。(凸面外壳限制输入多边形数据。)外壳是通过向输入vtkPolyData挤压平面生成的,直到平面刚好接触vtkPolyData。然后,生成的平面用于生成由三角形表示的多面体(即外壳)。 n个平面可通过多种方式定义,包括 1)手动指定每个平面; 2)选择输入边界框的六个面平面; 3)选择输入边界框的八个顶点平面; 4)选择输入边界框的12个边平面;和/或5)使用递归细分的八面原创 2021-12-29 13:57:29 · 1573 阅读 · 0 评论 -
VTK笔记-使用vtkTubeFilter类把一条线扩展成一个管腔
vtkTubeFilter类vtkTubeFilter是一种在每条输入线周围生成一个管的过滤器。管由三角形条带组成,并随着线法线的旋转围绕管旋转。(如果不存在法线,则会自动计算法线。)可以将管的半径设置为随标量或矢量值而变化。如果半径随标量值变化,则将线性调整半径。如果半径随矢量变化,则使用质量流量保持变化。如果半径按向量范数变化,则半径将线性调整为其范数。还可以指定管的边数。还可以指定哪些边是可见的。这对于生成有趣的条带效果非常有用。其他选项包括为管状体加盖和生成纹理坐标的功能。纹理坐标可以与关联的纹理原创 2021-12-02 11:51:33 · 2670 阅读 · 3 评论 -
VTK笔记-使用vtkSplineFilter类处理3D空间曲线
double p0[3] = { 1.0, 0.0, 0.0 }; double p1[3] = { 0.0, 1.0, 0.0 }; double p2[3] = { 0.0, 0.0, 1.0 }; double p3[3] = { 1.0, 2.0, 3.0 }; vtkNew<vtkPoints> points; points->InsertNextPoint(p0); points->InsertNextPoint(p1); points->Inser原创 2021-11-20 20:45:07 · 2110 阅读 · 3 评论 -
VTK笔记-使用vtkCleanPolyData/vtkCleanPolyData/WarpSurface/扩张多边形数据
vtkCleanPolyData合并重复点,和/或删除未使用的点和/或删除退化单元。vtkCleanPolyData是一个过滤器,它将多边形数据作为输入并生成多边形数据作为输出。vtkCleanPolyData将合并重复点(在指定公差范围内,如果启用),消除任何单元中未使用的点,如果启用,则将退化单元转换为适当的形式(例如,如果合并三角形的两点,则将三角形转换为直线)。退化单元的转化由ConvertLinesToPoints、ConvertPolysToLines、ConvertStripsToPol原创 2021-11-20 19:53:42 · 3499 阅读 · 0 评论 -
VTK笔记-使用vtkUnstructuredGrid类构建非结构化数据
非结构化数据示例#include "vtkUnstructuredGrid.h"#include "vtkDataSetMapper.h"#include "vtkCellType.h"#include "vtkProperty.h"int main(){ int i; static float x[27][3] = { {0,0,0}, {1,0,0}, {2,0,0}, {0,1,0}, {1,1,0}, {2,1,0}, {0,0,1}, {1,0,1}, {2,0,1},原创 2021-10-15 09:42:20 · 6599 阅读 · 6 评论 -
VTK笔记-使用vtkRectilinearGridGeometryFilter类从矩形网格数据集抽取一个平面结果
矩形网格数据集矩形网格数据集与结构化点数据集类似,由二维像素或三维体素组成。之前学习过结构化点和vtkImageData的排列顺序,是一种规则的每个方向上两点之间的spacings是固定的,通常知悉起点orgin、extent和spacing就可以计算出每个点在坐标系中的准确位置;矩形网格数据集中的单元类型要么是像素,要么是体素,知道三个方向上的点的个数就可以计算出所有的点的个数;矩形网格的几何属于半规则结构,虽然不能像结构化点那样可以用一个起始点和三个间隔隐式表达所有点,但也不需要指定所有点的坐标原创 2021-10-11 11:11:02 · 1594 阅读 · 0 评论 -
VTK笔记-使用vtkPolyData类构建点/线/面
使用点拓扑结构 调用函数SetVerts将vtkCellArray按照离散点拓扑结构处理; 调用vtkPointSet类提供的SetPoints函数,设置几何数据点的坐标;void vtkPolyData::SetVerts(vtkCellArray* v);virtual void vtkPointSet::SetPoints(vtkPoints*);float x[8][3] = { {0,0,0},{1,0,0},{1,1,0},{0,1,0}, {0,0,1},{1,0,1},原创 2021-10-10 19:55:54 · 5138 阅读 · 1 评论 -
VTK笔记-数据集与数据属性-vtkPolyData类
vtkCellArrayvtkCellArray将数据集拓扑存储为一个显式连接表,其中列出了构成每个单元的点id。在内部,连接性表表示为两个数组:偏移量和连接性。偏移量是一个[numCells+1]值的数组,表示连接数组中每个单元格的点开始的索引。最后一个值始终是连接数组的长度。连接数组存储每个单元的点ID列表。因此,对于由两个三角形、一个四边形和一条直线组成的数据集,内部数组将显示如下: Topology: --------- Cell 0: Triangle | point ids: {0,原创 2021-05-29 17:40:46 · 4419 阅读 · 4 评论 -
VTK笔记-组建vtkPolyData-四面体/五面体/六面体
#include "vtkCellArray.h"#include "vtkFloatArray.h"#include "vtkPointData.h"#include "vtkPoints.h"#include "vtkPolyData.h"#include "vtkPolyDataMapper.h"#include "vtkCamera.h"#include "vtkActor.h"#include "vtkRenderer.h"#include "vtkRenderWindow.h"原创 2021-10-09 22:07:33 · 4401 阅读 · 7 评论 -
VTK笔记-使用vtkVertexGlyphFilter类绘制点/点云绘制
vtkVertexGlyphFilter vtkVertexGlyphFilter类的功能是创建一个多边形数据vtkPolyData,其中每个点都被创建了一个顶点Vertex; vtkVertexGlyphFilter类将丢弃输入数据中的所有单元,取而代之的是在每个点上创建一个顶点。此过滤器的预期用途大致相当于vtkGlyph3D类,但此过滤器专门用于具有多个顶点的数据,使渲染结果比glyph过滤器更快、更不混乱。此过滤器可以将图形或点集作为输入。 vtkVertexGlyphFilter类的接原创 2021-09-25 19:56:25 · 3716 阅读 · 2 评论 -
VTK笔记-几何图形-点vtkPoints构成的空间曲线
vtkPoints vtkPoints表示三维点的集合。 vtkPoints的数据模型是根据(点或单元)id访问的vx-vy-vz三元组数组。 默认数据类型为VTK_FLOAT类型;Set接口 设置点个数 void SetNumberOfPoints(vtkIdType numPoints); vtkTypeBool Resize(vtkIdType numPoints); 设置点数据 void SetPoint(vtkIdType id, const flo原创 2021-05-28 21:58:39 · 3222 阅读 · 3 评论 -
VTK笔记-图形相关-线段平滑-vtkSplineFilter类
在实际的开发中,提供有限的连续线段组成一条曲线,需要将该条曲线进行插值处理,生成更高采样率的曲线;这种情况下就需要进行插值;VTK中的线段插值是通过B样条插值实现,使用vtkSplineFilter完成这一功能;vtkSplineFilter vtkSplineFilter是一个从多段线的输入集生成输出多段线的Filter。 通过用户可以指定的vtkSpline类(默认情况下使用vtkCardinalSpline),可以对多段线进行统一细分和生成。可以通过多种方式控制线的细分数目。用户可以指定原创 2021-06-05 07:27:04 · 2773 阅读 · 0 评论 -
VTK笔记-图形相关-绘制凹多边形-多边形三角网格化-vtkTriangleFilter类
在做一个小例子的时候,发现绘制凹多边形,输出的结果确实一个凸多边形;红色边框是我设定的点坐标。从网上看到有人说: “OpenGL中认为合法的多边形必须是凸多边形,凹多边形、自交多边形、带孔的多边形等非凸的多边形在OpenGL中绘制会出现出乎意料的结果。例如,在大多数系统中,只有多边形的凸包被填充,而在有些系统中,并非所有的凸包都被填充。OpenGL之所以对合法多边形类型做出限制,是为了更方便地提供能够对符合条件的多边形进行快速渲染的硬件。简单多边形可被快速地渲染,而复杂多边形难以快速检测出来。为了最大限原创 2021-07-03 21:32:58 · 4224 阅读 · 11 评论 -
VTK笔记-图形相关-两个平面上的多边形+三角带=闭合多边形(棱柱体)
多边形+三角带=闭合多面体 除了多个多边形组成闭合多面体外,还有一种常用的方式,使用两个不同平面上的多边形加上多边形中间的三角带构成闭合多面体;应用场景是在视平面上勾画出一个闭合不自交多边形,以视平面的法线为方向向量,在一定距离计算出来平行于视平面的另外一个闭合不自交多边形;两个闭合多边形对应点逐次放入三角带中,构成三角带的数据,其目的是用于计算闭合多边形将形成的vtkImageData的掩膜数据,用于裁剪视野中的三维数据,或者是将圈选范围内(外)的数据值修改为固定值。步骤为: 1.获取闭合曲线上原创 2021-06-30 19:25:00 · 1446 阅读 · 2 评论 -
VTK笔记-图形相关-布尔运算-vtkBooleanOperationPolyDataFilter类
https://blog.csdn.net/menjiawan/article/details/45169623#include “vtkActor.h”#include “vtkRenderer.h”#include “vtkRenderWindow.h”#include “vtkRenderWindowInteractor.h”#include “vtkCylinder.h”#include “vtkPlane.h”#include “vtkImplicitBoolean.h”#incl原创 2021-09-11 10:57:17 · 3481 阅读 · 12 评论 -
VTK笔记-图形相关-判断空间上的点是否在图元内-vtkSelectEnclosedPoints
判断空间上的点是否在几何图元内,使用vtkSelectEnclosedPoints类;vtkSelectEnclosedPointsvtkSelectEnclosedPoints类可以判断标记点是否在封闭表面内。vtkSelectEnclosedPoints是一个Filter,它计算所有输入点以确定它们是否位于封闭曲面中。过滤器生成一个(0,1)掩码(以vtkDataArray的形式),指示点是在提供的曲面的外部(掩码值=0)还是内部(掩码值=1)(输出vtkDataArray的名称是“Selecte原创 2021-06-21 20:00:37 · 2603 阅读 · 0 评论 -
VTK笔记-图形相关-vtkImageCanvasSource2D绘制几何图形
前言vtkImageCanvasSource2D主要接口说明实例代码#include "vtkSmartPointer.h"#include "vtkImageCanvasSource2D.h"#include "vtkRenderWindowInteractor.h"#include "vtkImageViewer2.h"#include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtk原创 2021-04-29 21:48:27 · 2722 阅读 · 4 评论 -
VTK笔记-使用vtkOBBTree类获得直线与多边形数据的交点
创建一个立方体和一条穿过该立方体的直线;vtkNew<vtkCubeSource> cube;cube->SetCenter(0, 0, 0);cube->SetXLength(10);cube->SetYLength(10);cube->SetZLength(10);cube->Update();vtkNew<vtkPolyDataMapper> map;map->SetInputConnection(cube->Ge..原创 2021-09-24 15:50:15 · 1767 阅读 · 2 评论 -
VTK笔记-图形相关-平面-vtkPlaneSource
vtkPlaneSource创建位于平面中的四边形阵列vtkPlaneSource创建一个由四边形组成的m x n数组,这些四边形排列为平面中的规则平铺。该平面是通过指定一个原点来定义的,然后指定另外两个与原点一起定义平面的两个轴的点。这些轴不必是正交的-所以你可以创建一个平行四边形(轴不能平行。)平面的分辨率(即细分的数量)由ivars X分辨率和Y分辨率控制。默认情况下,平面以原点为中心并垂直于z轴,宽度和高度的长度为1,分辨率设置为1。有三种方便的方法可以让你轻松地移动飞机。第一个SetNor原创 2021-05-23 12:03:57 · 5652 阅读 · 0 评论 -
VTK笔记-图形相关-圆锥体-vtkConeSoure类
圆锥体文章目录圆锥体前言一、代码1.1流程二、遇到的问题1.运行时异常2.在ThinkPad E530C笔记本上出现的异常3.运行结果资料前言使用VTK构建一个圆锥体展示;执行的具体步骤为:1.创建一个vtkConeSoure类的实例cone;表示一个圆锥(正棱锥,有棱数目),有三个属性:高度、半径、分辨率(棱数目);2.创建一个映射器,vtkPolyDataMapper实例;cone的输出可以作为映射器的输入,vtk中使用GetOutputPort()作为输出;VTK常见使用方法:将一原创 2021-04-14 08:51:46 · 1905 阅读 · 0 评论 -
VTK笔记-图形相关-多边形数据转换图像数据-vtkPolyData转换为vtkImageData
vtkPolyDataToImageStencilvtkImageStencil#pragma once#include "vtk_include.h"#include <vtkImageData.h>#include <vtkImageStencil.h>#include <vtkMetaImageWriter.h>#include <vtkNew.h>#include <vtkPointData.h>#include <原创 2021-06-26 18:42:43 · 5198 阅读 · 8 评论