VM4.3 二次开发02 方案加载、执行及显示

news2024/11/24 22:41:09

效果

这是二次开发的第二个文章,所以不重复说明环境配置相关的内容。如果不懂的可以看本专栏的上一个文章。

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果-CSDN博客

界面代码

<Window x:Class="VmTestWpf.App.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="clr-namespace:VMControls.WPF.Release;assembly=VMControls.WPF.Release" 
        xmlns:local="clr-namespace:VmTestWpf.App"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="900">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="45"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="300"/>
        </Grid.ColumnDefinitions>
        <!--显示方案执行结果-->
        <vm:VmRenderControl Grid.Row="0" Grid.Column="0" 
                     x:Name="vrcRender" />
        
        <!--操作按钮-->
        <WrapPanel Grid.Row="1" Grid.Column="0" >
            <Button x:Name="btnLoad" Click="btnLoad_Click" 
                Content="加载方案" Width="100" Height="35" HorizontalAlignment="Left"/>
            <Button Grid.Row="1" Grid.Column="1" Name="btnRun" Click="btnRun_Click" 
                Content="运行" Width="80" Height="35" HorizontalAlignment="Left"
                    Margin="5"/>
        </WrapPanel>
        
        <!--消息显示-->
        <ListBox Grid.Row="1" Grid.Column="1" x:Name="lbRunResult">            
        </ListBox>
    </Grid>
</Window>

按钮代码

注意命名空间的引用

using VM.Core;
using VM.PlatformSDKCS;
using VMControls.Interface;

using IMVSCircleFindModuCs;

using IMVSCircleFindModuCs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using VM.Core;
using VM.PlatformSDKCS;
using VMControls.Interface;

namespace VmTestWpf.App
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
        }

        /// <summary>
        /// 流程对象
        /// </summary>
        VmProcedure _vmProcedure;

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            
        }

        /// <summary>
        /// 加载方案
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            //加载方案
            VmSolution.Load("F:/二期VM视觉学习/标定相机找圆心20240614.sol", string.Empty);

            //使用流程名称获取流程对象
            _vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];
            var msg = "方案加载成功";
            lbRunResult.Items.Insert(0, msg);
        }

        /// <summary>
        /// 获取方案结果
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGetResult_Click(object sender, RoutedEventArgs e)
        {
            // 获取应用程序的执行目录
            //string appDirectory = Assembly.GetExecutingAssembly().Location;
            //appDirectory = appDirectory.Substring(0, appDirectory.LastIndexOf("\\") + 1);
            //string imagePathRelative = "TestProCess/01/12345.sol";

            //加载方案
            VmSolution.Load("F:/二期VM视觉学习/标定相机找圆心20240614.sol", string.Empty);

            //使用流程名称获取流程对象
            VmProcedure vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];

            //运行一次流程才能拿到结果
            vmProcedure.SyncRun();

            IMVSCircleFindModuTool circleFitResult = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
            if (circleFitResult != null)
            {
                MessageBox.Show("获取到的圆心坐标:X:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.X.ToString("0.0000") + ",Y:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.Y.ToString("0.0000"));
            }
            else
            {
                MessageBox.Show("失败");
            }
        }

        /// <summary>
        /// 运行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRun_Click(object sender, RoutedEventArgs e)
        {
            if (_vmProcedure != null)
            {
                //使用流程名称获取流程对象
                _vmProcedure = (VmProcedure)VmSolution.Instance["流程1"];

                //运行一次流程才能拿到结果
                //_vmProcedure.SyncRun();
                _vmProcedure.Run();
                //获取 圆查找1 结果
                IMVSCircleFindModuTool circleFitResult = (IMVSCircleFindModuTool)VmSolution.Instance["流程1.圆查找1"];
                if (circleFitResult != null)
                {
                    vrcRender.ModuleSource = circleFitResult;
                    var msg = "获取到的圆心坐标:X:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.X.ToString("0.0000") + ",Y:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.Y.ToString("0.0000");
                    lbRunResult.Items.Insert(0, msg);
                    //MessageBox.Show("获取到的圆心坐标:X:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.X.ToString("0.0000") + ",Y:" + circleFitResult.ModuResult.OutputCircle.CenterPoint.Y.ToString("0.0000"));
                }
                else
                {
                    MessageBox.Show("失败");
                }
            }
            else
            {
                MessageBox.Show("流程加载失败");
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器必装插件推荐:最新版Simple Allow Copy,解除网页复制限制!

经常在网上找资料的朋友&#xff0c;尤其是学生党&#xff0c;总会遇到一个问题&#xff1a;很多资料网站的文字是禁止复制的。于是大家通常会使用各种文字识别软件来图文转换&#xff0c;或者直接手打。 今天这款小工具&#xff0c;可以轻松复制各种氪金网站上的任何文字&…

爆肝整理AI Agent:在企业应用中的6种基础类型

AI Agent智能体在企业应用中落地的价值、场景、成熟度做了分析&#xff0c;并且探讨了未来企业IT基础设施与架构如何为未来Gen AI&#xff08;生成式AI&#xff09;做好准备。在这样的架构中&#xff0c;我们把最终体现上层应用能力的AI Agent从不同的技术要求与原理上分成了几…

考试系统Spring Security的配置

设置Spring Security配置类 1、设置包括认证、授权方法 protected void configure(HttpSecurity http) throws Exception {http.headers().frameOptions().disable();List<String> securityIgnoreUrls systemConfig.getSecurityIgnoreUrls();String[] ignores new Str…

重生奇迹mu圣导师介绍

出生地&#xff1a;勇者大陆 性 别&#xff1a;男 擅 长&#xff1a;统率&宠物使用 转 职&#xff1a;祭师&#xff08;3转&#xff09; 介 绍&#xff1a;当玩家账号中有一个Lv250以上角色时&#xff0c;便可以创建职业为圣导师的新角色&#xff0c;圣导师每升一级获得…

Trying to access array offset on value of type null

主要原因是版本7.4以后PHP解析器会对null类型的下标访问直接报错 背景&#xff1a; laravel框架 同时使用了扩展A和扩展B 扩展A要求 php>7.4,同时扩展B的对null类型的下标访问不兼容php7.4 修改扩展B不太现实&#xff0c;毕竟扩展B中有太多的对null类型的下标访问。 解决…

6月17日(周一),AH 股行情总结

AI手机及苹果概念股全日走强&#xff0c;领益智造、山东精密等多股涨停&#xff0c;立讯精、歌尔股份涨逾6% 。新车型秦L销售预期提振股价&#xff0c;比亚迪涨超1% &#xff1b;航运、煤炭、地产板块下跌。 文章正文 周一&#xff0c;A股低开高走&#xff0c;上证指数收跌0.…

代码随想录算法训练营第二十六天|39. 组合总和、 40.组合总和II、 131.分割回文串

39. 组合总和 题目链接&#xff1a;39. 组合总和 文档讲解&#xff1a;代码随想录 状态&#xff1a;卡了一会儿 思路&#xff1a;先排序&#xff0c;方便剪枝。允许数字重复使用&#xff0c;因此递归调用时传入当前索引i。 题解&#xff1a; public class Solution {// 用于存…

ETAS AUTOSAR工具链的作用

一、AUTOSAR是什么&#xff1f; AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;是一个全球性的联盟&#xff0c;致力于制定和推广汽车电子系统的标准化解决方案。它是由汽车制造商、供应商和工程公司组成的合作伙伴网络&#xff0c;旨在解决汽车电子系统…

如何理解 Java 类加载器的工作原理及其使用场景

1. 简介 Java类加载器&#xff08;ClassLoader&#xff09;是Java运行时环境的一部分&#xff0c;负责动态加载Java类文件到Java虚拟机&#xff08;JVM&#xff09;中。类加载器是Java反射机制和动态特性的重要基础&#xff0c;为Java的跨平台和动态加载提供了支持。理解类加载…

ANSYS EMC解决方案与经典案例

EMC问题非常复杂&#xff0c;各行各业都会涉及&#xff0c;例如航空、航天、船舶、汽车、火车、高科技、物联网、消费电子。要考虑EMC的对象很多&#xff0c;包含整个系统、设备、PCB、线缆、电源、芯片封装。而且技术领域覆盖广&#xff0c;涉及高频问题、低频问题&#xff1b…

《山西教育》教学版是什么级别的刊物?

《山西教育》教学版是什么级别的刊物&#xff1f; 《山西教育(教学版)》创刊于1956年&#xff0c;是由山西教育报刊社主办的教学刊物。山西省一级期刊&#xff0c;是“宣传教育政策&#xff0c;关注教育热点&#xff0c;传播先进经验&#xff0c;提供教改资讯”的权威性期刊&a…

Http协议JSON格式

1. 计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 思考:计算机网络…

UniVue更新日志:使用Carousel组件实现轮播图效果

github仓库 稳定版本仓库&#xff1a;https://github.com/Avalon712/UniVue 开发版本仓库&#xff1a;https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库&#xff1a;https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目&#xff0c;AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法&#xff0c;但却苦于没有强大的专业背景和雄厚资金支撑&#xff0c;只能在局外徘徊&#xff0c;而这恰恰为数字人源码公司推出的数字人源码部署服务的火…

自然语言处理学习路线(1)——NLP的基本流程

NLP基本流程 【NLP基本流程】 0. 获取语料 1. 语料预处理 2. 特征工程&选择 3. 模型训练 4. 模型输出&上线 【NLP基本流程图】 Reference 1. 自然语言处理(NLP)的一般处理流程&#xff01;-腾讯云开发者社区-腾讯云 2. https://zhuanlan.zhihu.com/p/55…

FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介 FreeBSD、CBSD、Jail和Ubuntu&#xff0c;四者的组合方案可以说是强强联合&#xff0c;极具性价比和竞争力&#xff01;同时安装简单方便&#xff0c;整体方案非常先进。 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案…

YOLOv5目标检测——基于YOLOv5的吊车安全监测

移动式起重机是建筑施工中使用的重要设备。 遵守正确的操作程序对于防止事故很重要。 然而&#xff0c;其中存在人为错误的因素。 这里我将举一个例子来说明计算机视觉&#xff08;CV&#xff09;如何帮助解决这个问题。 1、移动式起重机操作的安全问题 为简单起见&#xff0…

室内外一体化定位系统的创新与应用

随着科技的飞速发展&#xff0c;人们对定位技术的需求日益增强。传统的定位技术主要依赖于室外环境&#xff0c;如GPS等卫星定位技术。然而&#xff0c;在室内环境下&#xff0c;由于信号遮挡和多径效应等问题&#xff0c;这些技术往往难以发挥有效作用。因此&#xff0c;室内外…

记录一次基于Vite搭建Vue3项目的过程

Vue2已经于2023年12月31日停止维护了&#xff0c;2024年算是vue3的崭新的一年&#xff0c;我们的项目也基本从vue2逐渐向着Vue3过渡&#xff0c;Vue3相较于vue2有更好的开发体验&#xff0c;和ts的自然融合使得项目的结构、功能拆分变得更加的清晰&#xff1b;组合式声明有种MV…

【吉林大学Java程序设计】第7章:对象的容纳

第7章&#xff1a;对象的容纳 1.数组 Arrays1.1 数组的创建、初始化和使用&#xff08;1&#xff09;数组的声明&#xff08;2&#xff09;数组初始化静态初始化动态初始化对象数组的初始化 &#xff08;3&#xff09;数组的使用 1.2 多维数组1.3 数组与数组的引用1.4 数组工具…