网站建站销售怎么做,有域名了网站怎么做,网站开发项目进度安排,中煤第三建设集团投标网站文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果#xff1a; 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言
为了更好地去学习WPFHalcon#xff0c;我决定去报个班学一下。原… 文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言
为了更好地去学习WPFHalcon我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享想要源码或者教学视频可以和他联系一下。
相关链接 微软系列技术教程 WPF 年度公益课程 Halcon开发 CSDN博客专栏 个人学习的Gitee 项目地址仓库 项目专栏 WPFHalcon实战项目 运行环境
.net core 8.0visual studio 2022halcon HDevelop 20.11windows 11
匹配图片 封装组件
Halcon官方的代码很多都是基于String的类型判断我们要对Halcon的代码进行一步简单的封装。
新增类库项目 选择依赖顺序并添加Nuget
让我们的WPF主程序依赖于HalconExtension类库 添加Nuget 修改原本矩形方法
原来的方法 // 显示绘制图案HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect);// 去除绘制图案//HalconWindow.HalconWindow.DetachDrawingObjectFromWindow(rect);rect.OnDrag(new HDrawingObject.HDrawingObjectCallbackClass((id, window, type) {var hv_type id.GetDrawingObjectParams(type);var row1 id.GetDrawingObjectParams(row1);var row2 id.GetDrawingObjectParams(row2);var column1 id.GetDrawingObjectParams(column1);var column2 id.GetDrawingObjectParams(column2);//打印坐标NLogHelper.Debug($拖动事件: {hv_type}:{row1} {column1} {row2} {column2} );}));现在的方法
using HalconDotNet;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{/// summary/// 矩形封装/// /summarypublic class HRectangleObj{public HTuple HType { get; private set; }public HTuple Row1 { get; private set; }public HTuple Row2 { get; private set; }public HTuple Column1 { get; private set; }public HTuple Column2 { get; private set; }public HDrawingObject DrawingObject { get; set; }/// summary/// HS组件主题/// /summarypublic HSmartWindowControlWPF WindowControlWPF { get; set; }public ActionHRectangleObj RefleshCallBack { get; set; }/// summary/// 初始化构造函数/// /summary/// param namewindowControlWPF/param/// param namerow1/param/// param namecolumn1/param/// param namerow2/param/// param namecolumn2/parampublic HRectangleObj(HSmartWindowControlWPF windowControlWPF,HTuple row1,HTuple column1,HTuple row2,HTuple column2){WindowControlWPF windowControlWPF;Row1 row1;Column1 column1;Row2 row2;Column2 column2;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1,Row1,Column1,Row2,Column2);}/// summary/// 默认构造函数/// /summary/// param namewindowControl/parampublic HRectangleObj(HSmartWindowControlWPF windowControl){WindowControlWPF windowControl;Row1 0;Column1 0;Row2 100;Column2 100;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, Row1, Column1, Row2, Column2);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}/// summary/// 显示图像/// /summarypublic void Show(){WindowControlWPF.HalconWindow.AttachDrawingObjectToWindow(DrawingObject);}/// summary/// 分离图像/// /summarypublic void Close(){WindowControlWPF.HalconWindow.DetachDrawingObjectFromWindow(DrawingObject);}/// summary/// 序列化输出/// /summary/// returns/returnspublic override string ToString(){return JsonConvert.SerializeObject(new{type HType.ToString(),row1 TwoDecimalPlaces(Row1),column1 TwoDecimalPlaces(Column1),row2 TwoDecimalPlaces(Row2),column2 TwoDecimalPlaces(Column2)});}public void Reflash(HDrawingObject drawid, HWindow window, string type){HType drawid.GetDrawingObjectParams(type);Row1 drawid.GetDrawingObjectParams(row1);Row2 drawid.GetDrawingObjectParams(row2);Column1 drawid.GetDrawingObjectParams(column1);Column2 drawid.GetDrawingObjectParams(column2);//将本身回调RefleshCallBack(this);}/// summary/// 保留两位小数/// /summary/// returns/returnsprivate string TwoDecimalPlaces(HTuple value){return decimal.Round(decimal.Parse(value.ToString()), 2).ToString();}}
}
运行代码 InitRectangleBtn new RelayCommand(() {MsgHelper.Info(生成矩形);//rect HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 100, 200, 300, 400); 显示绘制图案//HalconWindow.HalconWindow.AttachDrawingObjectToWindow(rect); 去除绘制图案HalconWindow.HalconWindow.DetachDrawingObjectFromWindow(rect);//rect.OnDrag(new HDrawingObject.HDrawingObjectCallbackClass((id, window, type) //{// var hv_type id.GetDrawingObjectParams(type);// var row1 id.GetDrawingObjectParams(row1);// var row2 id.GetDrawingObjectParams(row2);// var column1 id.GetDrawingObjectParams(column1);// var column2 id.GetDrawingObjectParams(column2);// //打印坐标// NLogHelper.Debug($拖动事件: {hv_type}:{row1} {column1} {row2} {column2} );//}));//初始化对象RectangleObj new HRectangleObj(HalconWindow);//刷新回调里面进行打印RectangleObj.RefleshCallBack (obj) {NLogHelper.Debug(obj.ToString());};//显示对象RectangleObj.Show();});运行结果 对矩形进行抽象封装
抽象就是abstract简单来说就是认为所有的基类都有相同的函数比如ToString,Show,Close等。抽象更利于我们的代码的规划。
其实很多语法是程序自己给自己加限制就是强迫自己按照某个逻辑进行代码开发。典型的例子就是JS转TS。这里不展开说明
抽象基类
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{public abstract class HObjBase{/// summary/// HS组件主题/// /summarypublic HSmartWindowControlWPF WindowControlWPF { get; set; }public HDrawingObject DrawingObject { get; set; }public HTuple HType { get; private set; }public HObjBase(HSmartWindowControlWPF windowControlWPF){WindowControlWPF windowControlWPF;}/// summary/// 显示图像/// /summarypublic void Show(){WindowControlWPF.HalconWindow.AttachDrawingObjectToWindow(DrawingObject);}/// summary/// 分离图像/// /summarypublic void Close(){WindowControlWPF.HalconWindow.DetachDrawingObjectFromWindow(DrawingObject);}/// summary/// 保留两位小数/// /summary/// returns/returnspublic string TwoDecimalPlaces(HTuple value){return decimal.Round(decimal.Parse(value.ToString()), 2).ToString();}/// summary/// 序列化/// /summary/// returns/returnspublic abstract override string ToString();/// summary/// 刷新事件/// /summarypublic abstract void Reflash(HDrawingObject drawid, HWindow window, string type);}
}
矩形抽象改造
using HalconDotNet;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{/// summary/// 矩形封装/// /summarypublic class HRectangleObj : HObjBase{public HTuple HType { get; private set; }public HTuple Row1 { get; private set; }public HTuple Row2 { get; private set; }public HTuple Column1 { get; private set; }public HTuple Column2 { get; private set; }/// summary/// 刷新回调/// /summarypublic ActionHRectangleObj RefleshCallBack { get; set; }/// summary/// 初始化构造函数/// /summary/// param namewindowControlWPF/param/// param namerow1/param/// param namecolumn1/param/// param namerow2/param/// param namecolumn2/parampublic HRectangleObj(HSmartWindowControlWPF windowControlWPF, HTuple row1, HTuple column1, HTuple row2, HTuple column2) : base(windowControlWPF){//WindowControlWPF windowControlWPF;Row1 row1;Column1 column1;Row2 row2;Column2 column2;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, Row1, Column1, Row2, Column2);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}/// summary/// 默认构造函数/// /summary/// param namewindowControl/parampublic HRectangleObj(HSmartWindowControlWPF windowControl) : base(windowControl){Row1 0;Column1 0;Row2 100;Column2 100;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, Row1, Column1, Row2, Column2);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}/// summary/// 序列化输出/// /summary/// returns/returnspublic override string ToString(){return JsonConvert.SerializeObject(new{type HType.ToString(),row1 TwoDecimalPlaces(Row1),column1 TwoDecimalPlaces(Column1),row2 TwoDecimalPlaces(Row2),column2 TwoDecimalPlaces(Column2)});}public override void Reflash(HDrawingObject drawid, HWindow window, string type){HType drawid.GetDrawingObjectParams(type);Row1 drawid.GetDrawingObjectParams(row1);Row2 drawid.GetDrawingObjectParams(row2);Column1 drawid.GetDrawingObjectParams(column1);Column2 drawid.GetDrawingObjectParams(column2);//将本身回调RefleshCallBack(this);}}
}
圆形抽象封装
如果集成抽象的对象只有一个那么抽象就没有意义了。抽象一定是多个类继承才有使用的实际意义。
代码
using HalconDotNet;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HalconExtension.Models
{public class HCircleObj : HObjBase{public HTuple Row { get; set; }public HTuple Column { get; set; }public HTuple Radius { get; set; }public HTuple HType { get; private set; }/// summary/// 刷新回调/// /summarypublic ActionHCircleObj RefleshCallBack { get; set; }public HCircleObj(HSmartWindowControlWPF windowControlWPF, HTuple row, HTuple col, HTuple radius):base(windowControlWPF){Row row;Column col;Radius radius;DrawingObject HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, Row, Column, Radius);//添加更新事件DrawingObject.OnDrag(Reflash);DrawingObject.OnResize(Reflash);}public HCircleObj(HSmartWindowControlWPF windowControlWPF) : this(windowControlWPF,64,64,64){}public override void Reflash(HDrawingObject drawid, HWindow window, string type){HType drawid.GetDrawingObjectParams(type);Row drawid.GetDrawingObjectParams(row);Column drawid.GetDrawingObjectParams(column);Radius drawid.GetDrawingObjectParams(radius);//将本身回调RefleshCallBack(this);}public override string ToString(){return JsonConvert.SerializeObject(new{type HType.ToString(),row TwoDecimalPlaces(Row),column TwoDecimalPlaces(Column),radius TwoDecimalPlaces(Radius),});}}
}
运行结果