C#联合VisionMaste4.2二次开发

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

作为机器时间通用型算法开发平台,VM可以帮助用户快速搭建时间应用方案用户也可以基于VM SDK进行二次开发,
将已经搭建好的VM方案融入到生产软件中去,本章讲解的是VM4.2版本演示基于VM SDK二次开发值钱所需的环境配置步骤,
方案加载、执行及保存,渲染及数据结果获取和模块参数配置的相关操作演示。

一、环境配置

#将一个编辑好的VM流程导入Visual Studio 中
在这里插入图片描述
我用的是Visual Studio 2019(建议用户使用VS2013及以上的版本进行开发)
在这里插入图片描述
打开VS,第一步新建项目,点击菜单中的文件,选择新建,点击项目,
以C#语言为例,选择Windows窗体应用程序,可以修改项目名称及项目路径,框架选择。NET Framework 4.6.1,
因为VM是基于此框架进行开发的,点击确定创建项目
在这里插入图片描述
右键点击项目名称,打开项目属性界面,选择生成窗口,
在平台目标去掉首选32位勾选,最后点击保存使相关设置生效。
在这里插入图片描述
第二步添加程序引用,打开VM4.2安装路径,进入如下图路径下的文件夹,VM4.2提供了ImporRef工具用于快速添加引用
在这里插入图片描述
浏览打开刚刚创建的项目路径 ,开发者可以自由选择所需添加的模块相关引用,
这里点击全部勾选,导入模式可以选择覆盖或跳过同名DLL,点击确定后等待进度条加载完成后点击退出。
在这里插入图片描述
在VM项目中选择全部重新加载在这里插入图片描述
此时打开引用可以看到通过工具成功导入相关引用
在这里插入图片描述
点击左面的工具箱,
右键选择项,
浏览海康程序VisionMaster4.2.0\Development\V4.x\ComControls\Assembly文件夹内选择【VMControls.Winform.Release.dll】
这样就可以在工具箱中搜索VM,在窗口中可以看到相关控件,
可以根据自己的需求,将这些控件拖入窗口中进行使用。
在这里插入图片描述
将控件拖入主窗口后,会自动在引用中添加控件所依赖的dll,以上是基于VM4.2进行二次开发之前所需的环境配置步骤。
在这里插入图片描述

二、方案加载、执行及保存

以此方案为例,进行二次开发
在这里插入图片描述
我们以及完成了环境配置添加VM必要的引用和控件,接下来将会对VM二次开发中方案的相关操作进行演示,
首先进行界面的搭建,主界面设置为三个区域,内部的控件均从工具箱中拖拽出来,
分别设置流程显示区,方案操作区和消息显示区
在这里插入图片描述

其中方案操作将实现方案的加载,执行及保存,为了在方案加载之后将方案显示在界面上,
我们需要使用VmProcedureConfigControl控件,将其从工具箱拖至主界面,
然后在控件属性中将Dock值设置为Fill,使控件充满流程显示区,
接下来编辑按钮事件,双击选择路径按钮进入该事件代码
在这里插入图片描述

选择路径按钮的功能为打开一个文件夹,并选择后缀为.sol的文件
VM方案的后缀均为.sol,然后将方案的路径赋值给textBox1文本框
在这里插入图片描述
方案加载需要调用方案的相关接口,首先需要添加两个引用
第一个引用VM.Core命名空间
第二个为引用VM.PlatformSDKCS命名空间
这样就能使用二次开发中方案对应的接口
在这里插入图片描述
方案加载需要使用VmSolution.Load函数,函数中的参数为方案的路径,直接使用文本框textBox1的文本内容,
方案加载完成之后,需要执行方案,使用方案接口中的SyncRun函数,
同步执行一次方案,使用此函数执行方案,会同步执行一次方案中的所有流程,
接下来设置保存事件,直接使用方案接口中的Save函数即可进行保存,以下是方案接口中的部分函数

在这里插入图片描述
运行程序查看效果【切记在启动程序之前要关闭VM软件及后台服务】
在这里插入图片描述

三、渲染及数据结果获取

下面介绍在方案执行之后,如何进行结果的获取

流程的结果分为渲染及数据结果,在进行结果获取之前需要在VM中先对流程进行配置,比如获取流程1的结果,需要对流程1进行结果配置,在显示设置中配置渲染结果
在这里插入图片描述
在多选框中配置所需显示的类型,参数名称可以自行设置,关联关系里面绑定对应类型的模块,以此方案为例,矩形框绑定字符识别的检测区域,文本绑定格式化显示文本,数据结果在输出设置下配置,同样是在多选框中配置结果类型
在这里插入图片描述
参数名称可以修改,订阅关系绑定对应类型的模块,将out绑定格式化1的结果,out0绑定字符识别1的字符个数,流程1编号为10000,配置好流程输出后点击确定保存,然后关闭VM软件。在这里插入图片描述
进入二次开发程序进行设置,在二次开发程序中,如需显示渲染结果,需要使用到vmRenderControl,从工具箱中拖出控件到图像显示区
在这里插入图片描述
然后需要在方案执行事件中进行代码编辑,获取的结果分为渲染结果和数据结果,渲染结果显示在界面上,数据结果获取后我们可进行输出或其他处理,下面我们将数据结果显示在消息区代码编写如下(首先定义并初始化一个流程对象,将其与先前VM中配置好输出的流程1进行绑定,然后将渲染控件的显示源ModuleSource绑定流程1对象,这是渲染结果的设置)(之前在VM中配置了一个string类型,参数名称为out的输出,通过此代码即可获取到格式化中订阅的字符识别结果strValue,并将其赋值给ocrResult变量下一行代码为获取到int类型的out0结果,表示字符识别的字符个数,转化为string类型赋值给ocrNum变量,最后再将这些结果显示在消息区listBox1中)

在这里插入图片描述

运行程序(渲染图片显示在图像显示区,消息显示区会显示数据结果)
在这里插入图片描述
以上方案就是获取流程渲染与数据结果的操作

四、模块参数配置的相关操作演示

二次开发中对模块参数进行配置,工具箱中提供了两个参数配置控件:
VmParamsConfigControl是不带渲染的参数配置控件
VmParamsConfigWithRenderControl是带渲染的参数配置控件
在这里插入图片描述
首先介绍带渲染的参数配置控件,将此控件拖出到参数配置区
在这里插入图片描述
进入程序代码界面(第一行代码为实例化一个模块,成功实例化字符识别模块并与流程1中的字符识别1进行绑定,然后将带渲染界面的参数配置控件的ModuleSource属性与ocrTool字符识别工具对象进行绑定)
在这里插入图片描述
启动程序查看效果(区域中显示出了字符识别模块的参数配置界面)
在这里插入图片描述
在运行参数中更改算法参数,点击执行,可以在渲染界面实时查看效果

在这里插入图片描述
以上为模块参数配置的相关操作。

总结

整体代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VM.Core;
using VM.PlatformSDKCS;

namespace WindowsFormsApp0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        //打开本地路径并识别.sol后缀文件
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "VM Sol File|*.sol*";
        DialogResult openFileRes = openFileDialog.ShowDialog();
        if (DialogResult.OK == openFileRes)
        {
            textBox1.Text = openFileDialog.FileName;
            //在Textbox中显示路径信息
        }
        listBox1.Items.Add("选择路径成功");
        listBox1.TopIndex = listBox1.Items.Count - 1;
    }

    private void button2_Click(object sender, EventArgs e)        {

        //将原固定路径加载方案替换为用户自定义路径的方式
        VmSolution.Load(textBox1.Text);
        listBox1.Items.Add("方案加载成功");
        listBox1.TopIndex = listBox1.Items.Count - 1;
    }

    private void button3_Click(object sender, EventArgs e)
    {
        //模块参数配置
        IMVSOcrModuCs.IMVSOcrModuTool ocrTool = (IMVSOcrModuCs.IMVSOcrModuTool)VmSolution.Instance["流程1.字符识别1"];
        vmParamsConfigWithRenderControl1.ModuleSource = ocrTool;




        VmSolution.Instance.SyncRun();
        listBox1.Items.Add("方案执行一次成功");
        listBox1.TopIndex = listBox1.Items.Count - 1;



        VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
        vmRenderControl1.ModuleSource = vmProcess1;
        string ocrResult = vmProcess1.ModuResult.GetOutputString("out").astStringVal[0].strValue;
        string ocrNum = vmProcess1.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
        listBox1.Items.Add("字符识别结果" + ocrResult);
        listBox1.TopIndex = listBox1.Items.Count - 1;
        listBox1.Items.Add("个数" + ocrNum);
        listBox1.TopIndex = listBox1.Items.Count - 1;

    }

    private void button4_Click(object sender, EventArgs e)
    {
        VmSolution.Save();//Save函数是将方案保存到原始路径直接替换原方案
        //VmSolution.SaveAs();SaveAs是将方案另存至自定义的路径
        listBox1.Items.Add("方案保存成功");
        listBox1.TopIndex = listBox1.Items.Count - 1;
    }
}

}

  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 基于C#的ArcEngine二次开发是一种利用ArcGIS Engine开发工具和C#编程语言来实现GIS应用程序的方法。ArcEngine是一种基于组件的GIS开发平台,它提供了一系列的API和工具,可以帮助开发人员快速构建高效、灵活、可定制的GIS应用程序。C#是一种面向对象的编程语言,它具有简单易学、语法清晰、可读性强等特点,非常适合用于GIS应用程序的开发。基于C#的ArcEngine二次开发可以实现各种功能,如地图显示、数据查询、空间分析、地图制图等,可以广泛应用于各种领域,如城市规划、土地利用、环境保护、资源管理等。 ### 回答2: ++的编程语言,它有什么优点? C++ 是一种功能强大的编程语言,它几乎拥有 C 语言所有的优点,还可以在面向对象编程方面提供更高效和灵活的方式。下面是 C++ 的几个主要优点: 1. 高效性:C++ 是一种高效的编程语言。与其他编程语言相比,C++ 的执行速度更快,它使用了更少的内存和 CPU 周期,因此可以为需要高性能的应用程序提供更好的支持。 2. 跨平台性:C++ 的编译器可以运行在许多平台上,包括 Windows、MacOS、Linux、Android 和 iOS 等。这使得 C++ 成为一种支持跨平台开发的编程语言,具有极高的灵活性和可扩展性。 3. 面向对象编程:C++ 的面向对象编程能力非常强大。它支持多态、继承和封装等特性,使得面向对象编程更加容易和灵活。 4. 库管理:C++ 提供了许多强大的库,使得开发人员可以轻松地访问各种常用功能,例如文件 I/O、字符串处理、图形界面等。这些库可以大大提高开发人员的效率,减少重复劳动。 5. 可扩展性:C++ 还具有很高的可扩展性。开发人员可以使用 C++ 来编写模块、插件和扩展程序,以满足特定的需求。此外,C++ 还提供了丰富的 API,使得开发人员可以在其程序中使用其他编程语言和技术。 总的来说,C++ 是一种功能强大、高效、跨平台、面向对象、可扩展的编程语言。它在许多行业和领域中都有广泛的应用,例如游戏开发、嵌入式系统、图形界面等。对于需要高性能和高可靠性的应用程序开发来说,C++ 是一种不错的选择。 ### 回答3: 语言的网络编程的特点是什么? C语言作为一种高效、简洁、可移植的编程语言,在网络编程中也有一定的应用。C语言基于网络编程的特点主要有以下几个方面: 1.底层控制:C语言网络编程的一个重要特点是可以对网络协议的底层进行直接控制,比如可以进行原始套接字编程。这种方式可以对网络数据包进行非常细致的处理和控制,使网络程序能够更好地适应各种各样的网络环境。 2.高效性:C语言是一种高效的编程语言,它可以为网络应用程序提供高效的性能。C语言可以通过优化算法和数据结构,降低网络应用程序的延迟和响应时间,提高网络应用程序的吞吐量,保证网络的快速响应。 3.可移植性:C语言是一种可移植的编程语言,可以在多种平台上进行开发和编译。因此,使用C语言开发网络应用程序能够保证程序在不同的操作系统和硬件平台上都能够正常运行。 4.丰富的库函数:C语言提供了丰富的库函数,可以在网络编程中提供各种功能的支持。比如可以通过各种库函数实现TCP/UDP套接字编程、服务器端编程、客户端编程、线程编程等各种网络编程功能。 总之,C语言在网络编程中具有非常重要的地位。C语言网络编程的特点主要包括底层控制、高效性、可移植性和丰富的库函数。这些特点使得C语言成为网络编程开发者的首选语言之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值