


摘要:文章針對Creo軟件使用中的批量處理需求,開發(fā)了Creo批處理設計系統(tǒng),實現(xiàn)了批量參數(shù)處理、關系處理、格式導出、單位轉換、圖框替換、族表實例導出、材料設定及舊版本刪除等8個常見功能。應用實例表明,系統(tǒng)運行時無須人工干預,顯著提高設計效率,減少人為錯誤,并提升設計流程效率及協(xié)同工作的便捷性。
關鍵詞:Creo;二次開發(fā);批處理;VB API
中圖分類號:TP311" "文獻標識碼:A
文章編號:1009-3044(2025)12-0007-05
開放科學(資源服務) 標識碼(OSID) :lt;E:\飛翔打包文件目錄002\電腦2025年04月下第十二期打包文件\2.00xs202512\Image\image11.jpeggt;
Creo功能強大,支持多種文件格式,并提供豐富的工具和功能以滿足用戶需求,是工程設計、建筑、機械等領域常用的三維設計軟件之一。隨著工程復雜度的不斷增加,批量處理CAD圖檔的需求日益增長。然而,手動批量操作效率低下且易出錯,對設計效率和準確性造成挑戰(zhàn)[1-3]。因此,開發(fā)Creo二次開發(fā)批處理設計系統(tǒng)以提高設計效率并減少人為錯誤,已成為當前企業(yè)設計開發(fā)流程中亟須解決的問題。
本文基于近年來實際工作中積累的開發(fā)經(jīng)驗,闡述如何使用Creo軟件提供的VB API開發(fā)包進行二次開發(fā),設計并實現(xiàn)一個高效的Creo批處理設計系統(tǒng),以期解決上述問題,增強Creo軟件的功能性和用戶體驗。
1 功能分析及系統(tǒng)架構
1.1 功能分析
針對企業(yè)實際需求,對設計過程中常見的批處理操作進行了分析整理,主要包括以下幾個常見功能。
1) 批量參數(shù)處理。支持用戶對Creo中零件、裝配體的參數(shù)進行批量增加和刪除,有助于維護Creo設計軟件中的參數(shù)信息與產(chǎn)品數(shù)據(jù)管理(PDM) 系統(tǒng)之間的數(shù)據(jù)一致性。
2) 批量關系處理。支持用戶對Creo中零件、裝配體的關系進行批量增加和刪除,可以確保產(chǎn)品設計符合公司或行業(yè)的設計標準,方便設計人員在協(xié)同設計環(huán)境中共享和更新設計關系。
3) 批量格式導出。將設計對象輕松轉換為多種標準文件格式(如STP、IGES等) ,靈活適應與供應商、客戶或合作伙伴進行數(shù)據(jù)交換的多樣化需求,通過批量轉換降低數(shù)據(jù)在不同軟件系統(tǒng)間轉換的復雜性和工作量。
4) 批量單位轉換。支持在設計過程中將對象(如零件、裝配體等) 的尺寸計量單位(如國標單位) 批量、準確地轉換為另一種單位(如英制單位) ,確保設計數(shù)據(jù)在不同地域、不同行業(yè)間的統(tǒng)一性和可讀性,有效避免跨國合作或跨領域協(xié)作項目中因單位不一致導致的誤解、溝通障礙及設計錯誤。
5) 批量圖框替換。在非標自動化項目中,圖框不僅承載標題欄、圖紙比例、項目信息等基礎信息,還可能包含客戶特定的標識、版本號、審批信息等關鍵內容。隨著項目進展或機型調整,這些信息可能需要頻繁更新,而手動逐張修改不僅耗時費力,還容易出錯。針對不同機型和項目批量替換圖框,只需設置好新圖框并替換舊圖框,即可實現(xiàn)圖框內容更新。
6) 批量導出族表實例。將包含族表的元件(即一系列具有相同基本結構但尺寸、材料等屬性可變的零件集合) 中的所有實例保存為獨立的、完整的單個零件文件,一方面可以建立標準件庫,另一方面減少PDM等系統(tǒng)讀取零件族表的耗時和復雜度。
7) 批量材料設定。為滿足不同客戶需求和工況要求,設計人員經(jīng)常需要對一組或多組具有相同尺寸規(guī)格但材料屬性不同的零部件進行系統(tǒng)性的替換作業(yè)。通過此功能,用戶可以輕松實現(xiàn)批量材料設定,滿足特定設計需求。
8) 批量舊版本刪除。Creo采用小版本保存功能,每次保存文件時不會覆蓋原文件,而是產(chǎn)生新的副本文件,文件名后綴會加上“.1”、“.2”或“.3”等數(shù)字,導致文件夾臃腫等問題。通過此功能,用戶可以批量刪除舊版本文件,避免手動刪除時可能出現(xiàn)的錯誤。
1.2 系統(tǒng)架構
基于以上功能分析,由于系統(tǒng)需對多個文件進行相同操作,耗時較多且無須人工干預,為確保設計人員當前工作不受干擾,同時提高工作效率和用戶體驗,程序設計應采用異步模式,在后臺靜默執(zhí)行相關操作,不打斷設計人員的當前工作[4]。
Creo提供Creo/Toolkit、VB API、J-Link、Web-link等多種二次開發(fā)工具包[5-6],其中VB API作為Creo主要的二次開發(fā)工具包之一,提供豐富的函數(shù)庫,涵蓋參數(shù)處理、關系管理、格式導出、單位轉換等多種功能,編程接口直觀且易于理解,使開發(fā)人員能夠快速掌握并使用該工具包進行開發(fā)。此外,VB API支持高效的異步開發(fā)模式,允許程序在后臺執(zhí)行耗時操作,故本文采用VB API進行系統(tǒng)快速開發(fā)。VB API開發(fā)環(huán)境的安裝和配置,讀者可參考文獻[7],在此不再贅述。
系統(tǒng)采用模塊化設計,將1.1節(jié)中的功能全部用VB API相關函數(shù)進行封裝。實際運行中,由用戶指定待處理文件夾,程序遍歷文件夾中所有待處理文件,根據(jù)用戶指定的操作及相關參數(shù)(如參數(shù)列表、關系文本等) ,循環(huán)調用功能模塊,完成批處理功能。Creo二次開發(fā)批處理設計系統(tǒng)操作流程如圖1所示。
2 關鍵功能實現(xiàn)
2.1 遍歷文件
作為批處理工具,首要任務是程序自動獲取需要批處理的文件列表。對于文件夾和文件的操作,在VB API中主要由IpfcSession類完成。由于Creo采用工作目錄的概念,文件的存儲與管理默認均在工作目錄進行,因此首先需將包含批處理文件的目錄設置為Creo工作目錄,以便后續(xù)操作。
asyncConnection.Session.ChangeDirectory(InputPath)
之后可利用IpfcSession的ListFiles方法,獲取工作目錄下所有指定類型的文件,依次循環(huán)對文件進行處理,即可完成批處理操作。獲取工作目錄下所有元件的示例代碼如下所示。
Files = asyncConnection.Session.ListFiles(\"*.prt\", EpfcFileListOpt.EpfcFILE_LIST_LATEST, asyncConnection.Session.GetCurrentDirectory)
2.2 參數(shù)處理
Creo模型中的參數(shù)批量操作主要包括參數(shù)的添加、修改以及清空等,同時需實現(xiàn)將參數(shù)屬性設置為“指定”,以便配合部分PDM系統(tǒng)實現(xiàn)參數(shù)篩選。在VB API中,對參數(shù)的操作主要涉及IpfcParamValue、IpfcParameter、IpfcParameterOwner、IpfcModel四個類。
其中,IpfcParamValue用于存儲參數(shù)的值;IpfcParameter表示參數(shù)對象,包括名稱、類型等信息;IpfcParameterOwner表示參數(shù)所有者;IpfcModel表示已打開的模型,是IpfcParameterOwner的子類,可通過會話等方式獲得。一般操作為先獲取IpfcModel對象,再調用其父類IpfcParameterOwner的方法和屬性進行參數(shù)操作。添加參數(shù)通過調用IpfcParameterOwner類的CreateParam方法實現(xiàn)。
參數(shù)處理方面,系統(tǒng)主要實現(xiàn)批量添加和修改參數(shù)、刪除參數(shù)及將參數(shù)屬性設置為“指定”的功能。添加和修改參數(shù)可合并實現(xiàn),首先通過IpfcModel類的GetParam方法判斷模型是否已有對應參數(shù),如無則調用CreateParam方法添加參數(shù),如有則調用SetScaledValue方法修改其值。相關代碼如下所示。
param = CType(model, IpfcParameterOwner).GetParam(paramvalue.key)
If param Is Nothing Then
model.CreateParam(paramvalue.key, Parameters(paramvalue.key))
Else
param.SetScaledValue(Parameters(paramvalue.key), Nothing)
End If
VB API提供IpfcParameterOwner類的ListParams方法,可用于枚舉模型參數(shù)。通過遍歷參數(shù)列表,根據(jù)名稱調用IpfcParameter類的Delete方法實現(xiàn)參數(shù)刪除。需注意,刪除參數(shù)時枚舉出的參數(shù)數(shù)組長度和對象均會變化,因此可從后向前遍歷以減少參數(shù)數(shù)量變化的影響。
params = CType(model, IpfcParameterOwner).ListParams()
For i = params.Count - 1 To 0 Step -1
param = params.Item(i)
param.Delete()
Next
將參數(shù)屬性設置為“指定”較為簡單,直接設置IpfcParameter類的IsDesignated屬性即可。
param.IsDesignated = True
2.3 關系處理
Creo中的關系同樣需要實現(xiàn)添加和清空兩個操作。VB API中各類關系的處理由IpfcRelationOwner類完成。關系數(shù)據(jù)封裝并存儲在IpfcRelationOwner類的Relations屬性中,采用Istringseq類型表示,提供了Append、Clear等方法用于刪除、修改和添加操作。Istringseq中每個元素對應一行具體的文本信息。
實際操作中,發(fā)現(xiàn)無法直接調用Istringseq的方法修改關系,因此系統(tǒng)先將原有關系復制到新的字符串數(shù)組,再對該數(shù)組增刪操作,最后直接替換原有IpfcRelationOwner類的Relations屬性。
具體做法如下:首先讀取模型已有的關系并保存到新的字符串數(shù)組中。
For i = 0 To model.Relations.Count - 1
rels.Append(CType(model, IpfcRelationOwner).Relations.Item(i))
Next
然后,將新增的行依次添加到該字符串數(shù)組中。
For Each line As String In Relations
rels.Append(line)
Next
最后,將IpfcRelationOwner類的Relations屬性賦值為新的字符串數(shù)組,即可完成關系的添加。
CType(model, IpfcRelationOwner).Relations = rels
清空關系則相對簡單,直接調用IpfcRelationOwner類的DeleteRelations方法即可。
CType(model, IpfcRelationOwner).DeleteRelations()
2.4 格式導出
系統(tǒng)需實現(xiàn)DWG、PDF、IGS和STP多種格式的導出。其中,DWG和PDF默認為二維繪圖文件導出,IGS和STP則由三維模型文件導出。VB API中,各種格式的導出均由IpfcModel類的Export方法完成。IpfcExportInstructions為所有導出選項的父類,不同格式均有對應繼承自IpfcExportInstructions的子類,調用Export方法時傳入相應的子類對象即可完成對應格式的導出。
DWG和PDF的參數(shù)分別為CCpfcPDFExportInstructions和CCpfcDWG3DExportInstructions對象,生成方式類似,關鍵代碼如下所示。
' 導出PDF
pdfinstructions = (New CCpfcPDFExportInstructions()).Create()
model.Export(model.InstanceName + \".pdf\", pdfinstructions)
' 導出DWG
dwginstructions = (New CCpfcDWG3DExportInstructions()).Create()
model.Export(model.InstanceName + \".dwg\", dwginstructions)
模型導出為IGS和STP時,參數(shù)稍顯復雜,需要指定是否導出實體、導出為單個文件或多個文件等選項,分別由CCpfcGeometryFlags、CCpfcIGES3DNewExportInstructions以及CCpfcSTEP3DExportInstructions類實現(xiàn)。確定導出選項后,仍通過IpfcModel的Export方法導出,關鍵代碼如下所示。
' 導出IGS
geometryFlags = (New CCpfcGeometryFlags).Create()
geometryFlags.AsSolids = True
igsinstructions = (New CCpfcIGES3DNewExportInstructions).Create(EpfcAssemblyConfiguration.EpfcEXPORT_ASM_SINGLE_FILE, geometryFlags)
model.Export(model.InstanceName + \".igs\", igsinstructions)
' 導出STP
flags = (New CCpfcGeometryFlags()).Create()
flags.AsSolids = True
stepinstructions = (New CCpfcSTEP3DExportInstructions()).Create(EpfcAssemblyConfiguration.EpfcEXPORT_ASM_MULTI_FILES, flags)
model.Export(model.InstanceName + \".stp\", stepinstructions)
2.5 單位轉換
Creo的單位轉換功能使用戶能夠在不同單位系統(tǒng)之間輕松切換,以滿足多樣化設計需求。Creo同時提供了解釋尺寸和轉換尺寸兩種模式,可實現(xiàn)不改變原有尺寸數(shù)值,僅轉換尺寸單位,或根據(jù)單位間的換算關系對尺寸數(shù)值進行實際計算和調整。
VB API通過IpfcSheetOwner類實現(xiàn)單位的枚舉和修改,類方法GetPrincipalUnits和SetPrincipalUnits可獲取與設置當前模型的單位系統(tǒng)及轉換方式。修改模型單位為“毫米-牛頓-秒(mmns) ”的關鍵代碼如下所示。
units = CType(model, IpfcSolid).ListUnitSystems()
For i = 0 To units.Count - 1
If units.Item(i).Name.ToLower.IndexOf(\"mmns\") lt;gt; -1 Then
If (ConvertMethod = \"轉換尺寸\") Then
DimensionOption = EpfcUnitDimensionConversion.EpfcUNITCONVERT_SAME_DIMS
Else
DimensionOption = EpfcUnitDimensionConversion.EpfcUNITCONVERT_SAME_SIZE
End If
IpfcSolid.SetPrincipalUnits(units.Item(i), (New CCpfcUnitConversionOptions).Create(DimensionOption))
End If
Next
2.6 圖框替換
圖框本身作為一個frm文件保存在硬盤中。要設定或修改圖框,VB API中只需調用Session.RetrievemodelWithOpts等方法將其載入內存。針對圖框,VB API提供了IpfcModel的子類IpfcSheetOwner類進行操作,使用時只需確認當前打開的model為drawing,即可安全將IpfcModel類型轉換為IpfcSheetOwner類型。
IpfcSheetOwner類提供SetSheetFormat方法用于設定或修改圖框,關鍵代碼如下:
sheetOwner = CType(asyncConnection.Session.CurrentModel, IpfcSheetOwner)
modelDesc = (New CCpfcModelDescriptor).Create(EpfcModelType.EpfcMDL_DWG_FORMAT, Nothing, Nothing)
modelDesc.Path = DrawingFormatFile
retrieveModelOptions = (New CCpfcRetrieveModelOptions).Create
retrieveModelOptions.AskUserAboutReps = False
model = asyncConnection.Session.RetrievemodelWithOpts(modelDesc, retrieveModelOptions)
DrawingFormat = CType(model, IpfcDrawingFormat)
sheetOwner.SetSheetFormat(sheetOwner.CurrentSheetNumber, DrawingFormat, Nothing, Nothing)
圖框通常內建表格,替換圖框時多為更換這些表格以更新信息,因此替換圖框時需先獲取內建表格并刪除,關鍵代碼如下所示。
tables = CType(Drawing, IpfcTableOwner).ListTables()
For i = 0 To tables.Count - 1
If tables.Item(i).CheckIfIsFromFormat(SheetNumber) = True Then
CType(Drawing, IpfcTableOwner).DeleteTable(tables.Item(i), False)
End If
Next
2.7 導出族表實例
VB API中,使用IpfcFamilyMember類表示包含族表的模型,記錄了族表表頭及每個實例的信息。通過IpfcFamilyMember的ListRows方法可以獲取所有族表實例,每個實例由IpfcFamilyTableRow類表示。IpfcFamilyTableRow類的CreateInstance方法可獲得對應的Model對象,保存該對象即可完成族表到實例的導出。關鍵代碼如下所示。
solid = CType(model, IpfcSolid)
familyTableRows = CType(solid, IpfcFamilyMember).ListRows()
For i = 0 To familyTableRows.Count - 1
familyTableRow = familyTableRows.Item(i)
instmodel = familyTableRow.CreateInstance()
instmodel.Copy(instmodel.InstanceName + \".prt\", Nothing)
ExportFamtableinstances.Add(instmodel.InstanceName)
Next
上述遍歷族表時未訪問缺省模型,因此還需導出缺省模型。VB API未提供相關接口,故通過另一思路實現(xiàn):將零件中的族表信息刪除后保存,該零件即為缺省模型。由于Creo不能同時打開同名文件,且需避免修改源文件,流程為先將源文件復制到目標文件夾,關閉當前文件后再打開復制的新文件,刪除其族表信息即可獲得缺省模型。關鍵代碼如下所示。
CType(model, IpfcFamilyMember).RemoveRow(familyTableRows)
descmodel = (New CCpfcModelDescriptor).Create(EpfcModelType.EpfcMDL_PART, \"\", Nothing)
descmodel.Path = Filename
Model.Copy(descmodel)
2.8 材料設定
VB API中,材料信息由IpfcMaterial類表示,提供如Name、MassDensity、Hardness等屬性,描述材料名稱、密度、硬度等。可以通過IpfcSession類的RetrieveModelWithOpts方法從硬盤讀取mtl材料文件。繼承自IpfcModel類的IpfcPart類用于管理零件的材料信息,其CurrentMaterial屬性類型為IpfcMaterial,讀取或修改該屬性即可完成零件材料信息的獲取和設置。
讀取材料信息并替換為指定材料的關鍵代碼如下所示。
part = CType(model, IpfcPart)
material = part.CurrentMaterial
If material IsNot Nothing Then
If material.Name lt;gt; newName Then
material = part.RetrieveMaterial(MtlName)
part.CurrentMaterial = material
End If
End If
2.9 舊版本刪除
VB API中,通過調整IpfcSession類的ListFiles方法的Filter參數(shù),可以分別獲取模型的所有版本文件和最新版本文件列表。通過遍歷所有版本文件并與最新版本文件比對,判斷是否為舊版本,進而實現(xiàn)舊版本文件的刪除功能。
為了增強數(shù)據(jù)安全性,系統(tǒng)未選擇直接永久刪除文件,而是調用Windows API函數(shù)將文件移動到回收站,確保用戶可以恢復刪除文件,避免數(shù)據(jù)永久丟失。
示例代碼如下所示。
' 獲取當前目錄下所有文件列表
AllFiles = CType(asyncConnection.Session, IpfcBaseSession).ListFiles(Filetype, EpfcFileListOpt.EpfcFILE_LIST_ALL, asyncConnection.Session.GetCurrentDirectory)
' 獲取當前目錄下最新文件列表
LatestFiles = CType(asyncConnection.Session, IpfcBaseSession).ListFiles(Filetype, EpfcFileListOpt.EpfcFILE_LIST_LATEST, asyncConnection.Session.GetCurrentDirectory)
For Each file In AllFiles
Dim DelAct As Boolean = True
For Each latestfile In LatestFiles
If file = latestfile Then
DelAct = False ' 如果是最新版本,則不刪除
Exit For
End If
Next
If DelAct Then
' 將舊版本文件發(fā)送到回收站
My.Computer.FileSystem.DeleteFile(file.Path, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin, FileIO.UICancelOption.DoNothing)
End If
Next
3 應用實例
基于以上功能模塊設計經(jīng)驗,結合企業(yè)實際需求及設計人員使用習慣,開發(fā)了Creo的二次開發(fā)批處理設計系統(tǒng)。主要操作界面如圖2所示。設計人員可在界面左側點擊8個批處理功能的超鏈接,選擇需要處理的文件或目錄,并根據(jù)具體需求輸入或選擇相關參數(shù),點擊對應功能按鈕,系統(tǒng)自動執(zhí)行相應批處理,具備操作便捷、響應快速、易學易用等優(yōu)點。
以批量導出族表實例為例進行說明,程序運行界面如圖3所示。首先選擇需要導出族表實例的零件及實例導出目錄,隨后點擊右下角的導出按鈕,即可自動將包含族表文件的零件全部導出到指定文件夾,同時導出狀態(tài)和結果會在程序下方的列表中顯示。程序運行結束后,會自動打開實例導出目錄,如圖4所示。
4 結束語
本文基于工作過程中對Creo批處理操作的實際需求,利用Creo提供的VB API接口開發(fā)了一套Creo批處理設計系統(tǒng),實現(xiàn)了批量參數(shù)處理、批量關系處理、批量格式導出、批量單位轉換、批量圖框替換、批量導出族表實例、批量材料設定及批量舊版本刪除等功能。該系統(tǒng)具有便捷、快速、易操作的特點,使設計人員擺脫了煩瑣且重復的工作,在提高設計效率的同時,降低了人為操作錯誤的風險。
下一步,將根據(jù)用戶反饋和實際需求,持續(xù)優(yōu)化系統(tǒng),進一步完善現(xiàn)有功能,重點提升系統(tǒng)的穩(wěn)定性與兼容性,增加對Creo新版本的支持,開發(fā)更多實用功能,擴展系統(tǒng)功能及應用場景。
參考文獻:
[1] 叢日立,冀帥,安博.利用二次開發(fā)進行CAD批量打印探究[J].無線互聯(lián)科技,2017,14(4):108-109.
[2] 李國清,張蓓蓓,張娜,等.基于CAD平臺實現(xiàn)DLG編輯工序的批處理作業(yè)[J].測繪與空間地理信息,2013,36(11):61-63,67.
[3] 江濤,何法江.基于Creo的設計助手二次開發(fā)設計[J].智能計算機與應用,2020,10(2):168-171.
[4] 張文曉. 基于Excel VBA對Creo進行異步模式下的二次開發(fā)[J].電腦知識與技術, 2019, 15(7): 212-214.
[5] 李世國.Pro/TOOLKIT程序設計[M].北京:機械工業(yè)出版社,2003.
[6] Parametric Technology Corporation. Creo Parametric 2.0 VB API User's Guide[M]. USA: PTC, 2012.
[7] 胡迪,羅輝.利用Python二次開發(fā)Creo[J].電腦知識與技術,2020,16(2):49-50,53.
【通聯(lián)編輯:唐一東】