获取Raphael元素的完整当前变换状态(作为对象或字符串)

时间:2013-10-14 16:31:07

标签: raphael

简单的问题,我找不到简单的答案。

如何查找Raphael元素完整当前人类可读(非矩阵)转换状态,无论该元素的转换状态是否或如何设置


例如,使用element.transform()并未提供完整转换状态:

1:如果矩阵设置了某些东西,它就不会给你非矩阵状态。例如。这里元素的缩放等价于s2,2,但在解析结果时没有s数据:

circ = paper.circle(50,50,50);
circ.transform('m2 0 0 2 0 0');
console.log(circ.transform(''));

2:如果没有设置某些内容,则它是未定义的,而不是给我们默认的数值。例如。这里没有s数据,而我希望能告诉我们缩放状态相当于应用s1,1

circ = paper.circle(50,50,50);
circ.transform('t100,100');
console.log(circ.transform(''));

1 个答案:

答案 0 :(得分:3)

这是我能找到的最接近的 - 在这里录制,因为它并不明显。测试路径,圆圈,椭圆,矩形。不适用于集合(因为集合不会直接转换,它们只是将变换应用于其内容的美化数组)。


将Raphael元素的完整当前变换状态作为对象:

element.matrix.split();

该对象的内容是(显示非转换元素的默认值):

dx: 0
dy: 0
isSimple: true
isSuperSimple: true
noRotation: true
rotate: 0
scalex: 1
scaley: 1
shear: 0

因此,要查找Raphael元素的x缩放条件,可以使用element.matrix.split().scalex;。要查找元素的旋转状态,而不考虑设置它的方法,可以使用element.matrix.split().rotate;等。dxdy相当于翻译值。

circle = paper.circle(5,5,5).attr('transform','s2,2');
alert(circle.matrix.split().scalex);   // alerts 2
alert(circle.matrix.split().dx);       // alerts 0

circle = paper.circle(5,5,5).attr('transform','m2 0 0 2 0 0');
alert(circle.matrix.split().scalex);   // alerts 2
alert(circle.matrix.split().dx);       // alerts 0

circle = paper.circle(5,5,5).attr('transform','t100,100');
alert(circle.matrix.split().scalex);   // alerts 1
alert(circle.matrix.split().dx);       // alerts 100

要将Raphael元素的当前变换状态作为变换字符串,最接近的似乎是:

element.matrix.toTransformString();

...但是,这仅包括已应用的转换。例如如果没有缩放,则字符串中没有s段,而不是s1,1,0,0之类的任何默认缩放变换字符串。

同样,如果你这样做......

Raphael.parseTransformString( element.matrix.toTransformString() );

...你得到一个缺少未设置值的数组,而不是一个包含所有值的对象。

似乎没有任何方便的功能来转动element.matrix.split()的输出;转换为变换字符串(虽然可能不需要)。

相关问题