首页 > 其他分享 >WPF 基于Geometry的橡皮擦功能

WPF 基于Geometry的橡皮擦功能

时间:2022-12-22 23:58:49浏览次数:63  
标签:橡皮擦 Geometry Pen 擦除 GetWidenedPathGeometry 图形 WPF

这是我大约半年前就想写的随笔。

功能很简单。

就是基于Geometry的画布,记录鼠标轨迹生成PathGeometry。再就是添加删除Path的功能也就是path笔迹删除。

目前是实现了两种方式。

1 基于预览擦除

2 实时擦除

 

 

 

两者在具体技术上没有任何的区别都是依靠Geometry.Combine的A-B图形运算       

也就是A图形中减去B图形并返回一个新的Geometry类型的图形。

同时也都会用上一个GetWidenedPathGeometry的Geometry方法。

这个方法会根据原有的path轨迹并使用一个Pen的笔宽去描绘一个同轨迹的形状。

不过需要注意的是,获取GetWidenedPathGeometry之后绘制这个geometry时不能再使用pen了,如果有必要时则必须要保证新的pen的笔宽小于生成时的笔宽。不然会产生绘制出来的图形全使毛刺的问题

 

 

 

当然这个也是绘制的角有关。

如果使用了一下代码的Pen则会产生另外一种现象。

 private Pen _normalPen = new Pen(new SolidColorBrush(Colors.Black), 10)
        {
            StartLineCap = PenLineCap.Round,
            EndLineCap = PenLineCap.Round,
            LineJoin = PenLineJoin.Round,
            MiterLimit = 1
        };

 

 

还会有另外一种现象,是毛刺朝内,一直时间想不起来怎么弄了...(待我想起来补图...)

基本原因都是GetWidenedPathGeometry没有处理好的原因。

没怎么放代码,因为如果能需要这个功能,你肯定是缺少思路。很多事情就是差灵光一闪了。

demo中包含画布,画笔,橡皮擦1,橡皮擦2 总共不到400行。

总的来说没啥称之为技术的东西,很多是经验,我下面提供了源代码,可以自己看看。

 

说明:实时擦除部分是直接参考使用wpf技术实现画图工具 - 孤独成派 - 博客园 (cnblogs.com)这位大佬的。

 

源代码下载

 

标签:橡皮擦,Geometry,Pen,擦除,GetWidenedPathGeometry,图形,WPF
From: https://www.cnblogs.com/T-ARF/p/16999819.html

相关文章

  • ArcObjects SDK开发 018 Geometry
    1、Geometry体系结构如果要看完整的Geometry体系结构,那么可以去查看帮助中的类结构图,非常完整和严谨。可以通过下图方式打开。点击打开后,会发现里面的结构非常复杂。但......
  • WPF ContextMenu数据绑定问题
    一、ContextMenu数据绑定问题例如,我们将数组绑定到ListBox控件上,在其数据模板上添加ContextMenu实现每项选中删除功能。首先,声明如下所示的ViemModel:publicclassMain......
  • WPF工控组态软件之温度计
    WPF以其丰富灵活的控件样式设计,相较于WinForm而言,一直是工控组态软件的宠儿。经过前两文章的学习,已经对WPF开发工控组态软件有了一个基本的了解,今天继续学习温度计的开发,......
  • 界面控件DevExpress WPF中文指南 - 主题设计器工作区介绍
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • WPF开发经验-实现一种通用阀门控件
    一引入在设计设备界面时,经常会有一种需求,展示一个阀门,阀门有通断两种状态: 二CommonValveControl考虑实现一个自定义控件,CommonValveControl。使用自定义控件比用户......
  • WPF对象资源和资源词典
    资源的搜索顺序:自身资源---》父级资源---》...》窗口资源---》应用程序资源----》框架系统资源 资源的重用原则:被广泛的重用,可以使用应用程序资源;两三个窗口使用资源,建......
  • 使用WPF或AspNetCore创建简易版ChatGPT客户端,让ChatGPT成为你的私人助理
    前言:前一天写的一个ChatGPT服务端,貌似大家用起来还不是那么方便,所以我顺便用WPF和AspNetCore的webapi程序做个客户端吧,通过客户端来快速访问chatgpt模型生成对话。 1、......
  • WPF自定义搜索框控件样式
    效果图默认焦点触发新建一个用户控件,xaml代码如下:`<Grid.ColumnDefinitions><ColumnDefinitionWidth="15"></ColumnDefinition><ColumnDefi......
  • Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Sem
    很多深度学习都是多任务学习(Multi-TaskLearning,MTL),需要对多个Loss同时优化,模型的性能受各Loss的权重的影响,手工选择权重成本太高,是不可能的,于是提出了基于Uncert......
  • wpf GridView去除右侧空白列
    页面<ListViewSizeChanged="ListView_SizeChanged"Loaded="ListView_Loaded"><ListView.View><GridView><GridViewColumnHeader="col1"Width=......