Excelの表から取得した値で点とテキストを作成するマクロ|CATIAマクロの作成方法

今回はマクロ案募集で頂いた内容です。
頂いた内容は以下のとおりです。

ワークベンチ: 
パートデザイン

マクロ案: 
予め準備した座標値(X,Y,Z)と文字を基に3D上に点を作成し、合わせて文字も同じ位置に配置する

今回は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のE列に書かれている文字列をもとに、選択したビュー上にテキストを作成
    ※事前にビューを作成しておく必要あり
・作成する点の名前はExcelのA列に書かれている文字列
・作成した点はすべて新規作成される形状セットにまとまる
・形状セットはツリー第1階層に作成される
・新規形状セットの名前は選択したExcelのファイル名

 

サンプルコード

マクロのコードは下記のとおりです。
マクロを実行してまず始めに注釈セット内にある「ビュー」を選択します。
ここで選択したビュー上にすべてのテキストが作成されます。
※選択するビューは「XY平面」「YZ平面」「ZX平面」を基準としたビューを前提としています。
 ビューのサポートや角度等でうまく実行できない場合があるので注意して下さい。

ビュー選択後は「ファイルを開く」ウィンドウが立ち上がります。
ここで開いたExcelファイルの表を読み取りCATIA内で点を作成します。

 

コード解説

本マクロのコードを上から順に部分ごとにわけて解説していきます。
※コード内でもコメントで解説をしているのでそちらも参照ください。
 

アクティブドキュメントの定義

まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATPartでのみ有効なものなので、アクティブドキュメントがCATPart以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。

条件分岐の先、つまりはアクティブドキュメントがCATPartの場合は変数「doc」にアクティブドキュメントを代入します。

あわせてアクティブドキュメントのPartも変数「pt」に代入します。
  

TPSView定義

次にユーザーが選択した注釈セット内のビュー(TPSViewオブジェクト)を定義します。
Selectionオブジェクト」の「SelectElement2メソッド」を使ってTPSViewを取得します。

基本的には定型文なので詳しくは上記リンクページを確認して下さい。SelectElement2メソッドを使うには「As Selection」と型を指定していると使えないので注意しましょう。 
 

注釈セット定義

次にユーザーが選択した注釈セットを定義します。
既に注釈セットがある場合はそれを、存在しない場合は新たに注釈セットを作成し「annSet」として定義します。 
 

選択されたTPSViewをアクティブに

テキストはそのときアクティブ状態のビュー上に作成されるため、選択されたTPSViewをアクティブにします。アクティブビューの切り替えはAnnotationSetオブジェクトの「ActiveViewプロパティ」の中身を変更すれればOKです。

 icon-code TPSViewをアクティブに

AnnotationSetオブジェクト.ActiveView = TPSViewオブジェクト 

 
AnnotationFactory定義

次に「AnnotationFactory」を定義します。
これは「Factory」「HybridShapeFactory」と同じ部類のオブジェクトで、アノテーションやテキストを作成するために必要なオブジェクトです。
 

Excelの定義

CATIAマクロ上でExcel VBAを使用できるようにExcelを定義します。
上記コードでExcelが定義できない場合は、参照設定がされていない可能性があります
詳しくは下記ページの「Excelマクロのライブラリを読み込む」の項を一読ください。

 
Excelを定義後は「GetOpenFilenameメソッド」を使って、
出力元となるExcelファイル(ブック)をユーザーに選択させ、変数「wb」として代入します。

変数「wb」を定義したら、wbの1つ目のシートを変数「ws」に代入します。
このWSに書かれている座標値をもとに点が作成されます。
 

形状セットの作成

次に作成した点をひとまとめにするための形状セットを作成します。
形状セットの名前は「wb.Name」、つまり選択したExcelファイルと同じ名前にします。
 

座標の取得/点とテキストの作成

座標を取得し、点を作成という処理を繰り返すためループ文を使います。

ここではテキストの作成についてのコード解説をしていきます。
(点の作成については「Excelの表から座標を取得し点を作成」のコード解説を参照下さい)

テキストに作成は「AnnotationFactory」の「CreateEvoluateTextメソッド」を使います。

 icon-code CreateEvoluateTextメソッド 

annf.CreateEvoluateText(ユーザーサーフェス, X座標, Y座標, Z座標, 矢印線の有無)

ユーザーサーフェスには、テキスト作成時に必要なオブジェクトをRefernceとして入力します。
今回のサンプルマクロの場合、このオブジェクトは「点」にあたります。

X座標, Y座標, Z座標にはテキストの座標を入力します。ただ、ここで入力する座標の絶対座標はアクティブ状態のビューによって変化するので注意しましょう。

矢印線の有無には「True」「False」のいずれかを入力します。
「True」の場合は矢印線(Leader)が作成されます。

テキストはビューによって作成方法が少しずつ違ってくるので、サンプルマクロでは「XY」「YZ」「ZX」と条件分けをして作成しています。この部分は自身の環境に合わせて書き換えて下さい。

 

まとめ

今回はExcelの表から取得した値で点とテキストを作成するマクロについての内容でした。

基本的にはExcelの表から座標を取得し点を作成で紹介した内容に「AnnotationFactory」の「CreateEvoluateTextメソッド」を使ってテキスト追加の処理をプラスしただけです。

注釈が絡むマクロは少し複雑なのでいろいろ試して徐々に理解していって下さい。

 

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

 

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

2022年7月28日CATIA, CATIAマクロ

Posted by Lic