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.
142 lines
3.8 KiB
142 lines
3.8 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkImageCursor3D.cxx,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.
|
|
|
|
=========================================================================*/
|
|
#include "vtkImageCursor3D.h"
|
|
|
|
#include "vtkImageData.h"
|
|
#include "vtkInformation.h"
|
|
#include "vtkInformationVector.h"
|
|
#include "vtkObjectFactory.h"
|
|
|
|
vtkCxxRevisionMacro(vtkImageCursor3D, "$Revision: 1.22 $");
|
|
vtkStandardNewMacro(vtkImageCursor3D);
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkImageCursor3D::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os,indent);
|
|
|
|
int idx;
|
|
|
|
os << indent << "Cursor Radius: " << this->CursorRadius << "\n";
|
|
os << indent << "Cursor Value: " << this->CursorValue << "\n";
|
|
os << indent << "Cursor Position: (" << this->CursorPosition[0];
|
|
for (idx = 1; idx < 3; ++idx)
|
|
{
|
|
os << ", " << this->CursorPosition[idx];
|
|
}
|
|
os << ")\n";
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkImageCursor3D::vtkImageCursor3D()
|
|
{
|
|
this->CursorPosition[0] = 0;
|
|
this->CursorPosition[1] = 0;
|
|
this->CursorPosition[2] = 0;
|
|
|
|
this->CursorRadius = 5;
|
|
this->CursorValue = 255;
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
void vtkImageCursor3DExecute(vtkImageCursor3D *self,
|
|
vtkImageData *outData, T *ptr)
|
|
{
|
|
int min0, max0, min1, max1, min2, max2;
|
|
int c0, c1, c2;
|
|
int idx;
|
|
double value;
|
|
int rad = self->GetCursorRadius();
|
|
|
|
c0 = (int)(self->GetCursorPosition()[0]);
|
|
c1 = (int)(self->GetCursorPosition()[1]);
|
|
c2 = (int)(self->GetCursorPosition()[2]);
|
|
value = self->GetCursorValue();
|
|
|
|
outData->GetExtent(min0, max0, min1, max1, min2, max2);
|
|
|
|
if (c1 >= min1 && c1 <= max1 && c2 >= min2 && c2 <= max2)
|
|
{
|
|
for (idx = c0 - rad; idx <= c0 + rad; ++idx)
|
|
{
|
|
if (idx >= min0 && idx <= max0)
|
|
{
|
|
ptr = (T *)(outData->GetScalarPointer(idx, c1, c2));
|
|
*ptr = (T)(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (c0 >= min0 && c0 <= max0 && c2 >= min2 && c2 <= max2)
|
|
{
|
|
for (idx = c1 - rad; idx <= c1 + rad; ++idx)
|
|
{
|
|
if (idx >= min1 && idx <= max1)
|
|
{
|
|
ptr = (T *)(outData->GetScalarPointer(c0, idx, c2));
|
|
*ptr = (T)(value);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (c0 >= min0 && c0 <= max0 && c1 >= min1 && c1 <= max1)
|
|
{
|
|
for (idx = c2 - rad; idx <= c2 + rad; ++idx)
|
|
{
|
|
if (idx >= min2 && idx <= max2)
|
|
{
|
|
ptr = (T *)(outData->GetScalarPointer(c0, c1, idx));
|
|
*ptr = (T)(value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Split up into finished and border datas. Fill the border datas.
|
|
int vtkImageCursor3D::RequestData(
|
|
vtkInformation* request,
|
|
vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector)
|
|
{
|
|
void *ptr = NULL;
|
|
|
|
// let superclass allocate data
|
|
this->Superclass::RequestData(request, inputVector, outputVector);
|
|
|
|
// get the data object
|
|
vtkInformation *outInfo = outputVector->GetInformationObject(0);
|
|
vtkImageData *outData =
|
|
vtkImageData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
|
|
|
|
switch (outData->GetScalarType())
|
|
{
|
|
vtkTemplateMacro(
|
|
vtkImageCursor3DExecute(this,outData, (VTK_TT *)(ptr)));
|
|
default:
|
|
vtkErrorMacro(<< "Execute: Unknown ScalarType");
|
|
return 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
|
|
|