在用AutoCAD進行繪圖時,經常需要進行一些必要的計算工作。盡管Autodesk公司隨AutoCAD一起提供了一個可進行簡單計算的LISP程序CALC.LSP,但該程序開發較早,在COMMAND命令下使用,界面不直觀,且使用不方便,本文通過對AutoCAD內對話框結構及AutoLISP進行研究,提出了一種用對話框結構實現計算器功能的方法,同時給出程序流程圖,供大家參考。該程序已應用于我院的實際工作中。
1 原理及方法
AutoCAD對話框結構包含多種構件,如edit_box(編輯框)、text(文字)、button(按鈕)等。利用這些工具,可以開發出界面友好的實用程序。圖1就是用這種方法實現的。 將計算器中數字及各種運算符號以按鈕(button)形式排成5行5列,并把計算結果以文字構件方式在對話框內顯示,即可得到圖1所示對話框結構(對話框文件#CAL.DCL)。最后編制對話框顯示及完成各種運算功能的驅動程序即可(驅動程序#CAL.LSP),程序流程圖見圖2。
在#CAL.LSP程序中用到了AutoLISP提供的多種數值計算及變量轉換函數。需要說明的是,筆者在調試過程中發現某些函數對變量有一些特殊要求,現介紹如下,與讀者共同探討:
1、在冪運算函數(expt base power)中,對變量base(底)和power(冪)的要求與代數學中冪的運算要求是不同的。在代數學中對變量base和power的要求如下:
當 base>0時,power 可為任意實數;
當base=0時,power須大于0;
當base<0時,power可為整數,若為小數或分數時要求當其化為最簡分數時分母不能為偶數。
但在AutoLISP中當變量base<0時,要求power只能是整型數或小數點后均為0的實數,如2,-2.0等,否則將得到錯誤信息或返回一個錯誤結果(視power值而定)。此外,當計算結果太大而溢出時,對于FOR DOS版的AutoCAD將返回1.67e+308,而WINDOWS版則返回1.79769e+308。
2、正余弦函數(sin x)及(cos x)要求變量x必須小于等于9.223372e+18(當然還可再延長小數位數),否則得不到正確結果。例如當變量為9.223373e+18時,對于FOR DOS版的AutoCAD返回NAN,而WINDOWS版則返回變量值本身。
3、在使用函數(rtos)將數據轉化為字符串時,筆者發現當數據大于1e+100(即10的100次方)時,會將指數100自動地改為99。例如,執行(rtos 6e+100 2 6)后得到"6.000000E+99",而不是所期待的"6.000000E+100"。所以本程序規定最大數據不能大于1e+99,否則將顯示溢出錯誤。當然,通過編制另外的轉換程序是可以將最大數據提高到AutoCAD所能接受的最大數據(經測試發現其最大值可為1.79769e+308)。限于篇幅,本文不再提供該轉換函數,需要的同志可與筆者聯系。
2 程序使用方法
將程序#CAL.LSP 及對話框文件#CAL.DCL拷貝到AutoCAD所能找到的目錄中,在Command:命令下鍵入(LOAD "#CAL")進行程序的加載,即可象其它AutoCAD內部命令一樣使用#CAL了。也可在所使用的菜單文件(如ACAD.MNU)中的下拉式菜單或屏幕菜單部分加上下面一行:[計算器]^C^C^P(if (null c:#cal) (load"#cal")) #cal以后即可直接從菜單中驅動該程序。
對話框內各個圖標與普通計算器相似,"C"表示清零,"M+"表示存儲結果,"MR"表示彈出所存儲的結果,"sqrt"表示開方,"X**y"表示求冪。當所輸入的數據不合適或計算結果溢出時對話框內會顯示錯誤提示信息。
本程序在AutoCAD R12.0 FOR DOS及FOR WINDOWS版上均調試通過。
1 原理及方法
AutoCAD對話框結構包含多種構件,如edit_box(編輯框)、text(文字)、button(按鈕)等。利用這些工具,可以開發出界面友好的實用程序。圖1就是用這種方法實現的。 將計算器中數字及各種運算符號以按鈕(button)形式排成5行5列,并把計算結果以文字構件方式在對話框內顯示,即可得到圖1所示對話框結構(對話框文件#CAL.DCL)。最后編制對話框顯示及完成各種運算功能的驅動程序即可(驅動程序#CAL.LSP),程序流程圖見圖2。
在#CAL.LSP程序中用到了AutoLISP提供的多種數值計算及變量轉換函數。需要說明的是,筆者在調試過程中發現某些函數對變量有一些特殊要求,現介紹如下,與讀者共同探討:
1、在冪運算函數(expt base power)中,對變量base(底)和power(冪)的要求與代數學中冪的運算要求是不同的。在代數學中對變量base和power的要求如下:
當 base>0時,power 可為任意實數;
當base=0時,power須大于0;
當base<0時,power可為整數,若為小數或分數時要求當其化為最簡分數時分母不能為偶數。
但在AutoLISP中當變量base<0時,要求power只能是整型數或小數點后均為0的實數,如2,-2.0等,否則將得到錯誤信息或返回一個錯誤結果(視power值而定)。此外,當計算結果太大而溢出時,對于FOR DOS版的AutoCAD將返回1.67e+308,而WINDOWS版則返回1.79769e+308。
2、正余弦函數(sin x)及(cos x)要求變量x必須小于等于9.223372e+18(當然還可再延長小數位數),否則得不到正確結果。例如當變量為9.223373e+18時,對于FOR DOS版的AutoCAD返回NAN,而WINDOWS版則返回變量值本身。
3、在使用函數(rtos)將數據轉化為字符串時,筆者發現當數據大于1e+100(即10的100次方)時,會將指數100自動地改為99。例如,執行(rtos 6e+100 2 6)后得到"6.000000E+99",而不是所期待的"6.000000E+100"。所以本程序規定最大數據不能大于1e+99,否則將顯示溢出錯誤。當然,通過編制另外的轉換程序是可以將最大數據提高到AutoCAD所能接受的最大數據(經測試發現其最大值可為1.79769e+308)。限于篇幅,本文不再提供該轉換函數,需要的同志可與筆者聯系。
2 程序使用方法
將程序#CAL.LSP 及對話框文件#CAL.DCL拷貝到AutoCAD所能找到的目錄中,在Command:命令下鍵入(LOAD "#CAL")進行程序的加載,即可象其它AutoCAD內部命令一樣使用#CAL了。也可在所使用的菜單文件(如ACAD.MNU)中的下拉式菜單或屏幕菜單部分加上下面一行:[計算器]^C^C^P(if (null c:#cal) (load"#cal")) #cal以后即可直接從菜單中驅動該程序。
對話框內各個圖標與普通計算器相似,"C"表示清零,"M+"表示存儲結果,"MR"表示彈出所存儲的結果,"sqrt"表示開方,"X**y"表示求冪。當所輸入的數據不合適或計算結果溢出時對話框內會顯示錯誤提示信息。
本程序在AutoCAD R12.0 FOR DOS及FOR WINDOWS版上均調試通過。
相關文章
- 2021-09-08BIM技術叢書Revit軟件應用系列Autodesk Revit族詳解 [
- 2021-09-08全國專業技術人員計算機應用能力考試用書 AutoCAD2004
- 2021-09-08EXCEL在工作中的應用 制表、數據處理及宏應用PDF下載
- 2021-08-30從零開始AutoCAD 2014中文版機械制圖基礎培訓教程 [李
- 2021-08-30從零開始AutoCAD 2014中文版建筑制圖基礎培訓教程 [朱
- 2021-08-30電氣CAD實例教程AutoCAD 2010中文版 [左昉 等編著] 20
- 2021-08-30電影風暴2:Maya影像實拍與三維合成攻略PDF下載
- 2021-08-30高等院校藝術設計案例教程中文版AutoCAD 建筑設計案例
- 2021-08-29環境藝術制圖AutoCAD [徐幼光 編著] 2013年PDF下載
- 2021-08-29機械AutoCAD 項目教程 第3版 [繆希偉 主編] 2012年PDF