-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathBillboardTextActor3D.tar
More file actions
143 lines (128 loc) · 10 KB
/
BillboardTextActor3D.tar
File metadata and controls
143 lines (128 loc) · 10 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
BillboardTextActor3D/ 0000755 0000765 0000024 00000000000 13424703035 015746 5 ustar lorensen staff 0000000 0000000 BillboardTextActor3D/BillboardTextActor3D.cxx 0000644 0000765 0000024 00000007130 13424703035 022412 0 ustar lorensen staff 0000000 0000000 #include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPolyData.h>
#include <vtkSphereSource.h>
#include <vtkBillboardTextActor3D.h>
#include <vtkTextProperty.h>
#include <vtkCallbackCommand.h>
#include <vtkMath.h>
#include <sstream>
void ActorCallback( vtkObject* caller,
long unsigned int vtkNotUsed(eventId),
void* clientData,
void* vtkNotUsed(callData) )
{
vtkSmartPointer<vtkBillboardTextActor3D> textActor =
static_cast<vtkBillboardTextActor3D *>(clientData);
vtkSmartPointer<vtkActor> actor =
static_cast<vtkActor *>(caller);
std::ostringstream label;
label << std::setprecision(3)
<< actor->GetPosition()[0] << ", "
<< actor->GetPosition()[1] << ", "
<< actor->GetPosition()[2] << std::endl;
textActor->SetPosition(actor->GetPosition());
textActor->SetInput(label.str().c_str());
}
int main(int, char *[])
{
// For testing
vtkMath::RandomSeed(8775070);
// Create a sphere
vtkSmartPointer<vtkSphereSource> sphereSource =
vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetCenter ( 0.0, 0.0, 0.0 );
sphereSource->SetRadius ( 1.0 );
// Create an actor
vtkSmartPointer<vtkPolyDataMapper> mapper2 =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper2->SetInputConnection ( sphereSource->GetOutputPort() );
vtkSmartPointer<vtkActor> actor2 =
vtkSmartPointer<vtkActor>::New();
actor2->SetMapper ( mapper2 );
actor2->SetPosition(0, 0, 0);
actor2->GetProperty()->SetColor(1.0, .4, .4);
// Create a renderer
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground ( .6, .4, .2);
renderer->AddActor ( actor2 );
// Create a render window
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer ( renderer );
// Create an interactor
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow ( renderWindow );
for (int i = 0; i < 10; ++i)
{
// Create a mapper
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection ( sphereSource->GetOutputPort() );
// Create an actor
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper ( mapper );
actor->SetPosition(0, 0, 0);
// Setup the text and add it to the renderer
vtkSmartPointer<vtkBillboardTextActor3D> textActor =
vtkSmartPointer<vtkBillboardTextActor3D>::New();
textActor->SetInput ("");
textActor->SetPosition (actor->GetPosition());
textActor->GetTextProperty()->SetFontSize ( 12 );
textActor->GetTextProperty()->SetColor ( 1.0, 1.0, .4 );
textActor->GetTextProperty()->SetJustificationToCentered();
renderer->AddActor ( actor );
renderer->AddActor ( textActor );
vtkSmartPointer<vtkCallbackCommand> actorCallback =
vtkSmartPointer<vtkCallbackCommand>::New();
actorCallback->SetCallback (ActorCallback);
actorCallback->SetClientData(textActor);
actor->AddObserver(vtkCommand::ModifiedEvent,actorCallback);
actor->SetPosition(vtkMath::Random(-10.0, 10.0),
vtkMath::Random(-10.0, 10.0),
vtkMath::Random(-10.0, 10.0));
}
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}