?

基于Visual Lisp 的塔器梯子平臺參數化繪圖程序開發

2022-08-12 13:52張晉華
化工設備與管道 2022年3期
關鍵詞:梯子對話框繪圖

張晉華

(惠生工程(中國)有限公司,北京 100102)

AutoCAD 廣泛應用于工程公司各專業,但CAD軟件只提供了基本的繪圖環境,工程師經常使用CAD 進行大量重復的設計繪圖工作,繪圖效率偏低。通過對CAD 進行二次開發,實現目標圖形的參數化自動繪制,可以將工程師從重復復雜的繪圖工作中解放出來,將更多的精力放在專業技能提高上。

市面上有很多CAD 二次開發插件,但一般均由編程專業人員開發,難以滿足工程師專業性需求。只有工程師自己能充分了解工作中深層需求,若工程師掌握基本的二次開發能力,開發適于日常工作的參數化繪圖程序,將更有效地提高工作效率。

目前AutoCAD 二次開發工具主要有Visual Lisp、Object ARX、VBA,其 中VLisp 與VBA 相對簡單,開發速度較快,但對面向對象的功能支持不好,Object ARX 基于VC 平臺,功能強大,可以很好地運用各種面向對象技術,但開發速度較慢,且對開發人員的能力要求較高,更適合大系統的開發 [1]。

本文選擇VLisp 為開發工具,Vlisp 是CAD 自帶的二次開發工具,嵌套于CAD 內部,可以直接調用CAD 命令、系統變量等,簡單易學,與CAD 兼容性好,且對非編程專業的工程師非常友好[2]。

塔器梯子平臺圖繪制在工程設計中是一項非常繁瑣的工作,尤其對于高塔,平臺數量可能多達十幾層,在實際設計中,設計人員通常利用CAD 通過點線等基礎命令對梯子和平臺進行繪制,耗費大量時間與精力。本文通過利用Visual Lisp 對塔器梯子平臺圖的繪制進行二次開發,實現了目標圖形的參數化自動繪制,大大提高了繪圖效率,將設計人員從重復性勞動中解放出來。

1 參數化繪圖程序開發步驟

參數化繪圖是指用戶根據參數對話框和命令行的提示,輸入相關參數,便可由程序自動完成所需圖形繪制工作。本文主要從以下幾方面對開發步驟進行分析:

1.1 需求分析

二次開發的首要工作是需求分析,只有充分了解開發背景、開發需求、開發內容、開發目標才能準確完成開發任務。

本次開發的主要目標是實現塔器梯子平臺立面圖、平面圖的參數化自動繪制,通過輸入基本參數,實現圖形自動繪制及相關尺寸的自動標注,同時生成預焊件360°展開圖,便于檢查碰撞。此外,開發繪圖環境設置、技術要求、節點圖等輔助模塊。使用本程序繪制的圖形,用戶只要稍加修改,便可達到出圖要求,快捷高效。

1.2 開發思路分析

本程序的開發主要包括以下幾步:

(1)分析結構特點,提煉規律,確定繪圖模塊;

(2)確定繪圖參數,設計人機交互對話框;

(3)理清繪圖流程,編寫繪圖程序;

(4)程序調試與測試;

(5)加載程序,實現圖形參數化繪制。

1.3 開發過程分析

本程序以HG/T 21543—2009《圓形塔平臺通用圖》為設計標準進行開發。

1.3.1 分析結構特點,提煉規律,確定繪圖模塊

二次開發中,編程語言只是工具,開發的核心在于思路的提煉與整理,簡潔和清晰的思路會使得開發事半功倍。本文以梯子平臺立面圖為例對開發過程進行分析。

立面圖繪制主要集中在塔輪廓、平臺、梯子三個方面,提煉繪圖模塊分類見表1??紤]到繪圖的快捷簡便性和后期修改的靈活性,在開發立面圖總模塊同時開發塔輪廓、平臺、梯子三個子模塊??偰K可實現立面圖總圖(包含尺寸標注與標識)的一次性繪制;子模塊可實現各部件的單獨繪制,也可用于對全塔圖的修改,使用靈活。

表1 塔輪廓、平臺、梯子繪圖模塊分類Table 1 Classification of drawing module for tower outline,platform, ladder

1.3.2 確定繪圖參數,設計人機交互對話框

Visual Lisp 編程語言中,Lisp 用于實現圖形繪制,DCL 用于建立人機交互對話框。友好的對話框對于參數化繪圖程序非常重要,可通過必要的文字和圖片提示來增加可讀性,使用戶操作更便捷。

1.3.2.1 確定繪圖參數并搭建DCL 對話框

結合立面圖繪圖模塊,提煉所需繪圖參數于表2中,并搭建圖1 所示DCL 參數錄入對話框。

圖1 塔器梯子平臺立面圖繪制對話框Fig.1 DCL for Elevation drawing for Platform and Ladder of Tower

表2 塔器梯子平臺立面圖繪圖參數Table 2 Elevation drawing parameters for Platform and Ladder of Tower

1.3.2.2 DCL 對話框特點

(1)記憶上次數據,減免用戶對相同類型數據的重復輸入,也可幫助用戶出錯時快速載入參數重新繪制。

(2)內嵌平臺和梯子子對話框,不同塔設備所需平臺和梯子的數量及形式不同,高塔可能設置十幾層平臺,結合DCL 與Lisp 編寫隨數量變化的參數錄入對話框(見圖2),可以靈活方便地錄入所有平臺和梯子參數,并記憶所有參數,避免重復輸入。

圖2 平臺參數錄入子對話框Fig.2 Sub-DCL for Platform parameters

(3)繪圖比例設置,結合塔頂標高給出推薦的圖紙比例,用于尺寸標注及文字比例設置。

(4)嵌套質量估算及預焊件繪圖模塊,供用戶選擇。

(5)設置可放大的參考圖,便于用戶準確了解參數的意義。

(6)對話框結合命令行,根據參數特點,對難以錄入對話框的部分參數采取繪圖過程中通過命令行來輸入的方式,如梯子支耳間距。

1.3.3 理清繪圖流程,編寫繪圖程序

繪圖程序編寫前應對繪圖流程進行分析,理清圖形中存在的數學關系和約束條件,確定繪圖方法、流程、所需節點等,以此來有效指導程序的編寫。結合Lisp 程序設計特點,將立面圖參數化繪制的流程簡述如下[3]:

(1)系統環境設置

繪圖開始應對CAD 的系統環境進行設置,使其符合企業的繪圖規范。參照公司制圖規定,通過command 函數或setvar 函數依次對圖層樣式、標注樣式、文字樣式、主單位精度等系統變量進行設置。

(2)塔輪廓建模

塔輪廓建模涉及基本輪廓外形尺寸,所需參數(形式、外徑、高度等)均從DCL 對話框獲取,采取點線建模方式完成自動繪圖,算法簡單。同時,可根據用戶對預焊件的繪制需求進行塔輪廓復制和預焊件的360°展開圖繪制。

(3)平臺建模

平臺建模涉及參數有平臺標高(以塔器基礎底面中心為0 標高位置)、平臺寬度、塔保溫參數等,參數關系及樣式選擇按HG/T21543-2009《圓形塔平臺通用圖》要求。平臺建模流程模擬實際繪圖過程,通過Lisp 語言復現繪圖命令,利用cond 條件語句進行判斷,利用循環語句進行簡化,算法相對簡單。

此外,可根據用戶需求進行預焊件繪制及質量估算。循環繪制多個平臺。

(4)梯子建模:

梯子建模涉及參數有起始平臺標高、終止平臺標高、梯子位置、支耳間距等。梯子繪圖型式變化多樣,根據梯子所在標高處塔輪廓外形不同可分為直梯、斜梯、斜梯+直梯、直梯+斜梯+直梯等。

梯子建模包含梯子主體(梯棍、踏步)、支耳、護籠三部分,自動繪圖中,首先通過梯子標高結合塔外形對梯子型式進行判斷,確定各部分繪圖樣式,然后結合已錄入參數,按表3 自動繪圖算法原則完成圖形繪制及相關標注標識工作,用戶按需將繪制的梯子組進行鏡像和平移操作。

表3 梯子自動繪圖算法原則Table 3 Algorithm principle for ladder automatic drawing

此外,可根據用戶需求進行預焊件繪制及質量估算。循環繪制多個梯子。

至此程序繪圖結束,詳細流程如圖3 所示。

圖3 梯子平臺立面圖繪制流程Fig.3 Elevation drawing flow chart for Platform and Ladder of Tower

1.3.4 程序調試與測試

程序開發過程中需不斷進行調試,確保程序實現目標功能的同時應不斷優化簡化程序。調試的方法為:在關注位置設置斷點→通過檢驗查看變量值、通過添加監視查看變量值的變化→根據問題修改程序源代碼→重新運行調試→直至程序調試合格。

開發人員對程序調試合格后,還需邀請使用人員對程序進行測試。開發人員的視野和經驗畢竟有限,且在開發過程中傾向于根據自己的工作思路進行開發,當別的設計人員使用時便可能會因思路不同而出錯。只有經使用人員大量測試,結合測試中發現的問題不斷對程序完善,才能使得程序更加穩定,界面更加友好,更符合用戶的需求與習慣。

1.3.5 加載程序,實現圖形參數化繪制

程序調試合格后將程序編譯為擴展名為“.vlx”的工程文件進行加載,程序的加載方式有命令行加載、啟動組加載、制作菜單欄、制作工具欄等多種方式,其中菜單欄方式最方便簡潔。加載成功,按對話框和命令行提示輸入相關參數,便可完成自動繪圖工作,手動對圖形進行局部調整,按照繪圖前設定的比例將圖形放入A1 圖框中即可。

2 開發成果

此次主要完成了塔器梯子平臺立面圖總圖、平面圖總圖、立面圖子模塊、預焊件繪制、360°干涉展開圖繪制、質量估算、技術要求、節點圖等模塊開發,實現了梯子平臺繪圖的高度自動化與參數化,以前需要幾小時繪制的圖紙,使用此程序幾分鐘便可以完成,極大提高了繪圖效率。部分繪制樣圖見圖4。

圖4 繪制樣圖(立面圖、預焊件圖、360°展開圖)Fig.4 Sample drawing(elevation drawing, pre-weldment drawing, 360° expended drawing)

3 程序開發技巧及重難點問題

3.1 全局變量與局部變量

程序中參數分為全局變量和局部變量,盡可能將變量設置為局部變量,在程序結束時將變量從內存中釋放,避免占用大量內存空間,有效提高運行效率。此外,若在不同程序中誤使用相同的全局變量名稱,全局變量可能互相干擾,使得繪圖出錯。

本程序僅在為用戶記憶上次輸入參數時使用全局變量。

3.2 錯誤處理

程序設計時應盡量避免對當前系統變量修改,但有時為保證自動繪圖準確,需臨時對部分系統變量進行修改(如對象捕捉),程序結束后將這些系統變量還原。但如果程序在運行中意外出錯,程序會直接中斷跳出,使得系統變量無法還原,給用戶的操作帶來不便。通過增加錯誤處理子函數可解決此問題,將修改前用戶的系統變量備份,在出現錯誤時將備份的系統變量還原。具體操作如下:

主程序中開始處增加:

(setq *error*_bak *error*)

;;將系統內置的出錯函數備份

(setq *error* *error*_new)

;;將自定義的出錯函數復制給系統出錯函數

主程序中結尾處增加:

(setq *error* *error*_bak)

;;若程序正常執行,則還原備份的出錯函數

自定義出錯子函數如下:

(defun *error*_new (msg)

(command)

;; 對CAD 內 置command 命 令 執 行 的 使 用(command)取消執行

(setq *error* *error*_bak)

;;將系統出錯函數進行還原

3.3 梯子繪圖復雜情況處理

梯子模塊開發中,梯子繪制方法隨筒體變徑情況不同而變化,樣式繁多,給開發帶來極大困難。開發中應盡可能窮盡常用組合,理清數學關系,但以解決80%的情況為目標,保證程序的簡潔友好,避免程序過于龐大。

3.4 對象編組

平臺梯子繪圖繁瑣線條較多,在程序編制中使用組group 功能將平臺組件、梯子組件分別組合成對象組,便于后期用戶對這些部件進行整體操作(如移動、鏡像等)。

3.5 命令行防回顯

程序執行中調用command 命令時命令行會顯示命令執行過程參數,顯得很亂且非常影響繪圖速度,可在程序開始添加(setvar “cmdecho” 0)來關閉命令響應,且最好在每個包含command 命令的子程序均增加此語句,可有效防止命令行回顯且提高運行速度[4]。

3.6 出現未知命令

程序執行中有時會在命令行出現未知命令,但不影響程序正常運行,此種情況多因command 命令中增加了多余的“”雙引號造成,刪除即可解決。

3.7 DCL對話框參數響應

對話框參數錄入狀態及響應關系應清晰,如筒體結構分有變徑和無變徑兩種情況,不同情況下所需輸入的相關參數不同,不需輸入的參數應處于灰色不激活狀態,在用戶切換選擇類型時參數應能準確調整激活狀態。

DCL 對話框搭建過程中也應盡可能窮盡不同參數交叉組合時的相互響應,對參數狀態了然于心,然后編寫Lisp 程序對參數激活狀態進行控制,只有參數狀態清晰用戶使用才能得心應手。

4 結論

在AutoCAD 平臺下應用Visual Lisp 語言進行二次開發,實現了塔器梯子平臺圖紙的參數化自動化繪制,減少了設計人員不必要的重復繪圖勞動,使流程標準化,幾分鐘便可完成一張圖紙的繪制工作,節約繪圖時間,提高工作效率。本成果對其他類似系統的開發具有參考價值。

猜你喜歡
梯子對話框繪圖
來自河流的你
“禾下乘涼圖”繪圖人
種梯子
木梯子
正?;謴吞摂M機
你們扛著梯子去干嗎
垂涎三尺
Bootlace Worms’Secret etc.
What Is Beauty?
梯云縱
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合