给 AutoCAD 增加计算器功能
在用 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"表示
评论0
最新资源