# --------------------------------------------------------------------- # # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image # pour la SantÈ) # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton # Previous Authors : Laurent Guigues, Jean-Pierre Roux # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil # # This software is governed by the CeCILL-B license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL-B # license as circulated by CEA, CNRS and INRIA at the following URL # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html # or in the file LICENSE.txt. # # As a counterpart to the access to the source code and rights to copy, # modify and redistribute granted by the license, users are provided only # with a limited warranty and the software's author, the holder of the # economic rights, and the successive licensors have only limited # liability. # # The fact that you are presently reading this means that you have had # knowledge of the CeCILL-B license and that you accept its terms. # ------------------------------------------------------------------------ */ description "3 slicers and a 3D view" author "jpr@creatis.insa-lyon.fr" category "example, tool" // To show how easy it is to add smthing // ===================================== load vtk include wxvtk load std load itk include vtk include wx load itkvtk load gdcmvtk include wxvtk/boxes/bbSimpleSlicer new LayoutX4 main new LayoutLine upright new LayoutLine upleft new LayoutLine downleft new LayoutSplit downright set downright.Proportion 85 connect upright.Widget main.Widget1 connect upleft.Widget main.Widget2 connect downleft.Widget main.Widget3 connect downright.Widget main.Widget4 # Use new box (choose the way you want to select images) # ----------------------------------------------------- load creaImageIO new ImagesChooserDialogBox chooser # Concatenate all the supposed-to-be consistent 2D images into a single vtkImageData # WARNING : File names alphabetical order is suposed to be meaningful ... new ConcatImages reader connect chooser.Out reader.In // Normally (?) the following lines {== BEGIN == / ==END ==} // are now useless; let here as a reminder/example // Don't remove them . JPRx // ==== BEGIN ====================================================== /* # Dummy way to get only the first image from the chooser # ------------------------------------------------------ load creaImageIO new ImagesChooserDialogBox chooser new GetVectorVtkImageDataElement reader set reader.I 0 connect chooser.Out reader.In */ # Here loads 'hola.mhd' # --------------------- # Don't forget to comment out the following 2 lines # If you want to check someting else. /* include vtk/boxes/bbLoadHola new LoadHola reader */ # uncomment next lines to have a file selector # -------------------------------------------- /* new FileSelector openFileDialog new ImageReader reader connect openFileDialog.Out reader.In */ # uncomment next lines to use a vtkgdcmReader # ------------------------------------- /* new FileSelector openFileDialog new GetInfoGdcmReader reader connect openFileDialog.Out reader.In */ # uncomment next lines to use Gimmick # ----------------------------------- /* load creaImageIO new Gimmick reader */ # uncomment next lines to Read a MHD file (and nothing else !) # ------------------------------------------------------------ /* new FileSelector openFileDialog set openFileDialog.Wildcard "(*.mhd)|*.mhd" new MetaImageReader reader connect openFileDialog.Out reader.In */ # uncomment the following lines to read a 3D images stack # (only if file name order is meaningfull) # ------------------------------------------------------- /* // To choose the directory new DirectorySelector ds // To get the image names into a vector new FilesFromDirectory fd // To read all the files, as a bbitk::ImagePointer new ImageSeriesReader reader // user choosen directory as input connect ds.Out fd.In set fd.Recursive false // list of files as input #print "Files found in $ds.Out$\n connect fd.Out reader.FileNames */ # uncomment the following lines to read a 3D images stack # (if the directory contains a 'XCoherent" Serie) # ------------------------------------------------------- /* // To choose the directory new DirectorySelector ds // To get the image names into a vector new FilesFromDirectory fd // user choosen directory as input connect ds.Out fd.In // order the files, computes an accurate ZSpacing new GetXCoherentInfoGdcmReader reader connect fd.Out reader.In */ # uncomment the following lines to read a 3D images stack # (with DICOMDirReader) # ------------------------------------------------------- /* include itk/boxes/bbDICOMDirReader // To choose the directory new DirectorySelector ds new DICOMDirReader reader connect ds.Out reader.In */ // ==== END ====================================================== // We need that to set Sliders sizes #Get image dimensions, ... new ImageProperties mc connect reader.Out mc.In #Get number of column (X) new GetVectorIntElement gveX connect mc.Size gveX.In set gveX.I 0 #Get number of rows (Y) new GetVectorIntElement gveY connect mc.Size gveY.In set gveY.I 1 #Get number of planes (Z) new GetVectorIntElement gveZ connect mc.Size gveZ.In set gveZ.I 2 //print "Dim Z $gveZ.Out" #Compute the number of the 'middle' slice on X axis new Div div0 connect gveX.Out div0.In1 set div0.In2 2 #Compute the number of the 'middle' slice on Y axis new Div div1 connect gveY.Out div1.In1 set div1.In2 2 #Compute the number of the 'middle' slice on Z axis new Div div2 connect gveZ.Out div2.In1 set div2.In2 2 // For X axis new SimpleSlicer viewerUL connect reader.Out viewerUL.In connect viewerUL.Widget upleft.Widget1 #initial slice is the middle one connect div0.Out viewerUL.Slice #Slider size is the number of planes connect gveX.Out viewerUL.SliderSize set viewerUL.SliderReactiveOnTrack 1 set viewerUL.Orientation 0 set viewerUL.SliderOrientation H set viewerUL.SliderTitle "Planes YZ" // For Y axis new SimpleSlicer viewerUR connect reader.Out viewerUR.In connect viewerUR.Widget upright.Widget1 #initial slice is the middle one connect div1.Out viewerUR.Slice #Slider size is the number of planes connect gveY.Out viewerUR.SliderSize set viewerUR.SliderReactiveOnTrack 1 set viewerUR.SliderOrientation H set viewerUR.Orientation 1 set viewerUR.SliderTitle "Planes XZ" // For Z axis new SimpleSlicer viewerTD connect reader.Out viewerTD.In connect viewerTD.Widget downleft.Widget1 #initial slice is the middle one connect div2.Out viewerTD.Slice #Slider size is the number of planes connect gveZ.Out viewerTD.SliderSize set viewerTD.SliderReactiveOnTrack 1 set viewerTD.SliderOrientation H set viewerTD.Orientation 2 set viewerTD.SliderTitle "Planes XY" //For 3D Viewer new ImagePlanes planes connect reader.Out planes.In new Viewer3D viewer connect planes.PlaneX viewer.Obs1 connect planes.PlaneY viewer.Obs2 connect planes.PlaneZ viewer.Obs3 new CheckBox chkbox set chkbox.Title "Interpolate Pixels (in '2D' images)" set chkbox.In 1 connect chkbox.BoxChange viewerUL.BoxExecute connect chkbox.BoxChange viewerUR.BoxExecute connect chkbox.BoxChange viewerTD.BoxExecute connect viewer.Widget downright.Widget1 connect chkbox.Widget downright.Widget2 connect chkbox.Out viewerUL.Interpolate connect chkbox.Out viewerUR.Interpolate connect chkbox.Out viewerTD.Interpolate set main.WinTitle "demoViewing1" exec main exec viewerTD