Newer
Older
TIASShot / TIASshot / Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Interop;
using System.Windows.Media.Media3D;
using System.Xml.Serialization;
using TIS.Imaging;

namespace TIASshot {
    public partial class Form1 : Form {

        public static string APP_NAME = "TIAS Shot";
        //private Lucam _lucam;
        private IScam _iscam;
        private LightSource _light = new LightSource();
        private bool _isLightOn = true;

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

            //_lucam = new Lucam(this, picPreview, picDisplay);
            _iscam = new IScam(this, icImagingControl1, "DBK33UX178");

            var version = Assembly.GetExecutingAssembly().GetName().Version;
            Text = $"{APP_NAME} ver.{version.Major}.{version.Minor}";
#if DEBUG
            Text += " [DEBUG]";
#endif
        }

        /// <summary>
        /// フォームロード
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e) {
            //if (!_lucam.Connect()) {
            //    MessageBox.Show(_lucam.ErrorMsg, APP_NAME,
            //        MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //    Close();
            //    return;
            //}
            if (!_iscam.Connect()) {
                MessageBox.Show("IScamの接続に失敗しました。", APP_NAME,
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Close();
                return;
            }

            
            txtDeviceName.Text = _iscam.DeviceName;
            txtSerialNo.Text = _iscam.SerialNumber;
            //txtDeviceName.Text = _lucam.DeviceName;
            //txtSerialNo.Text = _lucam.SerialNumber;
            txtSaveFolder.Text = Config.GetString("SaveFolder");
            EnableShots(false);
            //_lucam.StartStopPreview();

            if (_light.Open()) {
                _light.SetLight();
            }
        }

        /// <summary>
        /// フォームクローズ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
            //_lucam.Disconnect();
            _iscam.Disconnect();
        }

        /// <summary>
        /// 画像撮影1枚
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnShot1_Click(object sender, EventArgs e) {
            //_lucam.ShotOne();
        }

        /// <summary>
        /// 複数画像撮影
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnShotMulti_Click(object sender, EventArgs e) {
            //_lucam.ShotMulti();
        }

        /// <summary>
        /// 校正
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCalib_Click(object sender, EventArgs e) {
            //_lucam.Calibration();
        }

        /// <summary>
        /// 画像表示
        /// </summary>
        /// <param name="bmp"></param>
        public void ShowImage(Bitmap bmp) {
            // なぜかわからないがここはInvokeなしでworkerスレッドから呼び出しできる
            //if (InvokeRequired) {
            //    Invoke((MethodInvoker)delegate { ShowImage(bmp); });
            //    return;
            //}
            picDisplay.Image = bmp;
        }

        /// <summary>
        /// メッセージ表示
        /// </summary>
        /// <param name="msg"></param>
        public void ShowMessage(string msg) {
            if (InvokeRequired) {
                Invoke((MethodInvoker)delegate { ShowMessage(msg); });
                return;
            }
            txtMessage.Text = msg;
            txtMessage.Update();
        }

        /// <summary>
        /// データ名取得
        /// </summary>
        /// <returns></returns>
        public string GetDataName() {
            if (InvokeRequired) {
                return (string)Invoke((MethodInvoker)delegate { GetDataName(); });
            }
            return txtDataName.Text;
        }

        /// <summary>
        /// マルチショット撮影の枚数取得
        /// </summary>
        /// <returns></returns>
        public int GetNumMultiShots() {
            if (InvokeRequired) {
                return (int)Invoke((MethodInvoker)delegate { GetNumMultiShots(); });
            }
            if (int.TryParse(txtNumMultiShots.Text, out int result)) return result;
            return 1;
        }

        /// <summary>
        /// マルチショット撮影の間隔取得
        /// </summary>
        /// <returns></returns>
        public int GetMultiShotsInterval() {
            if (InvokeRequired) {
                return (int)Invoke((MethodInvoker)delegate { GetMultiShotsInterval(); });
            }
            if (int.TryParse(txtMultiShotsInterval.Text, out int result)) return result;
            return 1000;
        }

        /// <summary>
        /// 撮影ボタン有効化
        /// </summary>
        /// <param name="enable"></param>
        public void EnableShots(bool enable = true) {
            if (InvokeRequired) {
                Invoke((MethodInvoker)delegate { EnableShots(enable); });
                return;
            }
            btnShotOne.Enabled = enable;
            btnShotMulti.Enabled = enable;
        }

        /// <summary>
        /// データフォルダを開く
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpenDataFolder_Click(object sender, EventArgs e) {
            System.Diagnostics.Process.Start(txtSaveFolder.Text);
        }

        /// <summary>
        /// 光源のON/OFF切り替え
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLightSW_Click(object sender, EventArgs e) {
            if (!_light.IsOpen) return;
            if (_isLightOn) {
                _light.TurnOff();
                btnLightSW.Text = "照明 ON";
                _isLightOn = false;
            } else {
                _light.SetLight();
                btnLightSW.Text = "照明 OFF";
                _isLightOn = true;
            }
        }
    }
}