VisionPro如何编写自定义控件

我自己的编写环境

  1. VS2017,VS2022是不行的添加加载工具项时会卡死,其它的也就没试过了
  2. 使用的是C#进行编写
  3. VisionPro为8.3版本,囊中羞涩嘛,可以看看VisionPro学习笔记—加载图片、转为灰色图、取相机列表VisionPro学习笔记可能对你有一定的帮助

首先创建C#自定义控件

  1. 选择Windows 窗体控件库 进行创建,名称按照自己的来,然后就是框架了不要选择太高我这里选择的是4.5

在这里插入图片描述
2. 引用Cognex.VisionPro和Cognex.VisionPro.Controls,如果没有就先去工具箱添加工具项
在这里插入图片描述
还有一个简单的方法,就是在添加好工具项后找一个控件cogPMAlignEditV2直接添加到自定义控件中就行了会自动引用的把其它的删除掉留下Cognex.VisionPro和Cognex.VisionPro.Controls就行(不删也行不影响使用)
3. 将自定义控件名称修改成myCogToolEdit方便使用
在这里插入图片描述
4. 进入myCogToolEdit代码页修改页面继承接口为CogToolEditControlBaseV2并且添加命名空间using Cognex.VisionPro回到自定义控件界面就变成VisionPro自定义控件的基础界面了在这里插入图片描述在这里插入图片描述
5. 添加一个名为myCogTool1的类文件
在这里插入图片描述
6. 将类的命名空间改为Cognex.VisionPro.ExtraTools在这里插入图片描述
7. 将类设置成公开类并且继承与CogToolBase,再使用C#的实现抽象类的功能自动添加特定函数并删除函数中的throw new NotImplementedException();
在这里插入图片描述
再进行一些处理

using Cognex.VisionPro.Implementation;
using myCogTool;
using System;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.Windows.Forms;

namespace Cognex.VisionPro.ExtraTools
{
    [Serializable]
    [CogDefaultToolInputTerminal(0, "InputImage", "InputImage")]
    [CogDefaultToolOutputTerminal(0, "MaskImage", "MaskImage")]
    [Editor(typeof(myCogToolEdit), typeof(Control))]
    public class myCogTool1:CogToolBase
    {
        /// <summary>
        /// 用默认值初始化一个新对象
        /// </summary>
        public myCogTool1()
        {

        }

        /// <summary>
        /// 拷贝构造函数。用另一个对象的成员值初始化一个对象
        /// </summary>
        /// <param name="src">要复制的工具</param>
        public myCogTool1(myCogTool1 src) : base(src)
        {

        }

        /// <summary>
        /// 克隆功能,使用复制构造函数将类克隆为新对象
        /// </summary>
        /// <returns></returns>
        protected override object Clone()
        {
            Object newObj = new myCogTool1(this);
            return newObj;
        }

        /// <summary>
        /// Required for saving the tool. No code needed in this
        /// function as it is handled by the base class
        ///保存工具时需要。此文件中不需要任何代码函数,因为它是由基类处理的
        /// </summary>
        /// <param name="info"></param>
        /// <param name="context"></param>
        private myCogTool1(SerializationInfo info, StreamingContext context) : base(info, context)
        {

        }

        /// <summary>
        /// 由CreateCurrentRecord方法调用,用于创建包含工具当前状态的记录。
        /// </summary>
        /// <param name="newRecord">新创建的当前记录,派生工具可以向其添加新的子记录</param>
        /// <param name="currentRecordEnable">CurrentRecordEnable属性的值</param>
        protected override void InternalCreateCurrentRecord(ICogRecord newRecord, int currentRecordEnable)
        {

        }

        /// <summary>
        /// 由CreateLastRunRecord方法调用,用于创建包含工具在最后一次调用其Run方法后的状态的记录。
        /// </summary>
        /// <param name="newRecord">新创建的LastRun记录,派生工具可以向其添加新的子记录</param>
        /// <param name="lastRunRecordEnable">lastunrecordenable属性在最后一次调用其Run方法时的值</param>
        /// <param name="lastRunRecordDiagEnable">lastunrecorddiagenable属性在最后一次调用其Run方法时的值</param>
        protected override void InternalCreateLastRunRecord(ICogRecord newRecord, int lastRunRecordEnable, int lastRunRecordDiagEnable)
        {

        }

        /// <summary>
        /// 由Run方法调用,以执行工具的主要处理
        /// </summary>
        /// <param name="message">可以在InternalRun函数中设置,以便在RunStatus对象中保存消息</param>
        /// <returns></returns>
        protected override CogToolResultConstants InternalRun(ref string message)
        {
            message = "消息已经弹出";
            MessageBox.Show("这是由自定义控件myCogTool弹出的窗口");
            return CogToolResultConstants.Accept;
        }
    }
}

  1. 再在自定义控件代码页添加一个Subject属性就大功告成了
public myCogTool1 Subject
        {
            get { return (Cognex.VisionPro.ExtraTools.myCogTool1)base.GetSubject(); }
            set
            {
                if (base.GetSubject() != value)
                {
                    base.SetSubject(value);
                }
            }
        }

这里有点问题就是Cognex.VisionPro.ExtraTools这一段
在这里插入图片描述

  1. 启动生成,然后你会看到一个界面然后你点击Run按钮会发现没有弹出窗口,因为还要进行处理
    在这里插入图片描述

生成VTT文件

  1. 新建一个项目设置成启动项并且引用上面生成的自定义控件(myCogTool.dll)
  public Form1()
        {
            InitializeComponent();
            myCogTool1 mycogTool = new myCogTool1();
            CogSerializer.SaveObjectToFile(mycogTool, Directory.GetCurrentDirectory() + "\\myCogTool.vtt");
        }
  1. 生成后在bin\Debug文件中找到下面两个文件
    将myCogTool.dll文件放到VisionPro的安装目录
    将myCogTool.vtt文件放到VisionPro的安装目录下Templates\Tools\Extra Tools文件夹中,如果没有自己创建一下Extra Tools文件夹
    在这里插入图片描述
  2. 控件图标的话就和文件名称一样就行myCogTool.ico,打开VisionPro的工具箱就能看到了在这里插入图片描述
    4.点击运行就能看到了,两种方式运行都行
    在这里插入图片描述
    在这里插入图片描述
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值