/*========================================================================= 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. =========================================================================*/ using vtkgdcm; using Kitware.VTK; using System; using System.Runtime.InteropServices; /* * This example shows how vtkgdcm can be connected to Kitware.VTK Activiz product. * Three (3) arguments are required: * 1. Input DICOM file (SWIG) * 2. Temporary PNG (intermediate) file (Activiz) * 3. Final DICOM file (SWIG) * * $ export MONO_PATH=/usr/lib/cli/ActiViz.NET/:/usr/lib/cli/Kitware.mummy.Runtime-1.0 * $ mono ./bin/HelloActiviz.exe ~/Creatis/gdcmData/test.acr out.png toto.dcm * * Footnote: * this test originally used vtkBMPWriter / vtkBMPReader combination to store intermediate * image file, but BMP file are 24bits by default. Instead use PNG format which supports seems * to be closer to what was expected in this simple test. */ public class HelloActiviz { // Does not work with ActiViz.NET-5.4.0.455-Linux-x86_64-Personal /* static void ConnectSWIGToActiviz(Kitware.VTK.vtkImageExport imgin, Kitware.VTK.vtkImageImport imgout) { imgout.SetUpdateInformationCallback(imgin.GetUpdateInformationCallback()); imgout.SetPipelineModifiedCallback(imgin.GetPipelineModifiedCallback()); imgout.SetWholeExtentCallback(imgin.GetWholeExtentCallback()); imgout.SetSpacingCallback(imgin.GetSpacingCallback()); imgout.SetOriginCallback(imgin.GetOriginCallback()); imgout.SetScalarTypeCallback(imgin.GetScalarTypeCallback()); imgout.SetNumberOfComponentsCallback(imgin.GetNumberOfComponentsCallback()); imgout.SetPropagateUpdateExtentCallback(imgin.GetPropagateUpdateExtentCallback()); imgout.SetUpdateDataCallback(imgin.GetUpdateDataCallback()); imgout.SetDataExtentCallback(imgin.GetDataExtentCallback()); imgout.SetBufferPointerCallback(imgin.GetBufferPointerCallback()); imgout.SetCallbackUserData(imgin.GetCallbackUserData()); } */ static Kitware.VTK.vtkImageData ConnectSWIGToActiviz(vtkgdcm.vtkImageData imgin) { HandleRef rawCppThis = imgin.GetCppThis(); Kitware.VTK.vtkImageData imgout = new Kitware.VTK.vtkImageData( rawCppThis.Handle, false, false); return imgout; } static vtkgdcm.vtkImageData ConnectActivizToSWIG(Kitware.VTK.vtkImageData imgin) { HandleRef rawCppThis = imgin.GetCppThis(); vtkgdcm.vtkImageData imgout = new vtkgdcm.vtkImageData( rawCppThis ); return imgout; } public static int Main(string[] args) { string filename = args[0]; string outfilename = args[1]; // Step 1. Test SWIG -> Activiz vtkGDCMImageReader reader = vtkGDCMImageReader.New(); reader.SetFileName( filename ); //reader.Update(); // DO NOT call Update to check pipeline execution Kitware.VTK.vtkImageData imgout = ConnectSWIGToActiviz(reader.GetOutput()); System.Console.WriteLine( imgout.ToString() ); // not initialized as expected vtkPNGWriter writer = new vtkPNGWriter(); writer.SetInput( imgout ); writer.SetFileName( outfilename ); writer.Write(); // Step 2. Test Activiz -> SWIG vtkPNGReader bmpreader = new vtkPNGReader(); bmpreader.SetFileName( outfilename ); //bmpreader.Update(); // DO NOT update to check pipeline execution System.Console.WriteLine( bmpreader.GetOutput().ToString() ); // not initialized as expected vtkgdcm.vtkImageData imgout2 = ConnectActivizToSWIG(bmpreader.GetOutput()); System.Console.WriteLine( imgout2.ToString() ); // not initialized as expected Kitware.VTK.vtkMedicalImageProperties prop = new Kitware.VTK.vtkMedicalImageProperties(); prop.SetModality( "MR" ); string outfilename2 = args[2]; vtkGDCMImageWriter writer2 = vtkGDCMImageWriter.New(); writer2.SetMedicalImageProperties( prop.CastToActiviz() ); writer2.SetFileName( outfilename2 ); writer2.SetInput( imgout2 ); writer2.Write(); return 0; } }