Combining Multiple SVG Transformations
我是Snap.svg和SVG的新手,正在尝试进行转换(可以在此处找到幻影般的碎片)。基本上,我试图根据形状的配置移动,缩放和旋转形状。到目前为止,这是我发现的内容:
- 使用rotate(angle,x,y)可以绕一个点旋转
- 没有直接的缩放方法可以围绕一个点进行缩放,但是可以按照" SVG Essentials"中的说明进行操作
但是,将这些变换组合在一起并不能带来预期的结果-预期的形状计算中心与渲染的形状中心不同。谁能给我一些关于如何正确地将这些转换放在一起的指示?
关于,
安迪
要组合转换,我将使用Snaps自己的transformString格式。我将首先在这里阅读我以前关于SO的答案,这略有不同,因此发布一个稍有不同的示例和答案。
虽然Snap可以使用SVG转换字符串(rotate()scale()transform())。例如,默认情况下它们不会以自身为中心,而Snap(和Raphaels)会以它为中心。这使它变得容易一些。对于更复杂的情况,可能需要研究Matrix方法,但是我认为以下应该可以...
捕捉transformString使用字符串t(transform),s(scale),r(rotate),并且您可以根据需要重复添加它们。
下面是这两种方法的一个示例,以突出说明它们之间的区别。
jsfiddle这里
1 2 3 4 5 6 7 8 9 10 11 | s = Snap(400, 620); var r1 = s.rect(0, 0, 100, 100).attr({ fill : 'blue', stroke : 'black', opacity: 0.5 }); var r2 = r1.clone().attr({ fill:"red" }); r1.transform('t100,100s2,2r45'); //typical Snap way, rotation/scale around centre r2.transform('translate(100,100) scale(2,2,) rotate(45)'); //SVG way |
据我所知,getBBox()方法应该非常可靠(如果找到错误的示例,也许在SO上发布一个单独的问题)。