using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ORiN2.interop.CAO; using System.Runtime.InteropServices; namespace Camera { public partial class Form1 : Form { private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoController caoCtrl; private CaoVariable caoVarCapture; private CaoVariable caoVarPause; public Form1() { InitializeComponent(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { btnDisconnect_Click(sender, e); if (caoWs != null) { Marshal.ReleaseComObject(caoWs); caoWs = null; } if (caoWss != null) { Marshal.ReleaseComObject(caoWss); caoWss = null; } if (caoEng != null) { Marshal.ReleaseComObject(caoEng); caoEng = null; } } private void btnInit_Click(object sender, EventArgs e) { //Create CAO Engine caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); btnInit.Enabled = false; btnConnect.Enabled = true; } private void btnConnect_Click(object sender, EventArgs e) { try { // Connect Dummy.Camera Provider caoCtrl = caoWs.AddController("Camera", "CaoProv.Dummy.Camera", "", ""); caoVarCapture = caoCtrl.AddVariable("@Image", ""); caoVarPause = caoCtrl.AddVariable("@Pause", ""); // Enable command buttons btnConnect.Enabled = false; btnDisconnect.Enabled = true; btnCaptureVar.Enabled = true; btnCaptureFile.Enabled = true; btnRead.Enabled = true; btnWrite.Enabled = true; } catch (Exception ex) { btnDisconnect_Click(sender, e); MessageBox.Show(ex.Message); } } private void btnDisconnect_Click(object sender, EventArgs e) { if (caoVarPause != null) { Marshal.ReleaseComObject(caoVarPause); caoVarPause = null; } if (caoVarCapture != null) { Marshal.ReleaseComObject(caoVarCapture); caoVarCapture = null; } // Disconnect Provider if (caoCtrl != null) { CaoControllers ctrls = caoWs.Controllers; ctrls.Remove(caoCtrl.Name); Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; Marshal.ReleaseComObject(ctrls); ctrls = null; } // Disable command buttons btnConnect.Enabled = true; btnDisconnect.Enabled = false; btnCaptureVar.Enabled = false; btnCaptureFile.Enabled = false; btnRead.Enabled = false; btnWrite.Enabled = false; } private void btnCaptureVar_Click(object sender, EventArgs e) { try { picCapture.Image = (Image)new ImageConverter() .ConvertFrom(caoVarCapture.Value); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnCaptureFile_Click(object sender, EventArgs e) { // Add File object CaoFile caoFl = caoCtrl.AddFile("File", ""); // Binary -> Image ImageConverter imgcon = new ImageConverter(); picCapture.Image = (Image)imgcon.ConvertFrom(caoFl.Value); // Release File object CaoFiles caoFls = caoCtrl.Files; caoFls.Remove(caoFl.Name); Marshal.ReleaseComObject(caoFl); Marshal.ReleaseComObject(caoFls); } private void btnRead_Click(object sender, EventArgs e) { try { lblPauseValue.Text = caoVarPause.Value.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnWrite_Click(object sender, EventArgs e) { try { caoVarPause.Value = !(bool)caoVarPause.Value; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }