这里有一个关于内部的快速示例:
- (defun c:pDel (/ GroupByNum _GetLocked lst->str ENT I LK OBJ PTLST SS)
- (vl-load-com)
- ;; Lee Mac ~ 02.04.10
- (defun GroupByNum (lst num / rtn)
- (setq rtn nil)
-
- (if lst
- (cons (reverse
- (repeat num
- (progn
- (setq rtn (cons (car lst) rtn)
- lst (cdr lst))
- rtn)))
- (GroupByNum lst num))))
-
- (defun _GetLocked (/ tdef lk)
- (while (setq tdef (tblnext "LAYER" (not tdef)))
- (if (= 4 (logand 4 (cdr (assoc 70 tdef))))
- (setq lk (cons (cdr (assoc 2 tdef)) lk)))))
-
- (defun lst->str (lst del / str)
- (setq str (car lst))
- (while (setq lst (cdr lst)) (setq str (strcat str del (car lst))))
- str)
-
- (while
- (progn
- (setq ent (car (entsel "\nSelect Polyline: ")))
- (cond ( (eq 'ENAME (type ent))
- (if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
- (progn
- (setq ptLst
- (GroupByNum
- (vlax-get
- (setq obj (vlax-ename->vla-object ent)) 'Coordinates)
- (if (eq "AcDbPolyline" (vla-get-ObjectName obj)) 2 3)))
- (if (cadr
- (sssetfirst nil
- (setq i -1 ss
- (ssget "_WP" ptLst
- (if (setq lk (_GetLocked))
- (list (cons -4 "<NOT")
- (cons 8 (lst->str lk ",")) (cons -4 "NOT>")))))))
- (if (progn
- (initget "Yes No")
- (not (eq "No" (getkword "\nDelete Objects? [Yes/No] <Yes> : "))))
- (while (setq ent (ssname ss (setq i (1+ i))))
- (entdel ent))
- (sssetfirst nil nil))
- (princ "\n** No Objects Found **")))
- (princ "\n** Object Must be a Polyline **"))))))
- (princ))
|