2010年6月26日土曜日

inkscapeで線対称のパス

inkscapeで線対称のパスを描く方法のメモです。 ネットのチュートリアルとか入門サイトにあるネタかと思ったんですが、サラッと探した限りでは見つかりませんでした。 しかし、実際にやってみたら簡単にできました。

  1. 適当なパスを描く
  2. リンクオフセットを作成
  3. できたリンクオフセットを水平に反転
  4. 反転したリンクオフセットを適当な場所に移動
  5. 「整列および配置」で元のパスとリンクオフセットの上端を合せる
  6. 元のパスを編集して作画

これでできます。 元のパスを編集したら、リンクオフセットも変形します。 ルビンの杯とかも簡単。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="492" height="486" id="svg2"> <defs id="defs4" /> <g transform="translate(-90.5,-138.875)" id="layer1"><path d="m 91,139.375 0,485 491,0 0,-485 -491,0 z m 31.84375,22 427.3125,0 c -28.74741,26.06228 -49.47533,26.6061 -76.90625,28.21875 -67.28485,3.95565 -80.9135,63.60322 -76.78125,108.78125 1.91496,20.9364 17.5,106.5 -40.5,117 -2.5,17 10.5,29 15.5,34 -0.3,4.3 -1.39107,6.49108 -2,9.5 4.46507,9.51668 3.81136,16.49831 24.6875,17.6875 15.36359,0.87517 23.9,2.8 30.5,6 -12.4,1.4 -19.59375,0.79375 -26.59375,0.59375 -5,4.8 -9.20625,10.6125 -9.40625,18.8125 1.8,4.4 3.93278,8.1326 6.625,13.1875 2.19093,4.11369 -2.96061,29.86969 0.59375,36.40625 7.14484,13.13954 52.04246,19.58488 95.15625,22.75 22.98556,1.68744 40.33124,15.51364 51.53125,28.0625 l -412.09375,0 C 141.67023,589.83461 159.02344,575.99928 182,574.3125 c 43.11379,-3.16512 88.01141,-9.61046 95.15625,-22.75 3.55436,-6.53656 -1.59718,-32.29256 0.59375,-36.40625 2.69222,-5.0549 4.825,-8.7875 6.625,-13.1875 -0.2,-8.2 -4.40625,-14.0125 -9.40625,-18.8125 -7,0.2 -14.19375,0.80625 -26.59375,-0.59375 6.6,-3.2 15.13641,-5.12483 30.5,-6 20.87614,-1.18919 20.22243,-8.17082 24.6875,-17.6875 -0.60893,-3.00892 -1.7,-5.2 -2,-9.5 5,-5 18,-17 15.5,-34 -58,-10.5 -42.41496,-96.0636 -40.5,-117 4.13225,-45.17803 -9.4964,-104.8256 -76.78125,-108.78125 -27.43152,-1.61269 -48.18749,-2.1513 -76.9375,-28.21875 z" id="rect4223" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"/></g></svg>

もともとのルビンの杯は線対称じゃないみたいですけどね。 まぁ、いいか?

bloggerにSVGファイルをアップロードできないのでコードを載せます。 SVGで見たい人はテキストエディタにコピー&ペーストして使ってください。 空白は削ってますので、コードを読みたいときは別のインデントしてくれるソフトで見てください。 inkscapeで作ってプレーンSVGで出力。 コード中のいらなそうな要素をテキストエディタで消しています。 win版inkscape 0.47では読み込めました。 他の環境で読めなかったらゴメンナサイ。

元のパスが開いていても、リンクオフセットは閉じたパスになります。 開いたパスにしたいときは、線対称の部分が描き終わった後にリンクを切りましょう。 リンクオフセットを選択して「オブジェクトをパスへ」で普通のパスにしてリンクを切ります。 そのとき、パスが交差していると複数のサブパスに分かれてしまうので注意。

リンクオフセットの変形は「水平に反転」以外の回転や傾斜なども効きます。 元のパスを5つコピーして60度ずつ回転、6枚の花びらとかも可能。

リンクオフセットを移動する場合は元パスに影響しません。 元パスを移動した場合、リンクオフセットがどう動くかは「Inkscapeの設定」ダイアログで変更できます。 ver0.47では上から4番目、クローンの項目で変更可。

  • 平行移動
  • 動かず静止
  • transformに従って移動

の3つから選べます。 これは描くものによって変える設定項目かな?

元パスの編集はノードの追加と削除の他、パスの統合や差分、交差などがリンクに反映されます。 パスの分解も可能。 1つのオブジェクトにサブパスがいくつかあってもリンクします。 しかし、1つのオブジェクトだったパスが複数のオブジェクトに分かれてしまったときは、1つ目のパスのリンクしか残りません。

パスの連結は不可。 リンクが切れてしまいます。

パスの連結でリンクが切れた後、アンドゥをしてもリンクは復活しません。 ver0.47のバグかも? XMLエディタで見ると分かるんですが、データ上はリンクが残っています。 一応、保存→開くでリンク復活。 リンクは復活させられますが、バグ含み?なのであまりいい状態ではありません。 リンクオフセットがあるときはパスの連結はしない方が良さそうです。 パスの連結が必要なときは、「オブジェクトをパスへ」でリンクを切ってからにしましょう。