スポンサーリンク

2016年5月5日木曜日

Inkscape タイルクローンの回転がうまくいかない

Inkscape のタイルクローンでオブジェクトに回転を付けるとうまくいかない問題に悩んでいました。例えば以下の様なタイルクローン図形を作りたいとします。


実際にやってみると以下の様になってしまいます。



ドキュメントからはみ出してしまっているのでスケールを変えてあります。それぞれの四角がドキュメントのサイズです。下の図ではオリジナルのオブジェクト以外は全てドキュメントの外に出てしまっています。どちらも同じ位置にオブジェクト回転の中心座標を設定しているのですが(上の図の花びらの中心位置)、下の図では明らかにこれがおかしくなっています。

タイルクローンのやり方は色々なチュートリアルで説明されていますが、どうしても解説通りにいきません。かなり悩んだ挙句、ようやく原因が分かりました。結論から言うとInkscapeのバグでした。

以下はうまくいかない場合のXMLデータ(.svgファイル)の一部です。

  <g id="layer1"
     inkscape:groupmode="layer"
     inkscape:label="レイヤー 1"
     transform="translate(0,-540.36216)">

レイヤを定義するタグに transform="translate(0,-540.36216)" という属性が付いています。これがあると回転座標が狂ってしまうのです。このバグ、タチが悪いのはタイルクローン以外の回転操作ではまったく問題が出ないことです。普通にオブジェクトを回転させるだけであれば何の問題もありません。

ではこの transform= 属性はどういう時に付くのでしょう?ここが今一つはっきりしないのですが、Inkscapeに用意されているデフォルトのテンプレート(ドキュメントサイズ)をそのまま使っている限りこの属性は付きません。しかしドキュメントサイズを変更したり、自分でカスタムテンプレートを作成するとこの属性が付くことがあるようです(必ずという訳ではないようですが)。

で、対策ですが、とりあえずこのtransform=属性をマニュアルでバッサリ削除してしまうと回避できます。この属性の意味をもっとちゃんと理解した上でないとはっきりしたことは言えないのですが、今のところこの方法で問題は起こっていません。

このバグ、以下のInkscapeのバグトラッキングシステムで議論されています。


かなり古くからある問題らしく最初のレポートは2007年です。次のバージョン(v0.92)で直すという話もあるようですが、バージョンアップサイクルが極めて長いのもInkscapeの特徴の一つです。一体いつになることやら。

神アプリであるInkscapeにまだこんなバグがあるというのも少し驚きでした。


2 件のコメント :

  1. 通りすがりです。同じ現象で悩んでおりました。感謝します。
    transform属性を削除、と書かれていますが、削除するタイミングがピンと
    来ませんでしたので、レイヤー2でタイルクローンしています。

    返信削除
    返信
    1. コメントありがとうございます。
      私の場合何も考えず、エディタで直接svgファイルを開いてtransform属性を削除してしまいました。

      削除