00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00040 #ifndef __vtkDataObject_h
00041 #define __vtkDataObject_h
00042
00043 #include "vtkObject.h"
00044
00045 class vtkAbstractArray;
00046 class vtkAlgorithmOutput;
00047 class vtkDataSetAttributes;
00048 class vtkExecutive;
00049 class vtkFieldData;
00050 class vtkInformation;
00051 class vtkProcessObject;
00052 class vtkSource;
00053 class vtkStreamingDemandDrivenPipelineToDataObjectFriendship;
00054 class vtkExtentTranslator;
00055 class vtkInformationDataObjectKey;
00056 class vtkInformationDoubleKey;
00057 class vtkInformationDoubleVectorKey;
00058 class vtkInformationIntegerKey;
00059 class vtkInformationIntegerPointerKey;
00060 class vtkInformationIntegerVectorKey;
00061 class vtkInformationStringKey;
00062 class vtkInformationVector;
00063 class vtkStreamingDemandDrivenPipeline;
00064 class vtkInformationInformationVectorKey;
00065
00066 #define VTK_PIECES_EXTENT 0
00067 #define VTK_3D_EXTENT 1
00068 #define VTK_TIME_EXTENT 2
00069
00070 class VTK_FILTERING_EXPORT vtkDataObject : public vtkObject
00071 {
00072 public:
00073 static vtkDataObject *New();
00074
00075 vtkTypeMacro(vtkDataObject,vtkObject);
00076 void PrintSelf(ostream& os, vtkIndent indent);
00077
00079
00080 vtkGetObjectMacro(Source,vtkSource);
00081 void SetSource(vtkSource *s);
00083
00085
00086 vtkGetObjectMacro(Information, vtkInformation);
00087 virtual void SetInformation(vtkInformation*);
00089
00091
00092 vtkGetObjectMacro(PipelineInformation, vtkInformation);
00093 virtual void SetPipelineInformation(vtkInformation*);
00095
00097 virtual vtkAlgorithmOutput* GetProducerPort();
00098
00101 unsigned long int GetMTime();
00102
00104 virtual void Initialize();
00105
00110 void ReleaseData();
00111
00114 int ShouldIReleaseData();
00115
00117
00118 vtkGetMacro(DataReleased,int);
00120
00122
00124 void SetReleaseDataFlag(int);
00125 int GetReleaseDataFlag();
00126 vtkBooleanMacro(ReleaseDataFlag,int);
00128
00130
00132 static void SetGlobalReleaseDataFlag(int val);
00133 void GlobalReleaseDataFlagOn() {this->SetGlobalReleaseDataFlag(1);};
00134 void GlobalReleaseDataFlagOff() {this->SetGlobalReleaseDataFlag(0);};
00135 static int GetGlobalReleaseDataFlag();
00137
00139
00140 virtual void SetFieldData(vtkFieldData*);
00141 vtkGetObjectMacro(FieldData,vtkFieldData);
00143
00144
00145 virtual void Register(vtkObjectBase* o);
00146 virtual void UnRegister(vtkObjectBase* o);
00147
00153 virtual void Update();
00154
00160 virtual void UpdateInformation();
00161
00166 virtual void PropagateUpdateExtent();
00167
00173 virtual void TriggerAsynchronousUpdate();
00174
00181 virtual void UpdateData();
00182
00188 virtual unsigned long GetEstimatedMemorySize();
00189
00191
00194 virtual void SetUpdateExtent(int piece,int numPieces, int ghostLevel);
00195 void SetUpdateExtent(int piece, int numPieces)
00196 {this->SetUpdateExtent(piece, numPieces, 0);}
00198
00200
00207 virtual void SetUpdateExtent(int x0, int x1, int y0, int y1, int z0, int z1);
00208 virtual void SetUpdateExtent(int extent[6]);
00209 virtual int* GetUpdateExtent();
00210 virtual void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1,
00211 int& z0, int& z1);
00212 virtual void GetUpdateExtent(int extent[6]);
00214
00219 virtual int GetDataObjectType() {return VTK_DATA_OBJECT;}
00220
00223 unsigned long GetUpdateTime();
00224
00229 void SetUpdateExtentToWholeExtent();
00230
00233 unsigned long GetPipelineMTime();
00234
00240 virtual unsigned long GetActualMemorySize();
00241
00243 void CopyInformation( vtkDataObject *data );
00244
00246
00247 virtual void CopyTypeSpecificInformation( vtkDataObject *data )
00248 {this->CopyInformation( data );};
00250
00252
00254 void SetUpdatePiece(int piece);
00255 void SetUpdateNumberOfPieces(int num);
00256 virtual int GetUpdatePiece();
00257 virtual int GetUpdateNumberOfPieces();
00259
00261
00263 void SetUpdateGhostLevel(int level);
00264 virtual int GetUpdateGhostLevel();
00266
00268
00273 virtual void SetRequestExactExtent(int flag);
00274 virtual int GetRequestExactExtent();
00275 vtkBooleanMacro(RequestExactExtent, int);
00277
00279
00282 virtual void SetWholeExtent(int x0, int x1, int y0, int y1, int z0, int z1);
00283 virtual void SetWholeExtent(int extent[6]);
00284 virtual int* GetWholeExtent();
00285 virtual void GetWholeExtent(int& x0, int& x1, int& y0, int& y1,
00286 int& z0, int& z1);
00287 virtual void GetWholeExtent(int extent[6]);
00289
00291
00294 virtual void SetWholeBoundingBox(double x0, double x1, double y0,
00295 double y1, double z0, double z1);
00296 virtual void SetWholeBoundingBox(double bb[6]);
00297 virtual double* GetWholeBoundingBox();
00298 virtual void GetWholeBoundingBox(double& x0, double& x1, double& y0,
00299 double& y1, double& z0, double& z1);
00300 virtual void GetWholeBoundingBox(double extent[6]);
00302
00304
00308 virtual void SetMaximumNumberOfPieces(int);
00309 virtual int GetMaximumNumberOfPieces();
00311
00313
00318 virtual void CopyInformationToPipeline(vtkInformation* request,
00319 vtkInformation* input,
00320 vtkInformation* output,
00321 int forceCopy);
00323
00325
00328 void CopyInformationToPipeline(vtkInformation* request,
00329 vtkInformation* input)
00330 {
00331 this->CopyInformationToPipeline(request, input, this->PipelineInformation, 0);
00332 }
00334
00337 virtual void CopyInformationFromPipeline(vtkInformation* request);
00338
00340
00344 static vtkInformation *GetActiveFieldInformation(vtkInformation *info,
00345 int fieldAssociation, int attributeType);
00347
00349
00352 static vtkInformation *GetNamedFieldInformation(vtkInformation *info,
00353 int fieldAssociation, const char *name);
00355
00357
00358 static void RemoveNamedFieldInformation(vtkInformation *info,
00359 int fieldAssociation,
00360 const char *name);
00362
00364
00369 static vtkInformation *SetActiveAttribute(vtkInformation *info,
00370 int fieldAssociation, const char *attributeName, int attributeType);
00372
00374
00381 static void SetActiveAttributeInfo(vtkInformation *info,
00382 int fieldAssociation, int attributeType, const char *name, int arrayType,
00383 int numComponents, int numTuples);
00385
00387
00390 static void SetPointDataActiveScalarInfo(vtkInformation *info,
00391 int arrayType, int numComponents);
00393
00397 void DataHasBeenGenerated();
00398
00402 virtual void PrepareForNewData() {this->Initialize();};
00403
00405
00407 virtual void ShallowCopy(vtkDataObject *src);
00408 virtual void DeepCopy(vtkDataObject *src);
00410
00412
00413 void SetExtentTranslator(vtkExtentTranslator* translator);
00414 vtkExtentTranslator* GetExtentTranslator();
00416
00423 virtual int GetExtentType() { return VTK_PIECES_EXTENT; };
00424
00427 virtual void Crop();
00428
00429
00431
00432 enum FieldAssociations
00433 {
00434 FIELD_ASSOCIATION_POINTS,
00435 FIELD_ASSOCIATION_CELLS,
00436 FIELD_ASSOCIATION_NONE,
00437 FIELD_ASSOCIATION_POINTS_THEN_CELLS,
00438 FIELD_ASSOCIATION_VERTICES,
00439 FIELD_ASSOCIATION_EDGES,
00440 FIELD_ASSOCIATION_ROWS,
00441 NUMBER_OF_ASSOCIATIONS
00442 };
00443
00445
00446
00448
00450 enum AttributeTypes
00451 {
00452 POINT,
00453 CELL,
00454 FIELD,
00455 POINT_THEN_CELL,
00456 VERTEX,
00457 EDGE,
00458 ROW,
00459 NUMBER_OF_ATTRIBUTE_TYPES
00460 };
00461
00463
00472 virtual vtkDataSetAttributes* GetAttributes(int type);
00473
00478 virtual vtkFieldData* GetAttributesAsFieldData(int type);
00479
00483 virtual int GetAttributeTypeForArray(vtkAbstractArray* arr);
00484
00487 virtual vtkIdType GetNumberOfElements(int type);
00488
00489
00491
00492 enum FieldOperations
00493 {
00494 FIELD_OPERATION_PRESERVED,
00495 FIELD_OPERATION_REINTERPOLATED,
00496 FIELD_OPERATION_MODIFIED,
00497 FIELD_OPERATION_REMOVED
00498 };
00499
00501
00504 static const char* GetAssociationTypeAsString(int associationType);
00505
00506 static vtkInformationStringKey* DATA_TYPE_NAME();
00507 static vtkInformationDataObjectKey* DATA_OBJECT();
00508 static vtkInformationIntegerKey* DATA_EXTENT_TYPE();
00509 static vtkInformationIntegerPointerKey* DATA_EXTENT();
00510 static vtkInformationIntegerKey* DATA_PIECE_NUMBER();
00511 static vtkInformationIntegerKey* DATA_NUMBER_OF_PIECES();
00512 static vtkInformationIntegerKey* DATA_NUMBER_OF_GHOST_LEVELS();
00513 static vtkInformationDoubleKey* DATA_RESOLUTION();
00514 static vtkInformationDoubleVectorKey* DATA_TIME_STEPS();
00515 static vtkInformationInformationVectorKey* POINT_DATA_VECTOR();
00516 static vtkInformationInformationVectorKey* CELL_DATA_VECTOR();
00517 static vtkInformationInformationVectorKey* VERTEX_DATA_VECTOR();
00518 static vtkInformationInformationVectorKey* EDGE_DATA_VECTOR();
00519 static vtkInformationIntegerKey* FIELD_ARRAY_TYPE();
00520 static vtkInformationIntegerKey* FIELD_ASSOCIATION();
00521 static vtkInformationIntegerKey* FIELD_ATTRIBUTE_TYPE();
00522 static vtkInformationIntegerKey* FIELD_ACTIVE_ATTRIBUTE();
00523 static vtkInformationIntegerKey* FIELD_NUMBER_OF_COMPONENTS();
00524 static vtkInformationIntegerKey* FIELD_NUMBER_OF_TUPLES();
00525 static vtkInformationIntegerKey* FIELD_OPERATION();
00526 static vtkInformationDoubleVectorKey* FIELD_RANGE();
00527 static vtkInformationDoubleVectorKey* PIECE_FIELD_RANGE();
00528 static vtkInformationIntegerVectorKey* PIECE_EXTENT();
00529 static vtkInformationStringKey* FIELD_NAME();
00530 static vtkInformationDoubleVectorKey* ORIGIN();
00531 static vtkInformationDoubleVectorKey* SPACING();
00532 static vtkInformationIntegerKey* DATA_GEOMETRY_UNMODIFIED();
00533
00534
00535 static vtkInformationDataObjectKey* SIL();
00536
00537
00539
00540 static vtkDataObject* GetData(vtkInformation* info);
00541 static vtkDataObject* GetData(vtkInformationVector* v, int i=0);
00542
00544
00545 protected:
00546
00547 vtkDataObject();
00548 ~vtkDataObject();
00549
00550
00551 vtkFieldData *FieldData;
00552
00553
00554 vtkSource *Source;
00555
00556
00557 int DataReleased;
00558
00559
00560 vtkTimeStamp UpdateTime;
00561
00562
00563 vtkExecutive* GetExecutive();
00564
00565
00566 int GetPortNumber();
00567
00568 virtual void ReportReferences(vtkGarbageCollector*);
00569
00570
00571 vtkInformation* Information;
00572
00573
00574
00575 vtkInformation* PipelineInformation;
00576
00577
00578
00579 vtkStreamingDemandDrivenPipeline* TrySDDP(const char* method);
00580 typedef vtkStreamingDemandDrivenPipeline SDDP;
00581
00582
00583
00584 friend class vtkStreamingDemandDrivenPipelineToDataObjectFriendship;
00585
00586
00587 static const char AssociationNames[NUMBER_OF_ASSOCIATIONS][55];
00588
00589 private:
00590
00591 void InternalDataObjectCopy(vtkDataObject *src);
00592
00593 private:
00594 vtkDataObject(const vtkDataObject&);
00595 void operator=(const vtkDataObject&);
00596 };
00597
00598 #endif
00599