mikary 发表于 2016-1-15 15:45:02

用论坛上的代码改了一个面积和长度计算的程序,但功能不够完善,请指教。

“选择对象 或 单位|样式[毫米(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的微博

zjxsky 发表于 2017-11-24 08:56:49

可以用grread函数,参考 http://bbs.mjtd.com/forum.php?mo ... 0839&fromuid=282351
页: [1]
查看完整版本: 用论坛上的代码改了一个面积和长度计算的程序,但功能不够完善,请指教。