【发布时间】:2023-03-13 17:30:01
【问题描述】:
Raphael.path2curve() 有问题。该函数修改 SVG 路径字符串,以便将所有路径命令转换为绝对三次曲线 (C)。该函数支持所有路径命令(mlcqahvstMLCQAHVST,见SVG SPEC)。
Raphael.path2curve() 可以在许多情况下处理良好的路径,例如。它甚至可以正确地将弧转换为三次,这不是一个简单的计算。我进行了许多测试并意识到由命令QT、CS 或HT 组成的路径转换得很好。以下也没有问题:MS, HS, VS, LS, TC, TH, TL, TV, QA, TA。
但它无法处理命令QS, TS, AS, TT(按此顺序)。
如果我们例如。有这样的路径,转换失败:
M 0 0 T 205.4 112.9 S 260.8 23.36 82.45 72.86
但这转换正确:
M 0 0 S 211.9 54.20 52.14 144.4 T 98.85 44.45
所以,MTS 不行,但 MST 可以。有问题的是 S 和 T,因为当某些事情失败时,它们总是存在问题。
我创建了a random path generator(慢,但使用jsbin 来提高速度),您可以在其中获取随机路径并将其转换为
使用 Raphael.path2curve() 的三次命令。在小提琴中单击 SVG 或在输入字段上按 enter 以获取新的随机路径。重复,直到你找到一个不正确的。在 HTML 窗口中的jsfiddle 中有一个参数var list = "st";,您可以在其中设置随机路径命令。
这是一个示例图像。蓝色是原始路径,红色是转换路径。它们应该是相同的。
我应该如何处理 Raphael 代码才能使转换正确?
(我做了a bug report,但现在已经尝试解决问题几个小时,但没有运气。
【问题讨论】:
-
只是出于好奇:你为什么要这样做?
-
规范化所有类型的路径,以便它们准备好进行类似的透视计算:jsfiddle.net/timo2012/xjHUk/16.
-
看来我终于修好了。请测试。使用未修改的 Raphael 库的非固定版本:jsbin.com/oqojan/33。固定版本:jsbin.com/oqojan/32。两者都有黑色(原始)和白色(标准化)路径。如果它们不重合,则该库有错误。
标签: javascript raphael