//主执行程序
        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();
            }
        }