简单的问题,我找不到简单的答案。
如何查找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(''));
答案 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;
等。dx
和dy
相当于翻译值。
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()的输出;转换为变换字符串(虽然可能不需要)。