开发一个自己的VM模块(三)
在开发一个自己的模块(二)里介绍了模块的底层C++部分的开发。第三部分讲解界面显示,自定义控件如何开发。

一、界面显示

如下图,MoveAndRotate,XIn,YIn,RIn,结果显示区的XOut,YOut,ROut都是自定义字符串,显示的也都是原始字符。


图 1 配置输入订阅


图 2 运行结果


如果需要将上述字符串显示变成中文,需要在字符翻译文件里添加翻译项。在VisionMaster.exe的同级目录Lang文件夹下,有个LanguageTool.exe。双击打开如下图:

图 3 语言资源工具


在Key文本框中输入要翻译的字符串,在中文值文本框中输入要显示的中文名称,在英文值文本框中输入要显示的英文名称,点后面的增加/编辑按钮,即可完成添加。修改同理。

将VM主界面关闭,重新打开。即可看到翻译后的中文名。如下图:

图 4 添加了语言资源的显示效果


可按此方法加入其它XIn,YIn,RIn,XOut,YOut,ROut的翻译对照。


二、结果显示

在模块运行之后,得到了计算结果,但在图像上没有相应的显示,如下图:


图 5 无结果显示


打开自定义的模块目录,找到xxxDisplay.xml,打开,如下图所示:


图 6 显示XML

默认情况下只显示了输入,输出图片,ROI,当前结果,历史结果这几项。在里面添加点的显示即可,可以到其它模块的Display.xml里去复制点的XML定义,进行调整。如下图:


图 7 添加点,文字显示


添加了point、text的Object,即点的显示与文字的显示,注意划红线的部分,点与文字的数据来源都要与MoveAndRotate.xml里的Output对应上。显示如下:


图 8 显示点与文字


如果不能正常显示,要看看底层C++库里是否输出了Modustatus。可参考开发自己的VM模块(二)里关于模块输出的部分。

如果要在显示TAB页,加开关控制点是否显示,加文字的配置。如下:


图 9 显示配置页



图 10 添加点与文字配置


注意,红线部分需要与Display里的Object Name保持一致。而文本显示的TextDisplayGroup是固定的,不用调整名称。添加完成后,显示TAB页变成如下:


图 11 显示TAB页有点和文字的配置


三、开发自定义配置控件

如果模块非常复杂,类似VM自带的特征匹配,需要做复杂的配置建模,这样的配置界面是无法通过XML直接配置出来的,这时就需要自己开发配置控件。需要一些的WPF开发功底。

而在生成器生成的C#工程里,已经附送了自定义配置控件的示例代码,以上面的MoveAndRotate为例,C#工程在MoveAndRotate_CsProj\MoveAndRotateCs里,里面有MoveAndRotateCs和MoveAndRotateControl两个目录,打开MoveAndRotateCs.sln(使用VS2013打开),如下图:


图 12 控件工程


里面的MoveAndRotateControl项目就是控件。从截图可以看到,已经做了一个新建模型,编辑模型的界面,点击新建模型按钮,就会弹出另一个界面ModelConfigDialog.xaml,做具体的模型生成工作。这两个界面可以按需修改成任何想自定义的界面内容。那如何使用到这个自定义的XXXControl呢?

看XmlData,如下图:


图 13 自定义Item


自定义了一个ModelPanel继承自NameValueItem(Tab XML里的Items的基类),扩展出了一个新的Item。再看DataTemplate下的ParamUserControlDataTemplate.xaml。


图 14 自定义数据模板


定义了一个数据模板ModelPanel,里面包含了自定义的配置界面ModelPanelControl。即:在Tab XML的Items下可以添加一个新的ModelPanel的Item,框架会把它实例化成图13的ModelPanel类的对象,并且尝试用同名的数据模板来做呈现。

       在Tab Xml中做修改,加入一个新的Tab Lang_ModelSet,并在这个新Tab的Items下添加了新定义的ModelPanel,如下图:


图 15 TAB XML中加入自定义控件


打开VM,拖入移动旋转模块,双击打开配置,可以看到如下图的新自定义TAB页:


图 16 自定义配置控件

有了控件,可以做各种各样自定义的界面展现,但如何与模块底层通信,将两者联系起来,达到真正的配置效果?

       连接自定义配置控件与配置TAB页的桥梁是ParamUserControlDataTemplate.xaml,仔细看


把ModelPanelControl的ParentNode绑定到了ModelPanel这个Tab Item的身上,而顺着Item的父节点往上找,找到最顶层节点,就是Tab Xml里的根节点AlgorithmTabRoot。而与模块底层通信的出入口,就在AlgorithmTabRoot的public IParamsConfig UserStringData这个属性上。所以示例代码中有拿通信出入口的代码如下:


图 17 通信接口


获得通信接口之后,从底层获取数据的方式如下:


设置数据到底层方式如下:


相应的,在底层GetParam,SetParam里要添加GetImageWidth,GetImageHeight,GetImageData,SetImageWidth,SetImageHeight,SetImageData的处理逻辑,如下图:


图 18 GetParam里加入获取数据示例代码



图 19 在SetParam里加入设置数据示例代码


至此,自定义控件的界面及数据传递就全部打通,基本框架已搭建,可以根据业务需求随意发挥了。

自定义模块的所有内容讲解完毕。

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

海康机器视觉工程师认证相关内容

下一篇

浅谈visionMaster 通讯的应用(非常好用)

评论请先登录 登录
全部评论 0
Lv.0
17
创作
143
粉丝
123
获赞
相关阅读
  • 海康机器人“悉灵杯”课题研究活动-获奖公布
    2022-09-05
  • 汽车行业-汽车焊点检测案例
    2022-09-01
  • VM3D模块学习经验分享
    2022-09-22
  • SC系列智能相机图像存储的几种方式
    2022-09-08
  • 有关条码二维码相关知识
    2022-08-30

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器