胡小林
(中國船舶與海洋工程設計研究院, 上海 200011)
AutoCAD .NET API在機械零件標準化設計中的應用
胡小林
(中國船舶與海洋工程設計研究院, 上海 200011)
簡要介紹AutoCAD二次開發(fā)的主流工具和特點以及最新的AutoCAD二次開發(fā)工具.NET API的優(yōu)勢。針對機械零件設計過程中的計算、文件編制等方面,通過使用.NET API開發(fā)的相應功能,顯著減少重復操作次數(shù),提高設計效率,消除文件編制過程中的差錯。
AutoCAD;.NET API;二次開發(fā);機械零件;標準化設計
目前,機械領域許多零件設計采用的設計工具以AutoCAD軟件為主。在實際設計過程中,有許多零件都是成型的設計,每次設計任務根據(jù)具體的項目調(diào)整結(jié)構(gòu)尺寸、計算、繪制送審圖紙、繪制坯件訂貨圖、下發(fā)施工圖、編制工藝卡、打印檢驗單、匯編完工圖等。在設計過程中,設計人員往往是在已有項目文件的基礎上進行修改,然后形成新的項目文件。在文件的形成過程中,一方面,設計人員需要花時間繪圖并確認圖紙中的所有數(shù)據(jù)都已經(jīng)更改到位,另一方面,校對及審核人員也需要逐個確認數(shù)據(jù),以確保每一個數(shù)據(jù)的準確性。盡管如此,偶爾仍有疏漏或筆誤在生產(chǎn)時被發(fā)現(xiàn),甚至因為未發(fā)現(xiàn)錯誤而產(chǎn)生廢品。為此,在AutoCAD軟件的基礎上開發(fā)出一套既能節(jié)省設繪時間,又能確保數(shù)據(jù)準確且無筆誤的設計工具就顯得尤為必要了。
Autodesk公司提供了多種編程接口用于AutoCAD的二次開發(fā),設計人員可以根據(jù)設計項目的需求和自身的編程能力,選擇最合適的編程語言,進行 AutoCAD二次開發(fā)。這樣開發(fā)出的軟件功能界面完善,既可完成設計過程中大量的重復或類似操作,同時也顯著減少了發(fā)生差錯的概率。
本文主要以船舶軸系聯(lián)軸節(jié)法蘭液壓螺栓組中的螺母為例,簡要介紹一下通過使用.NET API工具對AutoCAD進行二次開發(fā)的情況,一方面節(jié)省了設計時間,另一方面也保證了質(zhì)量。
目前,AutoCAD提供的二次開發(fā)工具有VisualLISP,VBA,ObjectARX以及.NET API等。VisualLISP語言是具備面向?qū)ο蠊δ艿木幊陶Z言,學習成本低,但不直觀;VBA(Visual Basic for Applications)應用范圍廣,是大眾化的編程語言,在開發(fā)功能方面略有不足; ObjectARX以C++編程語言為基礎,其代碼與AutoCAD在同一內(nèi)存地址上運行,占用系統(tǒng)資源少,運行速度快,功能雖然強大但學習成本太高[1]。
Autodesk公司自AutoCAD 2006版開始,在原有開發(fā)工具的基礎上又增加了一種新的開發(fā)方式——.NET API。.NET API為開發(fā)人員提供了大量的托管封裝類,開發(fā)人員可以使用任何.NET支持的程序設計語言(如VC++,C#,VB等)編程訪問程序集或者開放類庫,用以操作AutoCAD和圖形文件。
開發(fā)人員使用.NET API工具開發(fā)AutoCAD有如下優(yōu)點:
(1) 提供了全新的編程環(huán)境用以訪問AutoCAD圖形。
(2) 與其他Windows?應用程序(例如 Microsoft Word,Microsoft Excel等)的結(jié)合比以往更加容易。
(3) .NET框架同時為32位和64位操作系統(tǒng)設計,而VBA只用于基于32位操作系統(tǒng)的設計。
(4) 與傳統(tǒng)編程語言(如 C++)相比,.NET API可以讓開發(fā)人員以較低的學習成本實現(xiàn)高級接口訪問。
目前,AutoCAD較新的幾種版本已經(jīng)不再內(nèi)置VBA,需要額外安裝,而且,操作系統(tǒng)也逐漸向64位過渡成為主流操作系統(tǒng)。鑒于此,本次采用.NET API進行二次開發(fā)。
程序的主界面如圖1所示,包括數(shù)據(jù)輸入界面和若干操作按鈕,按鈕具體功能在下文詳細敘述。
2.1 調(diào)整結(jié)構(gòu)尺寸
主界面中有零件的標準樣圖,在按項目需要調(diào)整的參數(shù)旁邊都有數(shù)據(jù)輸入框。除了結(jié)構(gòu)尺寸外,形位公差、粗糙度都可以調(diào)整。每個輸入框都設置為紅色背景,有調(diào)整就會自動變成綠色,表示這個參數(shù)被調(diào)整過。
圖1 程序主界面
2.2 計算
本次作為示例的螺母需要的計算僅僅是螺紋強度校核,在主界面按下“強度校核”按鈕,在載荷輸入框中輸入載荷后就可以獲得螺紋強度校核計算的結(jié)果,在結(jié)果界面,點擊“確定”按鈕直接生成《螺紋強度校核計算報告》并返回主界面;點擊“取消”按鈕直接返回主界面。螺紋強度校核計算的結(jié)果如圖2所示。
圖2 螺紋強度校核計算結(jié)果
對于沒有螺紋的零件,有時候需要進行應力分析,將“強度校核”按鈕改為“導出交換數(shù)據(jù)”,可以將零件相應的數(shù)據(jù)導出給其他軟件進行應力分析。
以與AutoCAD同一家族的Inventor為例,在Inventor中創(chuàng)建二維草圖,定義好相應的約束,并在“fx參數(shù)”中定義必須的尺寸關系,生成正確的實體后在“fx參數(shù)”中導出XML文件。程序中“導出交換數(shù)據(jù)”功能將參數(shù)寫入該XML文件,在Inventor中以前面生成的零件圖為模板,在“fx參數(shù)”中導入該XML文件,Inventor會自動按尺寸更新實體,然后就可以使用其“應力分析”功能了(同一個裝配圖的多個零件可同樣處理)。此處僅以船舶軸系聯(lián)軸節(jié)法蘭液壓螺栓組中錐套為例列出其應力分析圖,如圖3所示。
圖3 錐套Mises等效應力
2.3 繪圖
主要參數(shù)確定后,點擊“繪圖”按鈕,程序會自動在當前AutoCAD模型空間中按1∶1的比例自動按所輸入的參數(shù)繪圖(其他比例的剖面圖同理)。部分代碼如下(其他處的代碼略):
Private Sub btnDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDraw.Click
InitLayers() '初始化圖層
NewTextStyle() '新建文字樣式
NewDimStyle() '新建標注樣式
Dim dblStartPt(2), dblEndPt(2) As Double
Dim acDocDL As Document = Application.DocumentManager.MdiActiveDocument
Dim pPtRes As PromptPointResult
Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
pPtOpts.Message = vbLf & "請指定插入點:"
pPtRes = acDocDL.Editor.GetPoint(pPtOpts)
Dim ptInsertPt As Point3d = pPtRes.Value
If pPtRes.Status = PromptStatus.Cancel Then Exit Sub
'++++++繪圖開始++++++
'' ''螺母中心線
Dim acLineCen As Line
dblStartPt(0) = ptInsertPt(0) + 5 : dblStartPt(1) = ptInsertPt(1) : dblStartPt(2) = ptInsertPt(2)
dblEndPt(0) = ptInsertPt(0) - tbWidth.Text - 10 : dblEndPt(1) = ptInsertPt(1) : dblEndPt(2) = ptInsertPt(2)
acLineCen = acDrawLine(New Point3d(dblStartPt(0), dblStartPt(1), dblStartPt(2)), _
New Point3d(dblEndPt(0), dblEndPt(1), dblEndPt(2)), "CENTER", , 20)
……
MsgBox("繪圖結(jié)束!", MsgBoxStyle.OkOnly, "螺母繪圖")
End Sub
……
''畫直線
Public Function acDrawLine(ByVal ptStartPt As Point3d, ByVal ptEndPt As Point3d, _
ByVal strLayer As String, Optional ByVal strLineType As String = _
"ByLayer", Optional ByVal dblLineTypeSc As Double = 1) As Line
Dim acDocDL As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDbDL As Database = acDocDL.Database
Using acTransDL As Transaction = acCurDbDL.TransactionManager.StartTransaction()
Dim acBlkTblDL As BlockTable
acBlkTblDL = acTransDL.GetObject(acCurDbDL.BlockTableId, OpenMode.ForRead)
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = acTransDL.GetObject(acBlkTblDL(BlockTableRecord.ModelSpace), _
OpenMode.ForWrite)
Dim acLineDL As Line = New Line(ptStartPt, ptEndPt)
acLineDL.SetDatabaseDefaults()
acLineDL.Layer = strLayer
If strLineType <> "" Then acLineDL.Linetype = strLineType
If dblLineTypeSc <> 0 Then acLineDL.LinetypeScale = dblLineTypeSc
acBlkTblRec.AppendEntity(acLineDL)
acTransDL.AddNewlyCreatedDBObject(acLineDL, True)
acTransDL.Commit()
acDrawLine = acLineDL
End Using
End Function
……
程序不僅直接繪制二維平面圖,還另外提供了與用戶指定文件名帶“-3D”標識的三維實體圖,并自動獲得零件計算重量。
2.4 讀寫數(shù)據(jù)庫
參數(shù)定型后,所有的參數(shù)可以存入數(shù)據(jù)庫。數(shù)據(jù)庫的類型很多,開發(fā)人員可以根據(jù)自己公司的實際情況選用合適的數(shù)據(jù)庫類型。本程序選擇了最簡單的Access數(shù)據(jù)庫進行開發(fā)。數(shù)據(jù)庫中不僅保存了零件參數(shù),還保存了項目信息,用戶隨時可以點擊“讀數(shù)據(jù)庫”按鈕,選擇指定項目的螺母,程序會自動將數(shù)據(jù)輸入主界面文本框。
2.5 繪制毛坯圖
圖紙經(jīng)業(yè)主和/或第三方審查通過后就可以下毛坯采購單了,點擊“繪制毛坯圖”,用戶在彈出界面輸入相應的加工余量——若缺省值滿足要求可不做任何更改,程序會自動繪制采購所需的毛坯圖,而且還提供了毛坯的計算重量。
2.6 生成工藝卡
毛坯到貨以后,設計人員需要根據(jù)毛坯圖和施工圖編制零件的加工工藝卡。通常,一個單位同類零件的加工工藝一般是不會變的,因此,設計人員都是直接在已有項目加工工藝卡的基礎上更改相關參數(shù)即可。程序會按照預先設定的工序及每道工序的加工量自動生成加工工藝卡,如圖4所示。單位如果發(fā)生技改,只需在程序內(nèi)部調(diào)整一下即可。
圖4 加工工藝卡
2.7 生成檢驗單
零件加工為成品后,單位質(zhì)檢部門的質(zhì)檢人員需要按零件檢驗單中的項目逐個檢查零件的主要參數(shù)。點擊程序主界面上的“生成檢驗單”按鈕,程序會自動生成當前零件的檢驗單供質(zhì)檢人員使用。
通過.NET API工具針對機械零件設計標準化進行的AutoCAD二次開發(fā),顯著減少了設計人員類似或重復的操作,使設計人員的設計效率顯著提高,同時也消除了設計人員在各種文件編制過程中的差錯。希望本文提到的機械零件設計標準化的方法能起到一定拋磚引玉的作用。
[1] 李志超,余杉鈺,章波,等.基于.NET API的CAD二次開發(fā)技術在工程中的應用[J].制造業(yè)自動化, 2013(15):122-124.
[2] 胡小林,於黃萍. AutoCAD.NET API在管系原理圖設繪中的應用[J].船舶與海洋工程, 2016(1):45-50.
[3] 李冠億.深入淺出AutoCAD.NET二次開發(fā)[M].北京:中國建筑工業(yè)出版社, 2012.
[4] 曾洪飛,盧擇臨,張帆. AutoCAD VBA & VB.NET開發(fā)基礎與實例教程[M].2版.北京:中國電力出版社, 2013.
Application for AutoCAD .NET API in Standardized Design of Mechanical Part
HU Xiaolin
(Marine Design & Research Institute of China, Shanghai 200011, China)
The tools for application development of AuotCAD and their characters are introduced simply. The superiority of the latest developing tool.NET API is also introduced. During machinery part design, designer should carry out many operations, such as calculating, relative file compiling and so on. It pays more attention to describe the functions developed by .NET API aimed at these operations. These functions reduce repetitive operations widely, enhance the design effectiveness and eliminate the errors occurred during file compiling.
AutoCAD; .NET API; application development; machinery part; standardized design
胡小林(1977-),男,高級工程師,主要研究方向為船舶輪機設計研究。
1000-3878(2017)01-0089-04
TH122
A