[INDEX]
2003-02-13

SVGの基本要素たち

今更だが、SVGについて勉強中である。SVGではいろんなことができ過ぎるので、何ができて何ができないのかがよく分からなくなる。一般の人はテキストエディタでがりがりSSVGのソースを書く人もそうはいないだろうが、プログラマの端くれとしてはそんなものくらいは手で書けないといけないのである。

というわけで、しばらくはファイルを書いては表示してみる、ということを繰り返していたのだが、どうにも面倒だ。それぞれの要素がどんな属性を持っているのか、そしてその属性の値を変えたらどのように表示が変わるのか、そんなことを手軽にわかるようになっていればいいなと考えた。

SVGはDOMレベル2に準拠したJavaScriptのインタフェースを持っているので、HTMLと違ってプログラムによるデータ構造へのアクセスが簡単である。そいつとHTMLのフォームを使って属性値を変えるしくみを作ってみた。これでいちいち属性値の効果を調べるために新しいSVGファイルを作っては読み込み、ということをしなくても済む。実のところ、Netscape Navigatorでは、何度もプラグインを含むページを再読み込みすると、だんだんプロセスが肥大化して重たくなってしまうという問題が起こっている。かといってInternet ExplorerではJavaコンソールが使えないし、JavaScriptのエラーメッセージも頓珍漢なアラートダイアログを出すだけなのでデバッグには不向きだ。もっとも致命的なのはSVGプラグインとブラウザとのインタフェースがないことである。

そんなわけで、このページはNetscapeを使えばスクリプトが動作して、多少は役に立つはずだ。I.E.の人は単純な図形が表示されているだけで、何も面白くないだろう。それはどうしようもないことなので、ご容赦願いたい。みんなI.E.を使っているのに、それではSVGって役に立たないの?と思う人もいるだろうが、それは違う。少し制約があるだけで、このページのようなことをしようと思わなければ問題ない。

'line'要素

まずは<line>要素だ。位置情報以外の属性を定義していない。つまり、デフォルトの属性値が使われている。始点や終点の座標を変えると、それに伴って線が移動するのがわかるだろう。

線の色が薄いんじゃないかと思われるだろうが、実は最初に見えているのは線そのものではない。これは、属性値のデフォルトがfill="black"、stroke="none"になっているためである。なんかこれはおかしい感じだ。フォームでstroke="black"とすると、ちゃんと濃い線が表示されるだろう。好きな色を入れてみて欲しい。ちなみに、色は名前でも指定できるが、"#FF8844"のようにRGBの数値でも指定できる。透明度は0から1の小数値で指定する。

stroke-linecapは線の先端の形だ。この大きさだと良く分からないだろうから、SVGビュアーの右ボタンクリックでメニューを出し、「ズームイン」で拡大してみて欲しい。stroke-linecapには"butt"、"round"、"square"が指定できる。それぞれ入力して違いを確かめて欲しい。

line
x1= 始点のX座標
y1= 始点のY座標
x2= 終点のX座標
y2= 終点のX座標
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-opacity 線の透明度
stroke-width= 線の幅

'rect'要素

次は<rect>要素だ。デフォルトだと真っ黒に塗りつぶされてしまう。fill="none"、stroke="green"などとしたら見やすくなるだろう。

<line>と似たような属性だが、角の丸みを指定できる。

rect
x= 始点のX座標
y= 始点のY座標
width=
height= 高さ
rx= X軸方向の角の丸み
ry= Y軸方向の角の丸み
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-linejoin 線と線との交点の形状
stroke-opacity 線の透明度
stroke-width= 線の幅

'circle'要素

<circle>要素は特に言うことはないだろう。

circle
cx= 中心のX座標
cx= 中心のY座標
r= 半径
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-opacity 線の透明度
stroke-width= 線の幅

'ellipse'要素

<ellipse>要素は楕円である。X方向とY方向のそれぞれに半径を指定しなければならない点以外は<circle>と同じ。

ellipse
cx= 中心のX座標
cx= 中心のY座標
rx= 半径
ry= 半径
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-opacity 線の透明度
stroke-width= 線の幅

'path'要素

かなりややこしいのが<path>要素だ。これは"d"属性に複数の点と、その繋ぎ方を指定しながら線を引いていくというもの。Cubic Bezier曲線なども描けるのだが、詳しい説明は仕様書を見て欲しい。ちなみに、<circle>の説明では言わなかったが、円の一部の図形(扇形)などはこの<path>を使って描くものらしい。

path
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-linejoin 線と線との交点の形状
stroke-opacity 線の透明度
stroke-width= 線の幅
d= パスの描画リスト

'polyline'要素

<polyline>要素は<path>と似ているが、曲線は描けないので、あんまり面白くない。

polyline
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-linejoin 交点の形状
stroke-opacity 線の透明度
stroke-width= 線の幅
points= 点のリスト

'polygon'要素

<polygon>要素はいわゆる多角形で、<polyline>の閉じたものである。これも<path>の"d"属性の最後に"Z"を指定して閉じてやることで代用できる。

polygon
fill= 塗りつぶしの色
fill-opacity= 塗りつぶしの透明度
stroke= 線の色
stroke-linecap 先端の形状
stroke-linejoin 交点の形状
stroke-opacity 線の透明度
stroke-width= 線の幅
points= 点のリスト

以上が、SVGの基本要素の一部である。'text'要素とか、'filter'要素とか、'transform'属性なんかについてはまたいずれ書きたいと思っている。

以上
kazm-s@shorindo.com