首页 > 其他分享 >【VTK学习笔记】VTK基本数据结构_3.2数据对象和数据集

【VTK学习笔记】VTK基本数据结构_3.2数据对象和数据集

时间:2023-03-19 21:57:44浏览次数:48  
标签:include 0.0 VTK writer vtkSmartPointer points 3.2 New 数据结构

任务:把几何结构和拓扑结构加入到数据集中

1.无拓扑结构

 1 #include <vtkSmartPointer.h>
 2 #include <vtkPoints.h> //几何结构
 3 #include <vtkPolyData.h> //数据集
 4 #include <vtkPolyDataWriter.h>
 5 
 6 int main(int argc, char* argv[])
 7 {
 8     //创建点数据
 9     vtkSmartPointer<vtkPoints> points = 
10         vtkSmartPointer<vtkPoints>::New();
11     points->InsertNextPoint(1.0, 0.0, 0.0);
12     points->InsertNextPoint(0.0, 0.0, 0.0);
13     points->InsertNextPoint(0.0, 1.0, 0.0);
14 
15     //创建vtkPolyData类型的数据,vtkPolyData派生自vtkPointSet
16     //vtkPointSet是vtkDataSet的子类,即vtkPolyData是一种数据集
17     vtkSmartPointer<vtkPolyData> polydata = 
18         vtkSmartPointer<vtkPolyData>::New();
19 
20     //将创建的点数据加入到vtkPolyData数据里
21     polydata->SetPoints(points);
22 
23     //将vtkPolyData类型的数据写入到一个vtk文件,保存位置是工程当前目录
24     vtkSmartPointer<vtkPolyDataWriter> writer = 
25         vtkSmartPointer<vtkPolyDataWriter>::New();
26     writer->SetFileName("triangle.vtk");
27     writer->SetInputData(polydata);
28     writer->Write();
29 
30     return EXIT_SUCCESS;
31 
32 }

 

2.零维拓扑结构

 1 #include <vtkCellArray.h> //拓扑结构
 2 #include <vtkSmartPointer.h>
 3 #include <vtkPoints.h> //几何结构
 4 #include <vtkPolyDataWriter.h>
 5 #include <vtkPolyData.h> //数据集
 6 
 7 int main(int argc, char* argv[])
 8 {
 9     //创建点的坐标
10     double X[3] = { 1.0,0.0,0.0 };
11     double Y[3] = { 0.0,0.0,1.0 };
12     double Z[3] = { 0.0,0.0,0.0 };
13 
14     //创建点数据以及在每个点坐标上加入(顶点)Vertex这种Cell
15     vtkSmartPointer<vtkPoints> points =
16         vtkSmartPointer<vtkPoints>::New();
17     vtkSmartPointer<vtkCellArray> vertices =
18         vtkSmartPointer<vtkCellArray>::New();
19 
20     for (unsigned int i = 0; i < 3; ++i)
21     {
22         //定义用于存储点索引的中间变量,vtkIdType就相当于int或long型
23         vtkIdType pid[1];
24 
25         //把每个点坐标加入到vtkPoints中,InsertNextPoint()返回加入的点的索引号,
26         //下面我们需要使用这个索引号来创建Vertex类型的Cell
27         pid[0] = points->InsertNextPoint(X[i], Y[i], Z[i]);
28 
29         //在每个坐标点上分别创建一个顶点(Vertex),Vertex是单元(Cell)里的一种类型
30         vertices->InsertNextCell(1, pid);
31     }
32 
33     //创建vtkPolyData对象
34     vtkSmartPointer<vtkPolyData> polydata = 
35         vtkSmartPointer<vtkPolyData>::New();
36 
37     //指定数据集的几何结构(由points指定),以及数据集的拓扑(由vertices指定)
38     polydata->SetPoints(points);
39     polydata->SetVerts(vertices);
40 
41     //将生成的数据集写到TriangleVerts.vtk文件里,保存在工程当前目录下
42     vtkSmartPointer<vtkPolyDataWriter> writer =
43         vtkSmartPointer<vtkPolyDataWriter>::New();
44     writer->SetFileName("TriangleVerts.vtk");
45     writer->SetInputData(polydata);
46     writer->Write();
47 
48     return EXIT_SUCCESS;
49 }

3.一维拓扑结构

 1 #include <vtkCellArray.h> //拓扑结构
 2 #include <vtkSmartPointer.h>
 3 #include <vtkPoints.h> //几何结构
 4 #include <vtkPolyDataWriter.h>
 5 #include <vtkPolyData.h> //数据集
 6 #include<vtkLine.h> //创建两个端点的连线
 7 
 8 int main(int argc, char* argv[])
 9 {
10     //创建三个坐标点
11     vtkSmartPointer<vtkPoints> points =
12         vtkSmartPointer<vtkPoints>::New();
13     points->InsertNextPoint(1.0, 0.0, 0.0); //返回第一个点的ID:0
14     points->InsertNextPoint(0.0, 0.0, 1.0); //1
15     points->InsertNextPoint(0.0, 0.0, 0.0); //2
16 
17     //每两个点之间分别创建一条线
18     //SetId()的第一个参数是线段的端点ID,第二个参数是连接的点的ID
19     vtkSmartPointer<vtkLine> line0 =
20         vtkSmartPointer<vtkLine>::New();
21     line0->GetPointIds()->SetId(0,0);
22     line0->GetPointIds()->SetId(1,1);
23 
24     vtkSmartPointer<vtkLine> line1 =
25         vtkSmartPointer<vtkLine>::New();
26     line1->GetPointIds()->SetId(0, 1);
27     line1->GetPointIds()->SetId(1, 2);
28 
29     vtkSmartPointer<vtkLine> line2 =
30         vtkSmartPointer<vtkLine>::New();
31     line2->GetPointIds()->SetId(0, 2);
32     line2->GetPointIds()->SetId(1, 0);
33 
34     //创建单元数组,用于存储以上创建的线段
35     vtkSmartPointer<vtkCellArray> lines =
36         vtkSmartPointer<vtkCellArray>::New();
37     lines->InsertNextCell(line0);
38     lines->InsertNextCell(line1);
39     lines->InsertNextCell(line2);
40 
41     vtkSmartPointer<vtkPolyData> polydata =
42         vtkSmartPointer<vtkPolyData>::New();
43 
44     polydata->SetPoints(points);
45     polydata->SetLines(lines);
46   
47     vtkSmartPointer<vtkPolyDataWriter> writer =
48         vtkSmartPointer<vtkPolyDataWriter>::New();
49     writer->SetFileName("TriangleLines.vtk");
50     writer->SetInputData(polydata);
51     writer->Write();
52 
53     return EXIT_SUCCESS;
54 }

 

参考:

1.《VTK图形图像开发进阶》

2.VTK 基本数据结构_如何把几何结构&拓扑结构加入到数据集 - 一杯清酒邀明月 - 博客园 (cnblogs.com)

标签:include,0.0,VTK,writer,vtkSmartPointer,points,3.2,New,数据结构
From: https://www.cnblogs.com/zc-030/p/17234470.html

相关文章

  • 数据结构-图
    1.图的概念基础概念顶点集合(vex-set):如上图S(vex)=边集合(arc-set):如上图S(arc)=度(degree):⽆向图中从⼀个点延伸出去的边数就是该点的度;有向图中包含出度和⼊......
  • 数学知识3.2-卡特兰数
    一、卡特兰数卡特兰数:\(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)。卡特兰数满足递推公式:设\(C_n=\frac{C_{2n}^{n}}{n+1}\),\(C_1=1\),\(C_n=C_{n-1}\frac{4n-2......
  • [LeetCode] 数据结构入门
    数据结构入门217存在重复元素给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。解法1:两层循环第一层循......
  • Django笔记二之连接数据库、执行migrate数据结构更改操作
    本篇笔记目录索引如下:Django连接mysql,执行数据库表结构迁移步骤介绍操作数据库,对数据进行简单操作接下来几篇笔记都会介绍和数据库相关,包括数据库的连接、操作(包括增......
  • 数据结构-绪论
    -本文参考于2024年的王道考研计算机的复习指导。-仅供学习交流,如侵权,即删。-本系列地址:https://www.cnblogs.com/kohler21/category/2289027.html目录第一章绪论数......
  • 数据结构
    数据结构你有一个长度为n的字符串,其中仅含0,1,2三个字符。你希望知道,这个字符串有多少个子串,满足该子串的0,1,2个数相等?n之和不超过3e5输入4301260011221810......
  • 数据结构-布隆过滤器
    1.布隆过滤器的概念定义布隆过滤器:是⼀种概率型数据结构,特点是⾼效的插⼊和查询,能明确告知某个字符串⼀定不存在或者可能存在;优点和缺点优点:布隆过滤器相⽐传......
  • 3.2 案例引入
    【案例1】进制转换十进制整数N向其他进制数d(二、八、十六)的转换是计算机实现计算基本问题转换法则:除以d倒取余该转换法则对应一个简单算法原理:n=(ndivd)*d+nmod......
  • golang常用库包:缓存redis操作库go-redis使用(03)-高级数据结构和其它特性
    Redis高级数据结构操作和其它特性第一篇:go-redis使用,介绍Redis基本数据结构和其他特性,以及go-redis连接到Redishttps://www.cnblogs.com/jiujuan/p/17207166.html第......
  • 数据结构-->链表_02
    本期的链表继续进行,上期我们完成了链表的增加和删除。现在接下来,我们进行链表的查改与优化头文件“SList.h”#include<stdio.h>#include<assert.h>#include<stdlib.h>typ......