GIMPで縄張図を





城ではないものの、サンプルとして



2015.4.8 新規作成
2015.4.22 曲線パス、石垣のみ多段階に対応
2015.4.25 崖を追加
2015.5.28 崖(角)を追加
2015.8.6 曲線パス:どちらも多段階に対応、パス間:斜面線の引き方を3通りに
     足元線の描き方について、追加






GIMPで縄張図…もとい、なんちゃって縄張図を描き始めて、もう20年近く経つ。

ただ、使う機能は基本的なもののみで、せいぜいレイヤーを使うくらい。
後はひたすら、ブラシでガシガシと描いていた。
しかし、斜面に引く大量の線分と石垣の鱗円弧を描くのが辛く、発狂しそうになりながら苦行を積むものの、その割には汚い図しか描けなかった。


しかし最近になってパス(ベクター)の存在を知り、また簡単なプログラムなら組めるくらいは知っているPythonを使ってスクリプトを組める事も知り、それならば、あの拷問の斜面線引き(正式な用語は知らない)が楽になるのではと、スクリプトを幾つか作成した。


このページの題目として、「GIMPで縄張図を」なんて銘うってしまったが、要はこの自作したスクリプトを公開したいだけである。

要望や修正箇所等ありましたら、連絡下さい。(トップページにメールアドレス有り)
可能な限り対応します。




また、パスの使い方等につきましては、巷に山ほどある、GIMPの使い方のページを参照願います。





GimpにおけるPython-fuの開発関連情報は、以下のページが便利でした:

GIMP - The GNU Image Manipulation Program

GIMP Library Reference Manual






目次:

(1)スクリプトの配置と使い方

(2)曲線パス、石垣のみ多段対応

(3)直線パス、多段対応

(4)2本の曲線パス間、多段対応

(5)

(6)円、多段対応

(7)抜き線の描き方

(8)足元線の描き方











スクリプトの配置と使い方



Gimp2.8.14で稼動確認。2.8.10だと動かなかった。
Gimpをインストールする際に、Pythonもインストールしておく。

ユーザーディレクトリの下の「\gimp-2.8\plug-ins\」(Gimp2.8の場合)ディレクトリ内に、それぞれのパイソンファイルを置き、Gimpを起動すると、上図のように「ツール」の下に、それぞれの機能が追加される。(ただし画像が無いと、文字が白抜きで起動しない)

スクリプト内の長さは、全てピクセルである。

Ctrl-Zで、処理前の状態に戻すことが可能である。











曲線パス、多段対応(Slant Draw Curve-py)

Pythonファイル(リンクを右クリック→名前をつけてリンク先を保存): slant_draw_curve.py




まず、ペイントツールでブラシを選択し、またブラシ種類(通常は黒丸)、ブラシのサイズを設定しておく(左図)。これは以下全てのツールに共通。

次に曲線パスを作図する。作成した曲線パスを選択し(パスのタブから、作図したものを選択しておく)、「ツール」→「SlantDraw Curve-py」でスクリプトを起動する。






・「間隔」 :斜面線の間隔を設定。石垣の場合はこれが半円の直径となる。
・「ギャップ」 :(多段の場合のみ)次の斜面線までのギャップ長さ。
・「斜面線長さ」 :斜面線の長さ
・「方向」 :パスの方向に対して、「-90」で左、「90」で右。
・「傾き計算位置」 :0でパス上で傾きを計算、0.5で斜面線の中点、1で斜面線の反対側端部付近
・「傾き計算係数」 :パス上での接線の計算のパラメータ。接線を計算する際に、次点と前点のそれぞれの点との間に点を取り、それを用いて近似計算をしている。0.5だと、中点が取られる。余程の事がない限り、デフォルト値のまま。
・「描写ツール」 :「ブラシ」もしくは「鉛筆」。ペイントツールとこれとを合わせておく(プログラムの都合で、2ヵ所設定する羽目に)
・「斜面線」 :斜面線の種類。「斜面線」「石垣」「なし」。
・「パスの描写」 :パスそのものも描写するかどうか。「足元線」は破線のこと。
・「フェードアウト」 :動的特性機能(後述)を使って斜面線をフェードアウトさせる際、方向を設定する。
・「段数」 :段数。斜面線・石垣線どちらも対応。




左:斜面線のみ、右:斜面線と足元線




左:斜面線とパス、5段、右:パスを描写、石垣



左:石垣5段、右:閉曲線にも対応











直線パス、多段対応(Slant Draw Line-py)

Pythonファイル(リンクを右クリック→名前をつけてリンク先を保存): slant_draw_line.py


直線で構成されたパス(コントロールポイントの設定を行わないままの状態)のみ対応している。
直線パスを選択し(パスのタブから、作図したものを選択しておく)、「ツール」→「SlantDraw Line-py」でスクリプトを起動する。



・「間隔」 :斜面線の間隔を設定。石垣の場合はこれが半円の直径となる。
・「斜面線長さ」 :斜面線の長さ
・「ギャップ」 :斜面線間のギャップ。
・「方向」 :パスの方向に対して、「-90」で左、「90」で右。
・「描写ツール」 :「ブラシ」もしくは「鉛筆」。ペイントツールとこれとを合わせておく(プログラムの都合で、2ヵ所設定する羽目に)
・「斜面線」 :斜面線の種類。「斜面線」「石垣」「なし」。
・「パスの描写」 :パスそのものも描写するかどうか。「足元線」は破線のこと。
・「稜線の描写」 :角に稜線を描写する。入れておかないとぱっとしない。
・「フェードアウト」 :動的特性機能(後述)を使って斜面線をフェードアウトさせる際、方向を設定する。
・「段数」 :斜面線(もしくは石垣)の段数。


左:1段、斜面線のみ、 右:5段、稜線とパスの描写




左:7段、方向右、石垣、稜線とパス描写、 右:閉じたパスの場合











2本の曲線パス間、多段対応(Slant Draw Paths-py)

Pythonファイル(リンクを右クリック→名前をつけてリンク先を保存): slant_draw_paths.py


パスを2本準備する(曲線でも直線でも可)



ただし、上図のように、2本のパスのアンカー点の数、パスの向きはそろえること。



2本のパスを表示させ、それ以外のパスを非表示にする。選択したパス(選択すると赤色になる)が基線パスに、残りのパスが対線パスとなる。




・「間隔」 :斜面線の間隔を設定。
・「斜面線方向」 :「斜面線に垂直」、「2点パス毎」、「2点区間毎」、詳細は下
・「斜面線長さ」 :1未満の時はギャップの割合を、1以上の時は斜面線長を示す。
・「傾き計算位置」 :(斜面線方向が「斜面線に垂直」の場合のみ)0でパス上で傾きを計算、0.5で斜面線の中点、1で斜面線の反対側端部付近
・「曲率の強調度」 :凸なら対線に向けて斜面線の間隔を広げ、凹の場合は狭くする度合いの設定。やりすぎるとおかしくなるので注意。
・「描写ツール」 :「ブラシ」もしくは「鉛筆」。ペイントツールとこれとを合わせておく(プログラムの都合で、2ヵ所設定する羽目に)
・「パスの描写」 :パスそのものも描写するかどうか。
・「足元線への変換」 :基線パスもしくは対線パスを足元線に変換する
・「フェードアウト」 :動的特性機能(後述)を使って斜面線をフェードアウトさせる際、方向を設定する。
・「段数」 :斜面線の段数。

左:1段のみ、 右:4段、パスの描写と足元線への変換



アンカー点間の範囲単位で斜面線の間隔計算を行う為、パスを作成する際に予め下線を引き、その上にアンカー点を揃えるようにすると、斜面線が(多少)綺麗になる。



左:斜面線方向=2点区間毎、 右:斜面線方向=2点パス毎

「2点区間毎」はパスの区間(アンカー点間の区間)毎に計算を行う。「2点パス毎」はパス毎に計算を行う。


斜面線方向=パスに鉛直

「パスに鉛直」はパス上で垂直方向に斜面線を引く。2段以上の場合は、内部で作っている仮のパスに鉛直に計算している。
上手く使わないと、思ったような斜線が引けない。










崖(Clifft Draw Curve-py、Clifft Draw Sharp-py)

Pythonファイル(リンクを右クリック→名前をつけてリンク先を保存): cliff_draw_curve.pycliff_draw_sharp.py




左:通常バージョン(丸)、右:角バージョン



まず、ペイントツールでブラシを選択し、またブラシ種類(通常は黒丸)、ブラシのサイズを設定しておく(左図)。これは以下全てのツールに共通。

次に曲線パスを作図する。以下の2通りの方法で作図できる。

(1)1本のパスのみで作図
斜面線はパスに鉛直方向に、また斜面線長さは固定。


(2)2本のパスで作図
斜面線は、「2本の曲線パス間」と同じ方法で作成される。使用する2本のパス以外は非表示にしておく。
斜面線の長さは、対線パスまでと長さ固定の2通りの選択が可能。




・「間隔」 :斜面線の間隔を設定。
・「斜面線長さ」 :斜面線の長さ
・「方向」 :パスの方向に対して、「-90」で左、「90」で右。
・「傾き計算係数」 :パス上での接線の計算のパラメータ。接線を計算する際に、次点と前点のそれぞれの点との間に点を取り、それを用いて近似計算をしている。0.5だと、中点が取られる。余程の事がない限り、デフォルト値のまま。
・「曲率の強調度」 :凸なら対線に向けて斜面線の間隔を広げ、凹の場合は狭くする度合いの設定。やりすぎるとおかしくなるので注意。

通常バージョン(丸)
 ・「崖マーク傾き」 :最大45度くらいまでで。マイナスの角度もあり。
 ・「崖マーク丸み」 :0で角張ったもの、1で丸く。

角バージョン
 ・「崖マーク頂点位置」 :角の頂点位置。

・「角マーク高さ」 :間隔に対する比率。
・「描写ツール」 :「ブラシ」もしくは「鉛筆」。ペイントツールとこれとを合わせておく(プログラムの都合で、2ヵ所設定する羽目に)
・「対線パス」 :使わないで斜面線をパスに鉛直に、それ以外は2パスと同じに。方向のみは斜面線長さを「斜面線長さ」の長さを利用。「使わない」「まで」「足元線」、「方向のみ」。
・「崖パス」 :崖パスを残すかどうか。斜面線と別の太さで描写したい場合に描写せずにパスを残すことができる。「同時描写」、「描写せずにパスを残す」。
・「フェードアウト」 :動的特性機能(後述)を使って斜面線をフェードアウトさせる際、方向を設定する。




対線パス「使わない」、左:通常バージョン(丸)、右:角バージョン

左:「まで」、中:「足元線」、右:「方向のみ」




角バージョン(Clifft Draw Sharp)










円、多段対応(Draw Circle)

Pythonファイル(リンクを右クリック→名前をつけてリンク先を保存): draw_circle.py


斜面線を描くというよりも、ある半径の円パスを作成する事の方が、価値が高そう。
中世、近世城郭では井戸くらいにしか用途が無いが、近代城郭では砲座などで重宝する。

事前にパスの準備は不要。「ツール」→「Draw Circle py」を起動する。



・「半径」 :円パスの半径。
・「間隔」 :斜面線の間隔を設定。石垣の場合はこれが半円の直径となる。
・「パスからのギャップ」 :斜面線の開始点をパスから離す際に使用。通常は0。
・「斜面線長さ」 :斜面線の長さ
・「方向」 :パスの方向に対して、「-90」で左、「90」で右。
・「傾き計算係数」 :パス上での接線の計算のパラメータ。接線を計算する際に、次点と前点のそれぞれの点との間に点を取り、それを用いて近似計算をしている。0.5だと、中点が取られる。余程の事がない限り、デフォルト値のまま。
・「描写ツール」 :「ブラシ」もしくは「鉛筆」。ペイントツールとこれとを合わせておく(プログラムの都合で、2ヵ所設定する羽目に)
・「斜面線」 :斜面線の種類。「斜面線」「石垣」「なし」。
・「パスの描写」 :パスそのものも描写するかどうか。「足元線」は破線のこと。
・「一時パス」 :内部で作成した円パスを残すかどうか。
・「フェードアウト」 :動的特性機能(後述)を使って斜面線をフェードアウトさせる際、方向を設定する。
・「段数」 :斜面線(もしくは石垣)の段数。



左:斜面線のみ、 中:パスの描写、 右:足元線



左:フェードアウト有り3段、右:石垣線5段










抜き線の描き方


斜面線を描く際、斜面の方向を表現する為に、斜面線の描き始めと描き終わりとで線の太さを変化させている場合がある。こうした「抜き」を行うには、「動的特性」機能を使用する。
ちょっとややこしいので、以下に使い方を説明する。



まず、動的特性ボタンを押し、一覧を表示させる。
残念なことに、思うような抜きの設定が無いため、1から作成する必要がある。
その為、リスト右下にある「描画の動的特性」ダイアログを開くボタンを押す。





「描画の動的特性」ダイアログが開くので、下左にある「新しい動的特性を作成」ボタンを押す(左図)。
すると「動的特性エディター」ダイアログが開くので(中図)、名前を入力し(ここではFade-Out)、プルダウンメニューから「サイズ」を選択する。
右図のようなグラフが出てくるので、「フェード」を選択してチェックを入れ、グラフを設定する。抜きの部分を膨らませる為に、図のような曲線を定義する。

これで設定完了。動的特性エディタを閉じる。




動的特性を先ほど作成した「Fade-Out」に変更し、動的特性のオプションを開き(プラスマークを押すと左図のようになる)、「反転」にチェックをつける。反転させておかないと、斜面線で抜きができない。「フェードの長さ」は消えるまでの長さ。現在のGimpのVerのライブラリでは、プログラムから直接この値をいじれないので、その都度、この値を調整する必要がある(起動時のデフォルトは100になっているが(上左図)、これでは長すぎ)。
「フェードの長さ」は、斜面線の長さの前後でないと、上手く「抜き」になってくれない。色々と調整しながら この状態で、ブラシで適当に線を引いてみると、右図のように抜きで線を引ける(フェードの長さを変えて引いている)



この状態のまま、2本の曲線パス間を起動し、「フェードアウト」設定を「順方向」もしくは「逆方向」にすることで、フェードアウトをした斜面線を引くことができる。














足元線の描き方


 特に曲線パスの場合、今のプログラムだと足元線が綺麗にならないことが多い。 その場合、GIMPのパス機能を使って、パスの破線を引くことが可能であり、これを足元線の代りにしてもいいかもしれない。
 破線パターンは色々とカスタマイズ可能なので、斜面線の間隔などに合わせて調整してみるといい。






まあ、それっぽくなっているような。







 戻る