using Bro.Common.Helper; using Bro.UI.Model.Winform; 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; namespace Bro.M071.Process.UI { [MenuNode("M071_PatchInsertMeasurement", "批量生成检测项", 4, "M071Node", true)] public partial class M071_PatchInsertMeasurement : MenuFrmBase { public M071_PatchInsertMeasurement() { InitializeComponent(); } M071Config Config => Process?.IConfig as M071Config; M071Process Process_M071 => Process as M071Process; public override void OnProcessUpdated() { base.OnProcessUpdated(); if (Config == null) return; this.Invoke(new Action(() => { UIHelper.SetCombo(cboMeasureType, Config.MeasureTypeCollection, "Code", "Code"); UIHelper.SetCombo(cboStartKey, new List(Config.KeyNameCollection), "", ""); UIHelper.SetCombo(cboEndKey, new List(Config.KeyNameCollection), "", ""); })); } private async void btnInsertMeasurement_Click(object sender, EventArgs e) { btnInsertMeasurement.Enabled = false; btnInsertMeasurement.Text = "生成中。。。"; MeasureType measureType = cboMeasureType.SelectedItem as MeasureType; string startKey = cboStartKey.Text; string endKey = cboEndKey.Text; await PatchInsertMeasurement(measureType, startKey, endKey).ContinueWith(t => { MessageBox.Show(t.Result); }); btnInsertMeasurement.Enabled = true; btnInsertMeasurement.Text = "生成检测项"; } private async Task PatchInsertMeasurement(MeasureType measureType, string startKey, string endKey) { return await Task.Run(() => { int startIndex = Config.KeyNameCollection.IndexOf(startKey); int endIndex = Config.KeyNameCollection.IndexOf(endKey); KeyLocation startRect = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == startKey); if (startRect == null) { return $"未配置{(startRect == null ? startKey : "")}的显示位置"; } if (startIndex > endIndex) { return "起始键不能小于结束键"; } RectangleF curKeyRect = new RectangleF((float)startRect.KeyPosition.X, (float)startRect.KeyPosition.Y, startRect.KeySize.Width, startRect.KeySize.Height); KeyLocation curKey = null; switch (measureType.Code) { case "Slant": { for (int i = startIndex; i <= endIndex; i++) { curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == Config.KeyNameCollection[i]); if (curKey == null) { curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.IsDefault); } int lableX = (int)((curKeyRect.X + curKeyRect.X + curKey.KeySize.Width - measureType.DisplayRect.Width) / 2.0); int lable_Up_Y = (int)(startRect.KeyPosition.Y + (startRect.KeySize.Height - measureType.DisplayRect.Height) / 2.0); MeasurementUnit mUnitUp = new MeasurementUnit(); mUnitUp.MeasureType = measureType.Code; mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "All" }); mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, measureType.DisplayRect.Width, measureType.DisplayRect.Height); Config.MeasurementUnitCollection.Add(mUnitUp); curKeyRect.Offset(curKey.KeySize.Width + curKey.IntervalSize.Width, 0); } } break; case "Alignment": { for (int i = startIndex; i < endIndex; i++) { curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.Key == Config.KeyNameCollection[i]); if (curKey == null) { curKey = Config.KeyLocationCollection.FirstOrDefault(u => u.IsDefault); } int lableX = (int)((curKeyRect.X + curKey.KeySize.Width + curKeyRect.X + curKey.KeySize.Width + curKey.IntervalSize.Width - measureType.DisplayRect.Width) / 2.0); int lable_Up_Y = (int)startRect.KeyPosition.Y + 4; int lable_Down_y = (int)(startRect.KeyPosition.Y + startRect.KeySize.Height - 4 - measureType.DisplayRect.Height); MeasurementUnit mUnitUp = new MeasurementUnit(); mUnitUp.MeasureType = measureType.Code; mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z2" }); mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z1" }); mUnitUp.DisplayLocation = new Rectangle(lableX, lable_Up_Y, measureType.DisplayRect.Width, measureType.DisplayRect.Height); Config.MeasurementUnitCollection.Add(mUnitUp); MeasurementUnit mUnitDown = new MeasurementUnit(); mUnitDown.MeasureType = measureType.Code; mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z4" }); mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z3" }); mUnitDown.DisplayLocation = new Rectangle(lableX, lable_Down_y, measureType.DisplayRect.Width, measureType.DisplayRect.Height); Config.MeasurementUnitCollection.Add(mUnitDown); curKeyRect.Offset(curKey.KeySize.Width + curKey.IntervalSize.Width, 0); } } break; case "RowAlignment": { int start_X = (int)(startRect.KeyPosition.X + startRect.KeySize.Width / 3.0); int end_X = (int)((startRect.KeySize.Width + startRect.IntervalSize.Width) * (endIndex - startIndex) + startRect.KeyPosition.X + startRect.KeySize.Width * 2.0 / 3.0); int lable_Up_Y = (int)startRect.KeyPosition.Y - 6; int lable_Down_Y = (int)(startRect.KeyPosition.Y + startRect.KeySize.Height - 6); MeasurementUnit mUnitUp = new MeasurementUnit(); mUnitUp.MeasureType = measureType.Code; for (int i = startIndex; i < endIndex; i++) { mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z2" }); mUnitUp.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z1" }); } mUnitUp.DisplayLocation = new Rectangle(start_X, lable_Up_Y, end_X - start_X, 12); Config.MeasurementUnitCollection.Add(mUnitUp); MeasurementUnit mUnitDown = new MeasurementUnit(); mUnitDown.MeasureType = measureType.Code; for (int i = startIndex; i < endIndex; i++) { mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i], KeyResultId = "Z4" }); mUnitDown.KeyUnitCollection.Add(new KeyUnitBind() { Key = Config.KeyNameCollection[i + 1], KeyResultId = "Z3" }); } mUnitDown.DisplayLocation = new Rectangle(start_X, lable_Down_Y, end_X - start_X, 12); Config.MeasurementUnitCollection.Add(mUnitDown); } break; } return "已批量生成检测项,请到配置界面查看和保存"; }); } } }