Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

518 lines
20 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkDataObject.h,v $
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.
=========================================================================*/
// .NAME vtkDataObject - general representation of visualization data
// .SECTION Description
// vtkDataObject is an general representation of visualization data. It serves
// to encapsulate instance variables and methods for visualization network
// execution, as well as representing data consisting of a field (i.e., just
// an unstructured pile of data). This is to be compared with a vtkDataSet,
// which is data with geometric and/or topological structure.
//
// vtkDataObjects are used to represent arbitrary repositories of data via the
// vtkFieldData instance variable. These data must be eventually mapped into a
// concrete subclass of vtkDataSet before they can actually be displayed.
//
// .SECTION See Also
// vtkDataSet vtkFieldData vtkDataObjectSource vtkDataObjectFilter
// vtkDataObjectMapper vtkDataObjectToDataSet
// vtkFieldDataToAttributeDataFilter
#ifndef __vtkDataObject_h
#define __vtkDataObject_h
#include "vtkObject.h"
class vtkAlgorithmOutput;
class vtkExecutive;
class vtkFieldData;
class vtkInformation;
class vtkProcessObject;
class vtkSource;
class vtkStreamingDemandDrivenPipelineToDataObjectFriendship;
class vtkExtentTranslator;
class vtkInformationDataObjectKey;
class vtkInformationDoubleKey;
class vtkInformationDoubleVectorKey;
class vtkInformationIntegerKey;
class vtkInformationIntegerPointerKey;
class vtkInformationIntegerVectorKey;
class vtkInformationStringKey;
class vtkInformationVector;
class vtkStreamingDemandDrivenPipeline;
class vtkInformationInformationVectorKey;
#define VTK_PIECES_EXTENT 0
#define VTK_3D_EXTENT 1
class VTK_FILTERING_EXPORT vtkDataObject : public vtkObject
{
public:
static vtkDataObject *New();
vtkTypeRevisionMacro(vtkDataObject,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Set/Get the source object creating this data object.
vtkGetObjectMacro(Source,vtkSource);
void SetSource(vtkSource *s);
// Description:
// Set/Get the information object associated with this data object.
vtkGetObjectMacro(Information, vtkInformation);
virtual void SetInformation(vtkInformation*);
// Description:
// Get/Set the pipeline information object that owns this data
// object.
vtkGetObjectMacro(PipelineInformation, vtkInformation);
virtual void SetPipelineInformation(vtkInformation*);
// Description:
// Get the port currently producing this object.
virtual vtkAlgorithmOutput* GetProducerPort();
// Description:
// Data objects are composite objects and need to check each part for MTime.
// The information object also needs to be considered.
unsigned long int GetMTime();
// Description:
// Restore data object to initial state,
virtual void Initialize();
// Description:
// Release data back to system to conserve memory resource. Used during
// visualization network execution. Releasing this data does not make
// down-stream data invalid, so it does not modify the MTime of this
// data object.
void ReleaseData();
// Description:
// Return flag indicating whether data should be released after use
// by a filter.
int ShouldIReleaseData();
// Description:
// Get the flag indicating the data has been released.
vtkGetMacro(DataReleased,int);
// Description:
// Turn on/off flag to control whether this object's data is released
// after being used by a filter.
void SetReleaseDataFlag(int);
int GetReleaseDataFlag();
vtkBooleanMacro(ReleaseDataFlag,int);
// Description:
// Turn on/off flag to control whether every object releases its data
// after being used by a filter.
static void SetGlobalReleaseDataFlag(int val);
void GlobalReleaseDataFlagOn() {this->SetGlobalReleaseDataFlag(1);};
void GlobalReleaseDataFlagOff() {this->SetGlobalReleaseDataFlag(0);};
static int GetGlobalReleaseDataFlag();
// Description:
// Assign or retrieve field data to this data object.
virtual void SetFieldData(vtkFieldData*);
vtkGetObjectMacro(FieldData,vtkFieldData);
// Handle the source/data loop.
virtual void Register(vtkObjectBase* o);
virtual void UnRegister(vtkObjectBase* o);
// Description:
// Provides opportunity for the data object to insure internal
// consistency before access. Also causes owning source/filter
// (if any) to update itself. The Update() method is composed of
// UpdateInformation(), PropagateUpdateExtent(),
// TriggerAsynchronousUpdate(), and UpdateData().
virtual void Update();
// Description:
// WARNING: INTERNAL METHOD - NOT FOR GENERAL USE.
// THIS METHOD IS PART OF THE PIPELINE UPDATE FUNCTIONALITY.
// Update all the "easy to update" information about the object such
// as the extent which will be used to control the update.
// This propagates all the way up then back down the pipeline.
// As a by-product the PipelineMTime is updated.
virtual void UpdateInformation();
// Description:
// WARNING: INTERNAL METHOD - NOT FOR GENERAL USE.
// THIS METHOD IS PART OF THE PIPELINE UPDATE FUNCTIONALITY.
// The update extent for this object is propagated up the pipeline.
// This propagation may early terminate based on the PipelineMTime.
virtual void PropagateUpdateExtent();
// Description:
// WARNING: INTERNAL METHOD - NOT FOR GENERAL USE.
// THIS METHOD IS PART OF THE PIPELINE UPDATE FUNCTIONALITY.
// Propagate back up the pipeline for ports and trigger the update on the
// other side of the port to allow for asynchronous parallel processing in
// the pipeline.
// This propagation may early terminate based on the PipelineMTime.
virtual void TriggerAsynchronousUpdate();
// Description:
// WARNING: INTERNAL METHOD - NOT FOR GENERAL USE.
// THIS METHOD IS PART OF THE PIPELINE UPDATE FUNCTIONALITY.
// Propagate the update back up the pipeline, and perform the actual
// work of updating on the way down. When the propagate arrives at a
// port, block and wait for the asynchronous update to finish on the
// other side.
// This propagation may early terminate based on the PipelineMTime.
virtual void UpdateData();
// Description:
// Get the estimated size of this data object itself. Should be called
// after UpdateInformation() and PropagateUpdateExtent() have both been
// called. Should be overridden in a subclass - otherwise the default
// is to assume that this data object requires no memory.
// The size is returned in kilobytes.
virtual unsigned long GetEstimatedMemorySize();
// Description:
// A generic way of specifying an update extent. Subclasses
// must decide what a piece is. When the NumberOfPieces is zero, then
// no data is requested, and the source will not execute.
virtual void SetUpdateExtent(int piece,int numPieces, int ghostLevel);
void SetUpdateExtent(int piece, int numPieces)
{this->SetUpdateExtent(piece, numPieces, 0);}
// Description:
// Set the update extent for data objects that use 3D extents. Using this
// method on data objects that set extents as pieces (such as vtkPolyData or
// vtkUnstructuredGrid) has no real effect.
// Don't use the set macro to set the update extent
// since we don't want this object to be modified just due to
// a change in update extent. When the volume of the extent is zero (0, -1,..),
// then no data is requested, and the source will not execute.
virtual void SetUpdateExtent(int x0, int x1, int y0, int y1, int z0, int z1);
virtual void SetUpdateExtent(int extent[6]);
virtual int* GetUpdateExtent();
virtual void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1,
int& z0, int& z1);
virtual void GetUpdateExtent(int extent[6]);
// Description:
// Return class name of data type. This is one of VTK_STRUCTURED_GRID,
// VTK_STRUCTURED_POINTS, VTK_UNSTRUCTURED_GRID, VTK_POLY_DATA, or
// VTK_RECTILINEAR_GRID (see vtkSetGet.h for definitions).
// THIS METHOD IS THREAD SAFE
virtual int GetDataObjectType() {return VTK_DATA_OBJECT;}
// Description:
// Used by Threaded ports to determine if they should initiate an
// asynchronous update (still in development).
unsigned long GetUpdateTime();
// Description:
// If the whole input extent is required to generate the requested output
// extent, this method can be called to set the input update extent to the
// whole input extent. This method assumes that the whole extent is known
// (that UpdateInformation has been called)
void SetUpdateExtentToWholeExtent();
// Description:
// Get the cumulative modified time of everything upstream. Does
// not include the MTime of this object.
unsigned long GetPipelineMTime();
// Description:
// Return the actual size of the data in kilobytes. This number
// is valid only after the pipeline has updated. The memory size
// returned is guaranteed to be greater than or equal to the
// memory required to represent the data (e.g., extra space in
// arrays, etc. are not included in the return value).
virtual unsigned long GetActualMemorySize();
// Description:
// Copy the generic information (WholeExtent ...)
void CopyInformation( vtkDataObject *data );
// Description:
// By default, there is no type specific information
virtual void CopyTypeSpecificInformation( vtkDataObject *data )
{this->CopyInformation( data );};
// Description:
// Set / Get the update piece and the update number of pieces. Similar
// to update extent in 3D.
void SetUpdatePiece(int piece);
void SetUpdateNumberOfPieces(int num);
virtual int GetUpdatePiece();
virtual int GetUpdateNumberOfPieces();
// Description:
// Set / Get the update ghost level and the update number of ghost levels.
// Similar to update extent in 3D.
void SetUpdateGhostLevel(int level);
virtual int GetUpdateGhostLevel();
// Description:
// This request flag indicates whether the requester can handle
// more data than requested. Right now it is used in vtkImageData.
// Image filters can return more data than requested. The the
// consumer cannot handle this (i.e. DataSetToDataSetFitler)
// the image will crop itself. This functionality used to be in
// ImageToStructuredPoints.
virtual void SetRequestExactExtent(int flag);
virtual int GetRequestExactExtent();
vtkBooleanMacro(RequestExactExtent, int);
// Description:
// Set/Get the whole extent of this data object.
// The whole extent is meta data for structured data sets.
// It gets set by the source during the update information call.
virtual void SetWholeExtent(int x0, int x1, int y0, int y1, int z0, int z1);
virtual void SetWholeExtent(int extent[6]);
virtual int* GetWholeExtent();
virtual void GetWholeExtent(int& x0, int& x1, int& y0, int& y1,
int& z0, int& z1);
virtual void GetWholeExtent(int extent[6]);
// Description:
// Set/Get the whole bounding box of this data object.
// The whole whole bounding box is meta data for data sets
// It gets set by the source during the update information call.
virtual void SetWholeBoundingBox(double x0, double x1, double y0,
double y1, double z0, double z1);
virtual void SetWholeBoundingBox(double bb[6]);
virtual double* GetWholeBoundingBox();
virtual void GetWholeBoundingBox(double& x0, double& x1, double& y0,
double& y1, double& z0, double& z1);
virtual void GetWholeBoundingBox(double extent[6]);
// Description:
// Set/Get the maximum number of pieces that can be requested.
// The maximum number of pieces is meta data for unstructured data sets.
// It gets set by the source during the update information call.
// A value of -1 indicates that there is no maximum. A value of
virtual void SetMaximumNumberOfPieces(int);
virtual int GetMaximumNumberOfPieces();
// Description:
// Copy information about this data object to its
// PipelineInformation from its own Information for the given
// request. If the second argument is not NULL then it is the
// pipeline information object for the input to this data object's
// producer.
virtual void CopyInformationToPipeline(vtkInformation* request,
vtkInformation* input);
// Description:
// Copy information about this data object from the
// PipelineInformation to its own Information for the given request.
virtual void CopyInformationFromPipeline(vtkInformation* request);
// Description:
// Return the information object within the input information object's
// field data corresponding to the specified association
// (FIELD_ASSOCIATION_POINTS or FIELD_ASSOCIATION_CELLS) and attribute
// (SCALARS, VECTORS, NORMALS, TCOORDS, or TENSORS)
static vtkInformation *GetActiveFieldInformation(vtkInformation *info,
int fieldAssociation, int attributeType);
// Description:
// Return the information object within the input information object's
// field data corresponding to the specified association
// (FIELD_ASSOCIATION_POINTS or FIELD_ASSOCIATION_CELLS) and name.
static vtkInformation *GetNamedFieldInformation(vtkInformation *info,
int fieldAssociation, const char *name);
// Description:
// Remove the info associated with an array
static void RemoveNamedFieldInformation(vtkInformation *info,
int fieldAssociation,
const char *name);
// Description:
// Set the named array to be the active field for the specified type
// (SCALARS, VECTORS, NORMALS, TCOORDS, or TENSORS) and association
// (FIELD_ASSOCIATION_POINTS or FIELD_ASSOCIATION_CELLS). Returns the
// active field information object and creates on entry if one not found.
static vtkInformation *SetActiveAttribute(vtkInformation *info,
int fieldAssociation, const char *attributeName, int attributeType);
// Description:
// Set the name, array type, number of components, and number of tuples
// within the passed information object for the active attribute of type
// attributeType (in specified association, FIELD_ASSOCIATION_POINTS or
// FIELD_ASSOCIATION_CELLS). If there is not an active attribute of the
// specified type, an entry in the information object is created. If
// arrayType, numComponents, or numTuples equal to -1, or name=NULL the
// value is not changed.
static void SetActiveAttributeInfo(vtkInformation *info,
int fieldAssociation, int attributeType, const char *name, int arrayType,
int numComponents, int numTuples);
// Description:
// Convenience version of previous method for use (primarily) by the Imaging
// filters. If arrayType or numComponents == -1, the value is not changed.
static void SetPointDataActiveScalarInfo(vtkInformation *info,
int arrayType, int numComponents);
// Description:
// This method is called by the source when it executes to generate data.
// It is sort of the opposite of ReleaseData.
// It sets the DataReleased flag to 0, and sets a new UpdateTime.
void DataHasBeenGenerated();
// Description:
// make the output data ready for new data to be inserted. For most
// objects we just call Initialize. But for vtkImageData we leave the old
// data in case the memory can be reused.
virtual void PrepareForNewData() {this->Initialize();};
// Description:
// Shallow and Deep copy. These copy the data, but not any of the
// pipeline connections.
virtual void ShallowCopy(vtkDataObject *src);
virtual void DeepCopy(vtkDataObject *src);
// Description:
// An object that will translate pieces into structured extents.
void SetExtentTranslator(vtkExtentTranslator* translator);
vtkExtentTranslator* GetExtentTranslator();
// Description:
// The ExtentType will be left as VTK_PIECES_EXTENT for data objects
// such as vtkPolyData and vtkUnstructuredGrid. The ExtentType will be
// changed to VTK_3D_EXTENT for data objects with 3D structure such as
// vtkImageData (and its subclass vtkStructuredPoints), vtkRectilinearGrid,
// and vtkStructuredGrid. The default is the have an extent in pieces,
// with only one piece (no streaming possible).
virtual int GetExtentType() { return VTK_PIECES_EXTENT; };
// Description:
// This method crops the data object (if necesary) so that the extent
// matches the update extent.
virtual void Crop();
//BTX
// Description:
// Possible values for the FIELD_ASSOCIATION information entry.
enum FieldAssociations
{
FIELD_ASSOCIATION_POINTS,
FIELD_ASSOCIATION_CELLS,
FIELD_ASSOCIATION_NONE,
FIELD_ASSOCIATION_POINTS_THEN_CELLS,
NUMBER_OF_ASSOCIATIONS
};
//ETX
//BTX
// Description:
// Possible values for the FIELD_OPERATION information entry.
enum FieldOperations
{
FIELD_OPERATION_PRESERVED,
FIELD_OPERATION_REINTERPOLATED,
FIELD_OPERATION_MODIFIED,
FIELD_OPERATION_REMOVED
};
//ETX
// Description:
// Given an integer association type, this static method returns a string type
// for the attribute (i.e. type = 0: returns "Points").
static const char* GetAssociationTypeAsString(int associationType);
static vtkInformationStringKey* DATA_TYPE_NAME();
static vtkInformationDataObjectKey* DATA_OBJECT();
static vtkInformationIntegerKey* DATA_EXTENT_TYPE();
static vtkInformationIntegerPointerKey* DATA_EXTENT();
static vtkInformationIntegerKey* DATA_PIECE_NUMBER();
static vtkInformationIntegerKey* DATA_NUMBER_OF_PIECES();
static vtkInformationIntegerKey* DATA_NUMBER_OF_GHOST_LEVELS();
static vtkInformationIntegerKey* DATA_TIME_INDEX();
static vtkInformationDoubleKey* DATA_TIME();
static vtkInformationInformationVectorKey* POINT_DATA_VECTOR();
static vtkInformationInformationVectorKey* CELL_DATA_VECTOR();
static vtkInformationIntegerKey* FIELD_ARRAY_TYPE();
static vtkInformationIntegerKey* FIELD_ASSOCIATION();
static vtkInformationIntegerKey* FIELD_ATTRIBUTE_TYPE();
static vtkInformationIntegerKey* FIELD_ACTIVE_ATTRIBUTE();
static vtkInformationIntegerKey* FIELD_NUMBER_OF_COMPONENTS();
static vtkInformationIntegerKey* FIELD_NUMBER_OF_TUPLES();
static vtkInformationIntegerKey* FIELD_OPERATION();
static vtkInformationStringKey* FIELD_NAME();
static vtkInformationDoubleVectorKey* ORIGIN();
static vtkInformationDoubleVectorKey* SPACING();
//BTX
// Description:
// Retrieve an instance of this class from an information object.
static vtkDataObject* GetData(vtkInformation* info);
static vtkDataObject* GetData(vtkInformationVector* v, int i=0);
//ETX
protected:
vtkDataObject();
~vtkDataObject();
// General field data associated with data object
vtkFieldData *FieldData;
// Who generated this data as output?
vtkSource *Source;
// Keep track of data release during network execution
int DataReleased;
// When was this data last generated?
vtkTimeStamp UpdateTime;
// Get the executive that manages this data object.
vtkExecutive* GetExecutive();
// Get the port number producing this data object.
int GetPortNumber();
virtual void ReportReferences(vtkGarbageCollector*);
// Arbitrary extra information associated with this data object.
vtkInformation* Information;
// Reference the pipeline information object that owns this data
// object.
vtkInformation* PipelineInformation;
//BTX
// Check whether this data object is owned by a vtkStreamingDemandDrivenPipeline.
vtkStreamingDemandDrivenPipeline* TrySDDP(const char* method);
typedef vtkStreamingDemandDrivenPipeline SDDP;
//ETX
//BTX
friend class vtkStreamingDemandDrivenPipelineToDataObjectFriendship;
//ETX
static const char AssociationNames[NUMBER_OF_ASSOCIATIONS][55];
private:
// Helper method for the ShallowCopy and DeepCopy methods.
void InternalDataObjectCopy(vtkDataObject *src);
private:
vtkDataObject(const vtkDataObject&); // Not implemented.
void operator=(const vtkDataObject&); // Not implemented.
};
#endif