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: TestSelfGeneratingSourceProxy.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 "vtkSMParaViewPipelineController.h"
#include "vtkSMPropertyHelper.h"
#include "vtkSMProxyDefinitionManager.h"
#include "vtkSMRepresentationProxy.h"
#include "vtkSMSelfGeneratingSourceProxy.h"
#include "vtkSMSession.h"
#include "vtkSMSessionProxyManager.h"
#include "vtkSMViewProxy.h"
#include "vtkSmartPointer.h"
#include "vtkSphereSource.h"
#include "vtkTestUtilities.h"
#include <assert.h>
#include <sstream>
const char* testdefinition =
"<ServerManagerConfiguration>"
" <ProxyGroup name=\"sources\">"
" <SelfGeneratingSourceProxy name=\"ExampleSelfGeneratingSourceProxy\" "
"class=\"vtkSphereSource\" />"
" </ProxyGroup>"
"</ServerManagerConfiguration>";
const char* extension = " <Proxy> "
" <DoubleVectorProperty animateable='1'"
" command='SetCenter'"
" default_values='0.0 0.0 0.0'"
" name='Center'"
" number_of_elements='3'"
" panel_visibility='default'>"
" <DoubleRangeDomain name='range' />"
" </DoubleVectorProperty>"
" </Proxy> ";
int TestSelfGeneratingSourceProxy(int argc, char* argv[])
{
(void)argc;
vtkInitializationHelper::Initialize(argv[0], vtkProcessModule::PROCESS_CLIENT);
vtkNew<vtkSMParaViewPipelineController> controller;
// Create a new session.
vtkSMSession* session = vtkSMSession::New();
vtkSMSessionProxyManager* pxm = session->GetSessionProxyManager();
if (!controller->InitializeSession(session))
{
return EXIT_FAILURE;
}
pxm->GetProxyDefinitionManager()->LoadConfigurationXMLFromString(testdefinition);
vtkSmartPointer<vtkSMSelfGeneratingSourceProxy> sgProxy;
sgProxy.TakeReference(vtkSMSelfGeneratingSourceProxy::SafeDownCast(
pxm->NewProxy("sources", "ExampleSelfGeneratingSourceProxy")));
controller->InitializeProxy(sgProxy);
if (!sgProxy->ExtendDefinition(extension))
{
cerr << "Failed to extend proxy definition!" << endl;
return EXIT_FAILURE;
}
sgProxy->UpdateVTKObjects();
controller->RegisterPipelineProxy(sgProxy, "mysamplesource");
double center[3] = { 10, 11, 12 };
vtkSMPropertyHelper(sgProxy, "Center").Set(center, 3);
sgProxy->UpdateVTKObjects();
vtkWeakPointer<vtkSphereSource> sphere =
vtkSphereSource::SafeDownCast(sgProxy->GetClientSideObject());
if (sphere->GetCenter()[0] != center[0] || sphere->GetCenter()[1] != center[1] ||
sphere->GetCenter()[2] != center[2])
{
cerr << "Failed to update VTK object correctly!" << endl;
return EXIT_FAILURE;
}
// Test that saving and loading state works.
char* tempDir =
vtkTestUtilities::GetArgOrEnvOrDefault("-T", argc, argv, "VTK_TEMP_DIR", "Testing/Temporary");
if (!tempDir)
{
cerr << "Could not determine temporary directory.\n";
return EXIT_FAILURE;
}
std::string path = tempDir;
path += "/TestSelfGeneratingSourceProxy.pvsm";
delete[] tempDir;
pxm->SaveXMLState(path.c_str());
controller->UnRegisterProxy(sgProxy);
sgProxy = NULL;
if (sphere != NULL)
{
cerr << "Cleanup has failed!" << endl;
return EXIT_FAILURE;
}
pxm->LoadXMLState(path.c_str());
sgProxy =
vtkSMSelfGeneratingSourceProxy::SafeDownCast(pxm->GetProxy("sources", "mysamplesource"));
if (!sgProxy)
{
cerr << "Failed to load proxy from state file!" << endl;
return EXIT_FAILURE;
}
sphere = vtkSphereSource::SafeDownCast(sgProxy->GetClientSideObject());
if (sphere->GetCenter()[0] != center[0] || sphere->GetCenter()[1] != center[1] ||
sphere->GetCenter()[2] != center[2])
{
cerr << "State didn't set VTK object ivars correctly. Load must have failed!" << endl;
return EXIT_FAILURE;
}
// Now change center again to see it continues to work.
center[0] = 13;
center[1] = 14;
center[2] = 15;
vtkSMPropertyHelper(sgProxy, "Center").Set(center, 3);
sgProxy->UpdateVTKObjects();
if (sphere->GetCenter()[0] != center[0] || sphere->GetCenter()[1] != center[1] ||
sphere->GetCenter()[2] != center[2])
{
cerr << "Failed to update VTK object correctly after loading state!" << endl;
return EXIT_FAILURE;
}
sgProxy = NULL;
session->Delete();
vtkInitializationHelper::Finalize();
return EXIT_SUCCESS;
}
|