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框架