Changeset 4126 for trunk/gui


Ignore:
Timestamp:
Jan 16, 2014, 3:34:10 AM (11 years ago)
Author:
ldelgass
Message:

Updates to DICOM reader

Location:
trunk/gui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/scripts/field.tcl

    r4120 r4126  
    948948                continue;               # Ignore this component
    949949            }
    950             set vtkdata [DicomToVtk $cname $contents]
    951950            set viewer [$_field get "about.view"]
    952951            if { $viewer != "" } {
    953952                set _viewer $viewer
    954953            }
     954            set vtkdata [DicomToVtk $cname $contents]
    955955            if { $_viewer == "" } {
    956956                set _viewer [expr {($_dim == 3) ? "vtkvolume" : "vtkimage"}]
     
    17421742            }
    17431743        }
    1744         array set data [Rappture::DicomToVtk files $files]
    1745         #array set data [Rappture::DicomToVtk dir $path]
     1744
     1745        #array set data [Rappture::DicomToVtk files $files]
     1746        array set data [Rappture::DicomToVtk dir $path]
    17461747    } else {
    17471748        array set data [Rappture::DicomToVtk files [list $path]]
     
    17601761        }
    17611762    }
    1762  
     1763
     1764    # Save viewer choice
     1765    set viewer $_viewer
    17631766    ReadVtkDataSet $cname $data(vtkdata)
     1767    # Restore viewer choice (ReadVtkDataSet wants to set it to contour/isosurface)
     1768    set _viewer $viewer
    17641769    return $data(vtkdata)
    17651770}
  • trunk/gui/src/RpDicomToVtk.cc

    r4112 r4126  
    1111 * ======================================================================
    1212 */
    13 
    14 #define USE_VTK_DICOM_PACKAGE
    1513
    1614#include <vtkSmartPointer.h>
     
    4644
    4745    char *dirName = NULL;
    48     vtkSmartPointer<vtkStringArray> pathArray;
     46    vtkSmartPointer<vtkStringArray> pathArray = vtkSmartPointer<vtkStringArray>::New();
    4947    if (isDir) {
    5048        dirName = Tcl_GetString(objv[2]);
    5149    } else {
    52         pathArray = vtkSmartPointer<vtkStringArray>::New();
    5350        // Get path array from Tcl list
    5451        int pathListc;
     
    6360    }
    6461
     62    vtkSmartPointer<vtkDICOMReader> reader = vtkSmartPointer<vtkDICOMReader>::New();
    6563#ifdef USE_VTK_DICOM_PACKAGE
    6664    vtkSmartPointer<vtkDICOMSorter> sorter = vtkSmartPointer<vtkDICOMSorter>::New();
     
    7068            return TCL_ERROR;
    7169        }
    72         // FIXME: dir->GetFiles() returns names, not full paths
    73         sorter->SetInputFileNames(dir->GetFiles());
    74         sorter->Update();
    75     } else {
    76         sorter->SetInputFileNames(pathArray);
    77         sorter->Update();
    78     }
     70
     71        int numFiles = dir->GetNumberOfFiles();
     72        for (int i = 0; i < numFiles; i++) {
     73            if (dir->GetFile(i)[0] == '.') {
     74                continue;
     75            }
     76
     77            std::string path(dirName);
     78            path += "/";
     79            path += dir->GetFile(i);
     80
     81            if (!dir->FileIsDirectory(path.c_str()) &&
     82                reader->CanReadFile(path.c_str())) {
     83                pathArray->InsertNextValue(path);
     84            } else {
     85                fprintf(stderr, "Skipping file %s\n", path.c_str());
     86            }
     87        }
     88    }
     89
     90    sorter->SetInputFileNames(pathArray);
     91    sorter->Update();
    7992
    8093    int numStudies = sorter->GetNumberOfStudies();
     
    114127    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(series));
    115128
    116     vtkSmartPointer<vtkDICOMReader> reader = vtkSmartPointer<vtkDICOMReader>::New();
    117129    reader->SetFileNames(files);
    118130#else
     
    136148    }
    137149    vtkIntArray *fidxArray = reader->GetFileIndexArray();
     150    vtkDICOMMetaData *md = reader->GetMetaData();
     151    int numComp = fidxArray->GetNumberOfComponents();
     152#if 0
    138153    for (int i = 0; i < fidxArray->GetNumberOfTuples(); i++) {
    139154        fprintf(stderr, "%d:", i);
    140155        for (int j = 0; j < fidxArray->GetNumberOfComponents(); j++) {
    141             fprintf(stderr, " %d", (int)fidxArray->GetComponent(i, j));
     156            int idx = (int)fidxArray->GetComponent(i, j);
     157            fprintf(stderr, " %d", idx);
    142158        }
    143159        fprintf(stderr, "\n");
    144160    }
     161#endif
     162    fprintf(stderr, "Number of data elements: %d\n", md->GetNumberOfDataElements());
     163
     164    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("num_components", -1));
     165    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(numComp));
     166    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("modality", -1));
     167    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::Modality).AsString().c_str(), -1));
     168    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("patient_name", -1));
     169    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::PatientName).AsString().c_str(), -1));
     170    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("transfer_syntax_uid", -1));
     171    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::TransferSyntaxUID).AsString().c_str(), -1));
     172    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("study_uid", -1));
     173    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::StudyInstanceUID).AsString().c_str(), -1));
     174    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("study_id", -1));
     175    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::StudyID).AsString().c_str(), -1));
     176    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("series_number", -1));
     177    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(md->GetAttributeValue(DC::SeriesNumber).AsInt()));
     178    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("series_in_study", -1));
     179    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(md->GetAttributeValue(DC::SeriesInStudy).AsInt()));
     180    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("series_uid", -1));
     181    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::SeriesInstanceUID).AsString().c_str(), -1));
     182    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("bits_allocated", -1));
     183    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(md->GetAttributeValue(DC::BitsAllocated).AsInt()));
     184    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("bits_stored", -1));
     185    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(md->GetAttributeValue(DC::BitsStored).AsInt()));
     186    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("pixel_representation", -1));
     187    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(md->GetAttributeValue(DC::PixelRepresentation).AsString().c_str(), -1));
     188    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("rescale_slope", -1));
     189    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewDoubleObj(md->GetAttributeValue(DC::RescaleSlope).AsDouble()));
     190    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("rescale_intercept", -1));
     191    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewDoubleObj(md->GetAttributeValue(DC::RescaleIntercept).AsDouble()));
    145192    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("time_dimension", -1));
    146193    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(reader->GetTimeDimension()));
     
    149196
    150197    fprintf(stderr, "Time dim: %d, spacing: %g\n", reader->GetTimeDimension(), reader->GetTimeSpacing());
    151     vtkDICOMMetaData *md = reader->GetMetaData();
    152198    fprintf(stderr, "Number of files: %d\n", md->GetNumberOfInstances());
    153199#else
    154     Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("descriptive_name", -1));
    155     Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(reader->GetDescriptiveName(), -1));
    156200    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("patient_name", -1));
    157201    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(reader->GetPatientName(), -1));
     
    162206    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("study_id", -1));
    163207    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj(reader->GetStudyID(), -1));
     208    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("num_components", -1));
     209    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(reader->GetNumberOfComponents()));
    164210    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("bits_allocated", -1));
    165211    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewIntObj(reader->GetBitsAllocated()));
     
    169215    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("rescale_slope", -1));
    170216    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewDoubleObj(reader->GetRescaleSlope()));
     217    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("rescale_offset", -1));
     218    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewDoubleObj(reader->GetRescaleOffset()));
    171219    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewStringObj("gantry_angle", -1));
    172220    Tcl_ListObjAppendElement(interp, metaDataObj, Tcl_NewDoubleObj(reader->GetGantryAngle()));
    173221
    174     fprintf(stderr, "Descriptive name: %s\n", reader->GetDescriptiveName());
    175222    fprintf(stderr, "Patient name: %s\n", reader->GetPatientName());
    176223    fprintf(stderr, "Transfer Syntax UID: %s\n", reader->GetTransferSyntaxUID());
Note: See TracChangeset for help on using the changeset viewer.