こちらの続きです。
Drawのスプラインを描く2 - C#ATIA
前回の記録を録ったマクロを、Drawで流用する事を考慮し修正します。
一番欲しいのはスプラインの作成部分ですが、コントロールポイントも必要と
なる事が前回わかりましたので、それも含めて関数化してしまいたいです。
つまり座標値配列をスプライン作成関数に突っ込むと、スプラインが出来上がる
と言う感じです。
'vba 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") Dim factory2D1 As Factory2D Set factory2D1 = sketch1.OpenEdition() Dim posLst As Variant posLst = Array( _ Array(209.93692, -28.521069), _ Array(98.861, 35.288517), _ Array(11.024345, -32.459942) _ ) Dim spline2D1 As Spline2D Set spline2D1 = InitSpline2D(posLst, factory2D1) sketch1.CloseEdition part1.Update MsgBox "Done" End Sub 'スプラインの作成 'param:posLst ''' @param:posLst-array(array(Double,Double),,,) ''' @param:fact-Factory2D ''' @return:Spline2D Private Function InitSpline2D( _ ByVal posLst As Variant, _ ByVal fact As Factory2D) _ As Spline2D 'コントロールポイント用配列 Dim ctls() As Variant ReDim ctls(UBound(posLst)) 'コントロールポイントを作りつつ配列に代入 Dim i As Long Dim ctl As ControlPoint2D For i = 0 To UBound(posLst) pos = posLst(i) Set ctls(i) = fact.CreateControlPoint(pos(0), pos(1)) Next 'バリアントFactory2D Dim factVri As Variant Set factVri = fact 'スプライン生成 Set InitSpline2D = factVri.CreateSpline(ctls) End Function
目的の為に、InitSpline2D関数を作りました。パラメータは
座標値配列とFactory2Dです。 Factory2Dさえ受け取ってしまえば
スケッチだろうがDrawだろうが関係無く使用出来る関数 と言うわけです。
実際に実行すると、記録を録ったマクロと同様のスケッチのスプラインが
出来上がることが確認出来ました。
いよいよ本題です。
先程作った「InitSpline2D関数」はDrawでも流用出来るようにしています。
必要なのは座標値配列とFactory2Dです。Drawの場合、Factory2Dは
DrawingViewオブジェクトのプロパティとして持っています。
Drawのスプラインを描く1 - C#ATIA
その為、アクティブなビューにスプラインを描くようなマクロに修正してみました。
'vba Sub CATMain() Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument Dim vi As DrawingView Set vi = doc.Sheets.ActiveSheet.views.ActiveView Dim fact As Factory2D Set fact = vi.Factory2D Dim posLst As Variant posLst = Array( _ Array(209.93692, -28.521069), _ Array(98.861, 35.288517), _ Array(11.024345, -32.459942) _ ) Dim sp As Spline2D Set sp = InitSpline2D(posLst, fact) MsgBox "Done" End Sub
極端な話ですが、スケッチ時のFactory2Dが
Dim factory2D1 As Factory2D Set factory2D1 = sketch1.OpenEdition()
Drawでは
Dim fact As Factory2D Set fact = vi.Factory2D
に変わったようなものです。
実際に実行してみると、こんな感じです。
もう怖くないでしょ?