C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

VBAの静的クラス

こちらの続きです。
2次元のバウンダリボックス - C#ATIA

前回のものとこちら2つも含め、githubで公開しました。
2次元の点オブジェクト - C#ATIA
2次元のベクトルオブジェクト - C#ATIA

GitHub - kantoku-code/CATIA_V5_Geometry_used_for_balloon_adjustment: これは将来削除します

これらの自作クラスを作ったものの、インスタンスの作成が非常に
面倒です。例えばBBox2D場合であれば、こんな感じです。

'vba

Option Explicit

Sub CATMain()

    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument
    
    Dim view As DrawingView
    Set view = dDoc.sheets.ActiveSheet.views.Item(3)

    Dim variView As Variant
    Set variView = view
    
    Dim size(3) As Variant
    variView.size size

    Dim bBox As BBox2D
    Set bBox = New BBox2D

    bBox.with_array Array( _
        size(0), _
        size(2), _
        size(1), _
        size(2), _
        size(0), _
        size(3), _
        size(1), _
        size(3) _
    )

End Sub

viewの取得はしょうがないとして、BBox2Dのインスタンスの作成が
次の3行です。

    Dim bBox As BBox2D
    Set bBox = New BBox2D
    bBox.with_array Array( ・・・)

宣言・インスタンス作成・初期化の3行です。
2行に減らすことは出来ますが、1行には出来ませんね。
こちらの問題は、多くの方を悩ませています。
VBAのクラスでNewと同時に引数付きコンストラクタを起動する代替案 - えくせるちゅんちゅん

もう良い・・・無理。これを避ける為のサポートクラスを作り、
初期化されたものを返すメソッドで対処する事にしました。

ここで本題。VBAの静的クラス(インスタンスを作成しないクラス)は
どうやって作るのかな? です。
調べた所・・・標準モジュールでやれ!との事。納得。

このサポートクラスもgithubに入れています。
上記の例のビューからBBox2Dのインスタンスはこちらになります。
CATIA_V5_Geometry_used_for_balloon_adjustment/GeoFactry.bas at main · kantoku-code/CATIA_V5_Geometry_used_for_balloon_adjustment · GitHub

これを利用する事により、ビューを渡すだけでBBox2Dのインスタンス
受け取れるので、結構清楚な状態となりました。

'vba

Option Explicit

Sub CATMain()

    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument
    
    Dim view As DrawingView
    Set view = dDoc.sheets.ActiveSheet.views.Item(3)

    Dim bBox As BBox2D
    Set bBox = GeoFactry.create_boundary_box_by_view(view)

End Sub

関数名が長いのは、御愛嬌。(今風)