一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 580万
复制代码
 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键进行拾取

 

posted on   一杯清酒邀明月  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示