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.

233 lines
7.6 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageExport.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 vtkImageExport
* @brief Export VTK images to third-party systems.
*
* vtkImageExport provides a way of exporting image data at the end
* of a pipeline to a third-party system or to a simple C array.
* Applications can use this to get direct access to the image data
* in memory. A callback interface is provided to allow connection
* of the VTK pipeline to a third-party pipeline. This interface
* conforms to the interface of vtkImageImport.
* In Python it is possible to use this class to write the image data
* into a python string that has been pre-allocated to be the correct
* size.
* @sa
* vtkImageImport
*/
#ifndef vtkImageExport_h
#define vtkImageExport_h
#include "vtkIOImageModule.h" // For export macro
#include "vtkImageAlgorithm.h"
class VTKIOIMAGE_EXPORT vtkImageExport : public vtkImageAlgorithm
{
public:
static vtkImageExport* New();
vtkTypeMacro(vtkImageExport, vtkImageAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Get the number of bytes required for the output C array.
*/
vtkIdType GetDataMemorySize();
//@{
/**
* Get the (x,y,z) index dimensions of the data. Please note
* that C arrays are indexed in decreasing order, i.e. array[z][y][x].
*/
void GetDataDimensions(int* ptr);
int* GetDataDimensions() VTK_SIZEHINT(3)
{
this->GetDataDimensions(this->DataDimensions);
return this->DataDimensions;
}
//@}
/**
* Get the number of scalar components of the data. Please note that
* when you index into a C array, the scalar component index comes
* last, i.e. array[z][y][x][c].
*/
int GetDataNumberOfScalarComponents();
/**
* Get the scalar type of the data. The scalar type of the C array
* must match the scalar type of the data.
*/
int GetDataScalarType();
const char* GetDataScalarTypeAsString()
{
return vtkImageScalarTypeNameMacro(this->GetDataScalarType());
}
//@{
/**
* Get miscellaneous additional information about the data.
*/
int* GetDataExtent() VTK_SIZEHINT(6);
void GetDataExtent(int* ptr);
double* GetDataSpacing() VTK_SIZEHINT(3);
void GetDataSpacing(double* ptr);
double* GetDataOrigin() VTK_SIZEHINT(3);
void GetDataOrigin(double* ptr);
double* GetDataDirection() VTK_SIZEHINT(9);
void GetDataDirection(double* ptr);
//@}
/**
* Get the input object from the image pipeline.
*/
vtkImageData* GetInput();
//@{
/**
* Set/Get whether the data goes to the exported memory starting
* in the lower left corner or upper left corner. Default: On.
* When this flag is Off, the image will be flipped vertically
* before it is exported.
* WARNING: this flag is used only with the Export() method,
* it is ignored by GetPointerToData().
*/
vtkBooleanMacro(ImageLowerLeft, vtkTypeBool);
vtkGetMacro(ImageLowerLeft, vtkTypeBool);
vtkSetMacro(ImageLowerLeft, vtkTypeBool);
//@}
//@{
/**
* Set the void pointer of the C array to export the data to.
* From python, you can specify a pointer to a string that is
* large enough to hold the data.
*/
void SetExportVoidPointer(void*);
void* GetExportVoidPointer() { return this->ExportVoidPointer; }
//@}
//@{
/**
* The main interface: update the pipeline and export the image
* to the memory pointed to by SetExportVoidPointer(). You can
* also specify a void pointer when you call Export().
*/
void Export() { this->Export(this->ExportVoidPointer); }
virtual void Export(void*);
//@}
/**
* An alternative to Export(): Use with caution. Update the
* pipeline and return a pointer to the image memory. The
* pointer is only valid until the next time that the pipeline
* is updated.
* WARNING: This method ignores the ImageLowerLeft flag.
*/
void* GetPointerToData();
/**
* Get the user data that should be passed to the callback functions.
*/
void* GetCallbackUserData();
//@{
/**
* These are function pointer types for the pipeline connection
* callbacks. See further documentation in vtkImageImport.h.
*/
typedef void (*UpdateInformationCallbackType)(void*);
typedef int (*PipelineModifiedCallbackType)(void*);
typedef int* (*WholeExtentCallbackType)(void*);
typedef double* (*SpacingCallbackType)(void*);
typedef double* (*OriginCallbackType)(void*);
typedef double* (*DirectionCallbackType)(void*);
typedef const char* (*ScalarTypeCallbackType)(void*);
typedef int (*NumberOfComponentsCallbackType)(void*);
typedef void (*PropagateUpdateExtentCallbackType)(void*, int*);
typedef void (*UpdateDataCallbackType)(void*);
typedef int* (*DataExtentCallbackType)(void*);
typedef void* (*BufferPointerCallbackType)(void*);
//@}
//@{
/**
* Get pointers to the pipeline interface callbacks.
*/
UpdateInformationCallbackType GetUpdateInformationCallback() const;
PipelineModifiedCallbackType GetPipelineModifiedCallback() const;
WholeExtentCallbackType GetWholeExtentCallback() const;
SpacingCallbackType GetSpacingCallback() const;
OriginCallbackType GetOriginCallback() const;
DirectionCallbackType GetDirectionCallback() const;
ScalarTypeCallbackType GetScalarTypeCallback() const;
NumberOfComponentsCallbackType GetNumberOfComponentsCallback() const;
PropagateUpdateExtentCallbackType GetPropagateUpdateExtentCallback() const;
UpdateDataCallbackType GetUpdateDataCallback() const;
DataExtentCallbackType GetDataExtentCallback() const;
BufferPointerCallbackType GetBufferPointerCallback() const;
//@}
protected:
vtkImageExport();
~vtkImageExport() override;
// This is called by the superclass.
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
virtual void UpdateInformationCallback();
virtual int PipelineModifiedCallback();
virtual void UpdateDataCallback();
virtual int* WholeExtentCallback();
virtual double* SpacingCallback();
virtual double* OriginCallback();
virtual double* DirectionCallback();
virtual const char* ScalarTypeCallback();
virtual int NumberOfComponentsCallback();
virtual void PropagateUpdateExtentCallback(int*);
virtual int* DataExtentCallback();
virtual void* BufferPointerCallback();
vtkTypeBool ImageLowerLeft;
int DataDimensions[3];
void* ExportVoidPointer;
vtkMTimeType LastPipelineMTime;
private:
vtkImageExport(const vtkImageExport&) = delete;
void operator=(const vtkImageExport&) = delete;
static void UpdateInformationCallbackFunction(void*);
static int PipelineModifiedCallbackFunction(void*);
static int* WholeExtentCallbackFunction(void*);
static double* SpacingCallbackFunction(void*);
static double* OriginCallbackFunction(void*);
static double* DirectionCallbackFunction(void*);
static const char* ScalarTypeCallbackFunction(void*);
static int NumberOfComponentsCallbackFunction(void*);
static void PropagateUpdateExtentCallbackFunction(void*, int*);
static void UpdateDataCallbackFunction(void*);
static int* DataExtentCallbackFunction(void*);
static void* BufferPointerCallbackFunction(void*);
vtkAlgorithm* GetInputAlgorithm();
vtkInformation* GetInputInformation();
};
#endif