rts_vtkFunctions.h 1.9 KB
#include "vtkImageData.h"
#include "rtsVolume.h"
#include "rtsImplicit3D.h"

/*vtkImageData* rtsVolume2vtkImageData(rtsVolume* inputVolume, int data_type)
{
	vtkImageData* outputImageData = vtkImageData::New();
	outputImageData->SetScalarType(data_type);
	outputImageData->SetDimensions(inputVolume->get_dimx(), inputVolume->get_dimy(), inputVolume->get_dimz());
	unsigned char* scalar_pointer = (unsigned char*)outputImageData->GetScalarPointer();
	unsigned char* volume_pointer = inputVolume->get_bits();
	unsigned int vol_size = inputVolume->get_dimx()*inputVolume->get_dimy()*inputVolume->get_dimz();
	for(int i=0; i<vol_size; i++)
	{
		scalar_pointer[i] = volume_pointer[i];
	}

	return outputImageData;
}*/

template <class T>
vtkImageData* rtsImplicit3D2vtkImageData(rtsImplicit3D<T>* in_function, int data_type)
{
	//create the vtkImageData class for storing a uniform grid
	vtkImageData* outputImageData = vtkImageData::New();
	//set the data type of the scalar field
	outputImageData->SetScalarType(data_type);
	//set the dimensions of the image data based on the function resolution
	outputImageData->SetDimensions(in_function->DimX(), in_function->DimY(), in_function->DimZ());
	//get a pointer to the scalar field data and the function data
	unsigned char* scalar_pointer = (unsigned char*)outputImageData->GetScalarPointer();
	unsigned char* volume_pointer = (unsigned char*)in_function->GetBits();
	unsigned int vol_size;
	switch(data_type)
	{
	case VTK_UNSIGNED_CHAR:
		vol_size = sizeof(char)*in_function->DimX()*in_function->DimY()*in_function->DimZ();
		break;
	case VTK_DOUBLE:
		vol_size = sizeof(double)*in_function->DimX()*in_function->DimY()*in_function->DimZ();
		break;
	default:
		exit(1);
	}

	memcpy(scalar_pointer, volume_pointer, vol_size);
	
	//for(int i=0; i<vol_size; i++)
	//{
	//	scalar_pointer[i] = volume_pointer[i];
	//}


	return outputImageData;
}