C#ATIA

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

カレントビューの角度や生成スタイルの取得2

こちらの続きです。
カレントビューの角度や生成スタイルの取得 - C#ATIA

前回「IDやSuffixが関係してくると、もうちょっとややこしいです。」と書いた
ビュー名辺りのお話です。

こんな状態のデータです。
f:id:kandennti:20190604111851p:plain
ここでこちらのコードを実行します。

'vba
Sub CATMain()
    
    Dim msg As String
    
    'ドキュメント
    Dim dwDoc As DrawingDocument
    Set dwDoc = CATIA.ActiveDocument
    
    'カレントビュー
    Dim actVi As DrawingView
    Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView
    
    'ビュー名変更
    actVi.Name = "HOGE"
    msg = "ビュー名 : " & actVi.Name
    
    MsgBox msg, , "** カレントビュー情報 **"
    
End Sub

ビュー名が変わり、ビュー内のテキストも変更されます。
f:id:kandennti:20190604111925p:plain

ビューのプロパティを見ると、式が利用されているようです。
f:id:kandennti:20190604111939p:plain
(ビュー内のテキストの「1:1」は属性リンクかな?)


御質問頂いた内容は、Prefix・ID・Suffixを扱うと言う内容だと
思いましたので、これからが本題です。
IDとSuffixが空欄では味気ないので、こんな感じにして見ました。
f:id:kandennti:20190604111948p:plain
こちらのマクロを実行します。

'vba
Sub CATMain()
    
    Dim msg As String
    
    'ドキュメント
    Dim dwDoc As DrawingDocument
    Set dwDoc = CATIA.ActiveDocument
    
    'カレントビュー
    Dim actVi As DrawingView
    Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView
    
    'ビュー名の取得
    Dim prefix As String, ident As String, suffix As String
    actVi.GetViewName prefix, ident, suffix
    
    MsgBox "Prefix:" & prefix & vbCrLf & _
           "Ident:" & ident & vbCrLf & _
           "Suffix:" & suffix
    
    'ビュー名の変更
    prefix = "PIYO"
    ident = " HUGA"
    suffix = " POYO"
    
    actVi.SetViewName prefix, ident, suffix
    
    MsgBox "Prefix:" & prefix & vbCrLf & _
           "Ident:" & ident & vbCrLf & _
           "Suffix:" & suffix
    
End Sub

一度Get~して、修正時はSet~です。実行後がこちら。
f:id:kandennti:20190604112007p:plain
ん?Tree側のビュー名が変更されていません。 手動でビューのプロパティ
開いたり何らかのアクションを起こせば、正しく表示されるのですが・・・。
ビューのUpdateもダメ、RefreshDisplayもダメ、強制更新すれば良いのかも
知れませんが、重いデータで行うのは気が引けます。

イロイロとお手軽そうな操作で探すと、アクティブなビューを変更すると
正しい表示になったので、一時的にバックグラウンドをアクティブにし
再度元のビューをアクティブにするように変更しました。

・・・
    actVi.SetViewName prefix, ident, suffix
    
    '追加
    Dim vis As DrawingViews
    Set vis = dwDoc.Sheets.ActiveSheet.views

    vis.Item(2).Activate
    actVi.Activate
    'ここまで
    
    MsgBox "Prefix:" & prefix & vbCrLf & _
           "Ident:" & ident & vbCrLf & _
           "Suffix:" & suffix

End Sub

上手く行きました。
f:id:kandennti:20190604112018p:plain