1 #include "vtkAutoInit.h"
2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
3 VTK_MODULE_INIT(vtkInteractionStyle);
4 #include <vtkConeSource.h>
5 #include <vtkPolyDataMapper.h>
6 #include <vtkRenderer.h>
7 #include <vtkRenderWindow.h>
8 #include <vtkActor.h>
9 #include <vtkCamera.h>
10 #include <vtkRenderWindowInteractor.h>
11 #include <vtkCommand.h>
12 #include <vtkProperty.h>
13 //自定义类vtkMyCallback,输出当前相机坐标(x,y,z)
14 class vtkMyCallback : public vtkCommand
15 {
16 public://公共成员
17 static vtkMyCallback *New() //静态重载New函数,提醒返回用New创建的类vtkMyCallback
18 { return new vtkMyCallback; }
19 //重载command虚拟函数Execute
20 virtual void Execute(vtkObject *caller, unsigned long, void*)
21 {
22 //将caller转型为renderer对象
23 vtkRenderer *renderer = reinterpret_cast<vtkRenderer*>(caller);
24 //输出相机位置(x,y,z)
25 cout << renderer->GetActiveCamera()->GetPosition()[0] << " "
26 << renderer->GetActiveCamera()->GetPosition()[1] << " "
27 << renderer->GetActiveCamera()->GetPosition()[2] << "\n";
28 }
29 };
30 //自定义类vtkMyCallback2,设置演员的颜色为红色
31 class vtkMyCallback2 : public vtkCommand
32 {
33 public:
34 static vtkMyCallback2 *New()
35 {
36 return new vtkMyCallback2;
37 }
38 //重载command虚拟函数Execute
39 virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData)
40 {
41 //将caller转型为actor对象
42 vtkActor *actor = reinterpret_cast<vtkActor*>(caller);
43 //设置演员的颜色为红色
44 actor->GetProperty()->SetColor(1.0,0.0,0.0);
45 }
46 };
47
48 int main()
49 {
50 //实例化一个椎体对象cone
51 vtkConeSource *cone=vtkConeSource::New();
52 cone->SetResolution (10);
53 cone->SetHeight(3);
54 cone->SetRadius(1);
55
56 vtkPolyDataMapper *coneMapper=vtkPolyDataMapper::New();
57 coneMapper->SetInputConnection(cone->GetOutputPort());
58
59 vtkActor *coneActor=vtkActor::New();
60 coneActor->SetMapper(coneMapper);
61
62 //实例化回调函数mycallback2
63 vtkMyCallback2 *mycallback2 = vtkMyCallback2::New();
64 //监听器Observer如果发现有拾取事件PickEvent发生,则调用mycallback2对象
65 coneActor->AddObserver(vtkCommand::PickEvent,mycallback2);
66 mycallback2->Delete();
67
68 vtkRenderer *renderer=vtkRenderer::New();
69 renderer->AddActor(coneActor);
70 renderer->SetBackground(0.1,0.2,0.4);
71
72 //实例化回调函数mycallback
73 vtkMyCallback *mo1 = vtkMyCallback::New();
74 //监听器Observer如果发现renderer有交互开始事件StartEvent发生,则调用mol对象
75 renderer->AddObserver(vtkCommand::StartEvent,mo1);
76 mo1->Delete();
77
78 vtkRenderWindow *renWin=vtkRenderWindow::New();
79 renWin->SetSize(400,400);
80 renWin->AddRenderer(renderer);
81
82 vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New();
83 interactor->SetRenderWindow(renWin);
84 renWin->Render();
85 interactor->Initialize();
86 interactor->Start();
87
88 cone->Delete();
89 coneActor->Delete();
90 coneMapper->Delete();
91 renderer->Delete();
92 renWin->Delete();
93 interactor->Delete();
94
95 return 0;
96 }
按下p键进行拾取
【推荐】国内首个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