mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
123 lines
4.0 KiB
C++
123 lines
4.0 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSMDeserializerProtobuf.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 "vtkSMDeserializerProtobuf.h"
|
|
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkPVXMLElement.h"
|
|
#include "vtkSmartPointer.h"
|
|
#include "vtkSMProxy.h"
|
|
#include "vtkSMProxyLocator.h"
|
|
#include "vtkSMProxyManager.h"
|
|
#include "vtkSMSession.h"
|
|
#include "vtkSMStateLocator.h"
|
|
#include "vtkSMMessage.h"
|
|
|
|
#define BEFORE_LOAD(proxy) \
|
|
if (session && session->IsProcessingRemoteNotification()) \
|
|
{ proxy->EnableLocalPushOnly(); }
|
|
|
|
#define AFTER_LOAD(proxy) \
|
|
if (session && session->IsProcessingRemoteNotification()) \
|
|
{ proxy->DisableLocalPushOnly(); }
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkStandardNewMacro(vtkSMDeserializerProtobuf);
|
|
vtkCxxSetObjectMacro(vtkSMDeserializerProtobuf, StateLocator, vtkSMStateLocator);
|
|
//----------------------------------------------------------------------------
|
|
vtkSMDeserializerProtobuf::vtkSMDeserializerProtobuf()
|
|
{
|
|
this->StateLocator = 0;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMDeserializerProtobuf::~vtkSMDeserializerProtobuf()
|
|
{
|
|
this->SetStateLocator(0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMProxy* vtkSMDeserializerProtobuf::NewProxy(vtkTypeUInt32 id, vtkSMProxyLocator* locator)
|
|
{
|
|
vtkSMSession* session = this->GetSession();
|
|
// Make sure that the requested proxy does not already exist
|
|
assert( "SMDeserializer should not create a proxy if that proxy exist" &&
|
|
(session == NULL || session->GetRemoteObject(id) == NULL));
|
|
|
|
vtkSMMessage msg;
|
|
// First extract state for the requested proxy
|
|
// Did not find the proxy, start the creation procedure
|
|
if (!this->StateLocator || !this->StateLocator->FindState(id, &msg))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// ** isn't this unused code especially after the assert(..) above? Commenting
|
|
// out as a result. ***
|
|
|
|
//// Try to NOT create a new proxy if already exist and just load the state
|
|
//vtkSMProxy* proxy =
|
|
// vtkSMProxy::SafeDownCast(this->Session->GetRemoteObject(id));
|
|
//if(proxy)
|
|
// {
|
|
// if(this->StateLocator->FindState(id, &msg))
|
|
// {
|
|
// BEFORE_LOAD(proxy)
|
|
// proxy->LoadState(&msg, locator);
|
|
// proxy->UpdateVTKObjects();
|
|
// AFTER_LOAD(proxy)
|
|
// }
|
|
// return proxy;
|
|
// }
|
|
|
|
|
|
const char* group = msg.GetExtension(ProxyState::xml_group).c_str();
|
|
const char* type = msg.GetExtension(ProxyState::xml_name).c_str();
|
|
const char* subProxyName = (msg.HasExtension(ProxyState::xml_sub_proxy_name))
|
|
? msg.GetExtension(ProxyState::xml_sub_proxy_name).c_str():
|
|
NULL;
|
|
|
|
if (!type)
|
|
{
|
|
vtkErrorMacro("Could not create proxy from element, missing 'type'.");
|
|
return 0;
|
|
}
|
|
|
|
// Create Proxy based on its XML definition
|
|
vtkSMProxy* proxy = this->CreateProxy(group, type, subProxyName);
|
|
if (!proxy)
|
|
{
|
|
vtkErrorMacro("Could not create a proxy of group: "
|
|
<< (group ? group : "(null)")
|
|
<< " type: " << type
|
|
<< " subProxyName: "
|
|
<< (subProxyName ? subProxyName : "(null)"));
|
|
return 0;
|
|
}
|
|
|
|
// Load the state of the proxy now
|
|
BEFORE_LOAD(proxy)
|
|
proxy->LoadState(&msg, locator);
|
|
proxy->UpdateVTKObjects();
|
|
AFTER_LOAD(proxy)
|
|
|
|
return proxy;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMDeserializerProtobuf::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
}
|