I run the program about volume rendering in ios.
I set the volume and change the volume by below function that made by me.
But I can’t deallocate volume memory… How to do that???
// Not working well...
// volume -> Delete();
// volumeMapper -> Delete();
// volumeProperty->Delete();
void* setVolume(void* renWin, void* renVolume, const char* filename, float resample)
{
vtkIOSRenderWindow * win = static_cast<vtkIOSRenderWindow *>(renWin);
vtkSmartPointer<vtkVolume> volume = static_cast<vtkVolume *>(renVolume);
vtkRenderer* renderer = win->GetInteractor()->GetInteractorStyle()->GetDefaultRenderer();
renderer->RemoveVolume(volume);
volume = vtkVolume::New();
vtkSmartPointer<vtkNrrdReader> mi = vtkNrrdReader::New();
mi->SetFileName(filename);
mi->Update();
vtkSmartPointer<vtkImageShiftScale> filter = vtkImageShiftScale::New();
filter->SetOutputScalarTypeToInt();
filter->SetInputConnection(mi->GetOutputPort());
filter->SetShift(100);
filter->SetScale(1);
filter->Update();
vtkSmartPointer<vtkImageResample> resampler = vtkImageResample::New();
resampler->SetInputConnection(filter->GetOutputPort());
resampler->SetAxisMagnificationFactor(0, resample);
resampler->SetAxisMagnificationFactor(1, resample);
resampler->SetAxisMagnificationFactor(2, 1.0);
vtkSmartPointer<vtkSmartVolumeMapper> volumeMapper = vtkSmartVolumeMapper::New();
volumeMapper->SetInputConnection(resampler->GetOutputPort());
volumeMapper->Update();
volumeMapper->SetAutoAdjustSampleDistances(1);
volumeMapper->CroppingOn();
bool independentComponents = true;
vtkSmartPointer<vtkVolumeProperty> volumeProperty = vtkVolumeProperty::New();
volumeProperty->SetShade(1);
volumeProperty->SetIndependentComponents(independentComponents);
volumeProperty->SetInterpolationTypeToLinear();
volume->SetMapper(volumeMapper.GetPointer());
volume->SetProperty(volumeProperty.GetPointer());
volume->SetScale(1.0, 1.0, 1.0);
volume->SetOrigin(0, 0, 0);
renderer->SetBackground2(0.2, 0.3, 0.4);
renderer->SetBackground(0.1, 0.1, 0.1);
renderer->GradientBackgroundOn();
renderer->AddVolume(volume);
renderer->ResetCamera();
renderer->GetActiveCamera()->Zoom(1.4);
volume->Update();
return volume;
}