代码如下:
- (defun C:Length () (MT-TotalLength))
- (defun MT-TotalLength (/ *error* ans layname cont len)
- (MT-Start)
- (initget "Name eXit _Name eXit")
- (setq ans nil)
- (setq ans
- (entsel
- "\nSelect an object on the layer to proceed [Name/eXit] <eXit>: "
- )
- )
- (cond
- ((member ans '(nil "eXit")) (exit))
- ((= "Name" ans)
- (setq cont T)
- (while cont
- (setq layname (getstring T "\nEnter layer name: "))
- (if (null (read layname))
- (progn (princ "\nNull name for layer not allowed, try again."))
- (progn (if (tblsearch "layer" layname)
- (setq cont nil)
- (princ (strcat "\nLayer ""
- layname
- "" not exists, try again."
- )
- )
- )
- )
- )
- )
- )
- (T (setq layname (cdr (assoc 8 (entget (car ans))))))
- )
- (and (setq ss (ssget "_X"
- (list (cons -4 "<OR")
- (cons 0 "LINE")
- (cons 0 "ARC")
- (cons 0 "LWPOLYLINE")
- (cons -4 "OR>")
- (cons 8 layname)
- )
- )
- )
- (setq len (MT-Calc-Length ss))
- )
- (setq msg
- (strcat
- "Total length of objects (Lines, Arcs, Polylines) in layer: ""
- layname
- ""\n\nequals to: "
- (rtos len)
- )
- )
- (princ msg)
- (alert msg)
- (MT-End)
- )
- (defun MT-Calc-Length (ss / sslist len)
- (setq sslist (MT-Conv-SS-To-List ss))
- (setq len 0)
- (foreach obj sslist (setq len (+ len (MT-Get-Obj-Length obj))))
- )
- (defun MT-Conv-SS-To-List (ss / entlist index)
- (setq entlist nil)
- (if (= 'PICKSET (type ss))
- (progn (setq index -1)
- (repeat (sslength ss)
- (setq
- entlist (append (list (ssname ss (setq index (1+ index))))
- entlist
- )
- )
- )
- )
- )
- (reverse entlist)
- )
- (defun MT-Error (msg)
- (or (member (read msg) '(nil *BREAK *CANCEL*)); *EXIT* isn't an error condition
- (princ (strcat "\n** Error: " msg " **"))
- )
- (setvar 'Cmdecho 1)
- (princ)
- )
- (defun MT-Start () (setq *error* MT-Error) (setvar 'Cmdecho 0))
- (defun MT-End () (MT-Error ""))
- (defun MT-Exit () (exit))
如您所知,在工作空间的空白区域按Enter键和单击鼠标底部没有区别。
这就是上述限制。 |