カスタム図形定義スクリプト
customShapes.js

〜面倒な図形も簡単に記述できるかも

written by DEFGHI1977@xboxlive

NOTE:Blink系ブラウザで本スクリプトが使っていたAPIが削除されてしまいました. その為, 正しく動作させるには次のpolyfilライブラリを導入して下さい.
pathseg

はじめに

本ページでは拙作「customShapes.js」についての紹介と動作サンプル(兼テストケース)について解説します.

customShapes.jsって何?

customShapes.jsは一言で言うと「SVG(及びHTMLのcanvas要素)における再利用可能な図形要素を定義する仕組み」を提供します.

SVGが標準的に提供している図形はline, polyline, polygon, rect, circle, ellipse, pathと言った7種類のみです. しかし世の中にはこれらの他にも特徴的な図形は数多く存在していますから, そのような図形をSVGで記述するには機能が少なすぎます. 確かに汎用的なpath要素を使えばそれらの図形を記述することは出来るでしょう. しかしその図形を定義するパス文字列を読み解くことは中々簡単な作業ではありません.

ではSVGをサポートするjavascriptライブラリを使えば良いかというと, 必ずしもそうとは限りません. Snap.svgやd3.jsには特殊な図形を描画する専用の仕組みが用意されていることがありますが, 何れにせよスクリプトコード内部で図形を描画しているため, SVGコードのみを眺めてもそれがどのような内容となるかが判らないのです.

これらの問題をcustomShapes.jsが解決します.

例を示します. 次のSVGコードはそのままでは意味のないコードですが, なんとなく扇型が描かれそうな内容に見えませんか? ここでcustomShapes.jsを読み込ませることでtype="pie"を持ったpath要素が実際に「扇型のpath要素」と解釈され, その内容でグラフィックが描画されるのです.

扇型を指定したSVG

しかも, このような図形を自由に定義することができるのです. このことからcustomShapes.jsはSVGを拡張していると言えます.

えっそれだけ?

はい, 基本的にはそれだけです. ですが, これ以外にも便利な機能を多数搭載しています. 例えば, これまで難しかったパス図形の3D変形もcustomShapes.jsを使えば次のように記述することが可能です.

扇型を3D変形したSVG

動機付け

web界隈に於いて, 昨今急激に知名度を上げてきた技術の一つにSVG(Scalable Vector Graphic)が挙げられます. SVGを用いるとwebブラウザ上でHTMLに似たマークアップを読み込ませることで自由にベクタグラフィックを描くことができます. SVGそのものは利用場面をweb環境に絞ったものではありませんが, 結果としてwebの表現力を大きく向上させることに一役買っています.

しかし実際にSVGを触っていると, 様々な面で今ひとつ使い難いと言った印象が拭えません. 特に現状のSVG環境ではコードの再利用性の面で難があり, 似たような機能(図形・構造)を実装する場合においても, 都度内容をコピーせざるを得ない場合がよくあります.

この問題を解決する方法の一つとして, d3.jsやSnap.svg等の何らかのjavascriptフレームワークないしはモジュールを導入し, javascriptコードレベルで再利用性を高めるものがあります. しかし, この方法では逆にそのフレームワークにコードが縛られてしまう結果を招き, 却って汎用性を損ねる結果となりかねません.

そこで筆者はSVG仕様そのものを拡張する事は出来ないかと考えました. その結果得られたものがこの「customShapes.js」です.

でもそれって今度はその「拡張」に縛られてしまうんじゃないの?

はい, そのとおりです. SVGの記述は筆者式の「拡張」に縛られてしまいます. しかし可能な限りDOMAPIに近い部分で機能を拡張するように設計していますから, SVGを主眼としたjavascriptライブラリの種類に依らない汎用的なアドオン機構として導入することが出来るのです.

customShapes.jsの特徴

以下にcustomShapes.jsの特徴を示します.

というように, 地味ながら画期的な結果が得られます.

制限等

とは言え, 注意すべき点もあります.

作成したグラフィックを配布する

本スクリプトを使って作成したグラフィックをSVGファイルとして配布する場合, 一旦生成したSVG要素をシリアライズしたものをファイルに保存するようにしましょう. 元々のSVGコードだけではcustoShapes.jsが動作しない環境において内容を確認することが出来ません. 具体的な方法については各自調べてみて下さい.

動作環境

customShapes.jsは下記を充たす広範な環境で動作します.

なお, 本スクリプトは(x)HTML文書内でのインラインSVG環境, 及びSVG文書内で動作します.
本スクリプトを組み込んだSVG画像をimg/image/input要素, ないしはcssのbackground-image等から読み込んだ場合には正しく動作しません.

必要となるスキル

本スクリプトを使いこなすには最低限SVGのパス文字列仕様を理解しておく必要があります. ツールで出力したパス図形を用いる場合であっても, 最終的にはその内容を読み解かねばなりません. この点でハードルが高いとも言えるため, 導入にはご注意下さい. (なお, 一旦図形を作ってしまえば後はどうとでもなります. )

ライセンス

customShapes.jsはMITライセンスのもとで自由に利用・配布が可能です.

技術メモ

本スクリプトは次のapiを用いています.

導入

customShapes.jsの導入は他のライブラリと全く変わりません.

  1. ここからスクリプトファイル本体をダウンロードし, 適当な場所に保存します.
  2. スクリプトを組み込みたいHTML文書もしくはSVGを文書に対して次のコードを挿入します.
    ※組み込む対象によって記述が若干異なります.
    
    
    ]]>
    
    
    
    				

    図形の描画範囲(bounding box/bbox)をbboxパラメータに設定しておくことが可能です.

    parameter…パラメータ化したパス

    type="parameter"はパラメータ化したパスを描画します. path属性に(そのままでは描画できない){p[0〜9]}というキーワードを挿入しておくと, 図形描画時にp0〜p9属性で指定した内容で置き換えた上で図形を描画します.

    path…パラメータ化したパス, p0〜p9…パラメータの値. 全て数値として解釈されます.

    この機能はツールから出力したSVGをスクリプトから操作するケースを想定しており, ある意味使い捨ての図形を用いる際に有効です.

    f(x)…関数グラフ

    type="f(x)"は関数グラフを描画します. 折れ線に依る近似図形を生成します. グラフを描く際の基準値を指定可能です.

    f…関数式(変数名はx固定), from,to…変数xの定義域, count…折れ線に依る近似頻度, smoothtrueで滑らかに繋ぐ, origin…グラフを描く上での原点, units…グラフの単位描画サイズ(負値を指定することで軸を反転可能)

    f(t)…関数グラフ(媒介変数形式)

    type="f(t)"は媒介変数tによる関数グラフを描画します. 折れ線に依る近似図形を生成します.

    fx,fy…関数式(変数名はt固定), from,to…変数tの定義域, count…折れ線に依る近似頻度, smoothtrueで滑らかに繋ぐ, origin…グラフを描く上での原点, units…グラフの単位描画サイズ(負値を指定することで軸を反転可能)

    他の図形の形状を参照するもの

    以下の図形はこれまでとは異なり, 別の図形の形状などから自身を描画します.

    bbox…バウンディングボックス

    type="bbox"は指定した図形要素のバウンディングボックスを描画します.

    target…図形の参照先(省略すると直後の要素を参照)#[id]として指定

    box…ボックス

    type="bbox"は指定した図形要素を囲む矩形を描画します.

    target…図形の参照先(省略すると直後の要素を参照)#[id]として指定, padding-x/y…余白, rx/ry…角の丸め半径

    text要素に対してbox図形を描画することで文字列を枠で囲むことができます.

    通常SVGでは 文字列を枠で囲むのは 難しいとされていますが, このように簡単に 実現することができます.

    target属性を省略すると直後の図形を参照します.

    id値を割り振る必要が 無くなるため, 文字列を 囲む際の使い勝手が向上 します.

    autoballoon…自動吹き出し

    type="autoballoon"は指定した図形要素に外接する吹き出しを描画します.

    target…図形の参照先(省略すると直後の要素を参照)#[id]として指定, x,y…吹き出しの参照先

    吹き出しを 自動生成します

    anchor…アンカー

    type="anchor"は指定した図形要素に対して線分を引きます. 座標は参照している図形要素のバウンディングボックスを基準とします.

    from…始点の参照先, to…終点の参照先, x1,y1…始点座標の直接指定, x2,y2…終点座標の直接指定, sref/eref…座標の指定基準. (t…上, b…下, l…左, r…右)

    上手く組み合わせることで, 吹き出しのようなグラフィックを描くことが可能です.

    例えばこんな 使い方が できます.

    カスタム図形を変形する

    生成したカスタム図形はeffect属性を指定することで更に変形することが可能です. effect属性には変形毎に必要となるパラメータをCSSの書式に似たkey-value形式で記述します. typeプロパティに適用したい変形の名称を指定します.

    none…無変換

    type:none変形は変形を施しません. この値はg要素でeffect属性を集約した際, 一部のカスタム図形に限り変形を適用したくない場合に指定します.

    2d…2d変形

    type:2d変形はパス図形に平面変形を施します. 変形関数にはCSSのtransform関数と同じものを指定することが出来ます.

    transform…変形関数

    3d…3d変形

    type:3d変形はパス図形に3D変形を施します. 変形関数にはCSSのtransform関数と同じものを指定することが出来ます.

    transform3d…変形関数, torigin…変形の原点座標, perspective…視点の高さ, porigin…視点の座標

    projection…射影変形

    type:projection変形はパス図形に対して指定した矩形領域を任意の4点にマッピングするように3D変形を施します.

    box…元となる矩形領域, p1,p2,p3,p4…矩形領域に対応する座標(左上,右上,右下,左下)

    polar…極座標変換

    type:polar変形はパス図形の座標情報を極座標(つまり, xを角度, yを原点からの距離)として解釈し, グラフィックを描画します.

    cx,cy…極(原点)の座標, ut…1回転の長さ, ur…距離値の倍率, rotate…極変換の開始角, anticlock…trueで逆回転, delta…パスの精度

    wavy…波状変換

    type:wavy変換はパス図形を波打たせます.

    ampx, lengthx, phasex…x軸方向の振幅幅, 波長, 位相(振幅のずれ)ampy, lengthy, phasey…y軸方向の振幅幅, 波長, 位相, delta…パスの精度

    shapepath…パスに沿った変形

    type:shapepath変換はパス図形をパスに沿って変形します.

    path…変形の基準となるパス文字列, delta…パスの精度

    freetransform…フリー変形

    type:freetransform変形はパス図形を指定した関数で変形します. 関数指定の変数にはxyを用います.

    f…x座標を求める関数f(x,y), g…y座標を求める関数g(x,y) , delta…パスの精度

    変形パスの精度

    変形の種類・パスの内容によっては出力結果が美しく見えない場合があります. この場合, deltaプロパティの値に適当な値を設定することで改善するでしょう. (初期値は15)

    effectプロパティの集約

    カスタム属性と同様に, (1段に限り)上位g要素のeffect属性にプロパティ値を集約することが可能です. 下では5つの矩形に3d変形を施していますが, 図形のサイズ・視点・消失点の設定をg要素に集約しています. なお, transform属性などのような変形の掛け合わせはサポートしていません.

    カスタム図形の定義の仕方

    先ほどの図形群を使うだけでも役に立たないわけではありませんが, できることなら要件に合わせた自作の図形要素を定義したほうが良いでしょう. customShapes.jsではスクリプトを使って基本図形を自由に定義することが出来ます.

    カスタム図形定義の手順

    カスタム図形を定義するには次の手順を踏みます.

    1. カスタム図形の識別名を決定します.
    2. 図形描画に必要となるパラメータを決定します.
    3. テンプレートとなるパス図形を作成します.
    4. CustomShapes.defineメソッドを用いてカスタム図形をフレームワークに登録します.

    とは言え, 目的の図形を得るには相応の試行錯誤が必要となるため, 常にこの順に作業を行う必要があるわけではありません. customShapes.jsの内容を参考とし, 色々試してみて下さい.

    具体的なサンプルを用いた解説

    この定義の仕方についてはあれこれ議論するよりも実際のコードを見てもらったほうがよくわかります. 以下は新たに図形「progress」を定義する例です.

    ここでCustomShapesはcustomShapes.jsが定義したカスタム図形の管理オブジェクトで, このオブジェクトのdefineメソッドが実際にカスタム図形を登録するための関数です.

    CustomShapes.defineメソッドは引数を4つ(type, attrSetting, path, filler)とります.

    1. type
      一つ目の引数はカスタム図形の名称です. これはSVGコード上ではpath要素のtype属性に記述する内容に相当します.
    2. attrSetting
      二つ目の引数はカスタム図形を決定するためのパラメータのリストを指定します. これはSVGコード上で記述する属性名に相当するものです. なお, その動作上, パラメータとしてdを用いることはできません. これはpath要素のd属性に相当するためです.
      この例では基本となる「矩形範囲の幅が, 指定した割合で増減することで進捗状況を表す」ようにするため, パラメータとしては矩形を定める「x, y, width, height」に加え, 割合に相当する「rate」を設定しています.
    3. path
      三つ目の引数はカスタム図形を表すパス文字列を指定しています. この時, パス文字列の一部を{[パラメータ名]}と言った内容で記述しておくと, スクリプト側でSVGコードでの属性値の内容を用いて中身を書き換えてくれます.
    4. filler
      四つ目の引数はパラメータの内容からパス文字列を生成する際, 足りないパラメータを新たに追加する処理を指定します(省略可). この例ではwidthrateから求めたhというパラメータを新たに算出しています. これは先ほどのpathの内容とセットで考えるようにします.

    attrSettingとパラメータ型

    パラメータattrSettingには[属性名-パラメータ型]の連想配列形式で指定します. これは属性毎にどのような内容が渡されるかを指定するもので, 単位が指定された際の実ピクセル数を算出する場合などに利用されます. なお, この設定を元にカスタム図形の属性値は数値(もしくは配列値, 文字列値)に変換され, filter関数の引数に渡されます.

    指定可能な型には次のものがあります. なお値のリストを指定する場合は, その区切り子として,の他, 空白を用いることができます.

    解説属性等
    x x軸値
    渡された内容をx軸方向での大きさとして解釈します.
    つまりビューポートのwidth値が200pxであれば, 50%は100pxに相当します.
    x, cx, rx, r等
    y y軸値
    渡された内容をy軸方向での大きさとして解釈します.
    つまりビューポートのheight値が150pxであれば, 50%は75pxに相当します.
    y, cy, ry等
    point 座標値
    渡された内容をx軸値とy軸値のセットとして解釈します.
    origin, units
    box 矩形
    渡された内容を矩形値{x,y,width,height}のセットとして解釈します.
    bbox
    deg 角度値
    渡された内容を角度値(→方向を0度とし, 時計回りに360度とする)として解釈します.
    単位としてrad, deg, turn, gradを指定することが出来ます.
    rotate, angle等
    num 数値
    渡された内容を数値として解釈します.
    単位を指定することは出来ません.
    n等
    string 文字列
    渡された内容を文字列として解釈します.
    path, f, target
    boolean 真偽値
    渡された内容を真偽値(true/false)として解釈します.
    closed
    xs x軸値の配列
    渡された内容x軸値の配列として解釈します. 単位を挿入することも出来ます.
    -
    ys y軸値の配列
    渡された内容y軸値の配列として解釈します. 単位を挿入することも出来ます.
    -
    points 座標値の配列
    渡された内容をx軸値とy軸値のセットの配列として解釈します.
    points
    degs 角度値の配列
    渡された内容を角度値の配列として解釈します単位を挿入することも出来ます.
    -
    nums 数値の配列
    渡された内容を数値の配列として解釈します.
    -
    strings 文字列の配列
    渡された内容を文字列として解釈します.
    -
    3dpoint 3次元座標値
    渡された内容をx座標,y座標,z座標として解釈します.
    -
    3dpoints 3次元座標値の配列
    渡された内容を3次元座標値のリストとして解釈します.
    -

    以下は角度値の動作例です.

    パス文字列のパラメータ化

    パス文字列をパラメータ化するのは中々イメージし難いかも知れませんが, 大体次のようにすると上手く行きます. まず, 具体的なパス図形を実際に描きます. そこから得られたパス文字列のどこを書き換えたら使い勝手が良くなるかを考えます.

    例えば直角三角形を描く事を考えてみましょう. 下記は実際に直角三角形をpath図形で描いてみたものです.

    ここからどの部分をパラメータ化したら良いかを考えていきます. この場合, 起点となる座標x,yとx軸方向の幅wとy軸方向の高さhがあれば良さそうです. その結果パラメータ化したものがこれです.

    M{x},{y}h{w}l{-w},{h}z

    ここで{-[パラメータ名]}となっている部分は[パラメータ名]から得られた値のマイナス値を挿入することを表します. 上記を用いてカスタム図形を定義してみましょう.

    このように新たな直角三角形図形要素を定義することが出来ました.

    パラメータの不足分を補う

    先ほどの例は至極単純なものでしたが, より高機能な図形を定義したい場合があります. このような場合, 図形要素に記述したパラメータだけではパスを構成することが難しいケースがあります. 例えばサインカーブを表す図形を考えてみましょう. この場合, パラメータとしては振幅や振動数等が考えられますが, その内容を直接パス文字列に変換することは出来ません. そこで, 専用のfiller関数を定義し, その中でサインカーブを折れ線で近似するようにします.

    折れ線を算出するのに必要なデータはfiller関数の引数として渡されるsourceオブジェクト内に格納されています. ここに新たにpointsプロパティを追加し, この中に折れ線データを設定します. こうすることでライブラリは勝手にテンプレートのパス文字列と算出結果とを統合して図形を描画します.

    なお, CostomShapes.connectメソッドは座標の配列からパス文字列を生成する関数です. 第2引数にパスを閉じるかどうかの真偽値を, 第3引数にパスを滑らかにするかの真偽値を指定します.

    既存の図形から新たな図形を定義する

    CustomShapes.getPathメソッドを利用すると既存のカスタム図形を元に新たなカスタム図形を定義することができます. 詳しくはソースコードを参照してください.

    カスタム図形の操作の仕方

    ここまではカスタム図形をSVGコード中に静的に挿入する方法について見てきました. がcustomShapes.jsで作成した図形はDOMからも操作することが可能です. 例を示します.

    コードを見ると判るようにDOMそのものが拡張されていることがわかります.

    スクリプトによるカスタム図形の取得

    カスタム図形に対応するSVGPathElementオブジェクトを取得する方法には次の方法があります.

    • document.createElementNSメソッドに依る新規生成
      但し, 要素名として「path:[type]」を指定します. 型名の前の「:」の部分は「:;+-」の何れかを指定することが可能です.連携するライブラリの種類に応じて使い分けてください.(ライブラリによっては文字の意味付けが干渉し正しく動作しない場合があります.)
    • querySelectorメソッドによるDOMの検索
      例えば「path[type={図形名}]」とすることで他の要素と同様にカスタム図形を抽出することが出来ます. なお, この機能が有効となるのはdocument.DOMContentLoadedイベント以降です.
    • Element.cloneNodeメソッドに依るクローン生成
      CustomShapes.jsはElement.cloneNodeメソッドを拡張します. ※従来のcloneNodeメソッドは_cloneNodeメソッドとして呼び出すことが可能です.

    customShapes.jsでは上記のいずれにおいても拡張されたSVGPathElementが得られます.

    ※HTMLElementのinnerHTMLプロパティによるSVGの描画を行う場合は下記に示すdrawShapeメソッドと組み合わせて下さい.

    拡張される機能

    customShapes.jsが拡張する機能は次のとおりです.

    • パラメータ属性に対するアクセッサプロパティ「cattr」が追加されます.
      この内容を書き換えることで図形の形状を変更することが出来ます. これはsetAttributeメソッドに依る内容の書き換えに対するショートカットです.
    • shapeTypeプロパティが追加されます.
      カスタム図形の種類を判別することができます.
    • drawShapeメソッドが追加されます.
      単位に%などを指定していた場合, ビューポート(SVG要素等)の大きさが変更されたタイミングで図形の内容を再算出する際に呼び出します.
      なおdrawShapeメソッドはdomを構成する全ての要素に対して実行可能です. この場合, 子孫のカスタム図形が全て再描画されます.
      また, SVGグラフィックをHTML.innerHTMLメソッドやDOMParserオブジェクトを用いてソースコードから生成した場合にdrawShapeメソッドを実行すると, 以降カスタム図形が描画されるようになります.
    • effectプロパティが追加されます.
      style属性のように, effect属性の内部をプロパティ毎に操作することが可能です.
      また, effect.removeメソッドを実行するとeffect属性を削除することができます.
    • observerプロパティが追加されます.
      内部で利用しているMutationObserverオブジェクトが格納されています.

    カスタム属性を削除する

    生成したSVGグラフィックを外部に保存する場合など, 自作したカスタム属性を削除する必要がある場合はCustomShapes.cleanメソッドに対象となる要素を渡してください. カスタム属性を全て削除した新たな要素ツリーを生成します.

カスタム図形をcanvas要素に描画する

customShapes.jsで作成したカスタム図形はSVGのみならずcanvas要素に描画することも可能です. 本スクリプトを読み込むと, CanvasRenderingContext2dオブジェクト(getContext("2d")メソッドで得られるオブジェクト)に2つのメソッドが追加されます.

context.customShape(type, params)

customShapeメソッドはcanvas要素にカスタム図形を定義します. 引数typeにカスタム図形の型名を, paramsにカスタム図形に対するパラメータをjson形式で指定します. パラメータはSVGでのカスタム属性の内容を指定します.

context.definePath(path)

definePathメソッドはSVGのパス文字列を用いてcanvas要素にパス図形を定義します. canvas要素における図形定義は, 通常lineTo等のメソッドを手続き的に実行して行いますが, 本メソッドを用いると単一のコマンド文字列のみで簡潔に図形を定めることが可能になります.

参考)Snap.svgとの連携

最後にcustomShapes.jsとSVGライブラリとして著名なSnap.svgとの連携について示します.

このように, customShapes.jsはSnap.svgよりも低いレイヤで動作するため, お互いに競合すること無くすんなりと連携可能です.

  • カスタム図形を生成するにはPaper.pathメソッドではなくPaper.elメソッドを利用します.
  • カスタム図形用に定義した属性もアニメーション化可能です.

参考)customShapes.jsが提供するAPI

以下にcustomShapes.jsが提供する機能について解説します.

CustomShapes

CustomShapesはcustomShapes.jsの全機能を提供するルートオブジェクトです.

CustomShapes.define(type, attrSetting, path, filler)

CustomShapes.defineメソッドは新たなカスタム図形を定義します.

  • type:カスタム図形名称
  • attrSetting:図形に対応するカスタム属性
  • path:カスタム図形を定義するパスのテンプレート
  • filler:不足パラメータを補完するメソッド

CustomShapes.getPath(type, params, needFix, el)

CustomShapes.getPathメソッドはCustomShapes.defineメソッドで定義したカスタム図形を直接コードから呼び出します.

  • type:カスタム図形名称
  • params:図形描画に必要となるパラメータをjson形式で指定
  • needFix:カスタム図形を取得する際, paramsの内容を補完するかどうか. trueで足りないパラメータを補完します.
  • el:図形を描画する対象となるカスタム図形path要素(必要がある場合). この内容はCustomShapes.defineのfiller関数の第2引数に渡されます.
  • return:生成したカスタム図形に対応するパス文字列

CustomShapes.applyEffect(d, type, params, needFix, el)

CustomShapes.applyEffectメソッドは定義済みのパス変形効果をコードから直接呼び出します.

  • d:変形したいパス
  • type:パス変形名称
  • params:変形に必要となるパラメータをjson形式で指定
  • needFix:パスを変形する際, paramsの内容を補完するかどうか. trueで足りないパラメータを補完します.
  • el:パスを変形する対象となるカスタム図形path要素(必要がある場合).
  • return:変形済みのパス文字列

CustomShapes.getFormatter(template)

CustomShapes.getFormatterメソッドは指定した文字列から, フォーマット済み文字列を取得するための関数を生成します. 主にパス文字列のテンプレートから実際のパス文字列を生成するために利用します. 本メソッドを利用することで, パス文字列を生成する都度テンプレートの内容を解析する必要がなくなります.

  • template:テンプレート文字列
  • return:引数にオブジェクトを受ける関数. 実行するとテンプレートの{{}}で囲まれた部分をオブジェクトの値で置き換えた文字列を返します.

CustomShapes.getMatrix(a, b, c, d, e, f)

CustomShapes.getMatrixメソッドはSVGMatrixオブジェクトを生成します. SVGSVGElement.createSVGMatrixメソッドへのショートカットです.

  • a,b,c,d,e,f:アフィン変換行列の内容
  • return:生成したSVGMatrixオブジェクト

CustomShapes.clean(el)

CustomShapes.cleanメソッドは指定した要素ツリーからcustomShapes.jsが必要とする属性群を削除し, 新たに通常のSVG要素ツリーを生成します.

  • el:余分な属性を削除したい要素ツリーのルート要素
  • return:新規に生成した要素ツリーのルート要素

CustomShapes.connect(points, closed, smooth, isMiddle)

CustomShapes.connectメソッドは指定した座標の内容を連結したパス文字列を生成します. 閉じたパス, 滑らかな曲線等を生成することが可能です. なお, 全て座標は絶対位置指定になります.

  • points:連結したい点のx座標, y座標のリスト
  • closed:trueで閉じたパスとして扱う
  • smooth:trueで滑らかに連結する(Catmull-Rom曲線)
  • isMiddle:trueで先頭のMコマンドを省略する
  • return:生成したパス文字列

CustomShapes.toRelative(path)

CustomShapes.toRelativeメソッドは指定したパスの内容を形状をそのままに相対位置指定で書き直します.

  • path:変換対象のパス文字列
  • return:生成したパス文字列

CustomShapes.map(_d, m)

CustomShapes.mapメソッドは指定したパスの内容に対して行列(SVGMatrixオブジェクト)を適用し, パスを変形します.

  • _d:変換対象のパス文字列
  • m:適用する行列(SVGMatrix)
  • return:生成したパス文字列

CustomShapes.getBBox(d)

CustomShapes.getBBoxメソッドは指定したパスのバウンディングボックスを取得します.

  • d:バウンディングボックス取得対象のパス文字列
  • return:得られたバウンディングボックス情報{x:, y:, width:, height: }のjson形式で取得

CustomShapes.GeneralMatrix

CustomShapes.GeneralMatrixは一般的なn×n行列を表すオブジェクトです. 基本的な行列演算を提供します.

CustomShapes.GeneralMatrix(size)

CustomShapes.GeneralMatrixコンストラクタは指定したサイズの行列を生成します.

CustomShapes.Matrix3d

CustomShapes.Matrix3dは3次元アフィン変換を行うための4×4行列を表すオブジェクトです. CSSのtransform3dプロパティ及びSVGのtransform属性に対応する操作の殆どを提供します.

CustomShapes.Matrix3d.parse(str)

CustomShapes.Matrix3d.parseメソッドは指定したtransform3d文字列からMatrix3dオブジェクトを生成します.

  • str:transform3d文字列
  • return:得られたMatrix3dオブジェクト

CustomShapes.Matrix3d.getTransformMatrix(transform3d, torigin, perspective, porigin)

CustomShapes.Matrix3d.parseメソッドは指定したパラメータからMatrix3dオブジェクトを生成します.

  • transform3d:transform3d文字列
  • torigin:変形を行う際の原点
  • perspective:視点の高さ
  • porigin:視点の位置
  • return:得られたMatrix3dオブジェクト

CustomShapes.Matrix3d.getProjectionMatrix(box, p1, p2, p3, p4)

CustomShapes.Matrix3d.getProjectionMatrixメソッドは指定したboxから4点への射影変換を行うMatrix3dオブジェクトを生成します.

  • box:マップ対象の矩形範囲
  • p1:変換先の左上座標
  • p2:変換先の右上座標
  • p3:変換先の右下座標
  • p4:変換先の左下座標
  • return:得られたMatrix3dオブジェクト

CustomShapes.Matrix3d.toCSS()

CustomShapes.Matrix3d.toCSSメソッドは指定したMatrix3dの内容をCSS書式の文字列に出力します.

  • return:得られたtransform3d文字列