C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

マクロで干渉レポートを作成する

こちらのコメントに記載した、マクロで干渉レポートを作成するサンプルを
作成しました。
クリックした面に法線を作成する - C#ATIA


コードはこちら。

'vba sample_ClashReport_ver0.01  using-'ver0.0.10'
'指定した2つのプロダクトの干渉チェックをします

Option Explicit

Sub CATMain()
    'ドキュメントのチェック
    If Not CanExecute("ProductDocument") Then Exit Sub
    
    'トッププロダクト取得
    Dim TopProd As Product: Set TopProd = CATIA.ActiveDocument.Product
    Dim Path As String: Path = TopProd.Parent.Path
    If Path = vbNullString Then
        MsgBox "トッププロダクトは、一度保存されたファイルにして下さい!"
        Exit Sub
    End If
    
    '選択
    Dim Msg As String: Msg = "個目のプロダクトを選択してください"
    Dim Prod1 As Product: Set Prod1 = KCL.SelectItem("1" & Msg, "Product")
    If KCL.IsNothing(Prod1) Then Exit Sub
    
    Dim Prod2 As Product: Set Prod2 = KCL.SelectItem("2" & Msg, "Product")
    If KCL.IsNothing(Prod2) Then Exit Sub
    
    '選択チェック
    If Prod1 Is Prod2 Then
        MsgBox "同一プロダクトの干渉チェックは出来ません!"
        Exit Sub
    End If
    
    '干渉チェック
    Dim Grps As Groups: Set Grps = TopProd.GetTechnologicalObject("Groups")
    Dim Grp1 As Group: Set Grp1 = Grps.Add
    Call Grp1.AddExplicit(Prod1)
    Dim Grp2 As Group: Set Grp2 = Grps.Add
    Call Grp2.AddExplicit(Prod2)
    
    Dim Clashes As Clashes: Set Clashes = TopProd.GetTechnologicalObject("Clashes")
    Dim Clash As Clash: Set Clash = Clashes.Add
    
    With Clash
        .Clearance = 0.1
        .ComputationType = catClashComputationTypeBetweenTwo
        .InterferenceType = catClashInterferenceTypeClearance
        .FirstGroup = Grp1
        .SecondGroup = Grp2
        .Compute
    End With
    
    '干渉結果
    If Clash.Conflicts.Count > 0 Then
        Dim CRPath As String: CRPath = Path & "\ClashReport\ClashReport"
        Call Clash.Export(CatClashExportTypeXMLResultOnly, CRPath)
        CreateObject("Shell.Application").ShellExecute CRPath & ".xml"
        
        SendKeys "{ESC}", False 'この行が無いと、マクロ実行後のCATIAの挙動が怪しい
    Else
        MsgBox "干渉はありません"
    End If
End Sub

レポートファイルを作成する都合上、トップのプロダクトは一度保存されている
必要があります。

実行した際は、このような感じになります。

干渉チェックする際の条件等は、コードを修正する必要があります。