You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/include/vtkMappedDataArray.h

178 lines
5.8 KiB
C

/*==============================================================================
Program: Visualization Toolkit
Module: vtkMappedDataArray.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm 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.
==============================================================================*/
/**
* @class vtkMappedDataArray
* @brief Map non-contiguous data structures into the
* vtkDataArray API.
*
*
* vtkMappedDataArray is a superclass for vtkDataArrays that do not use
* the standard memory layout, and allows VTK to interface with
* simulation codes for in-situ analysis without repacking simulation data.
*
* vtkMappedDataArrayNewInstanceMacro is used by subclasses to implement
* NewInstanceInternal such that a non-mapped vtkDataArray is returned by
* NewInstance(). This prevents the mapped array type from propogating
* through the pipeline.
*
* @attention
* Subclasses that hold vtkIdType elements must also
* reimplement `int GetDataType()` (see Caveat in vtkTypedDataArray).
*/
#ifndef vtkMappedDataArray_h
#define vtkMappedDataArray_h
#include "vtkTypedDataArray.h"
template <class Scalar>
class vtkMappedDataArray : public vtkTypedDataArray<Scalar>
{
public:
vtkTemplateTypeMacro(vtkMappedDataArray<Scalar>, vtkTypedDataArray<Scalar>)
typedef typename Superclass::ValueType ValueType;
/**
* Perform a fast, safe cast from a vtkAbstractArray to a vtkMappedDataArray.
* This method checks if:
* - source->GetArrayType() is appropriate, and
* - source->GetDataType() matches the Scalar template argument
* if these conditions are met, the method performs a static_cast to return
* source as a vtkMappedDataArray pointer. Otherwise, NULL is returned.
*/
static vtkMappedDataArray<Scalar>* FastDownCast(vtkAbstractArray *source);
void PrintSelf(ostream &os, vtkIndent indent);
// vtkAbstractArray virtual method that must be reimplemented.
void DeepCopy(vtkAbstractArray *aa) = 0;
vtkVariant GetVariantValue(vtkIdType idx) = 0;
void SetVariantValue(vtkIdType idx, vtkVariant value) = 0;
void GetTuples(vtkIdList *ptIds, vtkAbstractArray *output) = 0;
void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output) = 0;
void InterpolateTuple(vtkIdType i, vtkIdList *ptIndices,
vtkAbstractArray *source, double *weights) = 0;
void InterpolateTuple(vtkIdType i, vtkIdType id1,
vtkAbstractArray* source1, vtkIdType id2,
vtkAbstractArray* source2, double t) = 0;
// vtkDataArray virtual method that must be reimplemented.
void DeepCopy(vtkDataArray *da) = 0;
/**
* Print an error and create an internal, long-lived temporary array. This
* method should not be used on vtkMappedDataArray subclasses. See
* vtkArrayDispatch for a better way.
*/
void * GetVoidPointer(vtkIdType id);
/**
* Copy the internal data to the void pointer. The pointer is cast to this
* array's Scalar type and vtkTypedDataArrayIterator is used to populate
* the input array.
*/
void ExportToVoidPointer(void *ptr);
/**
* Read the data from the internal temporary array (created by GetVoidPointer)
* back into the mapped array. If GetVoidPointer has not been called (and the
* internal array therefore does not exist), print an error and return. The
* default implementation uses vtkTypedDataArrayIterator to extract the mapped
* data.
*/
void DataChanged();
//@{
/**
* These methods don't make sense for mapped data array. Prints an error and
* returns.
*/
void SetVoidArray(void *, vtkIdType, int);
void SetVoidArray(void *, vtkIdType, int, int);
//@}
//@{
/**
* Not implemented. Print error and return NULL.
*/
void * WriteVoidPointer(vtkIdType /*id*/, vtkIdType /*number*/)
{
vtkErrorMacro(<<"WriteVoidPointer: Method not implemented.");
return NULL;
}
//@}
/**
* Invalidate the internal temporary array and call superclass method.
*/
void Modified();
// vtkAbstractArray override:
bool HasStandardMemoryLayout() { return false; }
protected:
vtkMappedDataArray();
~vtkMappedDataArray();
virtual int GetArrayType()
{
return vtkAbstractArray::MappedDataArray;
}
private:
vtkMappedDataArray(const vtkMappedDataArray &) VTK_DELETE_FUNCTION;
void operator=(const vtkMappedDataArray &) VTK_DELETE_FUNCTION;
//@{
/**
* GetVoidPointer.
*/
ValueType *TemporaryScalarPointer;
size_t TemporaryScalarPointerSize;
};
//@}
// Declare vtkArrayDownCast implementations for mapped containers:
vtkArrayDownCast_TemplateFastCastMacro(vtkMappedDataArray)
#include "vtkMappedDataArray.txx"
// Adds an implementation of NewInstanceInternal() that returns an AoS
// (unmapped) VTK array, if possible. Use this in combination with
// vtkAbstractTemplateTypeMacro when your subclass is a template class.
// Otherwise, use vtkMappedDataArrayTypeMacro.
#define vtkMappedDataArrayNewInstanceMacro(thisClass) \
protected: \
vtkObjectBase *NewInstanceInternal() const \
{ \
if (vtkDataArray *da = \
vtkDataArray::CreateDataArray(thisClass::VTK_DATA_TYPE)) \
{ \
return da; \
} \
return thisClass::New(); \
} \
public:
// Same as vtkTypeMacro, but adds an implementation of NewInstanceInternal()
// that returns a standard (unmapped) VTK array, if possible.
#define vtkMappedDataArrayTypeMacro(thisClass, superClass) \
vtkAbstractTypeMacroWithNewInstanceType(thisClass, superClass, vtkDataArray) \
vtkMappedDataArrayNewInstanceMacro(thisClass)
#endif //vtkMappedDataArray_h
// VTK-HeaderTest-Exclude: vtkMappedDataArray.h