3

簡単な答えを見つけることができない簡単な質問。

要素の変換状態が設定されているかどうか、またはどのように設定されているかに関係なく、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(''));
4

1 に答える 1

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;etc.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(); の出力を有効にする便利な関数はないようです。変換文字列に変換します (おそらく必要ありませんが)。

于 2013-10-14T16:31:06.657 に答える