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 144 145 146 147 148 149 150 151
|
/*=========================================================================
Program: ParaView
Module: TestParaViewPipelineControllerWithRendering.cxx
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html 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 "vtkInitializationHelper.h"
#include "vtkNew.h"
#include "vtkProcessModule.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkSmartPointer.h"
#include "vtkSMParaViewPipelineControllerWithRendering.h"
#include "vtkSMPropertyHelper.h"
#include "vtkSMRenderViewProxy.h"
#include "vtkSMRepresentationProxy.h"
#include "vtkSMSession.h"
#include "vtkSMSessionProxyManager.h"
#include "vtkSMSourceProxy.h"
#include "vtkTestUtilities.h"
#include <sstream>
#include <assert.h>
// This demonstrates how to put together a simple application with rendering
// capabilities using the vtkSMParaViewPipelineControllerWithRendering.
namespace
{
vtkSMRenderViewProxy* SetupView(vtkSMSession* session)
{
vtkSMSessionProxyManager* pxm = session->GetSessionProxyManager();
vtkSmartPointer<vtkSMRenderViewProxy> view;
view.TakeReference(vtkSMRenderViewProxy::SafeDownCast(pxm->NewProxy("views", "RenderView")));
// You can create as many controller instances as needed. Controllers have
// no persistent state.
vtkNew<vtkSMParaViewPipelineControllerWithRendering> controller;
// Initialize the view.
controller->InitializeProxy(view.Get());
view->UpdateVTKObjects();
// Registration is optional. For an application, you have to decide if you
// are going to register proxies with proxy manager or not. Generally,
// registration helps with state save/restore and hence may make sense for
// most applications.
controller->RegisterViewProxy(view.Get());
// Since in this example we are not using Qt, we setup a standard
// vtkRenderWindowInteractor to enable interaction.
view->MakeRenderWindowInteractor();
return view.Get();
}
vtkSMSourceProxy* CreatePipelineProxy(vtkSMSession* session,
const char* xmlgroup, const char* xmlname, vtkSMProxy* input=NULL)
{
vtkSMSessionProxyManager* pxm = session->GetSessionProxyManager();
vtkSmartPointer<vtkSMSourceProxy> proxy;
proxy.TakeReference(vtkSMSourceProxy::SafeDownCast(pxm->NewProxy(xmlgroup, xmlname)));
if (!proxy)
{
vtkGenericWarningMacro("Failed to create: " << xmlgroup << ", " << xmlname << ". Aborting !!!");
abort();
}
vtkNew<vtkSMParaViewPipelineController> controller;
controller->PreInitializeProxy(proxy.Get());
if (input != NULL)
{
vtkSMPropertyHelper(proxy, "Input").Set(input);
}
controller->PostInitializeProxy(proxy.Get());
proxy->UpdateVTKObjects();
controller->RegisterPipelineProxy(proxy);
return proxy.Get();
}
}
int TestParaViewPipelineControllerWithRendering(int argc, char* argv[])
{
vtkInitializationHelper::SetApplicationName("TestParaViewPipelineControllerWithRendering");
vtkInitializationHelper::SetOrganizationName("Humanity");
vtkInitializationHelper::Initialize(argv[0], vtkProcessModule::PROCESS_CLIENT);
vtkNew<vtkSMParaViewPipelineControllerWithRendering> controller;
vtkNew<vtkSMSession> session;
// Register the session with the process module.
vtkProcessModule::GetProcessModule()->RegisterSession(session.Get());
// Initializes a session and setups all basic proxies that are needed for a
// ParaView-like application.
controller->InitializeSession(session.Get());
// Create a setup a view.
vtkSMRenderViewProxy* view = SetupView(session.Get());
// Setup a default visualization pipeline to show a sliced Wavelet.
vtkSMSourceProxy* wavelet = CreatePipelineProxy(session.Get(), "sources", "RTAnalyticSource");
// This ensure that when the slice is created, it has good data bounds and
// data information to setup the slice position by default to be fairly
// reasonable.
wavelet->UpdatePipeline();
vtkSMSourceProxy* slice = CreatePipelineProxy(session.Get(), "filters", "Cut", wavelet);
vtkSMProxy* cutFunction = vtkSMPropertyHelper(slice, "CutFunction").GetAsProxy();
double normal[] = {0, 0, 1};
vtkSMPropertyHelper(cutFunction, "Normal").Set(normal, 3);
cutFunction->UpdateVTKObjects();
// Show the slice in the view.
vtkSMProxy* sliceRepresentation = controller->Show(slice, 0, view);
(void) sliceRepresentation;
view->ResetCamera();
view->StillRender();
for (int cc=1; cc < argc; cc++)
{
if (strcmp(argv[cc], "-I") == 0)
{
view->GetInteractor()->Start();
}
}
// Cleanup.
// Unregistering pipeline proxies will also release any representations
// created for these proxies.
controller->UnRegisterProxy(slice);
controller->UnRegisterProxy(wavelet);
controller->UnRegisterProxy(view);
vtkProcessModule::GetProcessModule()->UnRegisterSession(session.Get());
return 0;
}
|