Newer
Older
ISCamRecorder / ISCamRecorder / MainForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;

namespace ISCamRecorder {
    public partial class MainForm : Form {
        private System.Threading.Timer _UITimer;
        List<ISCamera> _Cameras = new List<ISCamera> ();    // カメラオブジェクト
        //private Stopwatch _Swatch = new Stopwatch();    // 高精度時間計測

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public MainForm() {
            InitializeComponent();
        }

        /// <summary>
        /// フォームロード時
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_Load(object sender, EventArgs e) {
            SetTitle(this.Text);

            _Cameras.Add(new ISCamera(icTop, "9220016"));
            _Cameras.Add(new ISCamera(icLeft, "9220018"));
            _Cameras.Add(new ISCamera(icFront, "9220021"));
            _Cameras.Add(new ISCamera(icRight, "9220025"));
            //_Swatch.Start();

            _Cameras.ForEach(c => c.Connect());
            _UITimer = new System.Threading.Timer(TimerCB, this, 0, 2000);
        }

        /// <summary>
        /// タイマーイベント
        /// </summary>
        /// <param name="obj"></param>
        static void TimerCB(object obj) {
            ((MainForm)obj).SoftwareTrigger();
        }

        /// <summary>
        /// トリガー発生
        /// </summary>
        public void SoftwareTrigger() {
            if (this.InvokeRequired) {
                this.Invoke((MethodInvoker)delegate { SoftwareTrigger(); });
                return;
            }
            //_Cam.ForEach(c => c.SWTrigger());
            TxtTop.Text = $"Top {_Cameras[0].CameraInfo()}";
            TxtLeft.Text = $"Left {_Cameras[1].CameraInfo()}";
            TxtFront.Text = $"Front {_Cameras[2].CameraInfo()}";
            TxtRight.Text = $"Right {_Cameras[3].CameraInfo()}";
        }

        /// <summary>
        /// カメラプロパティの設定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SetProperty_Click(object sender, EventArgs e) {
            var config =_Cameras[0].SetProperty();
            _Cameras.ForEach(c => c.SetProperty(config));
        }

        /// <summary> 
        /// フォームタイトルを設定 
        /// </summary> 
        private void SetTitle(string title) {
            var version = Assembly.GetExecutingAssembly().GetName().Version;
#if DEBUG
            var debug = " [DEBUG]";
#else
            var debug = ""; 
#endif
            Text = $"{title} ver {version.Major}.{version.Minor}{debug}";
        }

        /// <summary>
        /// フォームを閉じる時
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
            _UITimer.Dispose();
        }

        /// <summary>
        /// トリガー使用チェック変更時
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ChkTrigger_CheckedChanged(object sender, EventArgs e) {
            _Cameras.ForEach(c => c.SetTriggerMode(((CheckBox)sender).Checked));
        }
    }
}