-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathExternalVTKWidget.cxx
113 lines (95 loc) · 3.19 KB
/
ExternalVTKWidget.cxx
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
/*=========================================================================
Program: Visualization Toolkit
Module: ExternalVTKWidget.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "ExternalVTKWidget.h"
#include "vtkObjectFactory.h"
#include "vtkRendererCollection.h"
vtkStandardNewMacro(ExternalVTKWidget);
//----------------------------------------------------------------------------
ExternalVTKWidget::ExternalVTKWidget()
{
this->RenderWindow = 0;
}
//----------------------------------------------------------------------------
ExternalVTKWidget::~ExternalVTKWidget()
{
this->SetRenderWindow(NULL);
}
//----------------------------------------------------------------------------
vtkExternalOpenGLRenderWindow* ExternalVTKWidget::GetRenderWindow()
{
if (!this->RenderWindow)
{
vtkExternalOpenGLRenderWindow * win = vtkExternalOpenGLRenderWindow::New();
this->SetRenderWindow(win);
win->Delete();
}
return this->RenderWindow;
}
//----------------------------------------------------------------------------
vtkExternalOpenGLRenderer* ExternalVTKWidget::AddRenderer(void)
{
vtkExternalOpenGLRenderer* ren = vtkExternalOpenGLRenderer::New();
this->GetRenderWindow()->AddRenderer(ren);
ren->Delete();
return ren;
}
//----------------------------------------------------------------------------
void ExternalVTKWidget::PrintSelf(ostream &os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}
//----------------------------------------------------------------------------
void ExternalVTKWidget::SetRenderWindow(vtkExternalOpenGLRenderWindow * w)
{
// Do nothing if we don't have to
if (this->RenderWindow == w)
{
return;
}
// Swap the renderers from the old window to the new one
vtkRendererCollection* renderers = 0;
// Unregister the previous window
if (this->RenderWindow)
{
renderers = this->RenderWindow->GetRenderers();
// Increase reference count of the renderer collection to
// make sure the reference exists for the new render window
renderers->Register(this);
this->RenderWindow->Finalize();
this->RenderWindow->SetMapped(0);
this->RenderWindow->UnRegister(this);
}
// Now, set the new window
this->RenderWindow = w;
if (this->RenderWindow)
{
// If it is mapped somewhere else, unmap it.
this->RenderWindow->Finalize();
this->RenderWindow->SetMapped(1);
this->RenderWindow->Register(this);
if (renderers)
{
// Add the renderers
vtkRenderer * aren;
vtkCollectionSimpleIterator rsit;
for (renderers->InitTraversal(rsit);
(aren = renderers->GetNextRenderer(rsit)); )
{
this->RenderWindow->AddRenderer(aren);
}
}
}
if (renderers)
{
// Decrease reference count of the renderer collection
renderers->UnRegister(this);
}
}