1 using System.Collections;
2 using System.Collections.Generic;
9 public GameObject DICOMVolume;
10 public GameObject NoVolumeText;
11 public GameObject LoadingText;
13 public GameObject TextureListEntry;
15 public GameObject SideScreenEmpty;
16 public GameObject SideScreenMain;
17 public GameObject SideScreenTextureList;
19 public Image HistogramImage;
25 TextureListEntry.SetActive (
false);
30 PatientEventSystem.startListening( PatientEventSystem.Event.DICOM_CloseVolume, eventDicomClosed );
31 PatientEventSystem.startListening( PatientEventSystem.Event.DICOM_NewLoadedVolume, eventNewDicom );
32 PatientEventSystem.startListening( PatientEventSystem.Event.DICOM_StartLoadingVolume, eventLoadingStarted );
44 PatientEventSystem.stopListening( PatientEventSystem.Event.DICOM_CloseVolume, eventDicomClosed );
45 PatientEventSystem.stopListening( PatientEventSystem.Event.DICOM_NewLoadedVolume, eventNewDicom );
46 PatientEventSystem.stopListening( PatientEventSystem.Event.DICOM_StartLoadingVolume, eventLoadingStarted );
49 void eventNewDicom(
object obj = null )
51 NoVolumeText.SetActive (
false);
52 LoadingText.SetActive (
false);
53 SideScreenEmpty.SetActive (
false);
58 void eventDicomClosed(
object obj = null )
60 NoVolumeText.SetActive (
true);
61 LoadingText.SetActive (
false);
62 SideScreenEmpty.SetActive (
true);
64 SideScreenMain.SetActive (
false);
65 SideScreenTextureList.SetActive (
false);
68 void eventLoadingStarted(
object obj = null )
70 NoVolumeText.SetActive (
false);
71 LoadingText.SetActive (
true);
72 SideScreenEmpty.SetActive (
true);
74 SideScreenMain.SetActive (
false);
75 SideScreenTextureList.SetActive (
false);
78 public void setTransferFunctionRange(
float min,
float max )
80 DICOMVolume.GetComponent<MeshRenderer>().material.SetFloat (
"minimum", min);
81 DICOMVolume.GetComponent<MeshRenderer>().material.SetFloat (
"maximum", max);
84 void setTransferFunction( Texture2D tex )
86 DICOMVolume.GetComponent<MeshRenderer>().material.SetTexture (
"_TransferFunction", tex);
89 void displayHistogram(
object obj = null )
91 Debug.Log (
"Histogram Event");
92 Histogram hist = DICOMLoader.instance.currentDICOMVolume.histogram;
94 Texture2D tex = hist.asTexture ();
95 Sprite sprite = Sprite.Create (tex,
new Rect (0, 0, tex.width, tex.height),
new Vector2 (0.5f, 0.5f));
96 HistogramImage.sprite = sprite;
103 Texture2D loadTransferFunctionTexture(
string path )
105 Texture2D tex =
new Texture2D (2, 2);
106 if (File.Exists (path)) {
107 byte[] data = File.ReadAllBytes (path);
108 tex.LoadImage (data);
113 List<string> getTextureFiles(
string directory )
115 string[] files = Directory.GetFiles (directory);
116 List<string> list =
new List<string>();
117 foreach(
string f
in files )
119 list.Add( Path.GetFileNameWithoutExtension(f) );
124 void generateTextureList()
126 List<string> filenames = getTextureFiles (
"../TransferFunctions/");
128 foreach (
string filename
in filenames) {
129 Texture2D tex = loadTransferFunctionTexture (
"../TransferFunctions/" + filename +
".png");
131 GameObject listEntry = Instantiate (TextureListEntry) as GameObject;
132 listEntry.SetActive (
true);
133 listEntry.transform.SetParent (TextureListEntry.transform.parent,
false);
135 Image img = listEntry.transform.Find(
"Texture").GetComponent<Image> () as Image;
136 Sprite sprite = Sprite.Create (tex,
new Rect (0, 0, tex.width, tex.height),
new Vector2 (0.5f, 0.5f));
139 Text text = listEntry.GetComponentInChildren<Text> () as Text;
140 text.text = filename;
142 listEntry.GetComponent<Button> ().onClick.AddListener(() => setTransferFunction( tex ));
143 listEntry.GetComponent<Button> ().onClick.AddListener(() => displayMainScreen());
148 void clearTextureList()
150 foreach (Transform tf
in TextureListEntry.transform.parent) {
151 if (tf != TextureListEntry.transform) {
152 Destroy (tf.gameObject);
159 public void displayTransferFunctionList()
161 generateTextureList ();
163 SideScreenMain.SetActive (
false);
164 SideScreenTextureList.SetActive (
true);
165 SideScreenEmpty.SetActive (
false);
168 void displayMainScreen()
171 SideScreenTextureList.SetActive (
false);
172 SideScreenEmpty.SetActive (
false);
175 Texture2D currentTex = DICOMVolume.GetComponent<MeshRenderer> ().material.GetTexture (
"_TransferFunction") as Texture2D;
176 Sprite sprite = Sprite.Create (currentTex,
new Rect (0, 0, currentTex.width, currentTex.height),
new Vector2 (0.5f, 0.5f));
177 SideScreenMain.transform.Find (
"Background/Texture").GetComponent<Image> ().sprite = sprite;
178 SideScreenMain.SetActive (
true);
180 SideScreenMain.SetActive (
false);
181 SideScreenEmpty.SetActive (
true);
static DICOMLoader instance
DICOM3D currentDICOMVolume