#include "vtkSphereSource.h"#include "vtkPolyDataMapper.h"#include "vtkActor.h"#include "vtkRenderWindow.h"#include "vtkRenderer.h"#include "vtkRenderWindowInteractor.h"#include "vtkProperty.h"#include "vtkUnsignedCharArray.h"#include <mitkPicFileReader.h>#include <mitkImage.h>#include <mitkDataStorage.h>#include <mitkLevelWindow.h>#include <mitkLevelWindowProperty.h>#include <mitkVtkPropRenderer.h>#include <vtkMitkRenderProp.h>#include <mitkVtkLayerController.h>#include <mitkNativeRenderWindowInteractor.h>#include <itksys/SystemTools.hxx>#include <fstream>Go to the source code of this file.
Functions | |
| int | mitkVtkPropRendererTest (int argc, char *argv[]) |
| int mitkVtkPropRendererTest | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 42 of file mitkVtkPropRendererTest.cpp.
References EXIT_SUCCESS, mitk::VtkLayerController::GetInstance(), mitkIpPicDescriptor, vtkMitkRenderProp::New(), mitk::VtkPropRenderer::New(), mitk::LevelWindowProperty::New(), mitk::StandaloneDataStorage::New(), mitk::DataNode::New(), mitk::PicFileReader::New(), mitk::LevelWindow::SetAuto(), and vtkMitkRenderProp::SetPropRenderer().
{
//independently read header of pic file
mitkIpPicDescriptor *picheader = NULL;
if (argc >= 1)
{
if(itksys::SystemTools::LowerCase(itksys::SystemTools::GetFilenameExtension(argv[1])).find(".pic")!=std::string::npos)
picheader = mitkIpPicGetHeader(argv[1], NULL);
}
if( picheader==NULL)
{
std::cout<<"file not found/not a pic-file - test not applied [PASSED]"<<std::endl;
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
static long int sum_orig_Pic3D_pic_gz = 14685408;
std::string argv_str(argv[1]);
mitkIpPicGetTags(argv[1], picheader);
//Read pic-Image from file
std::cout << "Reading image: ";
mitk::PicFileReader::Pointer reader = mitk::PicFileReader::New();
reader->SetFileName(argv[1]);
reader->Update();
std::cout<<"[PASSED]"<<std::endl;
mitk::Image::Pointer image = reader->GetOutput();
std::cout << "Creating node: ";
mitk::DataNode::Pointer node = mitk::DataNode::New();
node->SetData(image);
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Creating DataStorage: ";
mitk::StandaloneDataStorage::Pointer ds = mitk::StandaloneDataStorage::New();
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Adding node via DataStorage: ";
ds->Add(node);
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Adding level-window property: ";
mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
mitk::LevelWindow levelwindow;
levelwindow.SetAuto( image );
levWinProp->SetLevelWindow( levelwindow );
node->GetPropertyList()->SetProperty( "levelwindow", levWinProp );
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Creating a vtk sphere: ";
vtkSphereSource *sphere = vtkSphereSource::New();
sphere->SetRadius(1.0);
sphere->SetThetaResolution(18);
sphere->SetPhiResolution(18);
vtkPolyDataMapper *map = vtkPolyDataMapper::New();
map->SetInput(sphere->GetOutput());
sphere->Delete();
vtkActor *aSphere = vtkActor::New();
aSphere->SetMapper(map);
map->Delete();
aSphere->GetProperty()->SetColor(0,0,1); // sphere color blue
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Creating a renderer for the sphere: ";
vtkRenderer *sphereRenderer = vtkRenderer::New();
sphereRenderer->AddActor(aSphere);
aSphere->Delete();
//sphereRenderer->SetBackground(1,1,1); // Background color white
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Creating vtkRenderWindow and VtkPropRenderer: ";
vtkRenderWindow *renderWindow = vtkRenderWindow::New();
mitk::VtkPropRenderer::Pointer propRenderer = mitk::VtkPropRenderer::New( "the renderer", renderWindow );
//propRenderer->SetMapperID(2);
std::cout<<"[PASSED]"<<std::endl;
//renderWindow->AddRenderer(sphereRenderer);
//renderWindow->SetErase(0);
std::cout << "BaseRenderer::SetData(iterator): ";
propRenderer->SetDataStorage(ds);
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Creating vtkMitkRenderProp and connecting it to the VtkPropRenderer: ";
vtkMitkRenderProp* renderProp = vtkMitkRenderProp::New();
renderProp->SetPropRenderer(propRenderer);
propRenderer->GetVtkRenderer()->AddViewProp(renderProp);
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Inserting the sphere into the foreground of the VtkLayerController: ";
mitk::VtkLayerController::GetInstance(renderWindow)->InsertForegroundRenderer(sphereRenderer,true);
std::cout<<"[PASSED]"<<std::endl;
// mouse interaction for debugging
//vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
//iren->SetRenderWindow(renderWindow);
std::cout << "Setting and getting size of renderWindow: ";
renderWindow->SetSize(400, 400);
int *size = renderWindow->GetSize();
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Do the rendering: ";
renderWindow->Render();
std::cout<<"[PASSED]"<<std::endl;
//iren->Start();
std::cout << "Testing to pick a world position: ";
mitk::Point2D p;
mitk::Point3D p_mm;
p[0] = 10;
p[1] = 10;
propRenderer->PickWorldPoint(p, p_mm);
std::cout << "returned world position: " << p_mm << "\n";
std::cout << "Creating vtkUnsignedCharArray: ";
vtkUnsignedCharArray *vtkImage = vtkUnsignedCharArray::New();
std::cout<<"[PASSED]"<<std::endl;
cout << "Reading image from renderWindow" << std::endl;
renderWindow->GetRGBACharPixelData(0, 0, size[0]-1, size[1]-1, 0, vtkImage);
cout << "Read " << size[0]*size[1] << " data points\n";
cout << "Computing sum of all RGBA values..\n";
long int sum_now = 0;
for(int i=0;i<size[0]*size[1];i++)
sum_now += vtkImage->GetValue(i);
std::cout << "Sum of all RGBA values: " << sum_now << "\n";
std::cout << "Sum should be: " << sum_orig_Pic3D_pic_gz << "\n";
//std::string Pic3d_pic_gz_str("Pic3D.pic.gz");
//std::cout << "pic3d " << Pic3d_pic_gz_str << "\n";
//std::cout << "argv " << argv_str << "\n";
//std::cout << "find " << (int) argv_str.find("Pic3D.pic.gz") << "\n";
//std::cout << "size " << argv_str.size() << "\n";
//if(argv_str.size() - ((int) argv_str.find("Pic3D.pic.gz")) == 12)
//{
// std::cout << "Input image is Pic3D.pic.gz\n";
// std::cout << "Sum should be: " << sum_orig_Pic3D_pic_gz << "\n";
// if(sum_orig_Pic3D_pic_gz!=sum_now)
// {
// std::cout<<"[FAILED]"<<std::endl;
// return EXIT_FAILURE;
// }
// std::cout<<"[PASSED]"<<std::endl;
//}
//else
//{
// std::cout<<"Unknown image, comparison test skipped"<<std::endl;
//}
propRenderer->GetVtkRenderer()->RemoveViewProp(renderProp);
renderProp->Delete();
propRenderer = NULL;
sphereRenderer->Delete();
renderWindow->Delete();
vtkImage->Delete();
ds = NULL;
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
1.7.2