ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
vtkCallbackTools.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "vtkCallbackTools.h"
9 
10 // LOCAL
12 
13 // CV_CORE_LIB
14 #include <CVGeom.h>
15 #include <CVLog.h>
16 
17 // CV_DB_LIB
18 #include <ecvColorTypes.h>
19 
20 // VTK
21 #include <vtkAngleRepresentation.h>
22 #include <vtkAngleWidget.h>
23 #include <vtkAssembly.h>
24 #include <vtkAxesActor.h>
25 #include <vtkBoxRepresentation.h>
26 #include <vtkBoxWidget2.h>
27 #include <vtkCamera.h>
28 #include <vtkColorTransferFunction.h>
29 #include <vtkImageData.h>
30 #include <vtkImplicitPlaneRepresentation.h>
31 #include <vtkImplicitPlaneWidget2.h>
32 #include <vtkLogoRepresentation.h>
33 #include <vtkLogoWidget.h>
34 #include <vtkLookupTable.h>
35 #include <vtkOrientationMarkerWidget.h>
36 #include <vtkPNGReader.h>
37 #include <vtkPlane.h>
38 #include <vtkProperty2D.h>
39 #include <vtkRenderWindow.h>
40 #include <vtkRenderer.h>
41 #include <vtkRendererCollection.h>
42 #include <vtkScalarBarActor.h>
43 #include <vtkScalarBarRepresentation.h>
44 #include <vtkScalarBarWidget.h>
45 #include <vtkTextActor.h>
46 #include <vtkTextWidget.h>
47 #include <vtkTransform.h>
48 
49 namespace CallbackTools {
50 
51 /******************************** vtkIPWCallback
52  * *********************************/
53 vtkIPWCallback::vtkIPWCallback() : Plane(nullptr), Actor(nullptr) {}
54 
55 void vtkIPWCallback::Execute(vtkObject *caller, unsigned long, void *) {
56  vtkImplicitPlaneWidget2 *planeWidget =
57  reinterpret_cast<vtkImplicitPlaneWidget2 *>(caller);
58  vtkImplicitPlaneRepresentation *rep =
59  reinterpret_cast<vtkImplicitPlaneRepresentation *>(
60  planeWidget->GetRepresentation());
61  rep->GetPlane(this->Plane);
62 }
63 
64 /******************************** vtkBoxCallback
65  * *********************************/
67 
68 void vtkBoxCallback::SetActors(const std::vector<vtkActor *> actors) {
69  m_actors = actors;
70 }
71 
72 void vtkBoxCallback::Execute(vtkObject *caller, unsigned long, void *) {
73  // 将调用该回调函数的调用者caller指针,转换为vtkBoxWidget2类型对象指针
74  // vtkSmartPointer<vtkBoxWidget2> boxWidget =
75  // vtkBoxWidget2::SafeDownCast(caller);
77  CustomVtkBoxWidget::SafeDownCast(caller);
78  // vtkSmartPointer<vtkBoxWidget2>
79  // boxWidget=reinterpret_cast<vtkBoxWidget2>(caller);
81  // 将boxWidget中的变换矩阵保存在t中
82  boxWidget->GetTransform(t);
83  for (vtkActor *actor : this->m_actors) {
84  if (actor) {
85  actor->SetUserTransform(t);
86  }
87  }
88 
89  // emit uerTransform(t->GetMatrix()->GetData());
90 }
91 
92 /******************************** vtkBoxCallback2
93  * *********************************/
95 
97  m_actor = actor;
98 }
99 
100 void vtkBoxCallback2::Execute(vtkObject *caller, unsigned long, void *) {
101  // 将调用该回调函数的调用者caller指针,转换为vtkBoxWidget2类型对象指针
103  vtkBoxWidget2::SafeDownCast(caller);
104  // vtkSmartPointer<vtkBoxWidget2>
105  // boxWidget=reinterpret_cast<vtkBoxWidget2>(caller);这样转换不可以,vtkBoxWidget可以
107  // 将boxWidget中的变换矩阵保存在t中
108  vtkBoxRepresentation::SafeDownCast(boxWidget->GetRepresentation())
109  ->GetTransform(t);
110  this->m_actor->SetUserTransform(t);
111 }
112 
113 /******************************** vtkAngleCallBack
114  * *********************************/
115 vtkAngleCallBack::vtkAngleCallBack() : m_angle(nullptr), m_text(nullptr) {}
116 
117 void vtkAngleCallBack::Execute(vtkObject *caller,
118  unsigned long eventId,
119  void *callData) {
120  if (!m_text) return;
121 
122  if (eventId == vtkCommand::StartInteractionEvent) m_text->On();
123  if (eventId == vtkCommand::InteractionEvent) {
124  char text[200];
125  sprintf(text, "Angle: %f",
126  m_angle->GetAngleRepresentation()->GetAngle());
127  m_text->GetTextActor()->SetInput(text);
128  }
129 }
130 
131 } // namespace CallbackTools
virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData) override
vtkSmartPointer< vtkTextWidget > m_text
vtkSmartPointer< vtkAngleWidget > m_angle
virtual void Execute(vtkObject *caller, unsigned long, void *) override
void SetActor(vtkSmartPointer< vtkActor > actor)
vtkSmartPointer< vtkActor > m_actor
virtual void Execute(vtkObject *caller, unsigned long, void *) override
void SetActors(const std::vector< vtkActor * > actors)
std::vector< vtkActor * > m_actors
virtual void Execute(vtkObject *caller, unsigned long, void *) override