3 using System.Collections;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 using System.Runtime.InteropServices;
28 public bool isBusy {
private set;
get; }
31 private string directoryToLoad;
36 private int sliceToLoad;
38 private DICOM newlyLoadedDICOM;
41 private string currentDirectory;
43 public List<DICOMSeries> availableSeries {
private set;
get; }
46 private bool newDirectoryParsed =
false;
48 private bool newDICOMLoaded =
false;
53 throw(
new System.Exception(
"Error: Only one Instance of DICOMLoader may exist!" ) );
55 availableSeries =
new List<DICOMSeries>();
73 directoryToLoad = path;
78 PatientEventSystem.triggerEvent (PatientEventSystem.Event.LOADING_AddLoadingJob,
79 "DICOM directory parsing");
92 availableSeries.Clear();
94 Debug.Log(
"[DICOM] Searching directory: " + directoryToLoad );
95 VectorString series = ImageSeriesReader.GetGDCMSeriesIDs (directoryToLoad);
96 if (series.Count > 0) {
98 foreach (
string s
in series) {
100 availableSeries.Add(info);
105 string str =
"[DICOM] Found " + series.Count +
" series.";
108 }
catch( System.Exception err ) {
109 Debug.LogError( err.Message );
118 newDirectoryParsed =
true;
129 if (!
isBusy && toLoad != null) {
134 seriesToLoad = toLoad;
140 PatientEventSystem.triggerEvent (PatientEventSystem.Event.LOADING_AddLoadingJob,
141 "Loading DICOM series " + toLoad.seriesUID);
144 PatientEventSystem.triggerEvent (PatientEventSystem.Event.DICOM_StartLoadingSlice);
146 PatientEventSystem.triggerEvent (PatientEventSystem.Event.DICOM_StartLoadingVolume);
158 if (index >= 0 && index < availableSeries.Count) {
189 if (index >= 0 && index < availableSeries.Count) {
212 public void load(
object sender, DoWorkEventArgs e)
215 Debug.Log(
"[DICOM] Loading: " + seriesToLoad.seriesUID +
" " + sliceToLoad );
216 if( sliceToLoad >= 0 )
217 newlyLoadedDICOM =
new DICOM2D( seriesToLoad, sliceToLoad );
219 newlyLoadedDICOM =
new DICOM3D( seriesToLoad );
221 }
catch( System.Exception err ) {
222 Debug.LogError(
"[DICOM] " + err.Message );
223 newlyLoadedDICOM = null;
231 newDICOMLoaded =
true;
232 Debug.Log (
"[DICOM] Loading done. " + currentDICOMSeries.seriesUID);
240 if (newDirectoryParsed) {
241 PatientEventSystem.triggerEvent(PatientEventSystem.Event.DICOM_NewList);
242 newDirectoryParsed =
false;
245 PatientEventSystem.triggerEvent (PatientEventSystem.Event.LOADING_RemoveLoadingJob,
246 "DICOM directory parsing");
248 if (newDICOMLoaded) {
249 newDICOMLoaded =
false;
250 if (newlyLoadedDICOM != null) {
254 PatientEventSystem.triggerEvent (PatientEventSystem.Event.DICOM_NewLoadedSlice,
currentDICOM);
258 PatientEventSystem.triggerEvent (PatientEventSystem.Event.DICOM_NewLoadedVolume,
currentDICOMVolume);
268 PatientEventSystem.triggerEvent (PatientEventSystem.Event.DICOM_CloseVolume);
static DICOMLoader instance
bool startLoading(DICOMSeries toLoad, int slice=0)
void load(object sender, DoWorkEventArgs e)
bool startLoadingSlice(int index, int slice=0)
void parseDirectory(object sender, DoWorkEventArgs e)
bool startLoadingVolume(DICOMSeries toLoad)
bool startLoadingSlice(string seriesUID, int slice=0)
bool startLoadingVolume(int index)
void loadCallback(object sender, RunWorkerCompletedEventArgs e)
bool setDirectory(string path)
DICOMSeries currentDICOMSeries
bool startLoadingVolume(string seriesUID)
DICOM3D currentDICOMVolume
void parseDirectoryCallback(object sender, RunWorkerCompletedEventArgs e)