16 #ifndef vtkVolumeMask_h
17 #define vtkVolumeMask_h
21 #include <vtkOpenGLRenderWindow.h>
24 #include <vtkTextureObject.h>
81 const char* arrayName,
84 bool needUpdate =
false;
85 bool modified =
false;
101 int obsolete = needUpdate || !this->
Loaded ||
107 while(!obsolete && i<6)
109 obsolete = obsolete || this->
LoadedExtent[i]>textureExtent[i];
111 obsolete = obsolete || this->
LoadedExtent[i]<textureExtent[i];
132 cout <<
"Mask should be VTK_UNSIGNED_CHAR." << endl;
136 cout <<
"Mask should be a one-component scalar field." << endl;
139 GLint internalFormat = GL_R8;
140 GLenum format = GL_RED;
141 GLenum
type = GL_UNSIGNED_BYTE;
148 textureSize[i] = textureExtent[2*i+1] - textureExtent[2*i] + 1;
153 glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &width);
154 this->
Loaded = textureSize[0] <= width && textureSize[1] <= width &&
155 textureSize[2] <= width;
159 this->
Loaded = textureSize[0] * textureSize[1]*
166 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
168 if(!(textureExtent[1]-textureExtent[0]+cellFlag==dim[0]))
170 glPixelStorei(GL_UNPACK_ROW_LENGTH,dim[0]-cellFlag);
172 if(!(textureExtent[3]-textureExtent[2]+cellFlag==dim[1]))
174 glPixelStorei(GL_UNPACK_IMAGE_HEIGHT,
178 ((textureExtent[4]*(dim[1]-cellFlag)+textureExtent[2]) *
179 (dim[0]-cellFlag)+textureExtent[0]) *
186 textureSize[0], textureSize[1], textureSize[2],
187 1, scalarType, dataPtr);
196 glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
197 glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, 0);
212 swapBounds[0] = (spacing[0] < 0);
213 swapBounds[1] = (spacing[1] < 0);
214 swapBounds[2] = (spacing[2] < 0);
230 static_cast<double>(this->
LoadedExtent[0+swapBounds[0]])*spacing[0];
232 static_cast<double>(this->
LoadedExtent[2+swapBounds[1]])*spacing[1];
233 this->LoadedBounds[4]=origin[2]+
234 static_cast<double>(this->
LoadedExtent[4+swapBounds[2]])*spacing[2];
235 this->LoadedBounds[1]=origin[0]+
236 static_cast<double>(this->
LoadedExtent[1-swapBounds[0]])*spacing[0];
237 this->LoadedBounds[3]=origin[1]+
238 static_cast<double>(this->
LoadedExtent[3-swapBounds[1]])*spacing[1];
239 this->LoadedBounds[5]=origin[2]+
240 static_cast<double>(this->
LoadedExtent[5-swapBounds[2]])*spacing[2];
245 int wholeTextureExtent[6];
250 wholeTextureExtent[i]--;
264 (
static_cast<double>(this->
LoadedExtent[2*i])+0.5)*spacing[i];
267 if(this->
LoadedExtent[2*i+1]==wholeTextureExtent[2*i+1])
270 (
static_cast<double>(this->
LoadedExtent[2*i+1])+1.0)*spacing[i];
275 (
static_cast<double>(this->
LoadedExtent[2*i+1])+0.5)*spacing[i];
353 std::map<vtkImageData *,vtkVolumeMask*>
Map;
362 #endif // vtkVolumeMask_h
vtkIdType * GetLoadedExtent()
void SetContext(vtkRenderWindow *)
Get/Set the context.
virtual void * GetVoidPointer(vtkIdType valueIdx)=0
Return a void pointer.
vtkTimeStamp GetBuildTime()
virtual int GetDataTypeSize()=0
Return the size of the underlying data type.
static vtkOpenGLRenderWindow * SafeDownCast(vtkObjectBase *o)
vtkIdType LoadedExtent[6]
record modification and/or execution time
static vtkDataArray * GetScalars(vtkDataSet *input, int scalarMode, int arrayAccessMode, int arrayId, const char *arrayName, int &cellFlag)
Internal helper function for getting the active scalars.
void Modified()
Set this objects time to the current time.
abstract specification for renderers
void Deactivate(unsigned int texUnit)
Set the active tex unit and bind (using our bind).
virtual int GetDataType()=0
Return the underlying data type.
virtual void SetWrapR(int)
Wrap mode for the first texture coordinate "r" Valid values are:
void SetDataType(unsigned int glType)
Get the data type for the texture as GLenum type.
virtual void SetBorderColor(float, float, float, float)
Border Color (RGBA).
double * GetLoadedBounds()
int GetNumberOfComponents()
Set/Get the dimension (n) of the components.
vtkTextureObject * Texture
void ReleaseGraphicsResources(vtkWindow *window)
window superclass for vtkRenderWindow
virtual int * GetDimensions()
Get dimensions of this structured points dataset.
virtual double * GetOrigin()
Set/Get the origin of the dataset.
bool Create3DFromRaw(unsigned int width, unsigned int height, unsigned int depth, int numComps, int dataType, void *data)
Create a 3D texture from client memory numComps must be in [1-4].
topologically and geometrically regular array of data
virtual void SetMinificationFilter(int)
Minification filter mode.
abstract superclass for arrays of numeric data
virtual double * GetSpacing()
Set the spacing (width,height,length) of the cubical cells that compose the data set.
vtkMTimeType GetMTime() override
Datasets are composite objects and need to check each part for MTime THIS METHOD IS THREAD SAFE...
virtual unsigned int GetHandle()
Returns the OpenGL handle.
void Activate(unsigned int texUnit)
Set the active tex unit and bind (using our bind).
void SetInternalFormat(unsigned int glInternalFormat)
Get/Set internal format (OpenGL internal format) that should be used.
virtual int * GetExtent()
Set/Get the extent.
void Update(vtkRenderer *ren, vtkImageData *input, int cellFlag, int textureExtent[6], int scalarMode, int arrayAccessMode, int arrayId, const char *arrayName, vtkIdType maxMemoryInBytes)
abstracts an OpenGL texture object.
#define VTK_UNSIGNED_CHAR
std::map< vtkImageData *, vtkVolumeMask * > Map
void ReleaseGraphicsResources(vtkWindow *win)
Deactivate and UnBind the texture.
static vtkTextureObject * New()
virtual void SetWrapS(int)
Wrap mode for the first texture coordinate "s" Valid values are:
vtkRenderWindow * GetRenderWindow()
Specify the rendering window in which to draw.
int GetTextureUnit()
Return the texture unit used for this texture.
virtual void SetWrapT(int)
Wrap mode for the first texture coordinate "t" Valid values are:
void SetFormat(unsigned int glFormat)
Get/Set format (OpenGL internal format) that should be used.
virtual void Delete()
Delete a VTK object.
virtual void SetMagnificationFilter(int)
Magnification filter mode.