通用视觉工具模块-打散模块-3-后端实现
一 执行和确认命令
/// <summary>/// 执行命令/// </summary>[NonSerialized]privateCommandBase_ExecuteCommand;publicCommandBaseExecuteCommand{get{if(_ExecuteCommand==null){_ExecuteCommand=newCommandBase((obj)=>{ExeModule();});}return_ExecuteCommand;}}/// <summary>/// 确认/// </summary>[NonSerialized]privateCommandBase_ConfirmCommand;publicCommandBaseConfirmCommand{get{if(_ConfirmCommand==null){_ConfirmCommand=newCommandBase((obj)=>{varview=this.ModuleViewasThresholdView;// 关闭界面if(view!=null){view.Close();}});}return_ConfirmCommand;}}
二 链接命令
/// <summary>/// 参数变化回调函数/// </summary>/// <param name="obj"></param>privatevoidOnVarChanged(VarChangedEventParamModelobj){switch(obj.SendName.Split(',')[1]){case"InputRegionLink":InputRegionLinkText=obj.LinkName;break;default:break;}}[NonSerialized]privateCommandBase_LinkCommand;publicCommandBaseLinkCommand{get{if(_LinkCommand==null){//以GUID+类名作为筛选器EventMgr.Ins.GetEvent<VarChangedEvent>().Subscribe(OnVarChanged,o=>o.SendName.StartsWith($"{ModuleGuid}"));_LinkCommand=newCommandBase((obj)=>{eLinkCommandlinkCommand=(eLinkCommand)obj;switch(linkCommand){caseeLinkCommand.InputRegionLink:// 获取当前模块之前的所有可获得的HImage参数CommonMethods.GetModuleList(ModuleParam,VarLinkViewModel.Ins.Modules,"object");// 链接选择框EventMgr.Ins.GetEvent<OpenVarLinkViewEvent>().Publish($"{ModuleGuid},InputRegionLink");break;default:break;}});}return_LinkCommand;}}
三 加载显示窗口
[NonSerialized]VMHWindowControlmWindowH;
/// <summary>/// 加载函数/// </summary>publicoverridevoidLoaded(){base.Loaded();varview=ModuleViewasConnectionView;if(view!=null){ClosedView=true;// 加载halcon显示控件if(view.mWindowH==null){view.mWindowH=newVMHWindowControl();view.winFormHost.Child=view.mWindowH;}// 二次打开复原操作if(DispImage!=null&&DispImage.IsInitialized()){ShowHRoi();}}}
四 显示结果
/// <summary>/// 显示结果/// </summary>publicvoidShowRes(){if(ConnectedRegions!=null&&ConnectedRegions.IsInitialized()){// 添加到mHRoi中ShowHRoi(newHRoi(ModuleParam.ModuleEncode,ModuleParam.ModuleName,ModuleParam.Remarks,HRoiType.检测结果,"green",newHObject(ConnectedRegions),true));}varview=ModuleViewasConnectionView;// 如果当前窗口已关闭,则显示主界面窗口if(view==null||view.IsClosed){mWindowH=ViewDic.GetView(DispImage.DispViewID);}// 否则显示对应view里面的窗口else{mWindowH=view.mWindowH;}List<HRoi>roiList=mHRoi.Where(c=>c.ModuleName==ModuleParam.ModuleName).ToList();foreach(HRoiroiinroiList){if(roi.roiType==HRoiType.文字显示){HTextroiText=(HText)roi;ShowTool.SetFont(mWindowH.hControl.HalconWindow,roiText.size,"false","false");ShowTool.SetMsg(mWindowH.hControl.HalconWindow,roiText.text,"image",roiText.row,roiText.col,roiText.drawColor,"false");}else{mWindowH.WindowH.DispHobject(roi.hobject,roi.drawColor,roi.IsFillDisp);}}}
添加输出
publicoverridevoidAddOutputParams(){base.AddOutputParams();AddOutputParam("打散区域","HObject",ConnectedRegions);}