效果

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


















