当前位置: 首页 > news >正文

聊城哪里有做网站的坪山附近公司做网站建设哪家技术好

聊城哪里有做网站的,坪山附近公司做网站建设哪家技术好,下载百度app到桌面,凡科网网页版登录入口文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果: 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原…

文章目录

  • 前言
  • 相关链接
  • 项目专栏
  • 运行环境
  • 匹配图片
  • 封装组件
    • 新增类库项目
    • 选择依赖顺序并添加Nuget
    • 修改原本矩形方法
    • 运行结果:
  • 对矩形进行抽象封装
    • 抽象基类
    • 矩形抽象改造
  • 圆形抽象封装
    • 代码
    • 运行结果

前言

为了更好地去学习WPF+Halcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享,想要源码或者教学视频可以和他联系一下。

相关链接

微软系列技术教程 WPF 年度公益课程

Halcon开发 CSDN博客专栏

个人学习的Gitee 项目地址仓库

项目专栏

WPF+Halcon实战项目

运行环境

  • .net core 8.0
  • visual studio 2022
  • halcon HDevelop 20.11
  • windows 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>/// 矩形封装/// </summary>public 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组件主题/// </summary>public HSmartWindowControlWPF WindowControlWPF { get; set; }public Action<HRectangleObj> RefleshCallBack { get; set; }/// <summary>/// 初始化构造函数/// </summary>/// <param name="windowControlWPF"></param>/// <param name="row1"></param>/// <param name="column1"></param>/// <param name="row2"></param>/// <param name="column2"></param>public 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 name="windowControl"></param>public 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>/// 显示图像/// </summary>public void Show(){WindowControlWPF.HalconWindow.AttachDrawingObjectToWindow(DrawingObject);}/// <summary>/// 分离图像/// </summary>public void Close(){WindowControlWPF.HalconWindow.DetachDrawingObjectFromWindow(DrawingObject);}/// <summary>/// 序列化输出/// </summary>/// <returns></returns>public 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></returns>private 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组件主题/// </summary>public HSmartWindowControlWPF WindowControlWPF { get; set; }public HDrawingObject DrawingObject { get; set; }public HTuple HType { get; private set; }public HObjBase(HSmartWindowControlWPF windowControlWPF){WindowControlWPF = windowControlWPF;}/// <summary>/// 显示图像/// </summary>public void Show(){WindowControlWPF.HalconWindow.AttachDrawingObjectToWindow(DrawingObject);}/// <summary>/// 分离图像/// </summary>public void Close(){WindowControlWPF.HalconWindow.DetachDrawingObjectFromWindow(DrawingObject);}/// <summary>/// 保留两位小数/// </summary>/// <returns></returns>public string TwoDecimalPlaces(HTuple value){return decimal.Round(decimal.Parse(value.ToString()), 2).ToString();}/// <summary>/// 序列化/// </summary>/// <returns></returns>public abstract override string ToString();/// <summary>/// 刷新事件/// </summary>public 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>/// 矩形封装/// </summary>public 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>/// 刷新回调/// </summary>public Action<HRectangleObj> RefleshCallBack { get; set; }/// <summary>/// 初始化构造函数/// </summary>/// <param name="windowControlWPF"></param>/// <param name="row1"></param>/// <param name="column1"></param>/// <param name="row2"></param>/// <param name="column2"></param>public 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 name="windowControl"></param>public 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></returns>public 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>/// 刷新回调/// </summary>public Action<HCircleObj> 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),});}}
}

运行结果

HCircleObj(windowControlWPF, 64, 64, 64);

http://www.yayakq.cn/news/451681/

相关文章:

  • 东莞创意网站设计效果图网页设计总结心得
  • 盐城中瑞做网站公司哪个网站可以做教师招聘题目
  • 该网站在工信部的icp ip地址公众号平台官网网页版
  • 富阳网站定制开发哪家公司好php 装修网站
  • 品牌公司网站设计北京做网站优化
  • 建高级网站h5免费制作平台火蚁邀请函
  • 邢台做移动网站找谁茶叶淘宝店网站建设ppt
  • 帮传销做网站三灶网站建设
  • 北京网站搭建公司电话wordpress wptitle
  • 如何更改网站关键词泰安千橙网络公司
  • 巨野县城乡和住房建设局网站做类似电驴网站
  • 自己做店铺网站wordpress最新文章显示数量
  • 张家界网站做门户网站需要注册公司吗
  • 管理网站模板下载怎样做网站静态
  • 网站开发前端与后端百度在线使用网页版
  • 企业网站有哪些优点网站制作 常州
  • 做网站比较专业的公司网站模板中文乱码
  • 网站在互联网营销中的作用网站上哪个做相片书好
  • wordpress强制使用天津优化网站
  • 网站建设三原则怎样建设旅游网站
  • 网站服务器是网站的空间吗公司网站二维码怎么做
  • 网站在线seo廊坊门户网站
  • 网页网站建设软件泰安中推网络科技公司
  • 双语网站怎么做怎样做分类网站
  • 网站建设 中企动力西安互联网公司排名保定
  • 漳州网站建设哪家好wordpress主题重命名
  • 杭州企业网站定制佛山网站建设公司招聘
  • 网站建设是什么费用wordpress查看访问量
  • 备案价网站上海 网站建设 外包it
  • 代刷网站系统怎么做网站全屏视频怎么做