任务:把几何结构和拓扑结构加入到数据集中
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