ここの所、連日CATIA V5です。
さすがに、VBAエディタにも慣れてきましたが・・・やっぱり辛い。
では本題。DrawのViewのサイズを取得し絶対座標で四角を描きます。
もちろん四角を描くのが目的ではなく、最終的にはビューの中心を
取得したいです。
'vba Option Explicit Sub CATMain() Dim dDoc As DrawingDocument Set dDoc = CATIA.ActiveDocument Dim sheet As DrawingSheet Set sheet = dDoc.sheets.ActiveSheet Dim view As DrawingView For Each view In sheet.views dump_bbox ( _ get_boundary_box_by_view( _ view _ ) _ ) Next End Sub 'ビューのバウンダリボックス取得 Private Function get_boundary_box_by_view( _ ByVal view As DrawingView) _ As Variant Dim variView As Variant Set variView = view Dim size(3) As Variant variView.size size Dim viewScale As Double viewScale = view.Scale Dim i As Long For i = 0 To UBound(size) size(i) = size(i) Next get_boundary_box_by_view = Array( _ size(0), _ size(2), _ size(1), _ size(2), _ size(0), _ size(3), _ size(1), _ size(3) _ ) End Function Private Sub dump_bbox( _ ByVal bBox As Variant) Dim dDoc As DrawingDocument Set dDoc = CATIA.ActiveDocument Dim sheet As DrawingSheet Set sheet = dDoc.sheets.ActiveSheet Dim view As DrawingView Set view = get_view_by_name("dump") Dim fact As Factory2D Set fact = view.Factory2D view.Activate Dim ary As Variant ary = Array( _ bBox(0), _ bBox(1), _ bBox(2), _ bBox(3), _ bBox(6), _ bBox(7), _ bBox(4), _ bBox(5), _ bBox(0), _ bBox(1) _ ) Dim i As Long Dim line As Line2D For i = 0 To UBound(bBox) Step 2 Set line = fact.CreateLine( _ ary(i), _ ary(i + 1), _ ary(i + 2), _ ary(i + 3) _ ) Next End Sub Private Function get_view_by_name( _ ByVal name As String, _ Optional isCreate = True) _ As DrawingView Dim dDoc As DrawingDocument Set dDoc = CATIA.ActiveDocument Dim views As DrawingViews Set views = dDoc.sheets.ActiveSheet.views Dim view As DrawingView For Each view In views If Not view.name = name Then GoTo continue End If Set get_view_by_name = view Exit Function continue: Next If isCreate Then Set get_view_by_name = views.Add(name) Else Set get_view_by_name = Nothing End If End Function
get_boundary_box_by_view関数内でビューのサイズを取得しています。
r1 DrawingView (Object)
ここで戻り値で4隅の座標に変更してから、返しているのですが、
理由はDrawingDimensionのGetBoundaryBoxメソッドの戻り値と
値を揃える為です。
r1 DrawingDimension (Object)
そもそも何でGetBoundaryBoxメソッドの戻り値は4隅の座標値にして
いるのかな?と最初に感じたのですが、寸法値の場合は斜めに傾いたものが
あるからだと解釈しました。
取りあえず、この様なデータで試します。
実行結果はこちらです。
あぁ忘れていました。メインとバックのビューは要らなかったのに・・・。
オレンジ色のハイライトさせているのが、描いた四角です。
実は知らなかったんですよ。
緑の矢印のビューの枠のサイズを取得すると思っていたのですが、
3Dから生成した形状のサイズしか取得してくれてません。
つまり、寸法等はまるで無視なんです・・・。
まぁこれはこれでありがたいのですが。
不幸中に幸い。うっかりメインとバックのビューも処理させたのですが、
ビューの原点の矢印は拾ってしまいます。
これ、迷惑なんですよね。(知っていたのですが忘れていました)
例えば、原点から離れている小さな断面とかが、想定外のサイズを
結果で返してきます。
どうしようかな?