ショートプログラム
図形上を移動するシェイプ  

今回は、前回に引き続きアニメーション関係の話題です。(2007.9.21)
円のシェイプが、自由曲線上をなぞって移動します。
テンプレートファイルはmove.lzh(38.2kb)からダウンロードして下さい。
ダウンロードした圧縮ファイルは解凍し、適当なフォルダへ入れて下さい。
図形上を移動するシェイプ.vsdをVisioで開くと、なにやら落書きが出てきます。

落書きを間違ってUPした訳ではありません。
それでは、メニューの「ツール/マクロ/Module1/図形上を移動させる」を選択してみて下さい。

エラーが出たときは、落書きを左クリックで選択してから、もう一度「図形上を移動させる」を選択してみて下さい。
円のシェイプが落書きをなぞって動き出しましたか?

本題・・の前に、ちょっと寄り道
本題の前にちょっと寄り道してみましょう。
最初からある自由曲線を「切り取り」で消して、自由曲線ツールを使って自由曲線を書いてみます。

そして、メニューの「ツール/マクロ/Module1/図形上を移動させる」を選択してみて下さい。
今書いた自由曲線の上を、円のシェイプがなぞって移動します。
自由曲線が複数ある場合は、選択している方の自由曲線をなぞって移動します。
本題
自由曲線のシェイプシートの「Geometry1」という所にあるNURBSという値が、自由曲線の持つ曲線の情報です。

これは、曲線が通る座標を一つずつ記録したものではなく、無数の頂点の座標を記録したものです。
この情報から自由曲線が通る座標を計算し、その座標を円のシェイプの座標として与えてやれば、円のシェイプは自由曲線の上をなぞって移動していくわけです。
短い説明ですが、それだけ簡単な仕組みで動いていた、ということです。
マクロの概要
本題で仕組みを説明しましたので、大体わかると思います。
今回のマクロはそれ自体が短いですね。
NURBSの値の要素の数だけ、FOR文で次のことを繰り返しています。
- 曲線の一部の情報を、NURBSから取得する。
- その情報から、曲線が通る座標を配列xyArrayに取得する。
- 配列xyArrayに得られた座標を、ウェイトをかけながら円のシェイプの図形情報PinX,PinYに書き込む。
これで、円のシェイプが自由曲線の上をなぞって移動します。(移動しているように見えます。)
付録
同じ仕組みを使って綺麗に作った例を紹介します。
car.lzh(45.9kb)
