图形编辑器基于Paper.js教程29:基于图层的所有矢量图元的填充规则实现
背景
在lightburn中,对于填充图层,有这样一个隐藏的逻辑,那就是,在加工时,填充规则是以填充图层的所有元素进行计算的,什么意思那?
如果你在填充图层中画了两个图形,一个圆,一个矩形,如果这两个图形不相交,也不存在任何包含关系,那么你在加工后,你会得到一个填充的矩形和一个填充的圆。
如下图:
假如现在移动圆形,使其与矩形相交或者包含,那么你最后的结果就不是一个矩形一个圆了。
而是下面的效果
重叠部分部分会被镂空。这个规则 是以图层的所有元素进行 奇偶规则 (evenodd)的运算。而且是默认的,对于其他的软件,要实现这种效果,需要将元素进行组合后才能实现。在用户的不断要求下,前一段时间,我也终于给TS加上了这个功能。
下面简单说一下技术方案,在分析填充的雕刻图层时,需要将该图层的所有元素组装起来,这里的组装我使用的复合路径,也就是SVG中的Path标签,也就是将图层中所有图元转换为一个Path路径。并对这个路径进行奇偶填充线。最后就能使用很简单的操作得到非常复杂的镂空作品。
需要注意的是,由于将所有图元组合起来,会改变个体的属性,所以我们需要单独创建一个对象,并在完成填充线,生成gcode后,将临时元素删除。如果计算的元素非常多的话,有时会比较卡。
之前的一个比较复杂的作品
拥有883个子路径,生成的gcode 6.14 M
随着应用功能的不断增多,框架,代码组织,模式设计,现在变得尤为重要。功能能做出来还不行,还要保证良好的性能表现。当所有的按钮, 功能都向用户开放时,状态的维护,边界,交互的中间状态会变得非常难以维护。项目越往后走,越是越是泥泞。
当你感到 力不从心时,可以去看看一些优秀的开源项目,一些框架,库的源码,他山之石,可以攻玉。
最近令人高兴的是,我的教资面试通过了,嘻嘻…真是做梦都能让人笑醒,考试前真的没有演练,全靠临场发挥,而且面试时做的很差劲。我都打算下半年继续考了,结果面试竟然通过了,想起来我就感觉自己真是太幸运了,我真是要谢谢面试老师,放我一马。面试后还要做个普通话测试,考个二甲,然后体检,就能等着拿教师资格证啦。
最近在盘算着下半年的目标,是要健身还是练字,下一个目标是拿什么证书?