Excelの表から座標を取得し点とスプラインを作成するマクロ|CATIAマクロの作成方法

今回は「お問い合わせ」より頂いた内容です。
頂いた内容は以下のとおりです。

ワークベンチ: GSDワークベンチ

マクロ案: 
以前、Excelの表から座標を取得し点を作成という記事が有りましたがこれに、作成した点を基にスプラインを使った曲線を描くマクロを作成頂けないでしょうか?可能であればスプラインを閉じるかどうかの選択できるマクロも組み込んで頂けないでしょうか?

今回は以前作成したExcelの表から座標を取得し点を作成するマクロの続編です。
お問い合わせ頂いた内容と同じく「Excelの表から座標を取得し点を作成」ページで紹介しているサンプルマクロに、スプライン作成の処理を追加していきます。そのため前回内容を見ていない方は先に目を通しておくことをオススメします。

今回はExcel上でスプラインを閉じるか閉じないかも設定できるよう、下画像のようなテンプレ(フォーマット)を使います。ぜひ本ページのコード内容を理解して、自身の環境にあった使いやすいテンプレでできるようコードを書き換えてみて下さい。

前回内容に引き続きCATIAマクロでExcelファイルを扱うため、Excelライブラリを読み込ませる必要があるので予め設定しておいてください

 

マクロの機能

タイトルのとおり本ページで紹介するマクロの機能は
「Excelの表から座標を取得し点とそれらを通るスプラインを作成する」というものです。

Excelに書かれている「X座標」「Y座標」「Z座標」という文字を読み取って取得する列を指定しているわけではなく、「B列」「C列」「D列」の値を取得するという処理を行っています。行の上から順に隙間なくつめていけば、基本作成する点の個数に制限はありません。

そのためExcelファイルの方で1行ずれて記入した場合、うまくマクロが作動しません。
Excelファイルが上図と同じテンプレであること前提のマクロとなっているため注意して下さい。
(※B列にX座標,C列にY座標,D列にZ座標 それぞれの座標値は2行目以降に記入されているものに限る)

マクロの機能をまとめると以下のとおりです。

 icon-wrench マクロの機能まとめ ・選択したExcelの表から座標値を取得し、CATIAで同座標位置に点を作成
・作成する点の名前はExcelのA列に書かれている文字列
・作成した点はすべて新規作成される形状セットにまとまる

・新規形状セットはマクロ実行時にアクティブな形状セットの中に作成される
  (パーツボディーがアクティブの場合はツリーの第一階層に作成される)
・新規形状セットの名前は選択したExcelのファイル名
———————————- 今回の追加機能 ———————————
・点と同じ形状セット内にすべての点を通るスプラインを作成
・スプラインが通る点の順番はExcel行の上から順
・「E2」セルに「close」と書いてある場合のみ、スプラインは閉じて作成される
テンプレ内容を変更したい場合は
前回と同じく、以下で紹介するコードを少し書き換えれば対応できますよ!

 

サンプルコード

マクロのコードは下記のとおりです。

はじめの方のコードは「Excelの表から座標を取得し点を作成」と同じです。(変数名は変えていますが)。点作成部分のコードの解説は前回ページでしているので、コード解説は今回追加したスプラインに関する処理部分の解説をしていきます。

 

コード解説 

スプライン作成

まずは”空”のスプラインを作成します。

基本的にVBAによって形状を作成する時は作成に必要な材料(たとえば始点となる点や基準となる方向など)が必要ですが、スプラインを作成する「AddNewSplineメソッド」ではそれが必要ありません

一旦何も定義されていない「スプライン」という”存在”だけを作っているイメージです。
この空のスプラインに対して「HybridShapeSplineオブジェクト」のメソッドを使って、点や接線方向などを追加指定していくことで任意のスプラインを作成することができます。
  

形状セット内の点(HybridShape)ループ

つぎに先にもいっていた通り、空のスプラインに「点の追加」をしていきます。

点の追加自体は点のReferenceを作成し、「AddPointメソッド」を使うだけです。
AddPointメソッドではスプラインの後ろに順々に追加されていきます。

今回は点が複数あるので、この処理をループで処理をしています。
新規作成した形状セット「new_hb」内には点しか作成されていないので、「new_hb.HybridShapes」のItemはすべて作成された点しか入っていない状態です。

つまり、「For Each hs In new_hb.HybridShapes」としてループすれば、ループ毎に「hs」には作成した点が入れ替わって入っていくという処理になっています。あとはこの「hs」を使ってスプラインに「AddPoint」していくだけです。
 

スプラインを閉じる設定

Excelファイルの「E2」セルに「close」と書かれていたらスプラインを閉じる設定にします。

スプラインは作成した段階では閉じない設定になっています。
これを閉じる設定にするには「HybridShapeSplineオブジェクト」の「SetClosingメソッド」を使います。引数として「1」を渡せばスプラインが閉じる設定に変わります。
 

形状セットにスプラインを追加

作成したスプラインを点のまとまった形状セットに追加します。
点作成の時と同じく「AppendHybridShapeメソッド」を使って上記のように書きます。

最後に「pt.Update」でPart全体に更新をかけて完了です。

 

まとめ

今回はExcelの表から座標を取得し点とそれらを通るスプラインを作成するマクロについての内容でした。

VBAで作成する形状として「スプライン」は少しだけ特別です。
空のスプラインを作成してから点や接線方向などを設定していくという流れです。

サンプルコードということもあり読み込むExcelファイルのテンプレは今回のような単純なものになりましたが、個人的にデザインがあまり好みではない(closeだけ浮いてる感?があるところとか)ので自身の環境に合わせて書き換えることをオススメします。

 

サンプルマクロ集に戻る
目次へ戻る

 

 CATIAマクロを本気で勉強するなら

CATIA, CATIAマクロ, VBA

Posted by Lic