Raphael パスを固定位置に簡単に移動できるプラグインのようなコードに取り組んでいます。
通常、Raphael パス (SVG 構文に基づく構文を使用) の最初の部分は、パスの起点を定義する「M」 moveto コマンドです。
密接に関連する 2 つの質問:
- 任意のパスが 'M' moveto コマンドで始まると仮定するのは合理的ですか? (これに対する答えは「いいえ」だと思います)
- 第 1 四半期に「いいえ」と仮定します。上記のように、'M' で始まらないラファエル パス配列 (
somePath.attr(path)[0][0] != 'M'
) に遭遇した場合、このパスの起点は常に 0,0 であると想定できますか? したがって、0,0 からの移動は過去の変換によるものであり、したがってsomePath.attr(transform)
?で説明されます。
Raphael docs から、2. と矛盾する Path 配列の仕様には何もないように見えますが、仮定を行う前に予期しないケースをチェックすることは常に価値があります。
別の言い方をすれば、この関数が Raphael パスの原点の正しい X 座標と Y 座標を返さない場合があります (somePath.attr('path')
有効な Raphael パスからの出力が渡されたと仮定します)。
function getPathOrigin (path) {
if (path[0][0] == 'M') {
return {x: path[0][1], y: path[0][2]}
} else {
return {x: 0, y: 0}
}
}