mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
214 lines
5.8 KiB
C++
214 lines
5.8 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSIProperty.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 "vtkSIProperty.h"
|
|
|
|
#include "vtkClientServerInterpreter.h"
|
|
#include "vtkClientServerStream.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkSIProxy.h"
|
|
#include "vtkSMMessage.h"
|
|
#include "vtkPVXMLElement.h"
|
|
|
|
//****************************************************************************/
|
|
// Internal Classes and typedefs
|
|
//****************************************************************************/
|
|
class vtkSIProperty::vtkInternals
|
|
{
|
|
public:
|
|
vtkInternals()
|
|
{
|
|
this->CacheValue = NULL;
|
|
}
|
|
~vtkInternals()
|
|
{
|
|
this->ClearCache();
|
|
}
|
|
|
|
void ClearCache()
|
|
{
|
|
if(this->CacheValue)
|
|
{
|
|
delete this->CacheValue;
|
|
this->CacheValue = NULL;
|
|
}
|
|
}
|
|
|
|
bool HasCache()
|
|
{
|
|
return this->CacheValue != NULL;
|
|
}
|
|
|
|
void SaveToCache(const ProxyState_Property *newValue)
|
|
{
|
|
this->ClearCache();
|
|
this->CacheValue = new ProxyState_Property();
|
|
this->CacheValue->CopyFrom(*newValue);
|
|
}
|
|
|
|
ProxyState_Property *CacheValue;
|
|
};
|
|
|
|
//****************************************************************************/
|
|
vtkStandardNewMacro(vtkSIProperty);
|
|
//----------------------------------------------------------------------------
|
|
vtkSIProperty::vtkSIProperty()
|
|
{
|
|
this->Command = NULL;
|
|
this->XMLName = NULL;
|
|
this->IsInternal = false;
|
|
this->InformationOnly = false;
|
|
this->Repeatable = false;
|
|
this->SIProxyObject = NULL;
|
|
this->Internals = new vtkInternals();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSIProperty::~vtkSIProperty()
|
|
{
|
|
this->SetCommand(NULL);
|
|
this->SetXMLName(NULL);
|
|
delete this->Internals;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool vtkSIProperty::ReadXMLAttributes(
|
|
vtkSIProxy* proxyhelper, vtkPVXMLElement* element)
|
|
{
|
|
this->SIProxyObject = proxyhelper;
|
|
|
|
const char* xmlname = element->GetAttribute("name");
|
|
if(xmlname)
|
|
{
|
|
this->SetXMLName(xmlname);
|
|
}
|
|
|
|
const char* command = element->GetAttribute("command");
|
|
if (command)
|
|
{
|
|
this->SetCommand(command);
|
|
}
|
|
|
|
int repeatable;
|
|
if (element->GetScalarAttribute("repeatable", &repeatable))
|
|
{
|
|
this->Repeatable = (repeatable != 0);
|
|
}
|
|
|
|
// Yup, both mean the same thing :).
|
|
int repeat_command;
|
|
if (element->GetScalarAttribute("repeat_command", &repeat_command))
|
|
{
|
|
this->Repeatable = (repeat_command != 0);
|
|
}
|
|
|
|
int information_only;
|
|
if (element->GetScalarAttribute("information_only", &information_only))
|
|
{
|
|
this->InformationOnly = (information_only != 0);
|
|
}
|
|
|
|
int is_internal;
|
|
if (element->GetScalarAttribute("is_internal", &is_internal))
|
|
{
|
|
this->SetIsInternal(is_internal != 0);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSIObject* vtkSIProperty::GetSIObject(vtkTypeUInt32 globalid)
|
|
{
|
|
if (this->SIProxyObject)
|
|
{
|
|
return this->SIProxyObject->GetSIObject(globalid);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool vtkSIProperty::ProcessMessage(vtkClientServerStream& stream)
|
|
{
|
|
if (this->SIProxyObject && this->SIProxyObject->GetVTKObject())
|
|
{
|
|
return this->SIProxyObject->GetInterpreter()->ProcessStream(stream) != 0;
|
|
}
|
|
return this->SIProxyObject ? true : false;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkObjectBase* vtkSIProperty::GetVTKObject()
|
|
{
|
|
if (this->SIProxyObject)
|
|
{
|
|
return this->SIProxyObject->GetVTKObject();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
const vtkClientServerStream& vtkSIProperty::GetLastResult()
|
|
{
|
|
if (this->SIProxyObject)
|
|
{
|
|
return this->SIProxyObject->GetInterpreter()->GetLastResult();
|
|
}
|
|
|
|
static vtkClientServerStream stream;
|
|
return stream;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSIProperty::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
}
|
|
//----------------------------------------------------------------------------
|
|
// CAUTION: This method should only be called for Command property only
|
|
// and not for value property.
|
|
bool vtkSIProperty::Push(vtkSMMessage*, int)
|
|
{
|
|
if (this->InformationOnly || !this->Command || this->GetVTKObject() == NULL)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
vtkClientServerStream stream;
|
|
stream << vtkClientServerStream::Invoke;
|
|
stream << this->GetVTKObject() << this->Command;
|
|
stream << vtkClientServerStream::End;
|
|
return this->ProcessMessage(stream);
|
|
}
|
|
//----------------------------------------------------------------------------
|
|
// CAUTION: This method should only be called to retreive the cache value of the
|
|
// property.
|
|
bool vtkSIProperty::Pull(vtkSMMessage* msg)
|
|
{
|
|
if(!this->InformationOnly && this->Internals->HasCache())
|
|
{
|
|
ProxyState_Property *newProp = msg->AddExtension(ProxyState::property);
|
|
newProp->CopyFrom(*this->Internals->CacheValue);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
//----------------------------------------------------------------------------
|
|
void vtkSIProperty::SaveValueToCache(vtkSMMessage* message, int offset)
|
|
{
|
|
const ProxyState_Property *prop =
|
|
&message->GetExtension(ProxyState::property, offset);
|
|
this->Internals->SaveToCache(prop);
|
|
}
|