SVGライブラリ
JavaScriptのScalable Vector Graphics (SVG)は、2Dグラフィックスを記述するための XMLベースのマークアップ言語である。本機能は、SVGの機能をラップしたカスタムライブラリである。事務的作業において発生する作図(構造図の作成等)を容易に行うことを目的としたものである。
作図の例・血圧管理カレンダー クラス構造図(抜粋)
ライブラリーのソースコード
機能一覧
- 基本操作
- 補助線の表示
- 矩形を描く・SRectクラス
- 直線を引く・SLineクラス
- 折れ線を引く・SPoliLineクラス
- 文字列を表示する・STextクラス
- 複数行の文字列を表示する・SMultiTextクラス
- ディスクを描く・SDiskクラス
- 円を描く・SCircleクラス
- イメージファイルを表示する・SImageクラス
- [ 応用 ] ハイパーリンクを作成する
- [ 応用 ] SVG領域の座標を確認する
基本操作
以下は SVGライブラリを使って作成したごく簡単な図である。
HTML
JavaScript
補助線の表示
canvasと svgの表示領域を重ね合わせ、canvasに格子状の補助線を引けば、svg要素を配置するときに大まかな座標が把握できて便利である。上記は 50ピクセルの幅で格子を描いたものである。
HTML
JavaScript
矩形を描く・SRectクラス
矩形を描く。矩形の中にテキストを表示する。複数の矩形を直線で結ぶ。
staticプロパティ
コンストラクタ
プロパティ
メソッド
使用例
矩形を描く
矩形を描き、中に文字列を表示する。矩形の枠線の太さ、色、背景色、および文字のフォント、サイズ、色、表示位置を変える。
複数の矩形を連結線で結ぶ 連結線の終端を矢印にする
直線を引く・SLineクラス
開始点と終了点を指定して直線を引く。始点および終点に矢印を描くことができる。
staticプロパティ
コンストラクタ
プロパティ
メソッド
使用例
折れ線を引く・SPolylineクラス
指定した座標に沿って折れ線を描く。始点および終点に矢印を描くことができる。
staticプロパティ
コンストラクタ
プロパティ
メソッド
使用例
文字列を表示する・STextクラス
指定した開始点から文字列を表示する。開始点は文字列を表示する矩形領域の左上隅になる。
staticプロパティ
コンストラクタ
プロパティ
使用例
y方向の表示位置の調整
文字列の表示では、文字列の上端をコンストラクタの引数に指定した y点としたいので、text要素の dominant-baselineプロパティを Hangingにしている。これは、文字列の表示の基準線を文字列の上端とするものである。しかし日本語の表示の場合、下図の "あ" のように、若干上に突き出してしまう。
多くのフォントはラテン文字(アルファベット)を基準に設計されていて、例えば、"h"は上部が上端の基準線より突き出るのが一般的である。この動作が日本語(CJK文字)の表示にも影響を与えるので、このような現象になるらしい。
本ライブラリでは、これを調整するための補正を行っている。実際の文字列の表示位置(文字列を表示する矩形領域の始点とサイズ)は、text要素の getBBoxメソッドにより取得できるので、指定の y点との差分だけ文字列の表示位置を下にずらしている。
複数行の文字列を表示する・SMultiTextクラス
指定した開始点から複数行の文字列を表示する。改行コードを含んだ文字列は、改行コードで改行する。開始点は文字列を表示する矩形領域の左上隅になる。
staticプロパティ
コンストラクタ
プロパティ
使用例
ディスクを描く・SDiskクラス
指定した幅と高さのディスク(円柱)を描く。描画の開始点はディスクの上端と左端を結んだ左上の点になる。
staticプロパティ
コンストラクタ
プロパティ
使用例
円を描く・SCircleクラス
指定した座標を中心として指定した半径の円を描く。
staticプロパティ
コンストラクタ
プロパティ
使用例
イメージファイルを表示する・SImageクラス
指定したURLからイメージファイルを読み込み、指定した領域に表示する。
領域は、指定したサイズが一辺の長さとなる正方形である。イメージは、アスペクト比を維持したまま、その中に収まるように拡大ないし縮小して表示される。デフォルトではイメージの左上隅が領域の左上の点に来るように配置される。指定により領域の中央にイメージを配置することもできる。
コンストラクタ
メソッド
使用例
[ 応用 ] ハイパーリンクを作成する
SVGで作成した図形要素は、HTMLのタグ要素と同様に addEventListenerメソッドを実装し、UIイベントを補足することができる。ここではライブラリのクラスオブジェクトを通してイベントハンドラを実装する方法について説明する。
左の文字列にマウスカーソルを置くと、文字の色が変わり下線が現れ、クリックすると alertウィンドウを表示する。カーソルを外すと元に戻る。
ポイントは、SVGので作成した要素オブジェクトの参照方法である。これは、createElementNSメソッドで作成するオブジェクトで、表示する要素の種類に合わせて、"rect", "line", "text" といったものがある。
SVGライブラリのクラスでは、このオブジェクトはインスタンス変数のひとつとして保持される。従って、要素に対して addEventListenerメソッドを実装するには、その変数名が分かっていなければならない。以下に各クラスにおける要素のインスタンスの変数名を示す。
矩形・SRectクラスobject.rect
直線・SLineクラスobject.line
折れ線・SPoliLineクラスobject.lines
文字列・STextクラスobject.text
ディスク・SDiskクラスobject.top / object.rect / object.bottom
円・SCircleクラスobject.circle
イメージ・SImageクラスobject.image
複数行の文字列・SMultiTextクラスobject.textList[text]
これは、やや特殊である。使用例を示す。
[ 応用 ] SVG領域の座標を確認する
SVG領域内の任意の点をマウスでクリックすると、マウスを押している間は座標を示すサブウィンドウが表示され、マウスを離すと閉じる。(実際に動作します)
サブフォームの定義
![[image6.png]](image6.png)