C#ATIA

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

目的のバルーンをリフレームオンしたい

何れ使うつもりなので作成しているのですが、目的のバルーンを
マクロで見つけて、リフレームオンしたいんです。

試しにコンテキストメニューを見てみると、無いです。

あまり気にしたことが無かったのですが、無いんですね。

試しに、パワー入力等を行う為の右下の部分
(名称不明・・ドキュメントには記載されているかも)

c:"コマンドID"

※ダブルクォーテーションは不要です
でコマンドを呼び出せます。

コマンドIDについては、メニューのこちらを調べるか

こちらをご覧ください。
コマンドID - C#ATIA

で、リフレームオンの言語依存無しのコマンドIDは、

CATAfrReframeOnPSOHdr

でした。

試しに、バルーンを選択した状態でリフレームオンしてみると、
(矢印部が選択済み)

ん~バルーンと言うよりバルーンが有るビューがリフレームオン
している感じです。

こんな状態でリフレームオンしても同じ状態になるので

リフレームオンが機能していないわけでは無さそうなのですが、
期待は裏切られます。
※バルーンだけではなく、線などの要素でも同じ結果でした。



仕方が無いので、マクロで

'vba
'アクティブなシートの最初のバルーンを画面中央に持ってくる

Option Explicit

Sub CATMain()
    
    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument

    Dim sel As Selection
    Set sel = dDoc.Selection
    
    CATIA.HSOSynchronized = False
    
    sel.Clear
    sel.Add dDoc.sheets.ActiveSheet
    sel.Search "CATDrwSearch.DrwBalloon,sel"

    Dim balloons As Collection
    Set balloons = New Collection

    Dim i As Long
    For i = 1 To sel.Count2
        balloons.Add sel.Item(i).value
    Next
    
    sel.Clear

    CATIA.HSOSynchronized = True

    ' 1個目のバルーン
    Dim balloon As DrawingText
    Set balloon = balloons.Item(1)

    ' 1個目のバルーンが画面中央になるように移動
    ' ズームはしない
    reframe_on_like_balloon balloon
    
End Sub


Private Sub reframe_on_like_balloon( _
    ByVal balloon As DrawingText)

    Dim view As DrawingView
    Set view = balloon.Parent.Parent
    
    Dim pos As Variant
    pos = Array( _
        balloon.x + view.x, _
        balloon.y + view.y _
    )

    set_view_origin pos

    CATIA.ActiveDocument.Selection.Add balloon

End Sub


Private Sub set_view_origin( _
    ByVal positionAry As Variant)
    
    Dim viewer As Variant ' SpacesViewer
    Set viewer = CATIA.ActiveWindow.ActiveViewer
    
    'http://catiadoc.free.fr/online/interfaces/interface_Viewpoint2D.htm
    Dim vp As Variant ' Viewpoint2D
    Set vp = viewer.Viewpoint2D
    
    vp.PutOrigin positionAry
    'vp.Zoom = 1#

End Sub

何とも中途半端なのですが、目的のバルーンが画面の中央なるように
画面を動かし、少しでも気が付きやすいように選択済みにして終了します。

本当はズームもしたいのですが、何を目安にどれぐらいズームすれば
良いのかが分からないのです。

せめて、この枠のサイズ等が取得出来れば良いのですが、
ちょっと見つからないです。
後はフォントのサイズと文字数、ビューとシートのスケールから
それっぽい数値を導き出すしかないのかな・・・。
キッチリしたサイズでは無くて良いのですが。

これが可能だと、重複したバルーンを見つけたり、目的のテキストを探したり
出来て便利だと思うんですけどね。
(検索だと文字での検索できないですよね?)