お絵描きソフトInkscape(インクスケープ)の使い方を初級レベルから上級レベルまで広く紹介しています。
情報追加のリクエストや分かりにくい点があれば下のCONTACTフォームからどうぞ。

Inkscapeでオリジナルのマーカーを作ってみた

 このページでは、Inkscapeにあらかじめ用意されているマーカー(組み込みマーカー)の図柄に加えて、オリジナルの図柄をマーカーとして設定できるようにする手順について紹介します。

  (参考:マーカーを描く

(2023.04.11更新)

はじめに

 具体的には、キャンバス上に描いたオブジェクトを、メニューからオブジェクト > オブジェクトをマーカーにを操作してマーカーに変換すると、そのドキュメント内で利用可能なオリジナルマーカーにすることができます。

 そのドキュメント内で使われているマーカーは、それが組み込みマーカーであるかオリジナルマーカーであるかによらず、ドキュメントの中にマーカーデータ(<marker>エレメント)として格納されます。

 その機能を生かして、他のドキュメントでも再利用可能なオリジナルマーカーの作り方を以下のように試してみました。

どんなマーカーを作るか

 まず目指すゴールですが、次のように飛行機の図柄から組み込みマーカーの矢印と同様にパスに沿って描かれるマーカーを作ってみます。これができればどんなオブジェクトでも再利用可能なマーカーにすることができるはずです。(なお、この飛行機の図柄はInkscapeに組み込まれているシンボルの1つです。参考:シンボル(図形部品)を描く

オリジナルマーカーの角度について

 マーカーが設定対象のオブジェクトのアウトラインに対してどのような角度で描かれるのかは、マーカーの元にしたオブジェクトがマーカーに変換する直前に水平方向に対してどんな角度で描かれていたのかによるようです。

 試しに、次のように垂直方向と水平方向に描いた2種類の飛行機の図柄をそれぞれマーカーに変換して、パスに適用してみます。

 すると、マーカーに変換する前の角度のままでマーカーが描かれることがわかります。

 オリジナルの飛行機マーカーはアウトラインに沿う方向を向いてほしいので、マーカーに変換する前にあらかじめ水平方向に描いておくことにします。

オリジナルマーカーの色について

 マーカーの色は、基本的にマーカーへ変換する前のオブジェクトの色のままになります。変換前のオブジェクトのスタイルをそのままマーカーデータ(<marker>エレメント)にしているからだと思います。

 一方で、ほとんどの組み込みマーカーは設定先のパスのストロークの色と同じ色で描かれます。

 オリジナルの飛行機マーカーも同じように設定先のパスと色を揃えるようにしたいので、<marker>エレメントに変換した後のSVG形式ファイルを直接手で編集して、マーカーのスタイルを書き換えて、固定の色でなく設定先のストロークの色になるようにします。

 そのためには、マーカーのスタイルに記述されている色指定のところを「context-stroke」や「context-fill」に書き換えます。そうすると、設定先のパスのストロークの色やフィルの色をマーカー自身の色に流用してくれるようになります。具体的な書き換え方はこの後紹介します。(SVGバージョン2の仕様らしいので、この機能がInkscape以外のSVG編集ソフトでも有効なのかは不透明ですが)

オリジナルの飛行機マーカーを作る

 さて、オリジナルの飛行機マーカーを作ってみます。

 まず、次のように水平方向を向いた飛行機の図柄のパスを描きます。後で色の変化を観察するために緑と青の2つのパスを描いてみました。

 そして、1つずつ選択してメニューからオブジェクト > オブジェクトをマーカーにを操作します。すると、キャンバス上からこの2つのパスは消えて、マーカーのダイアログの一番上の行に登録されます。

 そして、このドキュメントをSVGファイルとして保存します。このSVGファイルはオリジナルマーカーのライブラリのように使うつもりなので、例えば「MyMarkers.svg」のような名前で保存しておきます。

自動的に同じ色になるようにする

 次に、この保存したSVGファイルをテキストエディタで編集します。SVGファイルの中を一部分だけ抜粋すると次のようになります。2つの<marker>エレメントがあって、一方が緑の飛行機でもう一方が青の飛行機にあたりますが、上ですでに書いたように、このマーカーを設定したときに設定対象のオブジェクトのストロークやフィルと同じ色になるように、赤字で示したスタイルを書き換えます。

<defs>
    <marker>
      <path
         d="M 43.039147,24.464814 H 29.383525 l -11.379704,18.96616 h -5.310539 l 6.82783,-18.96616 H 8.9000729 L 5.8654525,29.016692 H 1.3135785 L 3.5895344,22.188873 1.3135785,15.361054 h 4.551874 l 3.0346204,4.551878 H 19.521112 L 12.693282,0.94677163 h 5.310539 L 29.383525,19.912932 h 13.655622 a 2.275941,2.275941 0 0 1 0,4.551882 z"
         style="fill:#ffffff;fill-opacity:1;stroke:context-stroke;stroke-width:1.89354;stroke-dasharray:none;stroke-opacity:1"
         id="path24937-8-67-9" />
    </marker>
    <marker>
      <path
         d="M 43.03914,24.464814 H 29.38348 l -11.379666,18.96616 h -5.310576 l 6.82783,-18.96616 H 8.9000283 L 5.8654456,29.016692 H 1.3135716 L 3.5894897,22.188873 1.3135716,15.361054 h 4.551874 l 3.0345827,4.551878 H 19.521068 L 12.693238,0.94677163 h 5.310576 L 29.38348,19.912932 h 13.65566 a 2.275941,2.275941 0 0 1 0,4.551882 z"
         style="fill:context-fill;fill-opacity:1;stroke:#0000ff;stroke-width:1.89354;stroke-dasharray:none;stroke-opacity:1"
         id="path24937-8-67-6" />
    </marker>
  </defs>


 上のマーカー(緑色の飛行機)はフィルを白に固定し、マーカーのストロークを設定先のストロークと同じ色になるように「context-stroke」に書き換えています。下のマーカー(青色の飛行機)はストロークは青のままに固定し、マーカーのフィルを設定先のフィルと同じ色になるように「context-fill」に書き換えています。

 これでオリジナルの飛行機マーカーを格納したSVGファイルは作成完了です。

オリジナルマーカーを使ってみる

 このマーカーを試してみます。適当に新規ドキュメントを開いて、適当なパスを描きます。そして、さきほど保存したマーカーを格納したSVGファイルをインポートします。すると、マーカーのダイアログにオリジナルマーカーが現れます。


 これらをマーカーとして設定すると、次の左側の絵のように緑色の飛行機マーカーのストローク部分はパスのストロークと同じ色(赤)になります。一方、青色の飛行機マーカーのストローク部分は青で固定されているので、青のままになります。ここで、設定対象のパスのフィルを次の右側の絵のように例えば紫に変更すると、青色の飛行機のフィルもそれと同じ紫に変化します。意図したとおりのマーカーになっていることが確認できました。

 青色の飛行機の<marker>エレメントをさらに書き換えて、context-fillではなく、context-strokeにすると、次のように、青色の飛行機のフィルの色は設定対象パスのストロークの色になります。