C#ATIA

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

複数のビュー名とリンクした状態のテキストを新作

恐らく、こちらの2つの目的を一体化したものがお望みだろうと
思われる質問を頂きました。
カレントビューの角度や生成スタイルの取得2 - C#ATIA
検索したテキストの文字を、指定したテキストに追記する - C#ATIA

言葉にすると・・・
「複数のビュー名とリンクした状態のテキストを新作したい」
と解釈しました。

f:id:kandennti:20190604192043p:plain
単に「こちらの青のテキストを削除しちゃって、復活させたい」と言う事では
無いですよね?
これであれば、マクロを使うまでも無く、こちらのコマンドで可能です。
f:id:kandennti:20190604192051p:plain
・・・マクロだと、StartCommandで出来るのかな?


さて本題ですが、DrawingTextって、困った事に "式" が利用できないですよね?
リンクした状態を作る為には、属性リンクを利用する以外方法を知らないです。
こちらの経験が生かせそうです。
2D属性リンクを扱いたい1 - C#ATIA

'vba
Sub CATMain()
    
    'ドキュメント
    Dim dwDoc As DrawingDocument
    Set dwDoc = CATIA.ActiveDocument
    
    'selection
    Dim sel As selection
    Set sel = dwDoc.selection
    
    '検索-紫の文字
    sel.Clear
    sel.Search "CATDrwSearch.DrwText.Color='(128,0,255)',all"
    
    If sel.Count2 < 1 Then
        MsgBox "該当する文字は見つかりませんでした"
        Exit Sub
    End If
    
    '検索でHitした文字のビュ-の取得
    Dim viLst As Collection
    Set viLst = New Collection
    
    Dim i As Long
    For i = 1 To sel.Count2
        viLst.Add sel.Item2(i).Value.Parent.Parent
    Next
    sel.Clear
    
    'ビュ-名のパラメータの取得
    '本当は重複削除チェックすべき
    Dim prmLst As Collection
    Set prmLst = New Collection
    
    Dim vi As DrawingView
    Dim subLst As Parameters
    Dim prm As Parameter
    For Each vi In viLst
        Set subLst = dwDoc.Parameters.SubList(vi, False)
        Set prm = GetParameter("Name", subLst)
        If Not prm Is Nothing Then
            prmLst.Add prm
        End If
    Next
    
    'アクティブビューに空のテキスト新作
    Dim actVi As DrawingView
    Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView
    
    Dim txt As DrawingText
    Set txt = actVi.Texts.Add(String(prmLst.Count, vbLf), 0, 0)
    
    '属性リンクを追加
    For i = 1 To prmLst.Count
        txt.InsertVariable Len(txt.Text) - (prmLst.Count - i), 0, prmLst(i)
    Next

    '終わり
    MsgBox "Done"

End Sub

'パラメータ取得
Private Function GetParameter( _
    ByVal key As String, _
    ByVal params As Parameters) As Parameter
    
    Set GetParameter = Nothing
    
    Dim prm As Parameter
    Err.Number = 0
    On Error Resume Next
        Set prm = params.Item(key)
    On Error GoTo 0
    
    Set GetParameter = prm
End Function

こんな感じのデータを用意しました。
f:id:kandennti:20190604192124p:plain
上記のマクロを実行すると、紫のテキストを持つビュー名を取得し、
アクティブビューの原点付近にリンク付きのビュー名リストのテキストが出来上がります。
ややこしいのでこんな感じです。
f:id:kandennti:20190604192134p:plain

簡単に確認したところ、ID・Suffixの修正も反映されます。

正直な所、これ以上先は手動でしか出来そうに有りません。
(マクロで修正すると属性リンクが消えます)
DrawingViewに事前に改行を入れることで対応しましたが、ここが一番難しかった。
DrawingViewの改行はラインフィールド(vbLf)です。