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



今回は、前回に引き続きアニメーション関係の話題です。(2017.12.14更新)
円のシェイプが、曲線上をなぞって移動します。
テンプレートファイルはLineMove.zip(48.7KB)からダウンロードして下さい。
ダウンロードした圧縮ファイルは解凍し、適当なフォルダへ入れて下さい。
図形上を移動するシェイプ.vsdm をVisioで開くと、なにやら落書きが出てきます。
落書きを間違って公開した訳ではありません。

それでは、メニューの「開発」「マクロ」を選択し表示されたマクロウィンドウから「図形上を移動するシェイプ.modSub.Animation_Start」を選択し「実行」をクリックして下さい。
円のシェイプが落書きの線をなぞって動き出しましたか?

本題・・の前に、ちょっと寄り道
本題の前にちょっと寄り道してみましょう。
メニューの「ホーム」から「自在曲線」を選択し曲線を書いてみます。

作図した曲線に名前を設定します。
作図したシェイプを選択してメニューから「開発」「図形名」を選択し、表示されたダイアログで「名前」に「TargetShape」を入力して「OK」をクリックします。
また、既に作図されていた線を選択して同様の手順で「TargetShape_BK」など別の名前へ変更します。面倒な場合は、線を削除しても良いです。
図形名を変更した後で、先ほどと同じ手順でマクロを実行してみて下さい。
今書いた曲線の上を、円のシェイプがなぞって移動します。
あくまでも曲線の名前が「TargetShape」の図形をなぞって移動するプログラムですので、「TargetShape」という図形が一つである必要がありますのでご注意ください。。
本題
曲線のシェイプシートの「Geometry1」という所にあるNURBSという値が、自由曲線の持つ曲線の情報です。
これは、曲線が通る座標を一つずつ記録したものではなく、無数の頂点の座標を記録したものです。
この情報から曲線が通る座標を計算し、その座標を円のシェイプの座標として与えてやれば、円のシェイプは曲線の上をなぞって移動していくわけです。
短い説明ですが、それだけ簡単な仕組みで動いていた、ということです。
マクロの概要
本題で仕組みを説明しましたので、大体わかると思います。
今回のマクロはそれ自体が短いですね。
NURBSの値の要素の数だけ、FOR文で次のことを繰り返しています。
- 曲線の一部の情報を、NURBSから取得する。
- その情報から、曲線が通る座標を配列xyArrayに取得する。
- 配列xyArrayに得られた座標を、ウェイトをかけながら円のシェイプの図形情報PinX,PinYに書き込む。
これで、円のシェイプが自由曲線の上をなぞって移動します。(移動しているように見えます。)
付録
同じ仕組みを使って綺麗に作った例を紹介します。
CarAnimation.zip(47.5KB)