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

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

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)

posted @ 2023-03-19 21:45  盏茶  阅读(175)  评论(0)    收藏  举报