IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
DICOMBounds.cs
1 using UnityEngine;
2 using System.Collections;
3 
8 public class DICOMBounds : MonoBehaviour {
9 
10  // Bounding box:
11  /*private LineRenderer Edge1;
12  private LineRenderer Edge2;
13  private LineRenderer Edge3;
14  private LineRenderer Edge4;
15  private LineRenderer Edge5;
16  private LineRenderer Edge6;
17  private LineRenderer Edge7;
18  private LineRenderer Edge8;
19  private LineRenderer Edge9;
20  private LineRenderer Edge10;
21  private LineRenderer Edge11;
22  private LineRenderer Edge12;*/
23 
24  // Rectangle
25  private LineRenderer RectXMin;
26  private LineRenderer RectXMax;
27  private LineRenderer RectYMin;
28  private LineRenderer RectYMax;
29 
30  //private string currentSeriesUID = "";
31 
32  private bool listeningToEvents = false;
33 
34  enum DisplayMode {
35  OFF,
36  SLICE_OUTLINE,
37  SLICE
38  }
39  private DisplayMode displayMode = DisplayMode.OFF;
40 
41  void Start()
42  {
43  /*Edge1 = gameObject.transform.Find ("Edge (1)").GetComponent<LineRenderer> ();
44  Edge2 = gameObject.transform.Find ("Edge (2)").GetComponent<LineRenderer> ();
45  Edge3 = gameObject.transform.Find ("Edge (3)").GetComponent<LineRenderer> ();
46  Edge4 = gameObject.transform.Find ("Edge (4)").GetComponent<LineRenderer> ();
47  Edge5 = gameObject.transform.Find ("Edge (5)").GetComponent<LineRenderer> ();
48  Edge6 = gameObject.transform.Find ("Edge (6)").GetComponent<LineRenderer> ();
49  Edge7 = gameObject.transform.Find ("Edge (7)").GetComponent<LineRenderer> ();
50  Edge8 = gameObject.transform.Find ("Edge (8)").GetComponent<LineRenderer> ();
51  Edge9 = gameObject.transform.Find ("Edge (9)").GetComponent<LineRenderer> ();
52  Edge10 = gameObject.transform.Find ("Edge (10)").GetComponent<LineRenderer> ();
53  Edge11 = gameObject.transform.Find ("Edge (11)").GetComponent<LineRenderer> ();
54  Edge12 = gameObject.transform.Find ("Edge (12)").GetComponent<LineRenderer> ();*/
55  RectXMin = gameObject.transform.Find ("RectXMin").GetComponent<LineRenderer> ();
56  RectXMax = gameObject.transform.Find ("RectXMax").GetComponent<LineRenderer> ();
57  RectYMin = gameObject.transform.Find ("RectYMin").GetComponent<LineRenderer> ();
58  RectYMax = gameObject.transform.Find ("RectYMax").GetComponent<LineRenderer> ();
59 
60  if (!listeningToEvents) {
61  PatientEventSystem.startListening (PatientEventSystem.Event.DICOM_NewLoadedSlice, eventNewDICOM);
62  PatientEventSystem.startListening (PatientEventSystem.Event.PATIENT_Closed, patientClosed);
63  listeningToEvents = true; // Don't call startListening again when disabling and re-enabling this object.
64  }
65 
66  // In case a DICOM is already loaded:
67  eventNewDICOM ();
68  }
69  void OnDestroy() {
70  PatientEventSystem.stopListening( PatientEventSystem.Event.DICOM_NewLoadedSlice, eventNewDICOM );
71  PatientEventSystem.stopListening( PatientEventSystem.Event.PATIENT_Closed, patientClosed );
72  }
73 
74  void eventNewDICOM( object obj = null )
75  {
76  if (displayMode == DisplayMode.OFF) {
77  gameObject.SetActive (false);
78  return;
79  }
80 
81  DICOM dicom = DICOMLoader.instance.currentDICOM;
82  if (dicom != null) {
83 
84  // If the series has changed, modify the bounding box:
85  /*if (dicom.seriesInfo.seriesUID != currentSeriesUID && dicom.seriesInfo.isConsecutiveVolume) {
86 
87  Debug.Log ("3");
88 
89  // Calculate the positions of the corners of this stack of slices:
90  int lastSlice = dicom.seriesInfo.numberOfSlices - 1;
91  Vector3 c1 = dicom.transformPixelToPatientPos (Vector2.zero, 0f);
92  Vector3 c2 = dicom.transformPixelToPatientPos (new Vector2 (dicom.origTexWidth, 0f), 0f);
93  Vector3 c3 = dicom.transformPixelToPatientPos (new Vector2 (0f, dicom.origTexHeight), 0f);
94  Vector3 c4 = dicom.transformPixelToPatientPos (new Vector2 (dicom.origTexWidth, dicom.origTexHeight), 0f);
95  Vector3 c5 = dicom.transformPixelToPatientPos (Vector2.zero, lastSlice);
96  Vector3 c6 = dicom.transformPixelToPatientPos (new Vector2 (dicom.origTexWidth, 0f), lastSlice);
97  Vector3 c7 = dicom.transformPixelToPatientPos (new Vector2 (0f, dicom.origTexHeight), lastSlice);
98  Vector3 c8 = dicom.transformPixelToPatientPos (new Vector2 (dicom.origTexWidth, dicom.origTexHeight), lastSlice);
99 
100  // Display the bounding box:
101  Edge1.SetPosition (0, c1);
102  Edge1.SetPosition (1, c2);
103  Edge2.SetPosition (0, c1);
104  Edge2.SetPosition (1, c3);
105  Edge3.SetPosition (0, c2);
106  Edge3.SetPosition (1, c4);
107  Edge4.SetPosition (0, c3);
108  Edge4.SetPosition (1, c4);
109 
110  Edge5.SetPosition (0, c5);
111  Edge5.SetPosition (1, c6);
112  Edge6.SetPosition (0, c5);
113  Edge6.SetPosition (1, c7);
114  Edge7.SetPosition (0, c6);
115  Edge7.SetPosition (1, c8);
116  Edge8.SetPosition (0, c7);
117  Edge8.SetPosition (1, c8);
118 
119  Edge9.SetPosition (0, c1);
120  Edge9.SetPosition (1, c5);
121  Edge10.SetPosition (0, c2);
122  Edge10.SetPosition (1, c6);
123  Edge11.SetPosition (0, c3);
124  Edge11.SetPosition (1, c7);
125  Edge12.SetPosition (0, c4);
126  Edge12.SetPosition (1, c8);
127 
128  // Remember which series we're currently using:
129  currentSeriesUID = dicom.seriesInfo.seriesUID;
130  Edge1.enabled = true;
131  Edge2.enabled = true;
132  Edge3.enabled = true;
133  Edge4.enabled = true;
134  Edge5.enabled = true;
135  Edge6.enabled = true;
136  Edge7.enabled = true;
137  Edge8.enabled = true;
138  Edge9.enabled = true;
139  Edge10.enabled = true;
140  Edge11.enabled = true;
141  Edge12.enabled = true;
142  } else {
143  Edge1.enabled = false;
144  Edge2.enabled = false;
145  Edge3.enabled = false;
146  Edge4.enabled = false;
147  Edge5.enabled = false;
148  Edge6.enabled = false;
149  Edge7.enabled = false;
150  Edge8.enabled = false;
151  Edge9.enabled = false;
152  Edge10.enabled = false;
153  Edge11.enabled = false;
154  Edge12.enabled = false;
155  }*/
156 
157  if (dicom is DICOM2D) {
158 
159  DICOM2D dicom2D = dicom as DICOM2D;
160  // Display the position of the current slice:
161 
162  Vector3 p1 = dicom2D.transformPixelToPatientPos (Vector2.zero);
163  Vector3 p2 = dicom2D.transformPixelToPatientPos (new Vector2 (dicom2D.origTexWidth, 0f) );
164  Vector3 p3 = dicom2D.transformPixelToPatientPos (new Vector2 (dicom2D.origTexWidth, dicom2D.origTexHeight) );
165  Vector3 p4 = dicom2D.transformPixelToPatientPos (new Vector2 (0, dicom2D.origTexHeight) );
166  RectXMin.SetPosition (0, p1);
167  RectXMin.SetPosition (1, p4);
168  RectXMax.SetPosition (0, p2);
169  RectXMax.SetPosition (1, p3);
170  RectYMin.SetPosition (0, p1);
171  RectYMin.SetPosition (1, p2);
172  RectYMax.SetPosition (0, p3);
173  RectYMax.SetPosition (1, p4);
174 
175  RectXMin.enabled = true;
176  RectXMax.enabled = true;
177  RectYMin.enabled = true;
178  RectYMax.enabled = true;
179  //itk.simple.VectorDouble vec = dicom2D.origin;
180  //Debug.Log ("dicom2D.origin " + vec [0] + " " + vec [1] + " " + vec [2]);
181  } else {
182  RectXMin.enabled = false;
183  RectXMax.enabled = false;
184  RectYMin.enabled = false;
185  RectYMax.enabled = false;
186  }
187 
188  gameObject.SetActive (true);
189  } else {
190  gameObject.SetActive (false);
191  }
192  }
193 
194  public void patientClosed( object obj = null )
195  {
196  gameObject.SetActive (false);
197  }
198 
203  public void toggle( bool t )
204  {
205  Debug.Log ("Toggle " + t);
206  if (t)
207  displayMode = DisplayMode.SLICE;
208  else
209  displayMode = DisplayMode.OFF;
210  eventNewDICOM ();
211  }
212 }
void toggle(bool t)
Definition: DICOMBounds.cs:203
int origTexWidth
Definition: DICOM.cs:24
Definition: DICOM.cs:8
int origTexHeight
Definition: DICOM.cs:26