在图片上绘画,以后可以撤销;SVG绘图;SVG缩放;

项目要求:类似在图片上绘制线条,但是线条还能被删除的效果,用Web实现。

分析:肯定不是直接绘制在图片上的,因为一旦绘制在图片关闭再打开就擦不掉了。

实现方式:页面放一个image,在image上方再重叠一个svg; 使用svg来绘图。

SVG和Canvas的区别:SVG是矢量图,Canvas是基于像素的。
因为:客户在A电脑上绘制了图像,希望在B电脑上不失真,所以使用SVG来绘制。

SVG支持几种常见图形:直线,矩形,圆形,非闭合曲线(polyline),闭合曲线(polylon)

在程序里使用polyline绘制像画笔一样流畅的任意线条。

SVG的子元素可以是g, 该元素表示分组,对于现实没有任何影响。下面使用g标签做选中后的矩形框。

绘制的线条使用polyline,有个id属性; 当点击polyline时为该线条添加选中的矩形框和8个小矩形,小矩形和8个框都放在g标签中; g标签的id_ref指向 polyline的id属性。

选中状态:data-selected如果为true,表示被选中。如果被选中,就可以按del键删除。
当点击polyline的任何位置时,它的data-selected=true;同时它的g分组的data-selected属性也为true; 所以,删除时,连同分组一起删除。

没有找到好的办法,选中时的矩形框和8个小矩形是我绘制的;也许,有内置简单方法。
在这里插入图片描述

解决:当保存svg文件时的svg窗口大小和实际运行程序时的大小不一样,导致图像位置错误的问题。

即:重新调用窗体改变事件。

下面是重点

1.当线条被添加到界面时,添加data-drawing-line-width,表示:当添加该线条时svg面板的宽度
2.当调整窗体时,svg面板的宽度又是多少
3.在调整前后宽度变成了之前的百分之N; 那么里面的每个点的坐标的X轴都要变成之前的百分之N;
4.高度的关系和宽度一样。

在这里插入图片描述

在绘制pilyline时有个point属性,表示涉及到的所有的点。 所以在每次绘制时,我在data-points中也保存了一份; 适用于窗体缩放时解决SVG缩放的问题。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值