新人第一贴,求完善(测量多点距离和)
本帖最后由 丽丽星空 于 2013-9-26 13:08 编辑刚开始学习LISP的时候就简单的编写了一个程序,花了三天时间。程序虽简单但对新手来说可是困难啊!代码如下:
;测量多点程序,当x1=x2时,停止测量,返回距离和
(defun c:dm ()
(setq m 0)
(setq x1 (getpoint))
(setq x2 (getpoint))
(setq y1 (distance x1 x2))
(setq m (+ m y1))
(while(or (/=(setq p11 (car x1)) (setq p21 (car x2))) (/=(setq p12 (cadr x1)) (setq p22 (cadr x2))) (/=(setq p13 (caddr x1)) (setq p23 (caddr x2))))
(setq x1 x2)
(setq x2 (getpoint))
(setq y1 (distance x1 x2))
(setq m (+ m y1))
)
(prompt "\n距离之和:")
(prin1 m)
)
程序有不完善的地方,如 当x1=x2时,停止测量,返回距离和。本想按空格键或ENTER键退出程序,研究了很久也没出来。请知者指教。
(defun c:dm1 (/ M X1 X2)
(setq m 0)
(while (and (setq x1 (getpoint "\n 起点"))
(setq x2 (getpoint x1 "\n 终点"))
)
(setq m (+ m (distance x1 x2)))
)
(princ (strcat "\n距离之和:" (VL-PRINC-TO-STRING m)))
(princ)
) 自贡黄明儒 发表于 2013-9-26 13:02 static/image/common/back.gif
(defun c:dm1 (/ M X1 X2)
(setq m 0)
(while (and (setq x1 (getpoint "\n 起点"))
多谢大侠指点,你编的程序真是精致啊 (defun c:dm2 (/ M X1 ptlst)
(while (setq x1 (getpoint "\n 点"))
(setq ptlst (cons x1 ptlst))
)
(setq m
(apply '+
(mapcar '(lambda (x y)
(distance x y)
)
ptlst
(cdr ptlst)
)
)
)
(princ (strcat "\n距离之和:" (VL-PRINC-TO-STRING m)))
(princ)
) snddd2000 发表于 2013-9-26 23:37 static/image/common/back.gif
(defun c:dm2 (/ M X1 ptlst)
(while (setq x1 (getpoint "\n 点"))
(setq ptlst (cons x1 ptlst)) ...
精炼!正是所需功能。为避免Z值影响,可再优化
页:
[1]