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 ImagesReader 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 ImagesReader 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