VBAでスケッチ(Sketch)の直線(Line)と円弧(Arc)を作成する|CATIAマクロの作成方法

今回の記事は「マクロ案」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。

ワークベンチ: スケッチャーワークベンチ
 
マクロ案: 
スケッチでスプラインをマクロで記録をしようとしても記録されませんでした。
もしスケッチでプロファイル(主に線分と円弧)を描くマクロが作れたら知りたいです。

ご連絡頂いた通り、スケッチャー関連のコマンドはマクロの記録が対応していません。
そこでここではスケッチの「直線(Line)」と「円弧(Arc)」をVBAで作成する方法を紹介していきます。
サンプルコードは非常に単純なものですが、内容さえ理解できれば [プロファイル]と同じように形状を作成することができるようになります。(拘束については触れていません)

 

マクロの機能

今回作成したマクロはスケッチで上画像のような形状(プロファイル)を作成するマクロです。
具体的な機能は以下のとおりです。

  マクロの機能まとめ ・スケッチで直線(Line)と円弧(Arc)を作成する
・スケッチはツリー第1階層に新規作成される形状セット内に作成される
 ※ボディー用のコードも有り

コード自体は上画像のようなものしか作れませんが、  [プロファイル]は直線と円弧の組み合わせなので、作成方法さえ理解できれば同等ものをVBAでも作成することが可能になります。

 

サンプルコード

マクロのコードは以下のとおりです。
スケッチを形状セット内に作成する場合とボディー内に作成する場合でコード内容が少し変わるので注意しましょう。※現状は形状セット内に作成するコードになっています。

コード解説

ドキュメント/パーツの定義

まずはアクティブドキュメントとそのパーツを定義をします。
CATPart以外で実行するとエラーが発生します。
エラー処理が必要な場合はTypeName関数を使った条件分岐処理を用意して下さい。
 

スケッチ平面/スケッチ定義

つぎにスケッチを定義します。
スケッチを定義するにはスケッチ平面を定義しておく必要があります。
上記コードでは「XY平面」をスケッチ平面として定義しています。

スケッチを定義するには下記のようなコードになります。
ボディー内のスケッチは「Sketches」、形状セット内のスケッチは「HybridSketches」内にAddメソッドを使って追加します。

 icon-code スケッチの定義  

‘形状セット内の場合
  Dim sk As Sketch
  Set sk = hb.HybridSketches.Add(スケッチ平面)
 

‘ボディー内の場合
  Dim sk As Sketch
  Set sk = bd.Sketches.Add(スケッチ平面)

サンプルコードでは両コードを用意しているので適宜コメント化を切り替えて使用してみて下さい。
 

Sketch編集開始(Factory2D定義)

3D形状を作成する場合、「Factoryオブジェクト」「HybridFactoryオブジェクト」などを使用しますが、スケッチで形状を作成する場合は「Factory2Dオブジェクト」を利用します。

Factory2Dオブジェクトを定義するにはSketchオブジェクトの「OpenEditionメソッド」を使います。
 

直線(Line)作成

直線を作成するには先に定義した「Factory2Dオブジェクト」を使って下記のように書きます。
下記の座標部分を書き換えることで、任意の位置に直線を作成することができます。

 icon-code スケッチ 直線作成

Dim line1 As Line2D
Set line1 = fac2d.CreateLine(始点X座標, 始点Y座標, 終点X座標, 終点Y座標)

通常スケッチ上で直線を作成すると、直線と同時に始点と終点も同時に作成されます。
しかし上記コードを使ってVBAで直線を作成した場合は、直線のみしか作成されません
そうすると直線の端点が無いことになり選択することもできなくなってしまいます。

指定した座標に点(Point2Dオブジェクト)を作成してもいいですが、毎回作るのは面倒です。
そこで適当に「空の変数(上記コードでいうtmp)」を使い、直線の始点と終点の名前を格納します。
こうすることで、直線の端点を作成することができます。

ここで重要なのは端点の名前を取得することではありません。
端点自体にアクセスすることです。

「StartPoint」「EndPoint」を使うことでLine2Dの端点ヘアクセスすることができます。そこで端点に対し”何らかの操作”を行うことでその端点が自動で作成されます。(つまり名前の取得でなく、座標の取得や名前の変更などでも可)

これにより手動で直線を作った時と同じ結果が得られます。
 

円弧(Arc)作成

円弧を作成するには先に定義した「Factory2Dオブジェクト」を使って下記のように書きます。
下記の座標、角度部分を書き換えることで、任意の位置に直線を作成することができます。

 icon-code スケッチ 円弧作成

Dim arc1 As Circle2D
Set arc1 = fac2d.CreateCircle(中心X座標, 中心Y座標, 半径始点角度, 終点角度)

上記コードで注意しないといけないのは入力する角度が「ラジアン」であるということです。
通常の度[°]ではないので注意しましょう。

サンプルコードでは「deg2rad」という度をラジアンに変換する関数を作成しています。
(「deg2rad(45)」と書けば45度をラジアンに変更した値が取得できます)

また、直線と同様にVBAで作成した円弧には、始点、終点、中心点が作成されません。
始点、終点は直線と同じようにすれば自動作成されますが、中心点は点を作成する必要があります。

点を作成するには先に定義した「Factory2Dオブジェクト」を使って下記のように書きます。

 icon-code スケッチ 点作成

Dim point1 As Point2D
Set point1 = fac2d.CreatePoint(X座標, Y座標)

サンプルコードでは「GetCenterメソッド」を使って円弧の中心座標を取得して、その位置移転を作成していますが、円弧自体を作成する時に中心座標を入力しているので、それと同じ値を入れればいいので「GetCenterメソッド」を必ずしも使わないといけないということはないです。
 

円弧(Arc)作成

スケッチの形状作成が終了したら、「スケッチを終了する」という処理を行う必要があります。
上記コードのように終了するスケッチの「CloseEditionメソッド」を使うだけでOKです。

最後に「pt.Update」でパーツの更新をしています。

 

まとめ

今回はVBAでスケッチの形状を作成する方法についての内容でした。

今回やったようにスケッチでは座標を指定して形状を作成していきます。
そのため、決められた形状であればVBAでも問題なく作成することができますが、入力された値によって変形する形状の場合は少し難易度があがると思います。

「直線」と「円弧」ができれば簡単な形状は対応できると思いますが、その他形状も必要になると思います。その場合は今回のようにスケッチを定義して「Factory2Dオブジェクト」のメソッドを使えば作成することができるのでいろいろ試してみて下さい。

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

 

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

 

CATIA, CATIAマクロ, VBA

Posted by Lic