svga / SVGAPlayer-Flutter

The SVGAPlayer implementation of Flutter using CustomPainter.
Other
245 stars 102 forks source link

在解析clipPath时候报错了 #60

Closed wanzc closed 3 years ago

wanzc commented 3 years ago

image

数据是这样的 M408.380 2.842e-14 C408.380 2.842e-14 229.818 2.842e-14 229.818 2.842e-14 C215.505 2.842e-14 204.880 9.937 204.880 24 C204.880 24 204.880 256.687 204.880 256.687 C204.880 271 217.505 282 228.642 282 C228.642 282 408.568 282 408.568 282 C421.505 282 432.880 270.062 432.880 258.937 C432.880 258.937 432.880 23 432.880 23 C432.880 11.954 421.880 2.842e-14 408.380 2.842e-14 Z

我也不清楚美术给的图层为什么有个科学计数法 image 因为这个正则的原因,把e给过滤隔开了,导致firstLetter“C”只有两个解析报错

我把正则改成RegExp('([a-df-zA-Z])')解决了问题,但是不确定这样是否真的没问题?

PonyCui commented 3 years ago

目瞪口呆,哈哈,我也奇怪为什么会有科学计算法的数值。可以把具体的 svga 文件上传到这里吗?我可以修正这个问题。

wanzc commented 3 years ago

border_small.svga.zip

目瞪口呆,哈哈,我也奇怪为什么会有科学计算法的数值。可以把具体的 svga 文件上传到这里吗?我可以修正这个问题。

PonyCui commented 3 years ago

已发布新版本 2.1.0

wanzc commented 3 years ago

问题还是会重现,我看到了你更新了新的正则表达式RegExp('([a-zA-Z^e])'),我对比了两种正则表达式RegExp('([a-df-zA-Z])')和RegExp('([a-zA-Z^e])'),确实有区别的

我取了一段数据来测试:M394.802 -2.842e-14 C394.802 2.842e-14 216.239 -2.842e-14 216.239 -2.842e-14 C201.927 -2.842e-14 191.302 9.937 191.302 24 C191.302 24 191.302 256.687 191.302 256.687 C191.302 271 203.927 282 215.063 282 C215.063 282 394.989 282 394.989 282 C407.927 282 419.302 270.062 419.302 258.937 C419.302 258.937 419.302 23 419.302 23 C419.302 11.954 408.302 -2.842e-14 394.802 -2.842e-14 Z

结果发现RegExp('([a-df-zA-Z])')才是我们想要的结果,后者“e”依然被截断

代码如下: image

打印如下: image @PonyCui

axen1314 commented 3 years ago

应该是正则表达式写错了,将正则表达式改为下面的语句: ((?=[^e])[a-zA-z]))就可以了,有问题请指正。 @PonyCui

PonyCui commented 3 years ago

试试 2.1.1

wanzc commented 3 years ago

试试 2.1.1

没问题了!