用论坛上的代码改了一个面积和长度计算的程序,但功能不够完善,请指教。
“选择对象 或 单位|样式[毫米(1)/米(2)]<毫米(1)>:”现在这一步需要输入"1、2或者空格回车"后,才能执行下一步选择对象的命令。
请问如何实现——
A.可以不输入12空格回车,直接就能选择对象,程序会按默认选项执行下去。
B.输入1或2后,不需要再加空格回车确认,直接执行下一步。
新手一枚,见笑了。
(defun C:TEST (/ ar_style ss l i tot_area ename obj entarea tot_length)
(initget "1 2")
(setq ar_style (getkword "\n选择对象 或 单位|样式[毫米(1)/米(2)]<毫米(1)>: "))
(if (null ar_style)
(setq ar_style "1"))
(if (setq ss (ssget '((0 . "*POLYLINE,CIRCLE,ELLIPSE,SPLINE,REGION,ARC,LINE"))))
(progn
(vl-load-com)
(setq modelspace (vla-get-Modelspace (vla-get-activeDocument (vlax-get-acad-object))))
(setq l (sslength ss) i 0 tot_area 0 tot_length 0)
(repeat l
(setq ename (ssname ss i))
(setq obj (vlax-ename->vla-object ename))
(if (vlax-property-available-p obj "area")
(setq tot_area (+ (vlax-get-property obj 'area) tot_area))
)
(if (= (cdr (assoc 0 (entget ename))) "MLINE")
(setq tot_length (+ tot_length (ml-length ename)))
(setq tot_length (+ tot_length (vlax-curve-getdistatparam ename (vlax-curve-getendparam ename))))
)
(setq i (1+ i))
)
;;;根据制图单位选择数据比例
(cond
(( = ar_style "1")
(setq tot_area (rtos (* 0.000001 tot_area) 2 2 ))
(princ (strcat "总面积= " tot_area " ㎡" " 总长度= " (rtos (* 0.001 tot_length) 2 3 ) " m" ))
)
(( = ar_style "2")
(setq ha_area (rtos (* 0.0015 tot_area) 2 2 ))
(setq tot_area (rtos (* 1 tot_area) 2 2 ))
(princ (strcat "总面积= " tot_area " ㎡" " 总长度= " (rtos (* 1 tot_length) 2 3 ) " m"" 折合 " ha_area " 亩"))
)
)
;;;把面积结果写在图纸上
(setq set_point (getpoint "\n请点取计算面积书写位置:" ))
(command "text" set_point (* 3 (GETVAR "DIMSCALE")) 0 tot_area)
(princ)
)
)
)
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 mikary的微博 可以用grread函数,参考 http://bbs.mjtd.com/forum.php?mo ... 0839&fromuid=282351
页:
[1]