[Face-Wizard] 

 [Inkscape] 
 
 [Potrace] 
 
 [Tablet_Renew] 
 
 [MY_CGs] 
J パスメニュー・差分とか分離とかの違い



■ 差分・分離・パスをカット・分割のちがい
  ←緑の四角の上に丸のオブジェクトがある状態です。

これを2つとも選択した状態でパスメニューの操作を行うと以下のようになります。
※Inkscapeのバージョンによっては、パスメニューの日本語訳が「切り出し」→「交差」、「切りぬき」→「排他」となっています(ショートカットキーに変更なし)。この2つは説明不要と思われるので違いについては省略します。
図形オブジェクトをパスに変換せずにパスメニューの操作を実行すると、図形要素は自動でパスに変換されます(つまり円を弧にしたりポリゴンの角数を増やすといった操作はできなくなります)。
差分 [Ctrl+-]
差分 = 下-(マイナス)上のオブジェクト

消しゴム代わりに使え、ショートカットもマイナスなので直感的で分かり易い。正しくは、上のオブジェクトのセグメントが「下を消すための選択範囲」になる。

見かけが2つ以上に別れるときは、1つに"連結"されている。

差分・切り出し・切りぬき・分離・カット・連結は、オブジェクトを2つ選択している時しか使えないが、消したい側を連結(または統合)すれば一度に1つのオブジェクトで差分を取る事もできる。

分離 [Ctrl+/]
分離 = (下-上のオブジェクト) and 共通部分

分離された全てのオブジェクトについて、下のブジェクトのスタイルが適用される。

分離した結果、見かけが2つ以上に別れるときでも、はじめから分離されている。

上のオブジェクトをベジェ線などの閉じてないパスにすれば、下のオブジェクトは上のセグメントとの交点で分断され、共通部分は発生しない(上のストロークの太さは無関係)。

ただし上のストロークがノード2点のみの完全な直線の場合はこれを行うと双方が消える(下のオブジェクトより外でもう1点ノードを打ち折り曲げれば直線で分離可能。または僅かでも曲線になっていればok)。


上段図の2番目に薄っすらと切断線が見えるが、実際には隙間が開いている訳ではなく、そこで分離されている事がユーザーに分かるようにする為の仕様と思われる。またDisplay modeをOutlineモードにして256倍Zoomしても隙間は確認できない。

カット [Ctrl+Alt+/]


    ↓

カット = 下のセグメントを上のセグメントで切る

カットされたオブジェクトはFillなしになり、左図のように下がストロークなしだと選択範囲しか見えなくなる。Fillを有効にしてみると、下のオブジェクトが上のオブジェクトとの交点(交点の2点間は直線)で"分離"されているのが分かる。

下を閉じたパス+ストロークありでこれを行うと、下のストロークは上のセグメントによって切断され(上のストロークの太さは無関係)、分離した全てのオブジェクトは閉じてないパスになる。
ストロークの切断面はセグメントに対して常に鉛直か円になる(ストロークスタイルに依存)。

※上図はカット後にFillを設定し薄緑のストロークを書き加えた。

上図からも分かるとおり、カットは「ストロークにおける分離」と言える。


ちなみに↑の分離の表にある、円形を2つ割りにするのをカットで行うと、やはり下のストロークがなしの場合は選択範囲しか見えなくなるが、後でフィルなどスタイルを設定してやれば、分離で行ったときと全く同じ状態になる。
ただし、下がストロークありの場合には、下図のようにセグメントが切断されて閉じてないパスになる。
また上のセグメントを曲線にしても、カットでは結果は変化しない(あくまでセグメントの交点だけが切断される)


ちなみに分離でこれを行うと
こうなります。

上のパスは下との交点が2点あればノード2点のみの直線でも良いが、下のパスは閉じていないと何処で切断されるか判断が難しくなる。

また交点が1点のみでカットを行うと、下のパスとの交点だった場所にノードが2つ(同じ位置に)生成される。この2つのノード間は繋がっていないので下のパスは閉じてないパスになる。

(パスのカットを行うと、なぜか下のパスの始点ノードが同じ位置で2つになる。バグ?)

分割は画像の例では何も変化しない
 [Shift+Ctrl+K]
分割 = 連結を元に戻す(分離する)。
差分の結果、オブジェクトが2つ以上になった時は、分割することで個別に編集できるようになる。
上図のように矩形と円を重ねた状態は、始めから分離されているのと同じ事なので分割しても何も変化しない。

分割は差分などと違って、1つの(連結または統合された)オブジェクトを選択した状態で使う。

もう一つ、分割には内周パスと外周パスを分離する働きがあり、これについて詳しくは[パス分割]で生成されるオブジェクト参照



■ 統合・連結のちがい
統合 [Ctrl++]
統合 = メニューアイコンの見た目通りオブジェクトは1つになる。重なり合った複数のオブジェクトのノードのうち、1つのオブジェクトに対して、外周ノード〜内周ノード間に存在する(fill部分に重複する)ノードは全て失われる。

たとえば内周パスの内側に別のオブジェクトがあってもセグメントが交差しない限りノードが失われる事はない。
またノードの繋がりが無い(離れた場所にある)オブジェクトを統合した場合、これらは連結された状態になっているので"分割"すれば、またばらばらの状態に戻すことができる。

ただし、左図のようにパスが結合したオブジェクトは元には戻らない。
例えば左図で言えば、一旦コピーしてから矩形-円の差分を取り、それを使って左図の状態から差分を取っても元の円とはノードが一致しない。形状が複雑になるほどその誤差が増える。

複数の色違いのオブジェクトを統合すると、選択された物のうち最も下層にあるオブジェクトのスタイルが適用される。
複数のレイヤーを跨いで選択した場合にも、最も下層にあるオブジェクトのスタイルで現在アクティブなレイヤーに統合される。

下層オブジェクトのスタイルにグラデーションを設定している場合は、グラデーションの開始位置/終端位置が統合した範囲全体に対して適用される(このため、透明グラデーションで離れた場所のオブジェクトを統合すると色が載らない事がある)。

連結 [Ctrl+K]
連結 = 一見すると統合と同じだが、ノードツールに切り替えてみると左図のように個別にノードが操作できる状態になっている(重なった部分のノードが失われない)。

パスが統合されていないので"分割"で連結を解除でき、完全に元の形状に戻すことができる(スタイルは連結時と同じ)。

  連結とグループ化の違い
  連結 グループ化
スタイル 下層のスタイルに統一 スタイルは元のまま
選択ツールでの操作 個別に選択できない [Ctrl]+選択でグループ内オブジェクトを個別に選択可能(グループ化したまま差分や分割もできる)
ノードツールでの操作 ノードがまとめて選択できる 1オブジェクト単位でしかノードを選択できない
多重合成 連結を繰り返しても1度の分割で元に戻る 多重グループ化すると1回のグループ解除では戻らない

ノードにノードをスナップさせるなら連結、スタイルを維持したまま選択ツールでまとめて変形するならグループ化で行うと操作しやすい。

またテキストをパスに変換した結果も、パス連結された状態になっている。
パス分割すれば1文字ずつ分離される(小文字の"i"のように2つに分離する場合もある)が、このとき、たとえば"A"のように内周パスが存在するオブジェクトは、内周パスのFillが外周パスと同色になった形で分割されるため、元の"A"の形に戻すにはこの2つのオブジェクトを選択して差分を取る。
"田"のように内周パスが4つ存在するような場合は、これを4回行うか4つの内周パスを連結して外周パスとの差分を取ることで"■"が"田"に戻る。




■ [パス分割]で生成されるオブジェクト(外周パスと内周パス)
輪郭線のみになった図形
「〜分割のちがい」では2つのオブジェクトが始めから分離されている状態だったため変化しなかった。
そこで、双方の図形を統合してストロークを設定、ストロークをパスに変換し、改めて分割を行ってみた(オブジェクトの大小関係が分かり易いようにストロークは太めに設定した)。
左図は外周パスだけ選択した状態。内周外周ともに選択したり、内周だけ選択といった操作も[Ctrl+A]で簡単に選択できる。

左図のように輪郭線のみの1つのオブジェクトになった状態で分割を行うと、次のように分割される。
図形は50%くらい不透明にしてあります

右2つが分割された結果。線の外周(外側のパス)をアウトラインとする図形と、線の内周をアウトラインとする図形が2つ生成された。

線の内側に図形を描き加えた
いったん分割前の状態までアンドゥし、内側に図形を追加して再度パスを統合。見かけ上のオブジェクト数は4つになっている。
この状態から、先ほどと同じようにパスの分割を行ってみた。

結果は、下記のように大きい方から数えて1つ目と2つ目は先ほどと全く同じオブジェクトになります。
図形は適当に不透明にしてあります。


分割したあと全選択してみると、全部で6つのオブジェクトに分割されたのが分かります(不透明度を20%くらいにするとオブジェクトの重なりが確認しやすい)。

分割されて生成されるオブジェクトは、あくまで『元のオブジェクトの外周パスをアウトラインとする物』と『内周パスをアウトラインとする物』だけで、1つの閉じたパスより内側に存在するノードは無視され、常にくり抜かれずに抽出されます。また線(輪郭線)そのものも、内周パスがある限り抽出されません。
つまり分割とは、外周パスと内周パスを分割することだと言えます(内周パスが存在しないオブジェクトで分割を行っても何も変化しない)。
たとえばアルファベットの"A"をパスにして分割すれば2つに分かれますが、"C"は内周が無いので変化しません。

内周パスの内側に内周パスを持つオブジェクトがあれば、あくまで『1つの閉じたパスに対して1オブジェクト』に分割されるので、上の図のように幾重にも重なった状態になるのです。

これがどういう事かというと、前項のように分割で彩色範囲の抽出を行ったとき、顔の輪郭パスの内側に口や目の輪郭パスがあっても、肌色にしたい部分はのっぺらぼうで抽出されることになります。
ラスターツールで考えると、「1つの閉じたパスに対して1レイヤー」のように階層化されると思えば分かり易いかもしれません。

ちなみに真ん中のハの字の部分は、内周パスが存在しないので分割してもそのまま残ります(ノードの繋がりが無いので連結が解除されています)。
これは例えば、「服のパスに囲まれた、他と繋がってないシワの線」だとか「外周パスのみで描かれた鼻筋」などで同じ事が起こります。これらの「線」は、線画と重複するので削除するか、線画パスと統合すれば余分なノードを減らせると思います。

彩色範囲を分割したときの最後の画像は小さくて分かり辛かったですが、線画が全て消えているように見えても、これらの孤島状態の線は消えずに周りと同色となって残っています。
線画レイヤーの不透明度を20%位に落としてレイヤーをロックしておくと重複部分が探しやすく、削除もしやすくなります(ここで差分を使って一気に消すと隙間ができてしまう事がある)。


分割を使わずに、内周ノードだけを全選択(内周パスのどれかを選択→[Ctrl+A])してドラッグしても、分割したときと全く同じ状態になります。

じつは、輪郭線オブジェクトの内周パスの範囲と言うのは、CGならではの表現で言うと、透明色で塗潰されているのです。

この透明色が保持される範囲は外周パスに囲まれている部分だけで、図のように内周パスの一部を外周よりも外に出してやると、外周より外に出た部分はこのように透明色が失われます。また内周パスを全て削除すると、外周パスの範囲が塗潰された形で残ります。
つまり、輪郭線オブジェクトの外周パスの範囲は始めから塗潰されていて、透明に(くり抜かれているように)見えている部分は内周パスによってマスクされているわけです。

ただし内周パスだけを全選択してコピペしても、外周内周が1セットで1オブジェクトになっているので、外周パスも一緒にくっ付いてきてしまいます。そんなときに分割を使えば、内周パスの範囲だけ取り出せるのです(もちろん単に内周パスのみを取り出すならば外周パスを全選択して削除しても出来る)。


参考までに上の画像を1bit-bmpに変換したうえでPotraceで
potrace -s -i -C#94B3E2 %1 -o D:\desktop\inv_test.svg
のようなオプションでsvgに変換すると


このように入力元画像の白い部分だけが、指定した色のパスとして生成されます。
つまり分割の場合と全く逆に、すべてくり抜かれた形のパスになります。



■ パス切り出しとクリッピングの違い
このほか、ラスターグラフィックスエディタで言うクリッピンググループ化または透明部分を保護した彩色を行うには、パス切り出しかクリッピングを使います。
  パス切り出し
(バージョンによっては[交差])
クリッピング
基本操作 2つのオブジェクトの共通部分だけを残す(つまりクリッピングしたい相手(親)を同じ場所にコピーする必要がある)。

パスが連結(または統合)されているオブジェクト同士でなければ切り出せない。
2つのオブジェクトのうち、上のオブジェクトに対してのみ、共通部分以外を隠す(不可視状態になるだけでノードは元の位置に存在している)。

どちらか一方または両方ともグループ化したままでもクリッピング可。
誤差 元のパスを変化(再計算)させるため、僅かな誤差が発生して隙間ができる事がある。
図形はパスに変換される。
元が変化しないので誤差は出ない。
図形も図形要素のまま扱われる。
スタイル 下のオブジェクト(親)のスタイルが適用。
Blurを適用していると切り出せない
初期設定では下のオブジェクトのスタイルが適用(変更可)。
スタイルに関わらずクリッピング可
保存形式 保存形式に関わらず反映される Inkscape SVGのみ反映
クリッピングしたパスはDefs(XMLエディタのsvg :defs id)にインデントされている。そのため、マスクに使ったオブジェクトを選択して削除してもクリップ部分は維持される。ただしクリッピングはアンドゥしてもDefsから消えずに残っている(0.45のバグ?)

インデントされているclipPath idをXMLエディタで削除すれば、Clip -> Releaseと同じ意味となりクリッピングが無効になる。

マスクされた範囲のノードは見えなくなるだけで存在しているので、ノードツールで選択すれば編集できる。
このときマスク範囲の境界は維持したまま変形する(Outline modeでは境界が緑に着色され、マスクセットはOutline modeの表示が青になる)。
これ書いてて気が付いたのですが、矩形をストロークのみ□の状態からストロークをパスに変換すると、外側のパスの4角の両脇に不要なノードが2つずつ生成されてしまうようです(8個あれば良いノードが16個になる)。これは簡単に角を丸められるようになっているInkscapeの仕様なのかは分かりませんが、パスの簡略化をデフォルト設定(閾値=0.0020)で1回行うと消えてくれます。

 

 Next ⇒ その他のTipsなど。 


 MENU△ PAGE TOP▲

Jan 15 2007