<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SVG &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/svg/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 13 Aug 2025 06:02:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>SVG Colk Board で Vuex を使ってみた話</title>
		<link>https://blog.mach3.jp/2018/08/06/svgcolkboard-with-vuex.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 05 Aug 2018 22:39:24 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Illustrator]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[Vuex]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4430</guid>

					<description><![CDATA[先日リリースしたWebアプリ「SVG Colk Board」の紹介と、 その中身の話を少し綴っておきます。 SVG Colk Board を作った話 SVG Colk Board これは何？ Illustrator 上で [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日リリースしたWebアプリ「SVG Colk Board」の紹介と、 その中身の話を少し綴っておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/Q6wVIsl911oqKE_s8_1B8U7lrpd6z5I6juY0Pm4ZQYCNiBQiTFtX_W0uWzDRU1gLE2PzdDu3PNmiHgrFUqafRIq8mJImNhPFXEb28mhTS4uEzxeD5yUDxiCXUKiPXO7u1W1RxcHUUQ=w1200-h630-no" alt=""/></figure>



<p></p>



<span id="more-4430"></span>



<h2 class="wp-block-heading">SVG Colk Board を作った話</h2>



<p><a href="https://colkboard.netlify.com">SVG Colk Board</a></p>



<h3 class="wp-block-heading">これは何？</h3>



<p>Illustrator 上で図をコピーしてテキストエディタにペーストすると、SVGが出力されます。 しかし、そこで出力されるSVGは不要な記述も多く、末尾に付加されている謎文字のおかげで正常に表示されません。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dpFNQv8ZK29VeQYJstKNhjaS0fiV3kHAE7el-OW2QO4IvcpSvX5x8KlW8ElqCciEhRn76u6sR2xk0paSmH2-5WisWehSuuqh81yh5XBhN5MVfHqZjoULSQBsk69gO-rYRYBZNKQnUQ=w1200-h480-no" alt=""/></figure>



<p></p>



<p>これらをクリーンに最適化する為に作ったのが SVG Colk Board です。</p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li>Illustrator上で図をコピーする</li>



<li>それを SVG Colk Board 上でペーストする</li>



<li>配置された図を選択すると「SVG」「DataURI」ボタンが表示される</li>



<li>「SVG」「DataURI」のボタンをクリックすると、それぞれ最適化された結果がクリップボードにコピーされる</li>



<li>結果をテキストエディタにペースト</li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/SUNW2kVI7ky6Odgavh3-g5rTmJ3q--p_cSl6vDjXj-PJt-o9kLKsqfCkUrgz-qvm6Ar0E0v5izvtxxkW7R31t3eMaAFgD1zb25doXOPuU6xqOiCTxKQmsujJO0OF8GMhOy0QHhB8nQ=w1200-h800-no" alt=""/></figure>



<p></p>



<ul class="wp-block-list">
<li>ペーストした図のデータは localStorage に保存されるので、ブラウザを閉じた後も保持されます</li>



<li>つまり貼り付けられる図の数は localStorage の容量依存です</li>



<li>もちろんブラウザをまたいでは保持されません</li>
</ul>



<h2 class="wp-block-heading">SVG Colk Board の中身</h2>



<p>このアプリケーションは <a href="https://jp.vuejs.org/index.html">Vue.js</a> で作られています。 そして Vue と共に利用しているのが <a href="https://vuex.vuejs.org/ja/">Vuex</a> と <a href="https://github.com/robinvdvleuten/vuex-persistedstate">vuex-persistedstate</a> です。</p>



<h3 class="wp-block-heading">Vuex</h3>



<p>ここでは詳しい説明を省きますが、 Vuexとは、中規模以上のアプリケーション開発向けの状態管理ライブラリで、 公式ではこのように説明されています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Vuex は Vue.js アプリケーションのための 状態管理パターン + ライブラリです。 これは予測可能な方法によってのみ状態の変異を行うというルールを保証し、アプリケーション内の全てのコンポーネントのための集中型のストアとして機能します。<br /><a href="https://vuex.vuejs.org/ja">https://vuex.vuejs.org/ja</a></p>
</blockquote>



<p>簡潔に言うと、状態管理にストア（store）という概念を導入する為のライブラリです。 以下、ものすごくざっくりとした説明をします。</p>



<p>Vue.js のコンポーネントは各々が持つ data の値を基にビューを構築・描画し、必要に応じて処理を行います。 store というのはその data に似た振る舞いをしますが、 data が値へのアクセスで直接変更出来るのに対し、 store はセッターのようなメソッドを介してのみ値を変更する事ができ、 それにより値を保護し、変更を集中管理する事ができます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dQdUmU0-qeNxQBzUeWfUnx2-eu9AUC5Rx6ZnxT6hkE4yMs0RI2n3AVt2eL0vZzR_Z_KPZBQs3fyimpE6MyN3HvJtt3OOoGbuPXK4BlpCpmJ3wHIJtuuQveiFGPj5MTluMQbgY2doHg=w1200-h800-no" alt=""/></figure>



<p></p>



<p>ざっくりしすぎていてあまりイメージし辛いかと思いますので、下記ページを参考にしてください。</p>



<ul class="wp-block-list">
<li><a href="https://jp.vuejs.org/v2/guide/state-management.html">状態管理 — Vue.js</a></li>
</ul>



<p>先に述べた通り、中規模以上のプロジェクトでなければあまり恩恵にあずかれず、冗長になるだけと感じるかもしれません。 しかし、Vue.js を採用するという事は、ある程度の規模のあるプロジェクトとなる予測が立つとも言えるので、 転ばぬ先の Vuex を問答無用で入れてしまうのも選択肢の一つだと考えられます。</p>



<h3 class="wp-block-heading">vuex-persistedstate</h3>



<p>今回作った様なミニマムなアプリケーションでは正直Vuexは不向きな気がします。 それでもVuexを導入したのは、半分はVuexで習作してみるため、 もう半分はこの <strong>vuex-persistedstate</strong> を使うためです。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/robinvdvleuten/vuex-persistedstate">robinvdvleuten/vuex-persistedstate: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Persist Vuex state with localStorage.</a></li>
</ul>



<p>vuex-persistedstate は、Vuexのストアの中身（state）をまるっとlocalStorageに保存してくれるプラグインです。 Vuexでストアを書く時にちょっとインポートしてやれば簡単に導入できます。 （下記はREADMEのコードそのままです）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">import</span> createPersistedState <span class="hljs-keyword">from</span> <span class="hljs-string">"vuex-persistedstate"</span>;

<span class="hljs-keyword">const</span> store = <span class="hljs-keyword">new</span> Vuex.Store({
  <span class="hljs-comment">// ...</span>
  <span class="hljs-attr">plugins</span>: &#91;createPersistedState()]
});
</code></span></pre>


<p>これで（同じブラウザで見る限りは）ページの状態を永続化できるという寸法です。 なんて便利なんでしょうか！</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>もともとはイラレが吐き出すSVGを最適化する事しか考えてなかったのですが、 ちょうどよいお題だと思って Vuex を使って習作してみたというお話でした。 このアプリで使用している netlify の知見も少しずつたまり始めたので、それはまたいずれ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>時間を計測する装置について考えてみる</title>
		<link>https://blog.mach3.jp/2018/04/11/think-about-clock.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 11 Apr 2018 01:33:29 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Clock]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Netlify]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Vue.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4425</guid>

					<description><![CDATA[近代以降、人は時間にしばられ、あるいは守られながら生活をするようになりました。 ここでそれが良いことだとか悪いことだとか考えるような詮無い事はしません。 今日は、私達の暮らしに欠かせない「時間」を測定する装置について考え [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/1ZH-j9T0CZs7VUKh_b996DhyGwQEPaURj6DV4K_wOZsrOBKH1sX3aAJDsvP8mp24A5P5lkYqNq-M8kfZPogzfsduK5FxwRXWKXw_mME6JDtBaZoz5c1xgbWboO7leh6IltRg1Zl95w=w600-h315-no" alt="時間を計測する装置について考えてみる"/></figure>



<p></p>



<p>近代以降、人は時間にしばられ、あるいは守られながら生活をするようになりました。 ここでそれが良いことだとか悪いことだとか考えるような詮無い事はしません。 今日は、私達の暮らしに欠かせない「時間」を測定する装置について考えていきたいと思います。</p>



<span id="more-4425"></span>



<h2 class="wp-block-heading">つまり時計である</h2>



<p>時間を計測する装置、つまるところ「時計」と呼ばれる装置なのですが、 今あるアナログ時計のデザインに私達はあまりにも慣れ親しみすぎてしまいました。 なのでその存在からは一旦離れて、 改めて私達の生活に必要な「時間」を測る装置のデザインについて思いを馳せます。</p>



<h3 class="wp-block-heading">なんでこんな事を考え始めたのか</h3>



<p><del>VueでSVGベースのコンポーネントを試してみたかったからです。</del> ハワイの住人は非常に緩やかな時間感覚をもっていて、それは「ハワイアン・タイム」などと呼ばれるそうです。 常日頃時間に追われて生活していると、ふとそういう物に憧れをもつ事があります。 「大雑把な時間感覚で、ゆるく生きていきたい」と。</p>



<p>そこで、大雑把に時間を把握できるデザインの時計を考えてみようと考えました。</p>



<h2 class="wp-block-heading">作ってみたサンプル達</h2>



<p>そしてこちらが作ってみたサンプルです。 実用性等はあまり深く考えずに自由に、4種ばかり作ってみました。</p>



<ul class="wp-block-list">
<li><a href="https://arclock.netlify.com/">ArClock</a></li>
</ul>



<h3 class="wp-block-heading">サンプル1 : 比較的普通なそれ</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/JTcm7I6CTCNQs9y4srgBJ6gBsbbYXyaTOvbI63m1Tf1WnhDIBkAdBJ3ykzvHz7b5yBfFNJcULw6k5ON3wWXE0b57XgXNGcI0Jy-JDAwxTzLJZpIwq3fIyMN0k3SIw_WZ9bRvzjBV2Q=w600-h300-no" alt="比較的普通なそれ"/></figure>



<p></p>



<p>普段目にするアナログ時計にかなり近いデザインです。 異なる点と言えば、針が円弧になり、時間を表す部分が12時間ではなく24時間単位、つまり1日で1周になる所です。</p>



<p>なぜ今あるアナログ時計が24時間ではなく12時間で1週なのかは詳しく調べていないのでわかりませんが、 12時間の方がぱっと見てより精細に時間を知ることが出来るのは確かです。 ですので、より大雑把にする為に24時間にしてみました。</p>



<h3 class="wp-block-heading">サンプル2 : 波の様なそれ</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dPQh0WwZL5Ubqe4PVHeQxF3Cvjgw6C6akhLPs1XQDm9uBBjKOzNWZWPQQEhNWNhjvnFCJGm5daBNiCWZvR6fvKsu1bZkt5tMcvi-wy1kSzyhOgV3ti9VBGMXVrcfX6i1hXF18fMY9Q=w600-h300-no" alt="波の様なそれ"/></figure>



<p></p>



<p>このサンプルはちょっとお気に入りです。</p>



<p>時間部分のトータルが24時間になっているのはサンプル1と同様ですが、基点が朝の6時になっていて、右端からスタートします。 つまり、右の円弧は6時から18時までの「昼間」を表し、左の円弧は18時から翌6時までの「夜間」を表します。 右から左にしたのは、東から昇って西に沈む太陽をイメージしていたりします。</p>



<p>分と秒も一応なんとなく分かるようにはなっていますが、これは、あまりに動きがないとつまらないので付けたただの飾りです。 昼間/夜間のだいたい何時くらいなのかがわかれば良いというテーマの時計です。</p>



<h3 class="wp-block-heading">サンプル3 : 週を意識したそれ</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/gUCx6WD4ElgJS_iVhwGKYO9yADxm_wAY7rb0-VDfe4VVPU0aUjm9ZXQKkXUzp6SMgfuyvzkhSf86VxDlhMo69xKR9110u1rwNObqvEUqEOHWj1IEWjvLHXHg2l3GkzAiRjnb98RYLQ=w600-h300-no" alt="週を意識したそれ"/></figure>



<p></p>



<p>もっと大雑把にしてみました。一週を一つの単位として表現してみた時計（？）です。 月曜日を起点として、現在週のどの辺りなのかを大まかにあらわします。 今回作った時計（？）の中で最も動きの無い、面白みのない物となりました。</p>



<p>日曜日を中央に押し込んだ理由は3つあります。 1つ目は、Saturday と Sunday で &#8220;S&#8221; が続いて見づらいこと、 2つ目は、7だと360を割り切れないこと、 3つ目は、6ならばリボルバーの弾倉っぽくなるのでイメージとして採用してみようと思った次第です。 （しかし、調べたら7発装填のリボルバーも存在する様でした。 <a href="https://ja.wikipedia.org/wiki/%E3%83%8A%E3%82%AC%E3%83%B3M1895">ナガンM1895 &#8211; Wikipedia</a> ）</p>



<p>この7つの曜日が全て赤く染まる時、我々は月曜日の到来に恐れおののく事でしょう。</p>



<h3 class="wp-block-heading">サンプル4 : 年を意識したそれ</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/HDn-v33dYCDVJxh2hzZCafL1wKpRqnLAETmfmUvkpI8jkvMt5nbveKVx5YoLcNgH2H3Et4ZwXPyYTS-iLskgeuDi9T2su6SM9bqyvrLr92JvJIZRz31rUGcIzj1hHcwx3bgfmXp2Ag=w600-h300-no" alt="年を意識したそれ"/></figure>



<p></p>



<p>さらに単位を大きくして、年にしてみました。 年輪をイメージしていますが、輪になってないしひとつの層は別に年じゃないでしょう？というのは野暮な突っ込みです。 むしろゼンマイをイメージしていると言った方が理解を得られるかもしれません。</p>



<p>このゼンマイ状の線は、現在が1年のどの辺りなのかを示しますが、 半径ではなく線分の長さであらわしている為、見た目と実際に感覚としてズレが生じるでしょう。 しかし、年始の一ヶ月よりも年末の一ヶ月の方が短く思えるのはわりと一般的な感覚のように思えます。 そんな錯覚も表現出来てしまう時計であります。</p>



<p>角層の塗りは60秒で終端にたどり着きます。 ちょっとした動きが欲しかったのと、ぐるぐる動いているのが楽しかったので付けてみました。</p>



<h2 class="wp-block-heading">技術的な話</h2>



<p>これらのサンプルは全てインラインSVGで作られていて、 パスは一部の物を除いてほとんど <code>&lt;path&gt;</code> の <code>A</code> コマンドで描画してあります。 動きはほとんど <code>stroke-dash-array</code> と <code>stroke-dash-offset</code> で実装されていて、アニメーションは全て <code>transition</code> です。</p>



<p>せっかく Vue で作ったサンプルなので <code>&lt;path&gt;</code>　の <code>d</code> 属性を直接書き換えてアニメーションを、とも思ったのですが、 頂点の数が変わると <code>transition</code> は効かないので他の方法をとりました。</p>



<h3 class="wp-block-heading">SVGベースのVueコンポーネント</h3>



<p>インラインSVGをベースにしたVueコンポーネントを今回試してみましたが、なかなか面白いものです。 <code>&lt;path&gt;</code> の描き方を理解すると大抵の物は描けますし、動的に操作する事も容易です。 例えばデータを渡してグラフを描画するコンポーネント実装などでその実力を大いに発揮しそうです。というか、まさにそういうケースで先日発揮しました。</p>



<p>そういった部品を実装しててふと思い出したのが ActionScript3 で作るFlashコンテンツで、非常に類似しています。 AS3でも受け取ったデータから <code>Graphics</code> クラスで動的に描画をするなどしていましたね。 あんなイメージです。</p>



<h3 class="wp-block-heading">Netlify</h3>



<p><strong>Netflix</strong> とよく似ている為よくタイポしてしまいがちな <strong>Netlify</strong> にデプロイしてみました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://www.netlify.com/">Netlify: All-in-one platform for automating modern web projects.</a><br />
  Build, deploy, and manage modern web projects</p>
</blockquote>



<p>このサービスは、GitHub等のリポジトリサービスと連携して、そのリポジトリの指定したブランチにpushするだけでデプロイが完了するというお手軽なWebサーバーです。 それに加えて、様々な機能をご利用いただけます。</p>



<ul class="wp-block-list">
<li>ビルドコマンドをデプロイ前に実行してくれる</li>



<li>Functions 機能で AWS Lambda にもデプロイできる</li>



<li>Form 機能でフォームリクエストをハンドリングできる</li>



<li>Let&#8217;s Encrypt によるSSL対応（独自ドメインが必要）</li>
</ul>



<p>Lambdaと連携出来るので、開発コストはさておき大体の事は実現できそうですね。 今回はビルドコマンドの実行ぐらいしか活用していませんが、機会があればがっつり使ってみたい所存です。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>色々な時計を作ってみましたが、先に申し上げたとおり、実用出来る代物ではありません。 少なくとも、この国で今の生活をしているかぎりは…。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#034;SVG&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/18/jaac2013-s-svg.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 18 Dec 2013 01:19:02 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[Snap.svg]]></category>
		<category><![CDATA[SVG]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3754</guid>

					<description><![CDATA[&#8220;S&#8221; は SVG の &#8220;S&#8221;。 SVG SVG（Scalable Vector Graphics）は、Webページ上でベクターグラフィックを扱う為のマークアップ言語です。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;S&#8221; は SVG の &#8220;S&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-XUrPw_pet0s/UqR4lTXOk8I/AAAAAAAACYg/EboU7AOOUJg/s400/ac2013-s.png" alt="S"/></figure>



<p></p>



<span id="more-3754"></span>



<h2 class="wp-block-heading">SVG</h2>



<p><strong>SVG（Scalable Vector Graphics）</strong>は、Webページ上でベクターグラフィックを扱う為のマークアップ言語です。 ベクターなので拡縮してもビットマップデータのように劣化しないのが特徴で、 アイコンやイラスト・アニメーション等で幅広く活躍できます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">svg</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"40"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"40"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">path</span> <span class="hljs-attr">d</span>=<span class="hljs-string">"M16,22.375L7.116,28.83l3.396-10.438l-8.883-6.458l10.979,0.002L16.002,1.5l3.391,10.434h10.981l-8.886,6.457l3.396,10.439L16,22.375L16,22.375z"</span> <span class="hljs-attr">fill</span>=<span class="hljs-string">"black"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">path</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">svg</span>&gt;</span>
</code></span></pre>


<p>このコードをHTMLに挿入すると、ベクターで描かれた星印が表示されます。 上で使用されている <strong>path</strong> の他、<strong>rect</strong> や <strong>circle</strong> などを使って様々なグラフィックを描く事が出来ます。</p>



<p>IEではSVGをサポートするのがバージョン9以降な為、 旧来より実装されていた <strong>VML（Vector Markup Language）</strong>で代用されたりします。</p>



<h2 class="wp-block-heading">Raphael</h2>



<p><a href="http://raphaeljs.com/">http://raphaeljs.com/</a></p>



<p><strong>Raphael</strong> は比較的老舗なべクターグラフィックライブラリで、 SVGライブラリの中ではデファクトスタンダードとの呼び声が高い物です。 SVGが使える環境ならばSVGを使い、そうでない場合はVMLで代用してベクターコンテンツを扱う事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"canvas"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">

<span class="hljs-comment">// #canvas にキャンバスを生成する</span>
<span class="hljs-keyword">var</span> paper = Raphael(<span class="hljs-string">"canvas"</span>);

<span class="hljs-comment">// キャンバスに円を描く</span>
<span class="hljs-keyword">var</span> circle = paper.circle(<span class="hljs-number">24</span>, <span class="hljs-number">24</span>, <span class="hljs-number">16</span>);
circle.attr({
    <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>,
    <span class="hljs-string">"stroke-width"</span>: <span class="hljs-number">0</span>
});

</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p><strong>Raphael()</strong> でキャンバスを生成し、 そのキャンバスに対して <strong>circle</strong> / <strong>rect</strong> / <strong>path</strong> などを使用してグラフィックを描きます。</p>



<p>Raphael で描かれた図形要素には、属性を編集する <strong>attr()</strong> の他、 各種イベントハンドラを設定する為のメソッド等が実装されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// マウスオーバーイベントを設定する</span>
circle.hover(
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.animate({
            <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#00c"</span>
        }, <span class="hljs-number">500</span>);
    },
    <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.animate({
            <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>
        }, <span class="hljs-number">500</span>);
    }
);

<span class="hljs-comment">// クリックイベントを設定する</span>
button.click(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"click"</span>);
});
</code></span></pre>


<p>さながら jQuery のSVG版といった感覚で使えます。</p>



<h2 class="wp-block-heading">Snap.svg</h2>



<p><a href="http://snapsvg.io/">http://snapsvg.io/</a></p>



<p>Snap.svg はRaphaelの作者が開発し、Adobe からリリースされた生まれて間もないプロジェクトです。 （2013/10/23 に初リリースされています。）</p>



<p>最も大きな違いは、snap.svg は SVG をサポートする環境の為だけのもので、 VMLによる古い環境へのサポートは一切しないと宣言している点です。 そうすることで、SVG にあって VML にはないような先進的な機能を利用出来る為です。 また、VML対応を無くす事によりライブラリ自体の軽量化も図れている模様です。</p>



<p>開発者が同じなだけあり、使い方はRaphaelからほぼ変わりません。（これは素晴らしいことです） 試しに Raphael での例と同じ処理をしてみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">svg</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"canvas"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">svg</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-comment">// 対象要素は svg 要素である必要があります</span>
    <span class="hljs-keyword">var</span> paper = Snap(<span class="hljs-string">"#canvas"</span>);
    <span class="hljs-keyword">var</span> circle = paper.circle(<span class="hljs-number">24</span>, <span class="hljs-number">24</span>, <span class="hljs-number">16</span>);
    circle.attr({
        <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>,
        <span class="hljs-string">"stroke-width"</span>: <span class="hljs-number">0</span>
    });
    circle.hover(
        <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">this</span>.animate({
                <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#00c"</span>
            }, <span class="hljs-number">500</span>);
        },
        <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
            <span class="hljs-keyword">this</span>.animate({
                <span class="hljs-string">"fill"</span>: <span class="hljs-string">"#c00"</span>
            }, <span class="hljs-number">500</span>);
        }
    );
    circle.click(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"click"</span>);
    });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>Raphael() が <strong>Snap()</strong> に変わったことと、渡す要素が svg 要素である必要がある事をのぞいて、 間違い探しの問題かと思うほどにほぼ一致しています。</p>



<p>また、Raphael にはなかった機能のひとつとして、「外部SVGリソースのインポート」があります。 外部SVGファイルをAjaxで取得し、その結果をコールバックで展開する事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">Snap.load(<span class="hljs-string">"external.svg"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">f</span>)</span>{ ... });
</code></span></pre>


<p>他にもマスキングやパターンのクリッピングなど先鋭的な機能が揃えられています。 <a href="http://snapsvg.io/start/">公式のチュートリアル</a> ではコードを追いながら使い方を学ぶ事が出来ます。 ここのページャーのアニメーションも気が利いていてかわいいですね。</p>



<p>Raphael がそうであったように、新世代のSVGライブラリのスタンダードになりそうな予感がしますね。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="http://ja.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics &#8211; Wikipedia</a></li>



<li><a href="https://developer.mozilla.org/en/docs/Web/SVG">SVG | MDN</a></li>



<li><a href="http://www.w3.org/Graphics/SVG/">W3C SVG Working Group</a></li>



<li><a href="http://raphaeljs.com/">Raphaël—JavaScript Library</a></li>



<li><a href="http://snapsvg.io/">Snap.svg &#8211; Home</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのRaphael (2) : イベント編</title>
		<link>https://blog.mach3.jp/2011/12/27/get-started-with-raphael-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 27 Dec 2011 00:59:59 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2215</guid>

					<description><![CDATA[Raphaelチュートリアルの第二回です。 今回は、描画された図のマウスイベントを操作する方法を紹介します。 シンプルな例 まずはシンプルな例から。 紙に円を描き、マウスでクリックされた時になんらかの処理を行います。 E [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Raphaelチュートリアルの第二回です。<br />
今回は、描画された図のマウスイベントを操作する方法を紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-w_T4nvskWAY/TviL_ZGH7KI/AAAAAAAABbw/1IWLCmMQhsc/s400/201112262358.png" alt="はじめてのRaphael (2) : イベント編"/></figure>



<p></p>



<span id="more-2215"></span>



<h2 class="wp-block-heading">シンプルな例</h2>



<p>まずはシンプルな例から。<br />
紙に円を描き、マウスでクリックされた時になんらかの処理を行います。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> paper, myCircle, onClick ;

    <span class="hljs-comment">/**
     * 紙に円を描きます。
     * myCircleには、Elementオブジェクトが格納されます。
     */</span>
    paper = <span class="hljs-keyword">new</span> Raphael( <span class="hljs-string">"paper"</span>, <span class="hljs-number">640</span>, <span class="hljs-number">480</span> );
    myCircle = paper.circle( <span class="hljs-number">100</span>, <span class="hljs-number">100</span>, <span class="hljs-number">32</span> )
        .attr( { <span class="hljs-attr">fill</span> : <span class="hljs-string">"#345"</span>, <span class="hljs-attr">stroke</span> : <span class="hljs-string">"none"</span> } );

    <span class="hljs-comment">/**
     * Element.click() で
     * マウスクリックイベントのハンドラを設定できます。
     * ハンドラ内のthisはElementオブジェクトです。
     */</span>
    myCircle.click( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-built_in">console</span>.log( <span class="hljs-keyword">this</span>.type ); <span class="hljs-comment">// =&gt; "circle"</span>
        alert( <span class="hljs-string">"さわんな！"</span> );
    });

})();
</code></span></pre>


<p>Element.click() メソッドの引数に関数を渡すだけなので、とても簡単。</p>



<p>円に限らず、ほとんどのシェイプ描画メソッドはElementオブジェクトを返します。<br />
イベントやアニメーションをいじりたい場合は、<br />
この例での変数「myCircle」のように返り値を格納しておくと良いですね。<br />
勿論、メソッドチェーンで一気に書いてしまう事もできます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">paper.circle( <span class="hljs-number">100</span>, <span class="hljs-number">100</span>, <span class="hljs-number">32</span> )
    .attr( { <span class="hljs-attr">fill</span> : <span class="hljs-string">"#345"</span>, <span class="hljs-attr">stroke</span> : <span class="hljs-string">"none"</span> } )
    .click( <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        alert( <span class="hljs-string">"さわんな！"</span> );
    });
</code></span></pre>


<h3 class="wp-block-heading">イベントハンドラの登録解除</h3>



<p>設定したイベントハンドラを解除するのは、<br />
そのメソッドに接頭辞「un」をつけたメソッドを使います。<br />
例えばclick() で登録したハンドラの登録解除は、unclick() を使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/**
 * click() で登録
 */</span>
<span class="hljs-keyword">var</span> onClick = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{ alert(<span class="hljs-string">"さわんな！"</span>); };
myCircle.click( onClick );

<span class="hljs-comment">/**
 * unclick() で登録解除
 */</span>
myCircle.unclick( onClick ); <span class="hljs-comment">// もうさわっても怒られません。</span>
</code></span></pre>


<h2 class="wp-block-heading">イベントの色々</h2>



<p>clickの他にも様々なマウスイベント用のメソッドが用意されています。</p>



<h3 class="wp-block-heading">おなじみのイベント</h3>



<p>まず、これらのおなじみの方々。<br />
恐らく名前を見るだけで、どんな役割なのかすぐに分かることでしょう。</p>



<ul class="wp-block-list">
<li>click （クリック）</li>



<li>dblclick （ダブルクリック）</li>



<li>mousedown （マウスダウン）</li>



<li>mousemove （マウスムーブ）</li>



<li>mosueout （マウスアウト）</li>



<li>mouseover （マウスオーバー）</li>



<li>mouseup （マウスアップ）</li>
</ul>



<h3 class="wp-block-heading">タッチ関係のイベント</h3>



<p>スマートフォン向けの、タッチイベントも実装されています。</p>



<ul class="wp-block-list">
<li>touchcancel （タッチキャンセル）</li>



<li>touchend （タッチエンド）</li>



<li>touchmove （タッチムーブ）</li>



<li>touchstart （タッチスタート）</li>
</ul>



<h2 class="wp-block-heading">jQueryのような、hover()</h2>



<p>jQuery.hover() は、マウスが入ってきた時と離れていく時のハンドラを<br />
同時に設定する事が出来る便利なメソッドですが、<br />
それとほぼ同じ役割をし、名前も同じ hover() メソッドが用意されています。</p>



<dl>
<dt>Element.hover( f_in, f_out );</dt>
<dd><em>f_in</em> (Function) マウスが入ってきた時の処理<br />
<em>f_out</em> (Function) マウスが離れていく時の処理</dd>
</dl>



<pre class="wp-block-preformatted">/**
 * マウスオーバーで塗り色を変えるサンプル。
 */
myCircle.hover(
    function(){
        console.log( "くんな！" );
        this.attr( "fill", "#c00" );
    },
    function(){
        console.log( "にげんな！" );
        this.attr( "fill", "#345" );
    }
);
</pre>



<h2 class="wp-block-heading">drag() で要素のドラッグを実装する</h2>



<p>Element.drag() を使う事で、要素のドラッグに必要な<br />
マウスダウン時、マウスムーブ時、マウスアップ時のイベントをまとめて設定できます。<br />
ただし、ActionScriptのstartDrag()のように要素の移動まで面倒みてくれるわけではないので、<br />
各イベントハンドラにそれらを実装してあげる必要があります。</p>



<h3 class="wp-block-heading">Element.drag()</h3>



<dl>
<dt>Element.drag( onmove, onstart, onend );</dt>
<dd><em>onmove</em> (Function) マウスムーブ時の処理<br />
<em>onstart</em> (Function) ドラッグ開始時の処理（マウスダウン）<br />
<em>onend</em> (Function) ドラッグ終了時の処理（マウスアップ）</dd>
</dl>



<p>これらのコールバックは全て渡される引数が違うので注意が必要です。<br />
特におさえておくべきは、第一引数のonmoveです。</p>



<h3 class="wp-block-heading">onmove</h3>



<dl>
<dt>onmove : function( dx, dy, x, y, event )</dt>
<dd><em>dx</em> : ドラッグ開始位置からの相対的座標（x）<br />
<em>dy</em> : ドラッグ開始位置からの相対的座標（y）<br />
<em>x</em> : 現在のx座標<br />
<em>y</em> : 現在のy座標<br />
<em>event</em> : イベントオブジェクト</dd>
</dl>



<p>わざわざ相対的座標を渡しているのは、<br />
マウス座標をそのまま要素のx,y座標に代入してしまうと<br />
予想と違う位置に要素が移動してしまう為。<br />
どの部分をクリックしてドラッグしても、<br />
要素はマウスの右下にぶらさがる形になってしまいますね。</p>



<p>つまり、こんなかんじになるでしょう。</p>



<ol class="wp-block-list">
<li>onstartでドラッグ前の要素の座標を記録しておく</li>



<li>onmoveで、1.で記録した座標と相対的座標をあわせて計算</li>
</ol>



<pre class="wp-block-preformatted">(function(){
    var paper, myRect;

    paper = new Raphael( "paper", 640, 480 );
    myRect = paper.rect( 100, 100, 32, 32 )
        .attr( { fill : "#345", stroke : "none" } );

    myRect.drag(
        /**
         * マウスムーブ時の処理
         */
        function( dx, dy, x, y, e ){
            /**
             * Element.data() で初期の座標を取り出して
             * dx, dyを加算して移動
             */
            this.attr({
                x : this.data("x") + dx,
                y : this.data("y") + dy
            });
        },
        /**
         * ドラッグ開始時の処理
         */
        function( x, y, e ){
            /**
             * 要素の座標をElement.data()で記録
             */
            this.data( "x", this.attr("x") );
            this.data( "y", this.attr("y") );
            this.attr( "fill", "#c00" );
        },
        /**
         * ドラッグ終了時の処理
         */
        function( e ){
            this.attr( "fill", "#345" );
        }
    );
})();
</pre>



<h3 class="wp-block-heading">jQueryのようなdata()が便利</h3>



<p>RaphaelのElementオブジェクトには<br />
jQuery.data() と似たような機能が同名のメソッドで実装されていて、<br />
上記のコールバック内で使われているように<br />
情報を保持しておくのに便利です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 値の設定</span>
myElement.data( <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> );
<span class="hljs-comment">// 値の取得</span>
<span class="hljs-built_in">console</span>.log( my.Element.data( <span class="hljs-string">"foo"</span> ) ); <span class="hljs-comment">// =&gt; bar</span>
</code></span></pre>


<h2 class="wp-block-heading">デモ</h2>



<p>デモをこちらにまとめました。</p>



<p>» <a href="http://jsfiddle.net/mach3ss/UJE3N/1/">はじめてのRaphael(2) : イベント編 via jsFiddle</a></p>



<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/mach3ss/UJE3N/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Raphaelは、意外とjQueryのメソッドと共通点があり、<br />
導入にあまり苦労しなさそうで助かります。<br />
描画とイベントが操れれば、簡単なRUIを実現できてしまいますね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのRaphael (1) : お絵かき編</title>
		<link>https://blog.mach3.jp/2011/12/06/get-started-with-raphael-01.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 06 Dec 2011 07:41:40 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Raphael]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2140</guid>

					<description><![CDATA[SVGが少しずつ市民権を獲得し始めている昨今のWWWですが、 Raphaelとは、そのSVGをコントロールするのに非常に便利なライブラリです。 公式によさげなチュートリアルがなかったのもあり、 今回はその使い方をまとめて [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>SVGが少しずつ市民権を獲得し始めている昨今のWWWですが、<br />
Raphaelとは、そのSVGをコントロールするのに非常に便利なライブラリです。<br />
公式によさげなチュートリアルがなかったのもあり、<br />
今回はその使い方をまとめてみようという試み。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-Dz76C91TtBw/Tt3G7jLx-eI/AAAAAAAABag/mLOuNHHj_8g/s400/201112061638.png" alt="はじめてのRaphael (1) : お絵かき編"/></figure>



<p></p>



<span id="more-2140"></span>



<h2 class="wp-block-heading">Raphaelとは</h2>



<p>RaphaelはSVGで図を描画するためのフレームワークです。<br />
正しくは「Raphaël」と書きますが、<br />
毎度めんどくさいのでRaphaelでいきます。</p>



<h3 class="wp-block-heading">なにをしてくれるのか</h3>



<ul class="wp-block-list">
<li>SVGが動かないクラシックなIE環境の為に、VMLでも出力してくれます。</li>



<li>イベントやアニメーションまわりも簡単に実装できるようになっています。</li>
</ul>



<p>特に助かるのがVML対応。<br />
旧ブラウザをサポートしなければならないケースには、<br />
ぜひとも導入したいライブラリですね。</p>



<h2 class="wp-block-heading">極めてシンプルな例</h2>



<p>Rraphaelで図を描画する手順は、ざっくりとこんな感じ。</p>



<ol class="wp-block-list">
<li>まず紙（paper）を用意する</li>



<li>その紙に図を描く。<br /><br />矩形（rect）や円形（circle）等、基本となるシンプルな図形はステンシルが用意されています。<br /><br />そうでない物は、フリーハンド（path）で描く事ができます。</li>



<li>描かれた図に、色や線種等のスタイルを設定します。</li>
</ol>



<h3 class="wp-block-heading">HTML</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-paper-0"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">JavaScript</h3>


<pre class="wp-block-code"><span><code class="hljs language-php">(<span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
    <span class="hljs-comment">/**
    * &#91;1] Raphael()でキャンバス（paper）をつくる
    */</span>
    <span class="hljs-keyword">var</span> paper = Raphael( <span class="hljs-string">"my-paper-0"</span>, <span class="hljs-number">64</span>, <span class="hljs-number">64</span> );
    <span class="hljs-comment">/**
    * &#91;2] circle()で円を描画し、
    * &#91;3] attr()で属性を設定する
    */</span>
    paper.circle( <span class="hljs-number">32</span>, <span class="hljs-number">32</span>, <span class="hljs-number">24</span> )
       .attr( { fill : <span class="hljs-string">"#345"</span>, stroke : <span class="hljs-string">"none"</span> } );
})();
</code></span></pre>


<p>Raphael() は、Paperというオブジェクトを返します。<br />
図の描画は、そのPaperオブジェクトが持つメソッドを通して行う事になります。</p>



<h2 class="wp-block-heading">基本図形を描いてみる</h2>



<p>矩形（rect）、円形（circle）、楕円形（ellipse）等の基本図形は、<br />
Paperのメソッドを使って簡単に描画する事ができます。</p>



<h3 class="wp-block-heading">円形</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.circle( x, y, radius );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.circle</span>( 32, 32, 24 );
</code></span></pre>


<h3 class="wp-block-heading">矩形</h3>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/**
 * Paper.rect( x, y, width, height, radius );
 */</span>
paper.rect( <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">48</span>, <span class="hljs-number">48</span> ); <span class="hljs-comment">// 普通の矩形</span>
paper.rect( <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">48</span>, <span class="hljs-number">48</span>, <span class="hljs-number">8</span> ); <span class="hljs-comment">// 半径8の角丸矩形</span>
</code></span></pre>


<h3 class="wp-block-heading">楕円形</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.ellipse( x, y, horizontalRadius, virticalRadius );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.ellipse</span>( 32, 32, 16, 24 );
</code></span></pre>


<h2 class="wp-block-heading">Pathで自由に描いてみる</h2>



<p>イラレ等の「ペンツール」のような感じで自由に図を描く事ができるのが、<br />
Paper.path()メソッドです。 まずはシンプルな三角形で例を示してみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/**
 * Paper.path( pathString );
 */</span>
<span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.path</span>( "<span class="hljs-selector-tag">M32</span>,8<span class="hljs-selector-tag">L56</span>,56<span class="hljs-selector-tag">H8L32</span>,8<span class="hljs-selector-tag">Z</span>" );
</code></span></pre>


<p>path() の引数には、SVGで定義されているPath要素のコマンドを渡します。<br />
文法は非常にシンプルで、アルファベット一文字で表されるコマンド毎に切り分けられます。<br />
上記コードのコマンドを分解してみると…</p>



<ol class="wp-block-list">
<li><em>&#8220;M32,8&#8221;</em> : 32,8に移動する（MoveTo）</li>



<li><em>&#8220;L56,56&#8221;</em> : 現在地から56,56まで線を描画する（LineTo）</li>



<li><em>&#8220;H8&#8221;</em> : x座標8まで水平線を描画する（HorizontalLineTo）</li>



<li><em>&#8220;L32,8&#8221;</em> : 32,8まで線を描画する（LineTo）</li>



<li><em>&#8220;Z&#8221;</em> : パスを閉じる</li>
</ol>



<p>これらを一気に書いて表した感じですね。</p>



<h3 class="wp-block-heading">コマンド（抜粋）</h3>



<dl>
<dt>M (MoveTo)</dt>
<dd>座標（x,y）に移動します</dd>
<dt>L (LineTo)</dt>
<dd>座標（x,y）まで線を描画します</dd>
<dt>H (HorizontalLineTo)</dt>
<dd>座標（x）まで水平線を描画します</dd>
<dt>V（VirticalLineTo)</dt>
<dd>座標（y）まで垂直線を描画します</dd>
<dt>C (CurveTo)</dt>
<dd>複数の座標をコントロールポイントとして引数に受け取り、ベジェ曲線を描画します。</dd>
</dl>



<p>コマンドを大文字で表記すると、座標を絶対位置として扱い、<br />
小文字で表記すると現在地からの相対位置とします。</p>



<p>それぞれのコマンドについては公式ドキュメントか、SVGの仕様書を参考にしましょう。</p>



<ul class="wp-block-list">
<li><a href="http://www.w3.org/TR/SVG/paths.html">Paths – SVG 1.1 (Second Edition)</a></li>



<li><a href="http://raphaeljs.com/reference.html#Paper.path">Raphaël Reference</a></li>
</ul>



<h3 class="wp-block-heading">もう少し複雑な例</h3>



<p>三角形よりももうすこし複雑な例として、<br />
Pathを使って矢印を描画してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">paper</span><span class="hljs-selector-class">.path</span>( "<span class="hljs-selector-tag">M32</span>,8<span class="hljs-selector-tag">L56</span>,32<span class="hljs-selector-tag">L48</span>,40<span class="hljs-selector-tag">L40</span>,32<span class="hljs-selector-tag">V56H24V32L16</span>,40<span class="hljs-selector-tag">L8</span>,32<span class="hljs-selector-tag">L32</span>,8<span class="hljs-selector-tag">Z</span>" )
    <span class="hljs-selector-class">.attr</span>( { <span class="hljs-attribute">fill </span>: <span class="hljs-string">"#345"</span>, stroke : <span class="hljs-string">"none"</span> } );
</code></span></pre>


<h2 class="wp-block-heading">デモ</h2>



<p>デモをこちらにまとめました。<br />
ご参考までに。</p>



<ul class="wp-block-list">
<li><a href="http://jsfiddle.net/mach3ss/bkXNb/1/">はじめてのRaphael (1) : お絵かき編 via jsFiddle</a></li>
</ul>



<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/mach3ss/bkXNb/1/embedded/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>図形を描くのに色々メソッドやコマンドを覚えたりしなければいけませんが、<br />
恐らくSVGを直に書く際にも役に立つ知識なので、無駄にはならないと思います。</p>



<p>さらに複雑なものを描かなければならない時は、<br />
他の楽な方法がありますが、それはまた別の記事で。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
