程澤明,唐露露,秦 凱,姚 禮,符純華
(四川理工學院機械工程學院,四川自貢 643000)
AutoCAD功能強大,在機械制造、船舶、汽車、航空航天等行業應用的非常廣泛,給設計帶來很大的方便。但其交互繪圖命令繪圖仍然繪圖效率不高。針對具體成熟產品的CAD二次開發是CAD應用取得實效的關鍵環節[1]。
在繪制裝配圖中,明細表是必不可少的內容,同時也是報表統計、匯總輸出等工作的基本依據。明細表的本質就是圖號(零件)清單。在CAD圖紙中,裝配圖明細表一般是在圖紙繪制結束后,根據裝配圖所包含零件的各項內容,按順序逐行手工填入明細表中。在AutoCAD軟件中,如果直接使用AutoCAD繪圖命令來繪制明細表并填寫明細表的內容,則相當繁瑣,且效率極低。雖然也有不少對明細表填寫的開發文章,但對成套產品開發的機械明細表卻不適用,原因是必須先構造明細表所有詳盡具體內容的文本或EX?CELL文件。由于產品不同,導致裝配圖內容不同,也導致了機械明細表內容的不確定性。使用命令手工填入輸入時極易出錯,效率低,也不能保證數據的統一性,導致匯總處理的難度就更大了。由于二次開發是CAD應用取得實效的關鍵環節,因此本文提出自動填寫機械明細表的參數化設計,以提高程序設計質量與產品開發效率。
一般來講,產品圖紙由裝配圖、部件圖和零件圖組成。裝配圖包括圖形、技術要求、標題欄、明細欄等幾大部分。明細欄依次列出零件序號、代號、名稱、數量、材料、備注等內容,在實際產品的開發中,明細表往往由GB件、非標件組成,按照傳統的填寫方式已不能滿足產品開發的要求。設計開發思路是:自動構造明細表列表[2]后,循環逐個取出表中的元素填寫明細表。關鍵技術是構造明細表列表,其構造方法如圖1所示。
對標準件如螺母、螺栓、墊圈等明細表的填寫,先建立數據庫,通過的國標代號(例"GB/T6170-2000")和螺母直徑(d)為查詢條件,并讀取標準件相關數據,主要是單重。總重根據數量自動計算。
對于非標準件,先將非標件標題欄相關數據寫入數據庫[3],作為讀取數據的數據源。如圖2所示。然后通過圖樣代號和數量,到數據庫中找到符合條件的記錄并讀取非標準件相關數據(如材料、重量等)構造非標件明細表列表。這是本工具的關鍵技術之一,其函數如下。運行本函數需要先連接數據庫,VLISP[4]與數據庫連接本文不再贅述。

圖2 非標件相關數據存入數據庫的截圖
;=================================
;函數功能:提供圖樣代號和數量構造非標件的明細表列表。
;參數說明:secq——明細欄序
;tcode——圖紙代號,如 5DB.075.002
;num----------數量
;demo----------備注
;使用方法:
;(GetBomList"3""5DB.750.002""8""demos")
;=================================

圖1 生成明細表內容的方法
(defun GetBomList(secq tcode num demo/rValue rList sql weightAll)
(if (setq connObject(ado_connect))
(progn
(setq sql(strcat"select
partname,material,weight from SheetTitle where
tcode='"tcode"'")
);setq構造查詢用SQL語句
(setq rList(ado_dosql connObject sql))
(ado_disconnect connObject)
;關閉數據庫
);progn
);if
(if(>(length rList)1)
(progn
(setq rList(nth 1 rList))
(if(not(wcmatch num"*.*,*@*"))
;只為數字時計算
(setq weightAll(rtos(*(atoi num)
(atof(nth 2 rList)))))
(setq weightAll"")
);if
(setq rValue(list secq tcode
(nth 0 rList)
num(nth 1 rList)(nth 2 rList)
weightAll demo))
);progn
(setq rValue(list secq tcode""
num""""""demo))
);if
rValue
);defun
對給定圖幅,標題欄位置確定(每幅圖以(0,0)為左下角點),因此定義一個全局變量(pt_base_titlebar)為程序繪制明細表格作為基點即可。填寫明細表填寫流程圖如圖3所示。
通過構造如下程序所示bom表,運行函數

圖3 填寫明細表流程圖
(write_list_DF bom),得到圖4所示明細表內容。
(setq bom(list
(GetBomList"1"
(strcat"8DB.070."
MainPostCode".1")"1""")
(GetNutBom"2""GB/T6170-2000"
"螺母M20""20""16""")
(list"3"""(strcat"拉帶絕緣1.5X160X"
(rtos L_LD 2 0))"4""絕緣紙板
100/00"(rtos weight_8 2 3)
(rtos(*weight_8 4)2 3)"")
(GetBomList"4"(strcat"5DB.023."
MainPostCode)"5"""))
);setq
自動填寫明細表工具,經實際使用并結合用戶習慣修改,使用效果良好,能較大幅度地提高繪圖效率。尤其是對成套產品進行二次開發的明細表填寫,只需局部修改構造明細表的列表即可,因而繪圖效率更高。另外,本實用程序通用性強,可作為繪制裝配圖的一個模塊,也可作為整套產品CAD的一個模塊,也可作為單獨的實用工具使用,具有較好的實際使用價值和推廣意義。
[1]柳博,楊明忠,國順生.基于關系型數據庫的BOM設計查詢策略[J].現代制造工程,2004(2):28-30.
[2]張志利.AutoCAD 2000定制與開發手冊[M].武漢:華中理工大學出版社,1999.
[3]王宇虹,朱亦文,陳格,等.Access數據庫系統開發從基礎到實踐[M].北京:電子工業出版社,2006.
[4]吳永進,林美櫻.AutoCAD完全應用指南[M].北京:科學出版社,2009.