This is very similar to the first example; it just uses volumes instead of surfaces. This script loads an intensity volume as a background image and then successively loads a series of segmentation overlays, taking a screen shot of each one. This assumes all files are in the local directory.

set err [catch {

    # Load an LUT file for the segementation to use. Get its ID. Set
    # its label to something good.
    set lutID [MakeNewColorLUT]
    SetColorLUTFileName $lutID [file join $env(FREESURFER_HOME) jeans_labels.txt]
    SetColorLUTLabel $lutID "Hires LUT"
    
    # Load base level. The LoadVolume commmand makes a new layer in
    # it, and automatically adds it to the current view at the first
    # available draw level, 0. Give it a label.
    set fnBaseVolume intensity_target.mgz    
    set baseLayerID [LoadVolume $fnBaseVolume 1 [GetMainFrameID]]
    SetLayerLabel $baseLayerID "Base volume"


    # Load the first segmentation volume, making a layer for it and
    # adding to the next available draw level, 1. Save the layer
    # ID. Also get the data collection ID as we will use that later to
    # change the volume data to which the collection is pointing.
    set nVol 0
    set fnSegVol [format "hires_a256nl_%03d.mgz" $nVol]
    set layerID [LoadVolume $fnSegVol 1 [GetMainFrameID]]
    set colID [Get2DMRILayerVolumeCollection $layerID]


    # Set up the layer as a segmentation volume: lut color map, draw
    # zero values clear, and assign the LUT we got earlier. Give it a
    # label.
    Set2DMRILayerColorMapMethod $layerID lut
    Set2DMRILayerDrawZeroClear $layerID true
    Set2DMRILayerColorLUT $layerID $lutID
    SetLayerLabel $layerID "Segmentation Overlay"


    # Set a location in the view.
    SetViewRASCenter 0 28 22 -40
    SetViewZoomLevel 0 2


    # For each volume...
    for { set nVol 0 } { $nVol <= 84 } { incr nVol } {
        
        # Generate a volume file name using our base name and the number.
        set fnSegVol [format "hires_a256nl_%03d.mgz" $nVol]

        # Set the volume file name in the collection to this new
        # volume and tell the collection to load the volume.
        SetVolumeCollectionFileName $colID $fnSegVol
        SetStatusBarText "Loading $fnSegVol..."
        LoadVolumeFromFileName $colID

        # Force a window update.
        UpdateFrame [GetMainFrameID]

        # Take a screen shot.
        set fnCapture [format "capture-%04d.tiff" $nVol]
        CaptureFrameToFile [GetMainFrameID] $fnCapture
    }

} sResult]

# Check for errors.
if { 0 != $err } { 
    ::tkcon_tcl_puts "Script failed: $sResult"
} else { 
    ::tkcon_tcl_puts "Script complete." 
}

ScubaGuide/ScriptingExample2 (last edited 2008-04-29 11:46:22 by localhost)