[Face-Wizard] 

 [Inkscape] 
 
 [Potrace] 
 
 [Tablet_Renew] 
 
 [MY_CGs] 
J 別のSVGをインポートして位置を合わせる



■ SVGをインポートして位置を合わせるには

今回は実験的に、影指定(影と下地を塗り分ける境界線)も線画と同様にラスターツールで描いて、それを別々にPotraceでSVG出力してみました。

アニメ塗りの影なんかはInkscapeのパスで手動トレースした方がデータは軽いし、下手したらその方が速そうなんですが、練習がてら影線も別途SVG化してインポートすることにしました。
※注) この描き方はノードが大量に作られてしまうため、それでなくても重いWin版Inkscapeが致命的に重くなります...orz

同じ用紙サイズの書類でも、ファイルの開き方によっては単にインポートしただけでは位置が揃わないので、それを正確に合わせる方法を説明します。

まず、同じ用紙サイズの書類を同じ場所にインポートするには、必ず対象ファイルを[開くファイルを選択]ダイアログから開かなければなりません(Ctrl+Iのインポートは使わない)。
用紙サイズが同じなら、インポート元を全選択+コピー →インポート先で同じ場所へペーストでokです。
("同じ場所"の基準点は、オブジェクト(のツールコントロールバー上)の原点座標と異なり用紙左上角なので、用紙サイズが同じでなければ同じ場所にペーストできない)

それ以外の方法でファイルを開いてコピーしようとしても、ステータスに「クリップボードが空です」と言われてしまって貼り付けできません。

某激安店で買った1GBメモリモジュールが1年も経たないうちにエラー吐き出した経験があるので、慌ててMemTest-86で調べたら何も異常はなく、単にPID(プロセスID)が変わったためにクリップボードの受け渡しが出来なかっただけでした(PIDはタスクマネージャでも調べられます。プロセスタブでPIDの列がない場合は-表示-列の選択-PID)。

右が開くダイアログを使わずにファイルを開いたときの状態。
PIDが変わるためInkscapeは起動した数だけ表示されます。

タスクマネージャのアプリケーションタブでは、起動方法に関わらずInkscapeのタスクが開いた数だけ表示されます。


また、Process Explorerというソフトを使うと、ファイルがどういうコマンドラインで開かれたかが分かります。
↓はInkscapeを起動してから「開くファイルを選択」ダイアログでファイルを開いたときのCommand line。

開くダイアログからいくつファイルを開いても、PIDやCommand lineは変化しない。

↓は「開くファイルを選択」ダイアログを使わずにファイルを開いたとき(ファイルダブルクリック等)。
InkscapeのショートカットにsvgをD&Dしたり、開くダイアログを使わずにファイルを開くと、引数にファイルのフルパスが付加される(プロセスIDとスレッドIDが変わる)。
このときも、この起動したInkscapeの開くダイアログから複数ファイルを開いてもPIDやCommand lineは変化しないが、既に他のsvgが開かれている場合には、このファイルオープンの仕方で開いた数だけプロセスは増え、それらは全てファイル間の受け渡しができない。

Process Explorerは使用中のアプリケーションがどのdllを参照しているか等も調べる事ができて便利です。

要するに、コピー先(またはコピー元)のファイルを開くときは、「開くファイルを選択」ダイアログから開いたファイルでなければ貼り付けできないという事です(オブジェクト自体はInkscapeのクリップボードにコピーされているので、コピー先を開き直せば貼り付け出来る)。
異なるプロセスIDで起動されたInkscapeはファイル間のコピー操作が出来なくなる他、[Ctrl+Tab]によるウィンドウの切り替えが出来なくなります。

違うCommand lineで開いたファイルに貼り付けが出来ない以上、別のファイルからオブジェクトをペーストするには「開くファイルを選択」ダイアログから開くしか方法はないという事になります。

ちなみにエクスプローラからSVGをInkscapeのキャンバス(クライアント領域)にD&Dするとマウスを放した場所にインポートしてしまいますが、コマンドバー右端などのボタンが無い場所にD&Dすると、開いている用紙の中心位置と、ドロップした書類の全オブジェクト(ロックしたレイヤーのオブジェクト含む)がグループ化された状態でその選択範囲の重心が重なる位置にインポートされます。


つまり用紙サイズが同じ書類かつ、インポートしようとしている書類に用紙と同じサイズの矩形があり、その矩形が用紙4隅に一致していれば、この方法でも位置を揃えることができます(ただし用紙よりはみ出たオブジェクトや、用紙の外にオブジェクトがあるとNG)。

なお同一プロセスでファイルを開いたときは、レイヤーパレットやその他のダイアログ類は共用になり、アクティブな側の内容を自動的に切り替えて表示します。

 



インポートなら別プロセスで実行していてもファイル間のコピー操作が可能だったので下記を残しておくことにします。

たとえばsenga.svgというファイルにkagesen1.svgというファイル(共にpotraceで同じパラメータで出力)をインポートする場合、まずkagesen1.svg(これからインポートしようとするファイル)に適当な大きさの矩形を描いて(レイヤーはrootのままでOK)選択ツールに切り替え、コントロールバーで矩形のx,y座標を0にします。
矩形選択状態で[F1][Alt+X][0][Tab][0][Enter]


矩形のx,y座標を確定したら保存します。

senga.svgに新規レイヤー作成、kagesen1.svgをインポート[Ctrl+I]
(エクスプローラからD&Dしても同じです)

kagesen1.svgは明後日の方向に貼り付けられていると思うので、インポートしたオブジェクトが選択されている状態で[F1]を押し、コントロールバーでx,y座標を0にします。
選択状態で[F1][Alt+X][0][Tab][0][Enter]


コントロールバーの端数はあまり当てにならない(上図のように0にマイナスが付くようなケースでは大抵10万分の数ピクセルずれている)ので、正確に合成するならXMLエディタで確認した方が良いかも(ただしXML上の原点座標は用紙左上です)。


とりあえずこれで正確な位置にインポートできました。
インポートしたファイルは全体がグループ化されているので、選択を解除する前にグループを解除します。
[Shiift+Ctrl+G]
グループを解除すれば[Tab]キーで矩形が選択可能になり削除できます
オブジェクトが多段グループ化されている場合は1回の解除ではグループ化が解除されません。
また多段グループ化されていない場合でも、[Ctrl]+選択で矩形だけ削除したのではグループ化は解除されません。

※ロックされたレイヤーが含まれるファイルをインポートすると、グループ解除してもロックされたレイヤー上のオブジェクトは選択できない状態になり、編集出来なくなります。

ラスタデータの段階で線画と影線を統合して、それをSVG化もやってみたのですが
(senga.svgとkagesen1.svgを統合)≠(ラスターで統合してsvg)
となってしまうので諦めました(特に線画と影線の交点)。

影線を単体でパスに変換すると、結構線画と繋がっているはずの部分が切れていたりするので、線画に届いていない影線はパスを編集して繋げておきます。

ノードが多いパスは編集操作が非常に重くなるので、DisplaymodeをOutline([Ctrl+Num5]でトグる)にすると、色は見えなくなりますが特にBlurフィルタを使用したファイルで動作が断然軽くなります。

このときラスタデータを1枚置いておくと、Outlineモードにしても主線が確認しやすくなります。

ただしOutlineモードではbmpを貼り付けたレイヤーの(と言うかそれ以外のレイヤーも)不透明度が無効になるので、前もってラスターツールでbmpの線画色を白に近い色に変えておくと良いかも。


たしかバージョン0.44くらいまでは↑のようにビットマップを表示したままOutlineモードでの作業ができたのだけど、最近のバージョンではこれが出来なくなった。

 

 Next ⇒ パスメニュー・差分とか分離とかの違い 


 MENU△ PAGE TOP▲

Jan 15 2007