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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkImageStencilData.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 vtkImageStencilData - efficient description of an image stencil
// .SECTION Description
// vtkImageStencilData describes an image stencil in a manner which is
// efficient both in terms of speed and storage space. The stencil extents
// are stored for each x-row across the image (multiple extents per row if
// necessary) and can be retrieved via the GetNextExtent() method.
// .SECTION see also
// vtkImageStencilSource vtkImageStencil
#ifndef __vtkImageStencilData_h
#define __vtkImageStencilData_h
#include "vtkDataObject.h"
class VTK_IMAGING_EXPORT vtkImageStencilData : public vtkDataObject
{
public:
static vtkImageStencilData *New();
vtkTypeRevisionMacro(vtkImageStencilData, vtkDataObject);
void PrintSelf(ostream& os, vtkIndent indent);
void Initialize();
void DeepCopy(vtkDataObject *o);
void ShallowCopy(vtkDataObject *f);
void InternalImageStencilDataCopy(vtkImageStencilData *s);
// Description:
// Get the data type as an integer (this will return VTK_DATA_OBJECT
// for now, maybe a proper type constant will be reserved later).
int GetDataObjectType() { return VTK_DATA_OBJECT; }
// Description:
// The extent type is 3D, just like vtkImageData.
int GetExtentType() { return VTK_3D_EXTENT; };
// Description:
// Given the total output x extent [xMin,xMax] and the current y, z indices,
// return each sub-extent [r1,r2] that lies within within the unclipped
// region in sequence. A value of '0' is returned if no more sub-extents
// are available. The variable 'iter' must be initialized to zero before
// the first call, unless you want the complementary sub-extents in which
// case you must initialize 'iter' to -1. The variable 'iter' is used
// internally to keep track of which sub-extent should be returned next.
int GetNextExtent(int &r1, int &r2, int xMin, int xMax,
int yIdx, int zIdx, int &iter);
// Description:
// This method is used by vtkImageStencilDataSource to add an x
// sub extent [r1,r2] for the x row (yIdx,zIdx). The specified sub
// extent must not intersect any other sub extents along the same x row.
// As well, r1 and r2 must both be within the total x extent
// [Extent[0],Extent[1]].
void InsertNextExtent(int r1, int r2, int yIdx, int zIdx);
// Description:
// Set the desired spacing for the stencil.
// This must be called before the stencil is Updated, ideally
// in the ExecuteInformation method of the imaging filter that
// is using the stencil.
vtkSetVector3Macro(Spacing, double);
vtkGetVector3Macro(Spacing, double);
// Description:
// Set the desired origin for the stencil.
// This must be called before the stencil is Updated, ideally
// in the ExecuteInformation method of the imaging filter that
// is using the stencil.
vtkSetVector3Macro(Origin, double);
vtkGetVector3Macro(Origin, double);
// Description:
// Set the extent of the data. This is should be called only
// by vtkImageStencilSource, as it is part of the basic pipeline
// functionality.
void SetExtent(int extent[6]);
void SetExtent(int x1, int x2, int y1, int y2, int z1, int z2);
vtkGetVector6Macro(Extent, int);
// Description:
// Save the previous data spacing. This should be called only by
// vtkImageStencilSource.
vtkSetVector3Macro(OldSpacing, double);
vtkGetVector3Macro(OldSpacing, double);
// Description:
// Save the previous data origin. This should be called only by
// vtkImageStencilSource.
vtkSetVector3Macro(OldOrigin, double);
vtkGetVector3Macro(OldOrigin, double);
// Description:
// Allocate space for the sub-extents. This is called by
// vtkImageStencilSource.
void AllocateExtents();
// 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.
void UpdateData();
// 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.
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.
void TriggerAsynchronousUpdate();
//BTX
// Description:
// Retrieve an instance of this class from an information object.
static vtkImageStencilData* GetData(vtkInformation* info);
static vtkImageStencilData* GetData(vtkInformationVector* v, int i=0);
//ETX
protected:
vtkImageStencilData();
~vtkImageStencilData();
// Description:
// Check to see of the Spacing and Origin are different
// from the OldSpacing and OldOrigin.
int SpacingOrOriginHasChanged();
// Description:
// Previous Spacing and Origin values, so that it is possible to
// know when an update is required because they have changed.
double OldSpacing[3];
double OldOrigin[3];
// Description:
// The Spacing and Origin of the data.
double Spacing[3];
double Origin[3];
int Extent[6];
// Description:
// The actual 'data' is stored here.
int NumberOfExtentEntries;
int *ExtentListLengths;
int **ExtentLists;
private:
vtkImageStencilData(const vtkImageStencilData&); // Not implemented.
void operator=(const vtkImageStencilData&); // Not implemented.
};
#endif
|