Caita二次开发(VB.NET)(4)——获取part或product的属性

Caita二次开发(VB.NET)(4)——获取product的属性

一、基本介绍

读取part或product文件的属性,可以将其导出为TXT或excel中,也可以将属性批量导出。

二、代码实例

(1)获取属性的方法

        Dim cat As INFITF.Application = GetObject(, "catia.application")
        On Error Resume Next
        'Dim doc As PartDocument = cat.ActiveDocument
        Dim doc As Document = cat.ActiveDocument
        '输出catia基本属性
        Debug.Print("产品图号:" & doc.Product.PartNumber & vbCrLf)
        Debug.Print("版本:" & doc.Product.Revision & vbCrLf)
        Debug.Print("定义:" & doc.Product.Definition & vbCrLf)
        Debug.Print("术语:" & doc.Product.Nomenclature & vbCrLf)
        Debug.Print("源:" & doc.Product.Source & vbCrLf)
        Debug.Print("描述:" & doc.Product.DescriptionRef & vbCrLf)
        '输出用户自定义属性
        For Each pt In doc.Product.UserRefProperties
            Debug.Print(pt.Name & ":" & pt.Value & vbCrLf)
        Next

(2)批量读取文件并输出TXT文档

按照指定的目录批量读取文件

    Private Function OpenCAT(path As String) As Boolean
        Dim cat As INFITF.Application = GetObject(, "catia.application")
        cat.DisplayFileAlerts = False
        Try
            cat.Documents.Open(path)
        Catch ex As Exception
            LstOpenFailed.Items.Add(path)
            Return False
        Finally
            cat.DisplayFileAlerts = True
        End Try
        cat.DisplayFileAlerts = True
        Return True
    End Function
    Private Sub CloseCAT()
        Dim cat As INFITF.Application = GetObject(, "catia.application")
        cat.ActiveDocument.Close()
    End Sub
    ''' <summary>
    ''' 读取catia文档并输出信息
    ''' </summary>
    ''' <param name="path">CATIA文档的路径和名称</param>
    ''' <param name="outPutPath">输出文档的路径(不含名称)</param>
    ''' <returns></returns>
    Public Function CreateInfoFromCatia(path As String, Optional outPutPath As String = "") As Boolean
        Dim cat As INFITF.Application = GetObject(, "catia.application")
        If Not OpenCAT(path) Then
            Return False
        End If
        On Error Resume Next
        Dim pt
        Dim gPath As String
        Dim iName As String
        'Dim doc As PartDocument = cat.ActiveDocument
        Dim doc = cat.ActiveDocument
        iName = cat.ActiveDocument.Name
        If outPutPath = "" Then
            gPath = cat.ActiveDocument.Path
        Else
            gPath = outPutPath
        End If
        Dim arr(1000) As String
        Dim i As Integer
        i = 0
        arr(i) = "----------------------产品信息----------------------"
        i = i + 1
        arr(i) = "产品图号:" & doc.Product.PartNumber
        i = i + 1
        arr(i) = "版本:" & doc.Product.Revision
        i = i + 1
        arr(i) = "定义:" & doc.Product.Definition
        i = i + 1
        arr(i) = "术语:" & doc.Product.Nomenclature
        i = i + 1
        arr(i) = "源:" & doc.Product.Source
        i = i + 1
        arr(i) = "描述:" & doc.Product.DescriptionRef
        i = i + 1
        arr(i) = "----------------------产品信息----------------------"
        i = i + 1
        arr(i) = "------------------------属性------------------------"
        i = i + 1
        For Each pt In doc.Product.UserRefProperties
            arr(i) = pt.Name & ":" & pt.Value
            i = i + 1
        Next
        arr(i) = "------------------------属性------------------------"
        i = i + 1
        arr(i) = "----------------------技术条件----------------------"
        i = i + 1
        For Each hybd In doc.Part.HybridBodies
            For Each pt In doc.Part.Parameters.SubList(hybd, True)
                arr(i) = pt.Name & ":" & pt.Value
                i = i + 1
            Next
        Next
        arr(i) = "----------------------技术条件----------------------"
        CloseCAT()
        GenerateInfo(gPath, iName, arr)
        Return True
    End Function
    ''' <summary>
    ''' 输出txt文档信息
    ''' </summary>
    ''' <param name="gPath">输出文档的目录(不含名称)</param>
    ''' <param name="iName">输出文档名称</param>
    ''' <param name="arr">输出的内容数组</param>
    Private Sub GenerateInfo(gPath As String, iName As String, arr() As String)
        Dim i As Integer
        Dim sFile As Object, Fso As Object
        Fso = CreateObject("Scripting.FileSystemObject")
        sFile = Fso.CreateTextFile(gPath & "/" & iName & ".txt", True)
        For i = 0 To 999
            If arr(i) <> "" Then
                sFile.WriteLine(arr(i))
            End If
        Next
        sFile.WriteLine(iName & ":" & Now())
        sFile.Close()
        Fso.Close()
        sFile = Nothing
        Fso = Nothing
    End Sub
    ''' <summary>
    ''' 通过递归获取文件夹中的所有CATIA文档
    ''' </summary>
    ''' <param name="strDirect">查找的文件目录</param>
    ''' <param name="arr">过滤条件,满足数组中任一条件</param>
    ''' <param name="myFilterString">过滤条件</param>
    Sub GetAllFiles(ByVal strDirect As String, ByVal arr() As String, Optional myFilterString As String = "")  '搜索所有目录下的文件
        If Not (strDirect Is Nothing) Then
            Dim mFileInfo As FileInfo
            Dim mDir As DirectoryInfo
            Dim mDirInfo As New DirectoryInfo(strDirect)
            Try
                For Each mFileInfo In mDirInfo.GetFiles(myFilterString).Where(Function(x) arr.Contains(x.Extension.ToLower))
                    'For Each mFileInfo In mDirInfo.GetFiles("*.txt")
                    '搜索结果为包含.txt1  .txt2等后缀的文件,而在.net core中无此问题
                    If Not CreateInfoFromCatia(mFileInfo.FullName, Me.TxtOutPutPath.Text) Then
                        Continue For
                    End If
                    Debug.Print(mFileInfo.FullName)
                Next
                For Each mDir In mDirInfo.GetDirectories
                    GetAllFiles(mDir.FullName, arr, myFilterString)
                Next
            Catch ex As System.IO.DirectoryNotFoundException
                Debug.Print("目录没找到:" + ex.Message)
            End Try
        End If
    End Sub

三、注意事项

(1)需要打开catia应用程序
(2).net framework4.0框架

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值