GDCM 2.2.0

- Main Page
- Related Pages
- Namespaces
- Classes
- Files
- Directories
- Examples

MPRViewer.java

    /*=========================================================================

      Program: GDCM (Grassroots DICOM). A DICOM library

      Copyright (c) 2006-2011 Mathieu Malaterre
      All rights reserved.
      See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html 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.

    =========================================================================*/
    import vtk.*;
    import gdcm.*;
    import java.io.File;

    /*
     * Compilation:
     * CLASSPATH=vtkgdcm.jar:/usr/share/java/vtk.jar javac MPRViewer.java
     *
     * Usage:
     * LD_LIBRARY_PATH=/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/xawt:/usr/lib/jni:. CLASSPATH=/usr/share/java/vtk.jar:vtkgdcm.jar:gdcm.jar:. java MPRViewer BRAINX
     *
     */
    public class MPRViewer
    {
      static {
        // VTK
        System.loadLibrary("vtkCommonJava");
        System.loadLibrary("vtkFilteringJava");
        System.loadLibrary("vtkIOJava");
        System.loadLibrary("vtkImagingJava");
        System.loadLibrary("vtkGraphicsJava");
        System.loadLibrary("vtkRenderingJava");
        // VTK-GDCM
        System.loadLibrary("vtkgdcmJava");
      }

      static FilenamesType fns = new FilenamesType();

      public static void process(String path)
        {
        fns.add( path );
        }

      // Process only files under dir
      public static void visitAllFiles(File dir)
        {
        if (dir.isDirectory())
          {
          String[] children = dir.list();
          for (int i=0; i<children.length; i++)
            {
            visitAllFiles(new File(dir, children[i]));
            }
          }
        else
          {
          process(dir.getPath());
          }
        }

      public static void main(String[] args) throws Exception
        {
        String dirname = args[0];
        if( !PosixEmulation.FileIsDirectory( dirname ) )
          {
          return;
          }

        File dir = new File(dirname);
        visitAllFiles(dir);

        IPPSorter ipp = new IPPSorter();
        ipp.SetComputeZSpacing( true );
        ipp.SetZSpacingTolerance( 1e-3 );
        boolean b = ipp.Sort( fns );
        if(!b)
          {
          throw new Exception("Could not scan");
          }
        double ippzspacing = ipp.GetZSpacing();

        FilenamesType sorted = ipp.GetFilenames();
        vtkStringArray files = new vtkStringArray();
        long nfiles = sorted.size();
        //for( String f : sorted )
        for (int i = 0; i < nfiles; i++) {
          String f = sorted.get(i);
          files.InsertNextValue( f );
          }
        vtkGDCMImageReader reader = new vtkGDCMImageReader();
        reader.SetFileNames( files );
        reader.Update(); // get spacing value

        double[] spacing = reader.GetOutput().GetSpacing();

        vtkImageChangeInformation change = new vtkImageChangeInformation();
        change.SetInputConnection( reader.GetOutputPort() );
        change.SetOutputSpacing( spacing[0], spacing[1], ippzspacing );

        // A simple vtkInteractorStyleImage example for
        // 3D image viewing with the vtkImageResliceMapper.
        //
        // Drag Left mouse button to window/level
        // Shift-Left drag to rotate (oblique slice)
        // Shift-Middle drag to slice through image
        // OR Ctrl-Right drag to slice through image

        // Create the RenderWindow, Renderer
        vtkRenderer ren1 = new vtkRenderer();
        vtkRenderWindow renWin = new vtkRenderWindow();
        renWin.AddRenderer(ren1);

        vtkImageResliceMapper im = new vtkImageResliceMapper();
        im.SetInputConnection(change.GetOutputPort());
        im.SliceFacesCameraOn();
        im.SliceAtFocalPointOn();
        im.BorderOff();

        vtkImageProperty ip = new vtkImageProperty();
        ip.SetColorWindow(2000);
        ip.SetColorLevel(1000);
        ip.SetAmbient(0.0);
        ip.SetDiffuse(1.0);
        ip.SetOpacity(1.0);
        ip.SetInterpolationTypeToLinear();

        vtkImageSlice ia = new vtkImageSlice();
        ia.SetMapper(im);
        ia.SetProperty(ip);

        ren1.AddViewProp(ia);
        ren1.SetBackground(0.1,0.2,0.4);
        renWin.SetSize(300,300);

        vtkRenderWindowInteractor iren = new vtkRenderWindowInteractor();
        vtkInteractorStyleImage style = new vtkInteractorStyleImage();
        style.SetInteractionModeToImage3D();
        iren.SetInteractorStyle(style);
        renWin.SetInteractor(iren);

        // render the image
        renWin.Render();
        vtkCamera cam1 = ren1.GetActiveCamera();
        cam1.ParallelProjectionOn();
        ren1.ResetCameraClippingRange();
        renWin.Render();

        iren.Start();
        }
    }