我正在使用RaphaelJS来处理需要矢量绘图以显示某些数据的项目。
我无法弄清楚如何推送和弹出转换状态。 (相当于html5画布中的context.save()和context.restore())
有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:1)
你能解释为什么需要推送和弹出转换状态吗?
在svg中你真的不需要这样做,浏览器会为你做这件事。如果您希望将特定变换应用于元素,则只需向其添加transform attribute即可。您可以使用<g>
元素将变换应用于多个元素(在Raphaël中有Paper.set,可以像<g>
元素一样使用,并且您拥有Element.transform方法设置转换。)
<强>更新强>
context.save()
- 在svg术语中,这将是在给定时间获取元素的当前变换矩阵(CTM)并将其存储在某处,在Raphaël中我想这可能是Element.transform()(I不是100%确定它是否包含整个转换堆栈,无论如何,在纯svg中,CTM可以通过所有元素都可用的getCTM()方法获取。这样做的一种方法是使用您想要的转换插入<g>
元素。
context.restore()
- 在svg中这相当于从转换列表中删除转换,但请注意,在svg兄弟中不会“继承”转换(这与html5 canvas或当前的OpenGL不同) set matrix只适用于设置变换后绘制的任何内容。如果您希望将变换应用于许多元素,那么您创建一个<g>
,其具有应该应用于该元素的所有子元素的转换,并且还原您只需将元素插入{{1}的父元素而是。 Raphaël没有对<g>
元素的任何内置支持(除非你计算Element.set,这是一个类似的概念),猜测为什么Raphaël这样做是为了防止人们试图做这样的事情,因为它很容易膨胀DOM而没有意识到它(记住,SVG是retained mode图形格式,不像canvas和OpenGL)。