/// <summary> /// 加速度の雛形リストを生成 /// </summary> /// <returns></returns> public static List <ItemBean> GenerateAccelerationItems() { List <ItemBean> list = new List <ItemBean>(); AxisMaster.Load(); // 軸に対応する項目を1個づつ生成する ItemBean item; AxisBean axis; int cnt = 1; // 加速度X軸 axis = AxisMaster.AccelerationAxis; item = new ItemBean(); item.Id = cnt; item.Name = "X-axis"; item.Axis = axis; item.LineWidth = 1.0; item.LineColor = ColorList[cnt % ColorList.Length]; item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); cnt++; // 加速度Y軸 item = new ItemBean(); item.Id = cnt; item.Name = "Y-axis"; item.Axis = axis; item.LineWidth = 1.0; item.LineColor = ColorList[cnt % ColorList.Length]; item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); cnt++; // 加速度Z軸 item = new ItemBean(); item.Id = cnt; item.Name = "Z-axis"; item.Axis = axis; item.LineWidth = 1.0; item.LineColor = ColorList[cnt % ColorList.Length]; item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); return(list); }
/// <summary> /// 出荷時LIST生成 /// </summary> private static void GenerateDefaultList() { ItemPatternList = new List <ItemMasterBean>(); ItemMasterBean pattern = null; AxisMaster.Load(); for (int i = 0; i < 3; i++) { // 加速度の項目 pattern = new ItemMasterBean(); pattern.Name = string.Format("Accelerometer{0}", i); pattern.ItemList = ItemListAccess.GenerateAccelerationItems(); ItemPatternList.Add(pattern); // 角速度の項目 pattern = new ItemMasterBean(); pattern.Name = string.Format("AngularVelocity{0}", i); pattern.ItemList = ItemListAccess.GenerateAngularVelocityItems(); ItemPatternList.Add(pattern); // 眼電位の項目 pattern = new ItemMasterBean(); pattern.Name = string.Format("Electrooculography{0}", i); pattern.ItemList = ItemListAccess.GenerateElectrooculographyItems(); ItemPatternList.Add(pattern); // TODO : クォータニオンを無効化 //// クォータニオンの項目 //pattern = new ItemMasterBean(); //pattern.Name = string.Format("Quaternion{0}",i); //pattern.ItemList = ItemListAccess.GenerateQuaternionItems(); //ItemPatternList.Add(pattern); } AccelerationItems = new List <ItemMasterBean>(); AngularVelocityItems = new List <ItemMasterBean>(); ElectrooculographyItems = new List <ItemMasterBean>(); // TODO : クォータニオンを無効化 //QuaternionItems = new List<ItemMasterBean>(); for (int i = 0; i < 3; i++) { AccelerationItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Accelerometer{0}", i))); AngularVelocityItems.Add(ItemPatternList.Find(p => p.Name == string.Format("AngularVelocity{0}", i))); ElectrooculographyItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Electrooculography{0}", i))); // TODO : クォータニオンを無効化 //QuaternionItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Quaternion[0]",i))); } }
/// <summary> /// グラフ画面処理 /// 加速度、角速度、眼電位のグラフを制御する /// </summary> public GraphControl() { InitializeComponent(); graphViews = new GraphView[] { graphView1, graphView2, graphView3 }; // 項目マスターロード AxisMaster.Load(); ItemMaster.Load(); // defaultは chart1=加速度 chart2=角速度 chart3=眼電圧 Chart1Axis = AxisMaster.AccelerationAxis; Chart2Axis = AxisMaster.AngularVelocityAxis; Chart3Axis = AxisMaster.ElectrooculographyAxis; }
/// <summary> /// 保存ボタンクリック /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void saveButton_Click(object sender, EventArgs e) { // validateしてエラーならメッセージ表示 string message = string.Empty; if (!validateAxisList(ref message)) { MessageBox.Show(message, "Axis Master", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 保存 AxisMaster.Save(); // 編集フラグクリア HasEdited = false; //// 項目パターンファイルのAxisも更新する //// すべての項目パターンについて //for (int i = 0; i < ItemMaster.ItemPatternList.Count; i++) //{ // ItemMasterBean pattern = ItemMaster.ItemPatternList[i]; // for (int j = 0; j < pattern.ItemList.Count; j++) // { // // 項目に紐づいている軸を入れ替える // AxisBean axis = AxisMaster.AxisList.Find(d => d.Id == pattern.ItemList[j].Axis.Id); // if (axis != null) // { // pattern.ItemList[j].Axis = axis; // } // } //} //// 保存 //ItemMaster.Save(); MessageBox.Show("Save completed.", "Axis Master", MessageBoxButtons.OK, MessageBoxIcon.Information); this.dialogResult = DialogResult.OK; Close(); }
/// <summary> /// saveを促す /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AxisMasterForm_FormClosing(object sender, FormClosingEventArgs e) { if (HasEdited) { if (DialogResult.Yes == MessageBox.Show("Data has edited. save?", "Axis Master", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { AxisMaster.Save(); DialogResult = DialogResult.OK; } else { // キャンセル処理を追加 e.Cancel = true; //DialogResult = DialogResult.Cancel; } } else { DialogResult = this.dialogResult; } }
/// <summary> /// ファイルからロードしてリスト生成 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static void Load() { string filePath = FilePath; ItemPatternList = new List <ItemMasterBean>(); FileStream fs = null; StreamReader sr = null; string[] fields; ItemMasterBean pattern = null; try { AxisMaster.Load(); if (!File.Exists(filePath)) { GenerateDefaultList(); return; } // ファイルオープン fs = File.OpenRead(filePath); sr = new StreamReader(fs); string version = string.Empty; while (!sr.EndOfStream) { // 読む string rec = sr.ReadLine(); // アプリケーションバージョン if (rec.Contains("$ApplicationVersion")) { version = rec.Split(new char[] { '=' })[1]; } // 項目パターン名称 else if (rec.Contains("$ItemPattern")) { // いままでの項目パターンを保存 if (pattern != null) { ItemPatternList.Add(pattern); } // 新しい項目パターン生成 pattern = new ItemMasterBean(); // '='で分割してItemPatternの名称を取り出す fields = rec.Split(new char[] { '=' }); pattern.Name = fields[1].Trim(); } // X軸情報 else if (rec.Contains("$XAxis")) { // '='で分割してITEMのCSVを取り出す fields = rec.Split(new char[] { '=' }); pattern.XAxis = AxisBean.CreateFromCsv(fields[1]); } else { // オブジェクトリストに格納 ItemBean item = ItemBean.CreateFromCsv(rec); if (item != null) { // 軸マスター更新されていた時のため、軸をマスターから取り直す AxisBean axis = AxisMaster.AxisList.Find(d => d.Id == item.Axis.Id); item.Axis = axis; pattern.ItemList.Add(item); } } } if (version.Equals(System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion) == false) { // バージョン不一致の為、ファイルを破棄 if (File.Exists(filePath)) { sr.Close(); sr = null; fs.Close(); fs = null; File.Delete(filePath); } GenerateDefaultList(); return; } // 最後の項目パターンを保存 if (pattern != null) { ItemPatternList.Add(pattern); } AccelerationItems = new List <ItemMasterBean>(); AngularVelocityItems = new List <ItemMasterBean>(); ElectrooculographyItems = new List <ItemMasterBean>(); // TODO : クォータニオンを無効化 //QuaternionItems = new List<ItemMasterBean>(); for (int i = 0; i < 3; i++) { AccelerationItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Accelerometer{0}", i))); AngularVelocityItems.Add(ItemPatternList.Find(p => p.Name == string.Format("AngularVelocity{0}", i))); ElectrooculographyItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Electrooculography{0}", i))); // TODO : クォータニオンを無効化 //QuaternionItems.Add(ItemPatternList.Find(p => p.Name == string.Format("Quaternion[0]", i))); } } finally { // 後始末 if (sr != null) { sr.Close(); } if (fs != null) { fs.Close(); } } }
/// <summary> /// 眼電位の雛形リストを生成 /// </summary> /// <returns></returns> public static List <ItemBean> GenerateElectrooculographyItems() { List <ItemBean> list = new List <ItemBean>(); AxisMaster.Load(); // 軸に対応する項目を1個づつ生成する ItemBean item; AxisBean axis; int cnt = 1; axis = AxisMaster.ElectrooculographyAxis; // 眼電位左 item = new ItemBean(); item.Id = cnt; item.Name = "Left"; item.Axis = axis; item.LineWidth = 1.0; //item.LineColor = ColorList[cnt % ColorList.Length]; item.LineColor = Color.FromArgb(0xff, 0xc0, 0x00, 0x00); item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); cnt++; // 眼電位右 item = new ItemBean(); item.Id = cnt; item.Name = "Right"; item.Axis = axis; item.LineWidth = 1.0; //item.LineColor = ColorList[cnt % ColorList.Length]; item.LineColor = Color.FromArgb(0xff, 0x00, 0x00, 0xc0); item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); cnt++; // 眼電位水平差分値 item = new ItemBean(); item.Id = cnt; item.Name = "Delta H"; item.Axis = axis; item.LineWidth = 1.0; //item.LineColor = ColorList[cnt % ColorList.Length]; item.LineColor = Color.FromArgb(0xff, 0xc0, 0x00, 0xc0); item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); cnt++; // 眼電位垂直差分値 item = new ItemBean(); item.Id = cnt; item.Name = "Delta V"; item.Axis = axis; item.LineWidth = 1.0; //item.LineColor = ColorList[cnt % ColorList.Length]; item.LineColor = Color.FromArgb(0xff, 0x00, 0xc0, 0xc0); item.YAxisMax = axis.AxisMax; item.YAxisMin = axis.AxisMin; item.Visible = true; list.Add(item); return(list); }