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
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkDataObjectImplicitBackendInterface.h"
#include "vtkCommand.h"
#include "vtkDataObject.h"
#include "vtkFieldData.h"
VTK_ABI_NAMESPACE_BEGIN
//------------------------------------------------------------------------------
template <typename ValueType>
vtkDataObjectImplicitBackendInterface<ValueType>::vtkDataObjectImplicitBackendInterface(
vtkDataObject* dataobject, const std::string& arrayName, int attributeType)
: DataObject(dataobject)
, ArrayName(arrayName)
, AttributeType(attributeType)
{
this->DataObject->AddObserver(
vtkCommand::DeleteEvent, this, &vtkDataObjectImplicitBackendInterface::OnDataObjectDeleted);
}
//------------------------------------------------------------------------------
template <typename ValueType>
vtkDataObjectImplicitBackendInterface<ValueType>::~vtkDataObjectImplicitBackendInterface() =
default;
//------------------------------------------------------------------------------
template <typename ValueType>
void vtkDataObjectImplicitBackendInterface<ValueType>::OnDataObjectDeleted(
vtkObject* vtkNotUsed(caller), unsigned long eventId, void* vtkNotUsed(calldata))
{
if (eventId != vtkCommand::DeleteEvent)
{
return;
}
this->Cache = vtkSmartPointer<vtkAOSDataArrayTemplate<ValueType>>::New();
vtkDataArray* self = this->GetArray();
this->Cache->DeepCopy(self);
}
//------------------------------------------------------------------------------
template <typename ValueType>
ValueType vtkDataObjectImplicitBackendInterface<ValueType>::operator()(vtkIdType index) const
{
if (this->DataObject)
{
return this->GetValueFromDataObject(index);
}
return this->Cache->GetValue(index);
}
//------------------------------------------------------------------------------
template <typename ValueType>
vtkDataArray* vtkDataObjectImplicitBackendInterface<ValueType>::GetArray()
{
return this->DataObject->GetAttributesAsFieldData(this->AttributeType)
->GetArray(this->ArrayName.c_str());
}
VTK_ABI_NAMESPACE_END
|