こちらの続きです。
Drawのスプラインを描く1 - C#ATIA
スプラインのマクロの記録を行うのですが、イロイロと問題が有ります。
・ファイル自体に問題が残る可能性がある為、新規のPartファイルで行う。
・スケッチに入る → スプライン作成 → スケッチを抜ける まで記録する。
・確認する為の再実行する際、最後まで実行する。↓こちらの問題が有り!
スケッチをクローズする - C#ATIA
それらを踏まえた上で進めていきます。
まず、スケッチを予め作成しておきますが、空のスケッチは残しておけない為
適当に点なり線なりを書いてスケッチから抜けておきます。
続いてスプラインのマクロを記録しました。
Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As part Set part1 = partDocument1.part Dim bodies1 As Bodies Set bodies1 = part1.Bodies Dim body1 As Body Set body1 = bodies1.Item("パーツ ボディー") Dim sketches1 As Sketches Set sketches1 = body1.Sketches Dim sketch1 As Sketch Set sketch1 = sketches1.Item("スケッチ.1") part1.InWorkObject = sketch1 Dim factory2D1 As Factory2D Set factory2D1 = sketch1.OpenEdition() Dim controlPoint2D1 As ControlPoint2D Set controlPoint2D1 = factory2D1.CreateControlPoint(209.93692, -28.521069) controlPoint2D1.ReportName = 2 Dim controlPoint2D2 As ControlPoint2D Set controlPoint2D2 = factory2D1.CreateControlPoint(98.861, 35.288517) controlPoint2D2.ReportName = 3 Dim controlPoint2D3 As ControlPoint2D Set controlPoint2D3 = factory2D1.CreateControlPoint(11.024345, -32.459942) controlPoint2D3.ReportName = 4 Dim arrayOfObject1(2) Set arrayOfObject1(0) = controlPoint2D3 Set arrayOfObject1(1) = controlPoint2D2 Set arrayOfObject1(2) = controlPoint2D1 Dim spline2D1 As Spline2D Set factory2D1Variant = factory2D1 Set spline2D1 = factory2D1Variant.CreateSpline(arrayOfObject1) spline2D1.ReportName = 5 sketch1.CloseEdition part1.InWorkObject = body1 part1.UpdateObject sketch1 End Sub
念のためUndoし実行した所、再現出来たので記録は録れています。
Drawで使用する場合無関係な部分もあるのですが、一通り見てみましょう。
Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument ・・・ part1.InWorkObject = sketch1
この辺りまではマクロとしての準備ですね。
Dim factory2D1 As Factory2D Set factory2D1 = sketch1.OpenEdition()
ここは画面上では変化は無いのですが、スケッチに入るようなイメージです。
(実際はFactry2Dの取得ですけど・・・)
Dim controlPoint2D1 As ControlPoint2D Set controlPoint2D1 = factory2D1.CreateControlPoint(209.93692, -28.521069) controlPoint2D1.ReportName = 2 ・・・ Dim arrayOfObject1(2) Set arrayOfObject1(0) = controlPoint2D3 Set arrayOfObject1(1) = controlPoint2D2 Set arrayOfObject1(2) = controlPoint2D1
ここでは、スプラインのコントロールポイントを作り、バリアント型配列に
入れています。
ReportNameって何だろう? と思い調べましたが良くわかりませんでした。
r1 Geometry2D (Object)
その後のコードを見ても使ってないので、要らないような気もします。
Dim spline2D1 As Spline2D Set factory2D1Variant = factory2D1 Set spline2D1 = factory2D1Variant.CreateSpline(arrayOfObject1) spline2D1.ReportName = 5
ようやくスプラインが出てきました。
CreateSplineメソッドにコントロールポイントの配列をパラメータとして
渡せばOKなようです。
但し、Factory2Dは素のまま使用しておらず、一度バリアント型変数に
渡した上で使用する必要がありそうです。
sketch1.CloseEdition
スケッチから抜けるイメージです。
part1.InWorkObject = body1 part1.UpdateObject sketch1
あとは、それなりの処理ですね。
コントロールポイントのバリアント型配列をバリアント型のFactory2Dの
CreateSplineメソッドに渡せば出来そう って事になります。