C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

2D属性リンクを扱いたい7

こちらの
2D属性リンクを扱いたい6 - C#ATIA

ですが、内容的にはこちらを変更したものです。
2D属性リンクを扱いたい4 - C#ATIA

前回CSVファイルとしてエクスポートしたのですが、
同じレイアウトでセルのオブジェクト名を記載したテーブルを
横に作成した方が確認が楽な事に気が付きました。

'vba sample_CreateCellNameTable using-'KCL0.0.13'  by Kantoku
'指定したDrawTableを隣にコピペしセルのオブジェクト名を書き出す

Option Explicit

'元テーブルとのマージン距離
Private Const MARGIN_X = 10#

Sub CATMain()

    'ドキュメントのチェック
    If Not CanExecute("DrawingDocument") Then Exit Sub
    
    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument
    
    'テーブル選択
    Dim msg As String
    msg = "テーブル選択/ESCキー中止"
    
    Dim dwTblOri As DrawingTable
    Set dwTblOri = KCL.SelectItem(msg, "DrawingTable")
    If dwTblOri Is Nothing Then Exit Sub
    
    'テーブルコピペ
    Dim dwTblNew As DrawingTable
    Set dwTblNew = CopyTable(dwTblOri)
    If dwTblNew Is Nothing Then
        MsgBox "テーブルのコピペに失敗しました"
        Exit Sub
    End If
    
    'テーブル幅取得
    Dim moveX As Double
    moveX = GetColumnSizeAll(dwTblNew)
    dwTblNew.X = dwTblNew.X + moveX + MARGIN_X
    
    'テーブルにオブジェクト名記入
    WriteCellName dwTblNew
    
    MsgBox "done"
    
End Sub

Private Sub WriteCellName( _
    ByVal table As DrawingTable)
    
    Dim r As Long, c As Long
    
    With table
        For r = 1 To .NumberOfRows
            For c = 1 To .NumberOfColumns
                .SetCellString r, c, .GetCellObject(r, c).name
            Next
        Next
    End With
    
End Sub

Private Function CopyTable( _
    ByVal table As DrawingTable) _
    As DrawingTable
    
    Dim sel As selection
    Set sel = CATIA.ActiveDocument.selection
    
    Dim vi As DrawingView
    Set vi = KCL.GetParent_Of_T(table, "DrawingView")
    If vi Is Nothing Then Exit Function
    
    CATIA.HSOSynchronized = False
    
    With sel
        .Clear
        .Add table
        .Copy
        .Clear
        .Add vi
        .Paste
        Set CopyTable = .Item2(1).Value
        .Clear
    End With
    
    CATIA.HSOSynchronized = True
    
End Function

Private Function GetColumnSizeAll( _
    ByVal table As DrawingTable) As Double
    
    Dim sumClm As Long
    sumClm = 0
    
    Dim i As Long
    For i = 1 To table.NumberOfColumns
        sumClm = sumClm + table.GetColumnSize(i)
    Next
    
    GetColumnSizeAll = sumClm
    
End Function

レイアウトは元のテーブルと同じで、隣にセル名の入ったテーブルを
作ります。
f:id:kandennti:20190226153157p:plain
後は、やっぱりチマチマと確認です・・・。

新たに作成したテーブルは元のテーブルをコピペして
セルの中身を書き換えただけの為、こちらの問題から
属性リンクが残っています。
2D属性リンクを扱いたい2 - C#ATIA
未だに属性リンクをマクロで削除する方法が見つかりません。


又、一部KCLの関数がエラーになり止まってしまう事がシバシバ
起きているので、こっそりVer0.0.12 → Ver0.0.13 に更新しました。
(例外入れただけです)
非常に個人的なCATVBA用ライブラリ - C#ATIA