Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "vtkSphereSource.h"
00019 #include "vtkPolyDataMapper.h"
00020 #include "vtkActor.h"
00021 #include "vtkRenderWindow.h"
00022 #include "vtkRenderer.h"
00023 #include "vtkRenderWindowInteractor.h"
00024 #include "vtkProperty.h"
00025 #include "vtkUnsignedCharArray.h"
00026
00027 #include <mitkPicFileReader.h>
00028 #include <mitkImage.h>
00029
00030 #include <mitkDataStorage.h>
00031 #include <mitkLevelWindow.h>
00032 #include <mitkLevelWindowProperty.h>
00033
00034 #include <mitkVtkPropRenderer.h>
00035 #include <vtkMitkRenderProp.h>
00036 #include <mitkVtkLayerController.h>
00037 #include <mitkNativeRenderWindowInteractor.h>
00038
00039 #include <itksys/SystemTools.hxx>
00040
00041 #include <fstream>
00042 int mitkVtkPropRendererTest(int argc, char* argv[])
00043 {
00044
00045 mitkIpPicDescriptor *picheader = NULL;
00046 if (argc >= 1)
00047 {
00048 if(itksys::SystemTools::LowerCase(itksys::SystemTools::GetFilenameExtension(argv[1])).find(".pic")!=std::string::npos)
00049 picheader = mitkIpPicGetHeader(argv[1], NULL);
00050 }
00051 if( picheader==NULL)
00052 {
00053 std::cout<<"file not found/not a pic-file - test not applied [PASSED]"<<std::endl;
00054 std::cout<<"[TEST DONE]"<<std::endl;
00055 return EXIT_SUCCESS;
00056 }
00057
00058 static long int sum_orig_Pic3D_pic_gz = 14685408;
00059
00060 std::string argv_str(argv[1]);
00061
00062 mitkIpPicGetTags(argv[1], picheader);
00063
00064
00065 std::cout << "Reading image: ";
00066 mitk::PicFileReader::Pointer reader = mitk::PicFileReader::New();
00067 reader->SetFileName(argv[1]);
00068 reader->Update();
00069 std::cout<<"[PASSED]"<<std::endl;
00070
00071 mitk::Image::Pointer image = reader->GetOutput();
00072
00073 std::cout << "Creating node: ";
00074 mitk::DataNode::Pointer node = mitk::DataNode::New();
00075 node->SetData(image);
00076 std::cout<<"[PASSED]"<<std::endl;
00077
00078 std::cout << "Creating DataStorage: ";
00079 mitk::StandaloneDataStorage::Pointer ds = mitk::StandaloneDataStorage::New();
00080 std::cout<<"[PASSED]"<<std::endl;
00081
00082 std::cout << "Adding node via DataStorage: ";
00083 ds->Add(node);
00084 std::cout<<"[PASSED]"<<std::endl;
00085
00086 std::cout << "Adding level-window property: ";
00087 mitk::LevelWindowProperty::Pointer levWinProp = mitk::LevelWindowProperty::New();
00088 mitk::LevelWindow levelwindow;
00089 levelwindow.SetAuto( image );
00090 levWinProp->SetLevelWindow( levelwindow );
00091 node->GetPropertyList()->SetProperty( "levelwindow", levWinProp );
00092 std::cout<<"[PASSED]"<<std::endl;
00093
00094 std::cout << "Creating a vtk sphere: ";
00095 vtkSphereSource *sphere = vtkSphereSource::New();
00096 sphere->SetRadius(1.0);
00097 sphere->SetThetaResolution(18);
00098 sphere->SetPhiResolution(18);
00099
00100 vtkPolyDataMapper *map = vtkPolyDataMapper::New();
00101 map->SetInput(sphere->GetOutput());
00102 sphere->Delete();
00103
00104 vtkActor *aSphere = vtkActor::New();
00105 aSphere->SetMapper(map);
00106 map->Delete();
00107 aSphere->GetProperty()->SetColor(0,0,1);
00108 std::cout<<"[PASSED]"<<std::endl;
00109
00110 std::cout << "Creating a renderer for the sphere: ";
00111 vtkRenderer *sphereRenderer = vtkRenderer::New();
00112 sphereRenderer->AddActor(aSphere);
00113 aSphere->Delete();
00114
00115 std::cout<<"[PASSED]"<<std::endl;
00116
00117 std::cout << "Creating vtkRenderWindow and VtkPropRenderer: ";
00118 vtkRenderWindow *renderWindow = vtkRenderWindow::New();
00119 mitk::VtkPropRenderer::Pointer propRenderer = mitk::VtkPropRenderer::New( "the renderer", renderWindow );
00120
00121 std::cout<<"[PASSED]"<<std::endl;
00122
00123
00124
00125
00126 std::cout << "BaseRenderer::SetData(iterator): ";
00127 propRenderer->SetDataStorage(ds);
00128 std::cout<<"[PASSED]"<<std::endl;
00129
00130 std::cout << "Creating vtkMitkRenderProp and connecting it to the VtkPropRenderer: ";
00131 vtkMitkRenderProp* renderProp = vtkMitkRenderProp::New();
00132 renderProp->SetPropRenderer(propRenderer);
00133 propRenderer->GetVtkRenderer()->AddViewProp(renderProp);
00134 std::cout<<"[PASSED]"<<std::endl;
00135
00136 std::cout << "Inserting the sphere into the foreground of the VtkLayerController: ";
00137 mitk::VtkLayerController::GetInstance(renderWindow)->InsertForegroundRenderer(sphereRenderer,true);
00138 std::cout<<"[PASSED]"<<std::endl;
00139
00140
00141
00142
00143
00144 std::cout << "Setting and getting size of renderWindow: ";
00145 renderWindow->SetSize(400, 400);
00146 int *size = renderWindow->GetSize();
00147 std::cout<<"[PASSED]"<<std::endl;
00148
00149 std::cout << "Do the rendering: ";
00150 renderWindow->Render();
00151 std::cout<<"[PASSED]"<<std::endl;
00152
00153
00154
00155 std::cout << "Testing to pick a world position: ";
00156 mitk::Point2D p;
00157 mitk::Point3D p_mm;
00158 p[0] = 10;
00159 p[1] = 10;
00160 propRenderer->PickWorldPoint(p, p_mm);
00161 std::cout << "returned world position: " << p_mm << "\n";
00162
00163 std::cout << "Creating vtkUnsignedCharArray: ";
00164 vtkUnsignedCharArray *vtkImage = vtkUnsignedCharArray::New();
00165 std::cout<<"[PASSED]"<<std::endl;
00166
00167 cout << "Reading image from renderWindow" << std::endl;
00168 renderWindow->GetRGBACharPixelData(0, 0, size[0]-1, size[1]-1, 0, vtkImage);
00169 cout << "Read " << size[0]*size[1] << " data points\n";
00170
00171 cout << "Computing sum of all RGBA values..\n";
00172 long int sum_now = 0;
00173 for(int i=0;i<size[0]*size[1];i++)
00174 sum_now += vtkImage->GetValue(i);
00175 std::cout << "Sum of all RGBA values: " << sum_now << "\n";
00176 std::cout << "Sum should be: " << sum_orig_Pic3D_pic_gz << "\n";
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 propRenderer->GetVtkRenderer()->RemoveViewProp(renderProp);
00202 renderProp->Delete();
00203 propRenderer = NULL;
00204 sphereRenderer->Delete();
00205
00206 renderWindow->Delete();
00207
00208 vtkImage->Delete();
00209 ds = NULL;
00210
00211 std::cout<<"[TEST DONE]"<<std::endl;
00212 return EXIT_SUCCESS;
00213 }
00214
00215