こちらの続きです。
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
関数名が長いのは、御愛嬌。(今風)