You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VBA获取CATIA V5中FTA标注的图层类型并导出指定数据

解决CATIA V5隐藏FTA标注图层读取与“None”图层导出问题

问题核心

需要读取CATIA V5中隐藏FTA标注的图层类型(当前仅能设置无法读取),并将图层类型为“None”的标注信息导出到Excel。

修正后的代码

Sub ExportHiddenFTALayerNone()
    Dim wb As Workbook
    Dim WS As Worksheet
    Dim MyProduct As Object
    Dim CATIA As Object
    Dim MyDocument As Object
    Dim objSel As Object
    Dim visProperties1 As Object
    Dim layertype As String
    Dim layer As Long
    Dim i As Long, j As Long
    
    ' 初始化Excel工作簿和工作表
    Set wb = ThisWorkbook
    Set WS = wb.Worksheets("Annotaions")
    WS.Range("A2:D100000").ClearContents
    WS.Range("A2:D100000").Interior.Color = xlNone
    j = 2
    
    ' 连接CATIA实例
    On Error Resume Next
    Set CATIA = GetObject(, "CATIA.Application")
    If Err.Number <> 0 Then
        Set CATIA = CreateObject("CATIA.Application")
        CATIA.Visible = True
    End If
    On Error GoTo 0
    
    ' 获取当前CATIA文档和产品
    Set MyDocument = CATIA.ActiveDocument
    Set MyProduct = MyDocument.Product
    MyRootPN = MyProduct.PartNumber
    
    ' 仅处理后缀为"FD"的产品
    If Right(MyRootPN, 2) <> "FD" Then
        MsgBox "请加载Full3D数据集后重试", vbCritical + vbOKOnly, "警告"
        Exit Sub
    End If
    
    ' 搜索所有隐藏的FTA元素
    Set objSel = CATIA.ActiveDocument.Selection
    objSel.Search "CATTPSSearch.CATFTAElement.Visibility=Hidden,all"
    
    ' 遍历搜索结果
    For i = 1 To objSel.Count
        ' 过滤掉视图类元素,仅保留PartNumber含"AHD"的标注
        If Not objSel.Item2(i).Value.Name Like "*view*" And _
           objSel.Item2(i).LeafProduct.PartNumber Like "*AHD*" Then
           
            ' 获取单个元素的可见性属性(关键修正:不要用选择集的VisProperties)
            Set visProperties1 = objSel.Item2(i).Value.VisProperties
            visProperties1.GetLayer layertype, layer
            
            ' 仅导出图层为"None"的元素(对应layer编号为0,或layertype为空/None)
            If layer = 0 Or LCase(layertype) = "none" Then
                WS.Cells(j, 1).Value = "隐藏AHD FTA标注 - 图层: None"
                WS.Cells(j, 2).Value = objSel.Item2(i).Value.Name
                WS.Cells(j, 3).Value = layertype
                WS.Cells(j, 4).Value = "已导出"
                WS.Cells(j, 4).Interior.Color = RGB(204, 255, 204)
                j = j + 1
            End If
        End If
    Next i
    
    objSel.Clear
    If j = 2 Then
        MsgBox "未找到图层为None的隐藏AHD FTA标注", vbInformation + vbOKOnly, "提示"
    Else
        MsgBox "导出完成,共导出" & j - 2 & "条记录", vbInformation + vbOKOnly, "完成"
    End If
End Sub

关键修正说明

  1. 图层读取逻辑修正:
    原代码使用objSel.VisProperties.GetLayer获取的是整个选择集的图层属性,而非单个选中元素的。必须改为objSel.Item2(i).Value.VisProperties,才能准确读取每个隐藏FTA标注的图层信息。

  2. “None”图层判断:
    在CATIA API中,GetLayer方法的两个参数:

    • layertype:图层名称,当图层为“None”时,该值为空或直接返回"None"
    • layer:图层编号,“None”对应的编号固定为0
      代码中同时判断这两个条件,确保不会遗漏符合要求的元素。
  3. 导出逻辑优化:
    仅当图层为“None”时才写入Excel,同时添加了导出完成提示,方便确认结果。

内容的提问来源于stack exchange,提问作者Sidamallappa LIMBIKAI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:59:50