效果
这是二次开发的第二个文章,所以不重复说明环境配置相关的内容。如果不懂的可以看本专栏的上一个文章。
海康视觉算法平台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("流程加载失败");}}}
}