マップ作成ツールの開発(2013年4月3日)

筆者はGraffleというマップ作成ツールの愛用者である。どのようなツールかと言えば、早い話がウィンドウの中にボックスを置きこれにラベルを付けて矢印で結んでいくというツールである。仕組みは単純だが、それが示すことのできる内容の豊かさに着目して、既に数年以上その意味について考察し続けているところだ。

ところが、このツールは巨大なマップをハンドリングできるのであるが、マップを作成するまでで、さらにこの出来上がったマップについて定量的な解析を加えることはできない。一方、MathematicaはGraphを扱う関数がver.8から整備されてきて、Graphの一種とも言えるマップを取り扱うことができるようになって、これを利用しない手はないと感ずるようになった。ただしMathematicaはその性質から解析はできるものの、マップそのものを一から作るという簡単な作業には向いてない。どちらかといえば、既存のマップデータを使って解析することがその目的となっているようだ。

graph maker
作業パレットの上部にあるのがモード切り替えボタンである

それならGraffleからエキスポートしたデータをMathematicaで読み込むようにすればよいのではないか、と直ぐに思いつくのであるが、Graffleのサポートするマップデータが例のMSのVisio@XMLで、ちょいと調べてみたらさすがMS、使い辛いことこの上ない。頑張ってVisio@XML読み込みツールを作っても良かったのだが、どうせならMathematicaでGraffleと同じようなことができないかと、Mathematicaの関連しそうな関数を使い慣れるという目論みもあって、テストプラグラムを作ってみたのだった。

プログラムのポイントはEventHandlerで、マウスボタンを押しながらドラッグしたり、クリックしたりのアクションを作業ボードのパレットで選ぶようになっている。このEventHandlerの内側にもEventHandlerが置かれており、同時にdynamicに変化しうるグラフィック要素が記述されている。MathematicaのEventHandlerやDynamicそれ自体の仕組みは理解できるのだが、それらを組み合わせて、EventHandlerからの関数の戻りをGraphicsにしてそれをDynamicに扱うというようなことになると、実際のところどういう風に動くのか理解に迷うところがある。

そのソース・コードがこれ