Home > Software Tips > VBA4
Last Update 2007.10.13
最近あまりサイトを更新できてませんが、X3を使い続けてます。
VBA関係はあまり変わっている印象はありませんので、基本的にCDR11までと同じ感じでで良いのではないかと思います。VBAのファイルの形式やVBAのファイルの置き場を参照してください。実行の仕方も一緒です。
研究途中なので事実誤認もあるかもしれませんし、私の環境でのみうまく[行く/行かない]というケースもあるかもしれないこと、私の書いたとおりにしてあなたのマシンがとんでもないことになっても責任を取れないことを、予めお断りしておきます。
CDR12での開発・研究はこちら、CDR11での開発・研究はこちら、CDR10での開発・研究はこちら
* * *
CDR X3(DRAW)の第1弾は、MLで話題になったシェイプの面積、ノードが右回りかどうかを表示するマクロです。宮本さんのヒントを元に作成しました。
今回はソースを貼り付けた方式で紹介します。(こちら(ShapeInfo)へ)インストール方法はこちらを参照してください。
情報を表示したいシェイプ(曲線化したものに限る。)を選択した状態で実行して下さい。
実行すると、面積を算出し、シェイプのStaticID、ノード数、面積(mm2単位)、右回りか左回りかをMsgBoxで表示します。
昨日のVBAの改良版です。
A3ノビさんから指摘のあったドーナツのような図形の場合への対応です。
制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。shapeinfo2.LZH(16,102byte)
インストールファイルは、ShapeInfo2.gmsです。インストール方法はこちらを参照してください。
情報を表示したいシェイプ(曲線化したものに限る。)を選択した状態で「main.main」を実行します。
最上部には選択したオブジェクトに含まれるサブパスの情報を表示しています。次の行に、計算対象のサブパスの詳細情報を表示します。最上段のスピンボタンで対象のサブパスを変更することができます。次の行に対象にしているサブパスの1番目のノードの位置情報、ノードが閉じているかどうか、サブパスが右回りかどうか(左回りの時にチェックが入る)を表示しています。
最下行は、サブパスの各ノード間を直線で結んだ多角形とした場合の面積を表示しています。サブパスの長さは、パスの長さそのものが取得できますが、面積は多角形として算出するため、シェイプが多角形でない場合はパス長と面積の間に整合性はありません。
現在のところ対象のノードを画面上で識別できるように表示状態を変化させることはできません。ノード情報を見て判断してください。
右回り/左回りを反転させたり、ノードを回転させる機能を追加しました。
制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。shapeinfo2a.LZH(17,095byte)
インストールファイルは、ShapeInfo2a.gmsです。インストール方法はこちらを参照してください。
情報を表示したいシェイプ(曲線化したものに限る。)を選択した状態で「main.main」を実行します。
最下部に、3つのコマンドボタンを追加し、前シフトは、対象サブパスの先頭ノードを最後とし、残りのノードを順次前に繰り上げます(結果これまで2番目だったノードが先頭になりますので、右回り図形の場合、ノード群も右に回ったようになります。)。後シフトはその逆の動作、反転は、右回り/左回りを逆転します。
動作させたイメージは、次のとおりです。
左上が元の図形、左中が外側サブパスを前シフト、左下が外側サブパスを後シフト、右上が、外側サブパスを反転、右中が内側サブパスを前シフト、右下が内側サブパスを後シフトした結果です。ブレンドの変化がわかると思います。ノードをつなぐセグメントも、維持するようにしましたので、ノードの対応のみが変わるようになっているはずです。
また、そもそもの右回り/左回りの判定が実はcurveオブジェクトのIsClockwiseでできるということに気づきましたので、判定も変更しました。
が、12までにはこのプロパティ(IsClockwise)がないようなので、広く利用できるように戻しました。また、そのほかのプロパティにも12と互換性のないものがありましたので、代用コードに修正しました。
A3ノビさん、動作確認等ありがとうございました。
* * *
* * *
* * *