BioCore  5.0.0
A Windows .NET microscopy library and application for viewing, editing, and annotating images.
Loading...
Searching...
No Matches
ROIManager.cs
Go to the documentation of this file.
1namespace BioCore
2{
3 public partial class ROIManager : Form
4 {
5 /* Creating a drop down menu for the user to select the type of ROI they want to create. */
6 public ROIManager()
7 {
8 InitializeComponent();
9 foreach (ROI.Type item in Enum.GetValues(typeof(ROI.Type)))
10 {
11 typeBox.Items.Add(item);
12 }
13 }
14 public ROI anno = new ROI();
19 {
20 if (ImageView.SelectedImage == null)
21 return;
22 roiView.Items.Clear();
23 foreach (ROI an in ImageView.SelectedImage.Annotations)
24 {
25 ListViewItem it = new ListViewItem();
26 it.Tag = an;
27 it.Text = an.ToString();
28 roiView.Items.Add(it);
29 }
30 }
32 public void UpdateOverlay()
33 {
34 if (App.viewer != null)
36 }
43 public void updateROI(int index, ROI an)
44 {
45 if (ImageView.SelectedImage == null)
46 return;
47 ImageView.SelectedImage.Annotations[index] = an;
49 }
57 private void xBox_ValueChanged(object sender, EventArgs e)
58 {
59 if (roiView.SelectedItems.Count == 0)
60 return;
61 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
62 anno = ROI.CreateRectangle(new AForge.ZCT((int)zBox.Value, (int)cBox.Value, (int)tBox.Value), (double)xBox.Value, (double)yBox.Value, (double)wBox.Value, (double)hBox.Value);
64 }
72 private void yBox_ValueChanged(object sender, EventArgs e)
73 {
74 if (roiView.SelectedItems.Count == 0)
75 return;
76 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
77 anno = ROI.CreateRectangle(new AForge.ZCT((int)zBox.Value, (int)cBox.Value, (int)tBox.Value),(double)xBox.Value, (double)yBox.Value, (double)wBox.Value, (double)hBox.Value);
79 }
87 private void wBox_ValueChanged(object sender, EventArgs e)
88 {
89 if (roiView.SelectedItems.Count == 0)
90 return;
91 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
92 anno = ROI.CreateRectangle(new AForge.ZCT((int)zBox.Value, (int)cBox.Value, (int)tBox.Value), (double)xBox.Value, (double)yBox.Value, (double)wBox.Value, (double)hBox.Value);
94 }
101 private void hBox_ValueChanged(object sender, EventArgs e)
102 {
103 if (roiView.SelectedItems.Count == 0)
104 return;
105 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
106 anno = ROI.CreateRectangle(new AForge.ZCT((int)zBox.Value, (int)cBox.Value, (int)tBox.Value), (double)xBox.Value, (double)yBox.Value, (double)wBox.Value, (double)hBox.Value);
107
110 }
117 private void sBox_ValueChanged(object sender, EventArgs e)
118 {
119 if (roiView.SelectedItems.Count == 0)
120 return;
122 }
130 private void zBox_ValueChanged(object sender, EventArgs e)
131 {
132 if (roiView.SelectedItems.Count == 0)
133 return;
134 anno.coord.Z = (int)zBox.Value;
136 }
144 private void cBox_ValueChanged(object sender, EventArgs e)
145 {
146 if (roiView.SelectedItems.Count == 0)
147 return;
148 anno.coord.C = (int)cBox.Value;
150 }
158 private void tBox_ValueChanged(object sender, EventArgs e)
159 {
160 if (roiView.SelectedItems.Count == 0)
161 return;
162 anno.coord.T = (int)cBox.Value;
164 }
172 private void rBox_ValueChanged(object sender, EventArgs e)
173 {
174 if (roiView.SelectedItems.Count == 0)
175 return;
176 anno.strokeColor = AForge.Color.FromArgb((byte)rBox.Value, anno.strokeColor.G, anno.strokeColor.B);
178 }
186 private void gBox_ValueChanged(object sender, EventArgs e)
187 {
188 if (roiView.SelectedItems.Count == 0)
189 return;
190 anno.strokeColor = AForge.Color.FromArgb(anno.strokeColor.R, (byte)gBox.Value, anno.strokeColor.B);
192 }
199 private void bBox_ValueChanged(object sender, EventArgs e)
200 {
201 if (roiView.SelectedItems.Count == 0)
202 return;
203 anno.strokeColor = AForge.Color.FromArgb(anno.strokeColor.R, anno.strokeColor.G, (byte)bBox.Value);
205 }
212 private void typeBox_SelectedIndexChanged(object sender, EventArgs e)
213 {
214 if (roiView.SelectedItems.Count == 0)
215 return;
216 anno.type = (ROI.Type)typeBox.SelectedItem;
218 }
226 private void textBox_TextChanged(object sender, EventArgs e)
227 {
228 if (roiView.SelectedItems.Count == 0)
229 return;
230 anno.Text = textBox.Text;
232 }
239 private void idBox_TextChanged(object sender, EventArgs e)
240 {
241 if (roiView.SelectedItems.Count == 0)
242 return;
243 anno.id = idBox.Text;
245 }
253 private void ROIManager_Activated(object sender, EventArgs e)
254 {
255 if (ImageView.SelectedImage == null)
256 return;
257 string n = System.IO.Path.GetFileName(ImageView.SelectedImage.ID);
258 if (imageNameLabel.Text != n)
259 imageNameLabel.Text = n;
261 }
262
270 private void roiView_SelectedIndexChanged(object sender, EventArgs e)
271 {
272 if (roiView.SelectedItems.Count == 0)
273 return;
274 ListViewItem it = roiView.SelectedItems[0];
275 anno = (ROI)it.Tag;
276 if (App.viewer != null)
277 App.viewer.SetCoordinate(anno.coord.Z, anno.coord.C, anno.coord.T);
278 if (anno.type == ROI.Type.Line || anno.type == ROI.Type.Polygon ||
279 anno.type == ROI.Type.Polyline)
280 {
281 xBox.Enabled = false;
282 yBox.Enabled = false;
283 wBox.Enabled = false;
284 hBox.Enabled = false;
285 }
286 else
287 {
288 xBox.Enabled = true;
289 yBox.Enabled = true;
290 wBox.Enabled = true;
291 hBox.Enabled = true;
292 }
293 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
294 {
295 pointIndexBox.Enabled = false;
296 pointXBox.Enabled = false;
297 pointYBox.Enabled = false;
298 }
299 else
300 {
301 pointIndexBox.Enabled = true;
302 pointXBox.Enabled = true;
303 pointYBox.Enabled = true;
304 }
305 xBox.Value = (decimal)anno.X;
306 yBox.Value = (decimal)anno.Y;
307 wBox.Value = (decimal)anno.W;
308 hBox.Value = (decimal)anno.H;
309 zBox.Value = anno.coord.Z;
310 cBox.Value = anno.coord.C;
311 tBox.Value = anno.coord.T;
312 rBox.Value = anno.strokeColor.R;
313 gBox.Value = anno.strokeColor.G;
314 bBox.Value = anno.strokeColor.B;
315 strokeWBox.Value = (decimal)anno.strokeWidth;
316 idBox.Text = anno.id;
317 textBox.Text = anno.Text;
318 typeBox.SelectedIndex = (int)anno.type;
320 }
328 private void updateBut_Click(object sender, EventArgs e)
329 {
330 if (roiView.SelectedItems.Count == 0)
331 return;
332 if (ImageView.SelectedImage == null)
333 return;
334 ImageView.SelectedImage.Annotations[roiView.SelectedIndices[0]] = anno;
336 }
341 private void addButton_Click(object sender, EventArgs e)
342 {
343 ImageView.SelectedImage.Annotations.Add(anno);
345 }
351 private void showBoundsBox_CheckedChanged(object sender, EventArgs e)
352 {
353 ImageView.showBounds = showBoundsBox.Checked;
355 }
361 private void showTextBox_CheckedChanged(object sender, EventArgs e)
362 {
363 ImageView.showText = showTextBox.Checked;
365 }
373 private void pointXBox_ValueChanged(object sender, EventArgs e)
374 {
375 if (anno == null)
376 return;
377 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
378 return;
379 anno.UpdatePoint(new PointD((double)pointXBox.Value, (double)pointYBox.Value), (int)pointIndexBox.Value);
381 }
389 private void pointYBox_ValueChanged(object sender, EventArgs e)
390 {
391 if (anno == null)
392 return;
393 if (anno.type == ROI.Type.Rectangle || anno.type == ROI.Type.Ellipse)
394 return;
395 anno.UpdatePoint(new PointD((double)pointXBox.Value, (double)pointYBox.Value), (int)pointIndexBox.Value);
397 }
398 public bool autoUpdate = true;
402 public void UpdatePointBox()
403 {
404 if (anno == null)
405 return;
406 PointD d = anno.GetPoint((int)pointIndexBox.Value);
407 pointXBox.Value = (int)d.X;
408 pointYBox.Value = (int)d.Y;
409 }
414 private void pointIndexBox_ValueChanged(object sender, EventArgs e)
415 {
417 }
425 private void fontBut_Click(object sender, EventArgs e)
426 {
427 if (anno == null)
428 return;
429 if (fontDialog.ShowDialog() != DialogResult.OK)
430 return;
431 anno.family = fontDialog.Font.FontFamily.ToString();
432 anno.fontSize = fontDialog.Font.Size;
433 }
441 private void strokeWBox_ValueChanged(object sender, EventArgs e)
442 {
443 if (anno == null)
444 return;
445 anno.strokeWidth = (int)strokeWBox.Value;
447 }
453 private void selectBoxSize_ValueChanged(object sender, EventArgs e)
454 {
455 App.viewer.UpdateSelectBoxSize((float)selectBoxSize.Value);
457 }
464 private void rChBox_CheckedChanged(object sender, EventArgs e)
465 {
466 if (App.viewer == null)
467 return;
468 App.viewer.showRROIs = rChBox.Checked;
470 }
477 private void gChBox_CheckedChanged(object sender, EventArgs e)
478 {
479 if (App.viewer == null)
480 return;
481 App.viewer.showGROIs = gChBox.Checked;
483 }
490 private void bChBox_CheckedChanged(object sender, EventArgs e)
491 {
492 if (App.viewer == null)
493 return;
494 App.viewer.showBROIs = bChBox.Checked;
496 }
502 private void ROIManager_FormClosing(object sender, FormClosingEventArgs e)
503 {
504 e.Cancel = true;
505 this.WindowState = FormWindowState.Minimized;
506 }
507
512 private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
513 {
514 for (int i = 0; i < roiView.SelectedItems.Count; i++)
515 {
516 ImageView.SelectedImage.Annotations.Remove((ROI)roiView.SelectedItems[i].Tag);
517 }
520 }
521
528 private void copyToolStripMenuItem_Click(object sender, EventArgs e)
529 {
530 List<ROI> annotations = new List<ROI>();
531 ROI an = (ROI)roiView.SelectedItems[0].Tag;
532 Clipboard.SetText(BioImage.ROIToString(an));
533 }
534
535 private void saveToolStripMenuItem_Click(object sender, EventArgs e)
536 {
537
538 }
544
545 private void topMostBox_CheckedChanged(object sender, EventArgs e)
546 {
547 TopMost = topMostBox.Checked;
548 }
549 }
550}
static ImageView viewer
Definition App.cs:16
ImageView control for image stacks, pyramidal and whole-slide-images.
static BioImage SelectedImage
Definition ImageView.cs:306
void UpdateAnnotationList()
Definition ROIManager.cs:18
void updateROI(int index, ROI an)
Definition ROIManager.cs:43