こちらの続きで、保留していた宿題です。
背景色を変更・復元する2 - C#ATIA
ご要望としては、PartでもProductでも同様の処理を行いたい
と言うことなので、修正してみました。
PartDocumentの取得方法を変更する必要があるため、
こちらの部分を修正します。
Private Sub UserForm_Initialize() 'Form設定 Me.CommandButton1.Caption = "背景色-白" Me.CommandButton2.Caption = "背景色-復元" '一時的な背景色 mBackColor = Array(255, 255, 255) 'CATIA情報 Set mDoc = Get_PartDoc(CATIA.ActiveDocument) If mDoc Is Nothing Then MsgBox "Partファイルが見つかりません" Me.CommandButton1.Enabled = False Me.CommandButton2.Enabled = False Exit Sub End If Set mPt = mDoc.Part Set mSel = mDoc.Selection Set mVis = mSel.VisProperties Set mVisSetAtt = CATIA.SettingControllers.Item( _ "CATVizVisualizationSettingCtrl") End Sub
そして実際にPartDocumentを取得する為の関数を
追加します。(再帰で一番上部にあるPartDocumentを探しています)
Private Function Get_PartDoc(Doc As Document) As PartDocument If Not Get_PartDoc Is Nothing Then Exit Function Dim Pros As Products Dim i As Long Select Case TypeName(Doc) Case "PartDocument" Set Get_PartDoc = Doc Exit Function Case "ProductDocument" Set Pros = Doc.Product.Products If Pros.Count < 1 Then Exit Function For i = 1 To Pros.Count Set Get_PartDoc = _ Get_PartDoc(Pros.Item(i).ReferenceProduct.Parent) If Not Get_PartDoc Is Nothing Then Exit Function Next Case Else Exit Function End Select End Function
Part・Product両方で動くマクロを作成する際、結論としては
どうやってPartDocumentを取得するか? だけの違いで他の部分は
共通です行えます。
Productの場合、例えデザインモードでPartファイルを操作している状態で
あっても
set Doc = CATIA.ActiveDocument
を実行した場合、一番上のProductのDocumentが取得されます。
(子ウィンドウの一番上と言うイメージです)