//主执行程序 protected override void RunAct() { base.RunAct(); #region 初始化 if (!engineIsnitial) { MyEngine = new HDevEngine(); InitialEngine(); } RuningFinish = false; base.Result = string.Empty; base.IsOk = false; base.isRealOk = false; //功能块 bFindShapeMode = false; bGrabPointSetting = false; if (ImageTestIn == null || !ImageTestIn.IsInitialized()) { return; } int channels = ImageTestIn.CountChannels(); HImage ImageGray; if (channels == 3) { ImageGray = ImageTestIn.Rgb1ToGray(); } else { ImageGray = ImageTestIn.Clone(); } #endregion #region 创建模板 if (MCreateShapeModel.hShapeModel == null || !MCreateShapeModel.hShapeModel.IsInitialized() || MCreateShapeModel.createNewModelID) { if (!MCreateShapeModel.CreateShapeModelAct(ImageRefIn)) { Util.Notify("创建模板异常"); if (NotifyExcInfo != null) { NotifyExcInfo("创建模板异常"); } return; } } #endregion #region 模板匹配 bFindShapeMode = MFindShapeMode.FindShapeModeAct(ImageRefIn, MCreateShapeModel, ImageTestIn); if (!bFindShapeMode) { Util.Notify("查找模板异常"); if (NotifyExcInfo != null) { NotifyExcInfo("查找模板异常"); } return; } List <HHomMat2D> homMat2Ds = new List <HHomMat2D>(); homMat2Ds = MFindShapeMode.GetHHomMat2Ds(); if (MFindShapeMode.row == null || MFindShapeMode.row.Length < 1 || homMat2Ds == null) { Util.Notify("未找到模板"); if (NotifyExcInfo != null) { NotifyExcInfo("未找到模板"); } base.IsOk = true; base.isRealOk = true; return; } if (bFindShapeMode) { StringBuilder strb = new StringBuilder(); strb.Append("查找结果:" + Environment.NewLine); int count = MFindShapeMode.row.Length; for (int i = 0; i < count; i++) { HTuple phi; HOperatorSet.TupleDeg(MFindShapeMode.angle[i], out phi); strb.Append("第" + (i + 1) + "个:\r\n"); string mes = string.Format( "Row:{0:F2}\r\n" + "Col:{1:F2}\r\n" + "角度:{2:F2}\r\n" + "得分:{3:F2}" , MFindShapeMode.row[i].D, MFindShapeMode.column[i].D, phi.D, MFindShapeMode.score[i].D); strb.Append(mes + Environment.NewLine); } if (NotifyExcInfo != null) { NotifyExcInfo(strb.ToString()); } Util.Notify(strb.ToString()); } #endregion #region 抓取点 bGrabPointSetting = mGrabPointSetting.setTarget(homMat2Ds); if (!bGrabPointSetting) { Util.Notify("抓取点异常"); if (NotifyExcInfo != null) { NotifyExcInfo("抓取点异常"); } } else { StringBuilder strd = new StringBuilder(); for (int i = 0; i < MGrabPointSetting.GrabRowTarget.Length; i++) { string mes = string.Format( "第" + (i + 1) + "个抓取点像素坐标:\r\n" + "Row: {0:F2}\r\n" + "Col: {1:F2}", MGrabPointSetting.GrabRowTarget[i].D, MGrabPointSetting.GrabColTarget[i].D); strd.Append(mes + Environment.NewLine); } Util.Notify(strd.ToString()); if (NotifyExcInfo != null) { NotifyExcInfo(strd.ToString()); } } #endregion #region 防呆 if (bFangDai_Enable) { bFangDai_Result = MFangDai.FangDai_Act(ImageGray, homMat2Ds); if (bFangDai_Result) { StringBuilder strb = new StringBuilder(); strb.Append("防呆:" + Environment.NewLine); int count = MFangDai.Area.Length; for (int i = 0; i < count; i++) { string mes = string.Format("第" + (i + 1) + "个:\r\n" + "面积: {0:F2}" , MFangDai.Area[i].D); strb.Append(mes); strb.Append(Environment.NewLine); } if (NotifyExcInfo != null) { NotifyExcInfo(strb.ToString()); } Util.Notify(strb.ToString()); } else { Util.Notify("防呆检测异常"); if (NotifyExcInfo != null) { NotifyExcInfo("防呆检测异常"); } } } else { bFangDai_Result = true; } #endregion RuningFinish = true; base.IsOk = bFindShapeMode && bGrabPointSetting && bFangDai_Result; base.isRealOk = true; if (ImageGray != null && ImageGray.IsInitialized()) { ImageGray.Dispose(); } }