[求助]关于计算面积的小程序
<p>我们经常遇到各种计算面积的事情,原来我用CAD自带的面积查询功能,总觉得比较麻烦一点。为了提高工作效率,求各位高手编制一个小程序。</p><p>程序要求为:在直线或多段线围成的闭合或未闭合的区域内求面积。如:“<”按照三角形面积计算,“中”按照竖线两侧各按一个方块来计算面积。效果上要达到:鼠标要点在求面积的区域内,点完在鼠标点击的地方即可显示面积,显示数据为当前图层,颜色、线宽等属性随图层,数据可以编辑。具体操作步骤如下:</p><p>1、命令:“MJJS”</p><p>2、请输入前缀:如“高岗”</p><p>3、请输入后缀:如“亩、公顷、平方公里等”</p><p>4、请输入换算系数:如“在一个图纸单位为1米的情况下,计算出来的面积除于1为平方米、除于667为亩、除于10000为公顷、除于100000为平方公里”</p><p>5、请输入小数点后个数:如取整数为0、一位数为1</p><p>6、请输入字体大小:</p><p>7、点击鼠标继续:</p><p>8、按ESC键推出:</p> 本帖最后由 ZZXXQQ 于 2017-8-4 07:36 编辑先试试看
这是对话框:
dcl_settings : default_dcl_settings { audit_level = 3; }
mjjs:dialog{
label="面积计算";
:edit_box{label="前缀:";key="qz";}
:edit_box{label="后缀:";key="hz";}
:edit_box{label="换算系数:";key="hsxs";}
:edit_box{label="小数位数:";key="xsw";}
:edit_box{label="字高:";key="zg";}
ok_cancel;
}
这是程序:
;面积计算 明经 ZZXXQQ 2009.10.20
(defun c:mjjs ()
(setvar "CMDECHO" 0)
(setq oldos (getvar "OSMODE"))
(if (> (setq dcl_id (load_dialog "mjjs")) 0) (progn
(if (new_dialog "mjjs" dcl_id) (progn
(set_tile "qz" (if (= (type qz) 'STR) qz ""))
(set_tile "hz" (if (= (type hz) 'STR) hz "平方米"))
(set_tile "hsxs" (if (= (type hsxs) 'REAL) (rtos hsxs 2) "1"))
(set_tile "xsw" (if (= (type xsw) 'INT) (itoa xsw) "0"))
(set_tile "zg" (if (= (type zg) 'INT) (itoa zg) "5")
(action_tile "accept" "(getdata)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq re (start_dialog))
)
(alert "Unable to display dialog box!\n无法显示对话框!")
)
(unload_dialog dcl_id)
)
(alert "Unable to load dialog box!\n无法装载对话框!")
)
(if (= re 1) (progn
(setq txth (cdr (assoc 40 (tblsearch "STYLE" (getvar "CMLSTYLE")))))
(while (setq pt (getpoint "\n内部一点 :"))
(command "BPOLY" pt "")
(if (setq en (entlast)) (progn
(command "AREA" "O" en)
(setq aa (strcat qz (rtos (/ (getvar "AREA") hsxs) 2 xsw) hz))
(IF (> txth 0)
(command "TEXT" PT 0 aa)
(command "TEXT" PT zg 0 aa)
)
(entdel en)
))
)
))
)
(defun getdata ()
(setq qz (get_tile "qz")
hz (get_tile "hz")
hsxs (read(get_tile "hsxs"))
xsw (atoi (get_tile "xsw"))
zg (atoi(get_tile "zg")))
)
很不错,正好需要 <p>运行以后显示“<font color="#000000">Unable to display dialog box!\n无法显示对话框!”</font> 不知道什么原因?恭请ZZXXQQ大师指点为盼,最好做成lisp文件。</p> 程序本来就是LISP。二楼程序改了改,并在ACAD2004上调试通过。<br/>出现“无法显示对话框”是对话框文件有误,请再查查对话框文件。 我对代码一点不懂。我把上述的代码做成两个LISP文件也不好使,出现“无法显示对话框”的信息。恭请ZZXXQQ大师,做成能够直接运行的LISP文件行吗? 对话框文件的扩展名是dcl,全名是mjjs.dcl。 <p>ZZXXQQ:您好!</p><p>我按照您指示做了,效果较好!太感谢你了,向您学习!</p><p>我经过具体测试后,我想有几个方面需要改善一下:</p><p>1、对不完全闭合区域的求面积方面,在命令行上出现“错误:函数被取消”的提示。如能不能对“F”的左上侧按照方块面积计算,左下侧按照三角形面积计算。</p><p>2、在参数设置上:第二次执行时,能不能达到按照上一次执行的设置为默认值,从而不用每次执行都要重新设置。</p> 1、开口情况复杂,建议人工封闭后再计算。<br/>2、二楼已改。 今天上午试了,没有改动啊,还是每次执行都要重新设置,不知道什么原因?恭请版主帮忙。 版主厉害