试一下下面程序,程序未调试

- (defun c:pl_sum()
- (setvar "cmdecho" 0)
- (prompt "\n<<选择多义线>>")
- (SETQ SS (SSGET '((0 . "LWPOLYLINE"))))
- (setq n 0)
- (setq ss_LL 0)
- (setq llist (list))
- (repeat (sslength ss))
- (setq en (ssname ss n))
- (command "lengthen" en "")
- (setq ss_L (getvar "perimeter"))
- (setq en_data (entget en))
- (setq en_w (cdr (assoc 43 en_data)))
- (if (setq en_oldwl (assoc w llist))
- (setq en_wl (list w (+ (cdr en_oldwl) ss_L))
- llist (cons en_wl en_oldwl llist))
- (setq llist (append llist (list (list w ss_L))))
- )
- (setq n (1+ n))
- )
- (setq n 0)
- (setq ls (length llist))
- (repeat ls
- (setq en_wl (nth n llist))
- (princ "\n线宽:") (princ (car en_wl))
- (princ " 长度:") (princ (cdr en_wl))
- (setq ss_LL (+ ss_LL (cdr en_wl)))
- (setq n (1+ n))
- )
- (princ "\n总长度为: ")
- (princ ss_LL) (princ "\n")
- (princ)
- )
- (prin1)
调试过的程序

- (defun c:pl_sum()
- (setvar "cmdecho" 0)
- (prompt "\n<<选择多义线>>")
- (SETQ SS (SSGET '((0 . "LWPOLYLINE"))))
- (setq n 0)
- (setq ss_LL 0)
- (setq llist (list))
- (repeat (sslength ss)
- (setq en (ssname ss n))
- (command "lengthen" en "")
- (setq ss_L (getvar "perimeter"))
- (setq en_data (entget en))
- (setq en_w (cdr (assoc 43 en_data)))
- (if (setq en_oldwl (assoc en_w llist))
- (setq en_wl (list en_w (+ (cadr en_oldwl) ss_L))
- llist (subst en_wl en_oldwl llist))
- (setq llist (append llist (list (list en_w ss_L))))
- )
- (setq n (1+ n))
- )
- (setq n 0)
- (setq ls (length llist))
- (princ "\n")
- (repeat ls
- (setq en_wl (nth n llist))
- (princ "\n线宽:") (princ (car en_wl))
- (princ " 长度:") (princ (cdr en_wl))
- (setq ss_LL (+ ss_LL (cadr en_wl)))
- (setq n (1+ n))
- )
- (princ "\n总长度为: ")
- (princ ss_LL) (princ "\n")
- (princ)
- )
- (prin1)
|