1 // This example shows how to manually create vtkPolyData.
2 #include "vtkAutoInit.h"
3 VTK_MODULE_INIT(vtkRenderingOpenGL2);
4 VTK_MODULE_INIT(vtkInteractionStyle);
5
6 #include "vtkActor.h"
7 #include "vtkCamera.h"
8 #include "vtkCellArray.h" //基元数组类
9 #include "vtkFloatArray.h" //浮点型数组类
10 #include "vtkPointData.h"
11 #include "vtkPoints.h"
12 #include "vtkPolyData.h" //多边形数据类型类
13 #include "vtkPolyDataMapper.h"
14 #include "vtkRenderWindow.h"
15 #include "vtkRenderWindowInteractor.h"
16 #include "vtkRenderer.h"
17
18 int main()
19 {
20 int i;
21 //立方体的八个顶点(每个顶点坐标由三个点组成)
22 static float x[8][3]={{0,0,0}, {1,0,0}, {1,1,0}, {0,1,0},
23 {0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}};
24 //立方体的六个面(每个面由四个点的标号组成)
25 static vtkIdType pts[6][4]={{0,1,2,3}, {4,5,6,7}, {0,1,5,4},
26 {1,2,6,5}, {2,3,7,6}, {3,0,4,7}};
27
28 // We'll create the building blocks of polydata including data attributes.
29 //实例化一个多边形数据对象cube
30 vtkPolyData *cube = vtkPolyData::New();
31 //实例化一个点对象points
32 vtkPoints *points = vtkPoints::New();
33 //单元对象
34 vtkCellArray *polys = vtkCellArray::New();
35 //浮点数组对象
36 vtkFloatArray *scalars = vtkFloatArray::New();
37
38 // Load the point, cell, and data attributes.
39 for (i=0; i<8; i++) points->InsertPoint(i,x[i]);//加载立方体的8个顶点
40 for (i=0; i<6; i++) polys->InsertNextCell(4,pts[i]);//加载每个面由4个点组成的六个面
41 for (i=0; i<8; i++) scalars->InsertTuple1(i,i);//绑定标量数据
42
43 // We now assign the pieces to the vtkPolyData.
44 //与vtkPolyData型数据对象进行关联
45 cube->SetPoints(points);//进行点关联
46 points->Delete();
47 cube->SetPolys(polys);//进行面关联
48 polys->Delete();
49 cube->GetPointData()->SetScalars(scalars);//进行元组绑定
50 scalars->Delete();
51
52 // Now we'll look at it.
53 //多边形数据送入图像界面进行绘制
54
55 vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New();
56 cubeMapper->SetInputData(cube);//vtkPolyData数据输出给映射器输入
57 cubeMapper->SetScalarRange(0,7);//设置标量数据范围0~7
58
59 //实例化一个演员cubeActor
60 vtkActor *cubeActor = vtkActor::New();
61 cubeActor->SetMapper(cubeMapper);
62
63 vtkCamera* camera = vtkCamera::New();
64 camera->SetPosition(1, 1, 1);//设置相机位置为(1,1,1)
65 camera->SetFocalPoint(0, 0, 0);
66
67 vtkRenderer* renderer = vtkRenderer::New();
68 renderer->AddActor(cubeActor);
69 renderer->SetActiveCamera(camera);
70 renderer->ResetCamera();
71 renderer->SetBackground(1, 1, 1);
72
73 vtkRenderWindow *renWin = vtkRenderWindow::New();
74 renWin->AddRenderer(renderer);
75 renWin->SetSize(300, 300);
76
77 vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
78 iren->SetRenderWindow(renWin);
79
80 // interact with data
81 renWin->Render();//绘制舞台上的东西
82 iren->Start();//开始交互
83
84 // Clean up
85 cube->Delete();
86 cubeMapper->Delete();
87 cubeActor->Delete();
88 camera->Delete();
89 renderer->Delete();
90 renWin->Delete();
91 iren->Delete();
92
93 return 0;
94 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2020-08-14 QT 设置QDockWidget的初始大小
2020-08-14 Qt QDockWidget小结
2020-08-14 Qt QDockWidget停靠窗相关的信号
2020-08-14 Qt 基于Qt的词典开发系列--无边框窗口的缩放与拖动
2020-08-14 Qt 创建停靠悬浮窗口 QDockWidget
2020-08-14 Qt 隐藏QDockWidget的标题栏
2020-08-14 Qt 常见的 QGraphicsItem