BioImager  5.0.0
A .NET microscopy imaging application based on Bio library. Supports various microscopes by using imported libraries & GUI automation. Supports XInput game controllers to move stage, take images, run ImageJ macros on images or Bio C# scripts.
Loading...
Searching...
No Matches
NodeView.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Linq;
6using System.Text;
7using System.Threading.Tasks;
8using System.Windows.Forms;
9using System.IO;
10using AForge;
11using BioLib;
12
13namespace BioImager
14{
15 public partial class NodeView : Form
16 {
17 public class Node
18 {
19 public TreeNode node;
20 public enum DataType
21 {
22 image,
23 buf,
24 roi,
25 text
26 }
27 private DataType type;
29 {
30 get { return type; }
31 set { type = value; }
32 }
33 private object obj;
34 public object Object
35 {
36 get { return obj; }
37 set { obj = value; }
38 }
39 public Node(object data,DataType typ)
40 {
41 type = typ;
42 obj = data;
43 node = new TreeNode();
44 node.Tag = this;
45 node.Text = obj.ToString();
46 node.ForeColor = System.Drawing.Color.White;
47 }
48 public string Text
49 {
50 get { return node.Text; }
51 set { node.Text = value; }
52 }
53 }
54 static bool setup = false;
55 public NodeView(string[] args)
56 {
57 List<string> sts = new List<string>();
58 sts.AddRange(args);
59 for (int i = 0; i < args.Length; i++)
60 {
61 if (args[i].Contains("--setup"))
62 {
63 setup = true;
64 sts.RemoveAt(i);
65 }
66 }
67 App.nodeView = this;
68 InitializeComponent();
69 InitNodes();
70 Init();
71 if (args.Length > 0)
72 {
73 App.tabsView = new TabsView(sts.ToArray());
74 App.tabsView.Show();
75 }
76 else
77 {
78 App.tabsView = new TabsView();
79 App.tabsView.Show();
80 }
81 //timer.Start();
82 }
83
84 private static void Init()
85 {
86 if (!Properties.Settings.Default.Setup || setup)
87 new Setup().ShowDialog();
89 Filters.Init();
90 App.imager.Show();
91 App.runner = new Scripting();
92 App.recorder = new Recorder();
93 }
94 public void UpdateOverlay()
95 {
96 if (App.viewer != null)
98 }
99 public void InitNodes()
100 {
101 treeView.Nodes.Clear();
102 TreeNode images = new TreeNode();
103 images.Text = "BioImages";
104 images.ForeColor = System.Drawing.Color.White;
105 foreach (BioImage item in Images.images)
106 {
107 //TreeNode node = new TreeNode();
108 Node tree = new Node(item, Node.DataType.image);
109
110 Node implanes = new Node(item, Node.DataType.text);
111 implanes.Text = "Planes";
112
113 foreach (AForge.Bitmap buf in item.Buffers)
114 {
115 Node plane = new Node(buf, Node.DataType.buf);
116 plane.Text = buf.ID + ", " + buf.Coordinate.ToString();
117
118 implanes.node.Nodes.Add(plane.node);
119 }
120 tree.node.Nodes.Add(implanes.node);
121
122 Node rois = new Node(item, Node.DataType.text);
123 rois.Text = "ROI";
124
125 foreach (ROI an in item.Annotations)
126 {
127 Node roi = new Node(an, Node.DataType.roi);
128 rois.node.Nodes.Add(roi.node);
129 }
130 tree.node.Nodes.Add(rois.node);
131 images.Nodes.Add(tree.node);
132 }
133 treeView.Nodes.Add(images);
134 }
135
136 public void UpdateNodes()
137 {
138 if (Images.images.Count != treeView.Nodes[0].Nodes.Count)
139 {
140 //If image count is not same as node count we refresh whole tree.
141 InitNodes();
142 return;
143 }
144 TreeNode images = treeView.Nodes[0];
145 foreach (TreeNode item in images.Nodes)
146 {
147 //TreeNode node = new TreeNode();
148 Node node = (Node)item.Tag;
149 BioImage im = (BioImage)node.Object;
150
151 TreeNode rois = node.node.Nodes[1];
152 if(im.Annotations.Count != rois.Nodes.Count)
153 {
154 //If ROI count is not same as node count we refresh annotations.
155 rois.Nodes.Clear();
156 foreach (ROI an in im.Annotations)
157 {
158 Node roi = new Node(an, Node.DataType.roi);
159 rois.Nodes.Add(roi.node);
160 }
161 }
162 else
163 for (int i = 0; i < im.Annotations.Count; i++)
164 {
165 TreeNode roi = rois.Nodes[i];
166 Node n = (Node)roi.Tag;
167 ROI an = (ROI)n.Object;
168 roi.Text = an.ToString();
169 }
170 }
171 }
172
173 public void Exit()
174 {
175 this.Close();
176 Application.Exit();
177 Application.ExitThread();
178 }
179
180 private void MainForm_Activated(object sender, EventArgs e)
181 {
182 UpdateNodes();
183 }
184
185 private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
186 {
187 if (treeView.SelectedNode == null)
188 return;
189 Node node = (Node)treeView.SelectedNode.Tag;
190 if (node == null)
191 return;
192 if(node.Type == Node.DataType.roi)
193 {
194 ROI an = (ROI)node.Object;
195 Node nod = (Node)treeView.SelectedNode.Parent.Tag;
196 BioImage im = (BioImage)nod.Object;
197 im.Annotations.Remove(an);
198 }
199 if (node.Type == Node.DataType.image)
200 {
201 BioImage im = (BioImage)node.Object;
202 Images.RemoveImage(im);
203 im.Dispose();
204 }
205 UpdateNodes();
207 }
208
209 private void setTextToolStripMenuItem_Click(object sender, EventArgs e)
210 {
211 Node node = (Node)treeView.SelectedNode.Tag;
212 if (node.Type == Node.DataType.roi)
213 {
214 ROI an = (ROI)node.Object;
215 Node nod = (Node)treeView.SelectedNode.Parent.Tag;
216 BioImage im = (BioImage)nod.Object;
217 TextInput input = new TextInput(an.Text);
218 if (input.ShowDialog() != DialogResult.OK)
219 return;
220 an.Text = input.TextValue;
221 an.family = input.Font.FontFamily.ToString();
222 an.strokeWidth = input.Font.Size;
223 an.strokeColor = AForge.Color.FromArgb(input.color.R, input.color.G, input.color.B);
224 }
225 UpdateNodes();
227 }
228
229 private void setIDToolStripMenuItem_Click(object sender, EventArgs e)
230 {
231 Node node = (Node)treeView.SelectedNode.Tag;
232 if (node.Type == Node.DataType.roi)
233 {
234 ROI an = (ROI)node.Object;
235 Node nod = (Node)treeView.SelectedNode.Parent.Tag;
236 BioImage im = (BioImage)nod.Object;
237 TextInput input = new TextInput(an.id);
238 if (input.ShowDialog() != DialogResult.OK)
239 return;
240 an.id = input.TextValue;
241 }
242 UpdateNodes();
244 }
245
246 private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
247 {
248 About about = new About();
249 about.Show();
250 }
251
252 private void newTabsViewToolStripMenuItem_Click(object sender, EventArgs e)
253 {
254 TabsView v = new TabsView();
255 v.Show();
256 }
257
258 private void treeView_DoubleClick(object sender, EventArgs e)
259 {
260 Node node = (Node)treeView.SelectedNode.Tag;
261 if (node != null)
262 if (node.Type == Node.DataType.buf)
263 {
264 setIDToolStripMenuItem.Visible = false;
265 setTextToolStripMenuItem.Visible = false;
266 AForge.Bitmap buf = (AForge.Bitmap)node.Object;
267 App.viewer.SetCoordinate(buf.Coordinate.Z, buf.Coordinate.C, buf.Coordinate.T);
268 App.viewer.GoToImage();
269 }
270 else
271 if (node.Type == Node.DataType.roi)
272 {
273 setIDToolStripMenuItem.Visible = true;
274 setTextToolStripMenuItem.Visible = true;
275 ROI an = (ROI)node.Object;
276 string name = node.node.Parent.Parent.Text;
277 ImageView v = TabsView.SelectedViewer;
278 if (v != null)
279 v.SetCoordinate(an.coord.Z, an.coord.C, an.coord.T);
280 }
281 }
282 }
283}
System.Windows.Forms.Application Application
Definition ImageView.cs:14
BioLib.BioImage BioImage
Definition TabsView.cs:15
static TabsView tabsView
Definition App.cs:16
static void Initialize()
Initialize() is a function that initializes the BioImager UI.
Definition App.cs:77
static ImageView viewer
Definition App.cs:23
static Imager imager
Definition App.cs:20
Node(object data, DataType typ)
Definition NodeView.cs:39
void UpdateOverlay()
Definition NodeView.cs:94
NodeView(string[] args)
Definition NodeView.cs:55