试试这个:
- (defun c:test (/ lays fnd sn ss dis div s lst lay l)
- ;; Tharwat - 07.Dec.2016 ;;
- (princ "\nPick on closed polyline :")
- (if (setq lays "Layer1,Layer2,Layer3"
- fnd 0
- s (ssget "_+.:S:E"
- '((0 . "*POLYLINE") (8 . "Layer4") (-4 . "&=") (70 . 1))
- )
- )
- (progn
- (setq sn (ssname s 0)
- dis (/ (vlax-curve-getdistatparam
- sn
- (fix (vlax-curve-getendparam sn))
- )
- 100.
- )
- div dis
- )
- (repeat 100
- (setq l (cons (vlax-curve-getpointatdist sn dis) l))
- (setq dis (+ div dis))
- )
- (if (setq
- ss (ssget "_WP" l (list '(0 . "*POLYLINE") (cons 8 lays)))
- )
- (while (and (/= fnd 3)
- (setq sn (ssname ss 0))
- )
- (and (wcmatch (setq lay (cdr (assoc 8 (entget sn)))) lays)
- (not (member lay lst))
- (setq lst (cons lay lst))
- (setq fnd (length lst))
- )
- (ssdel sn ss)
- )
- )
- (cond
- ((= fnd 3) (princ "\nAll layers are found "))
- ((>= fnd 1)
- (princ
- (strcat
- "\nPolylines' layers ["
- (vl-string-right-trim
- ","
- (apply 'strcat (mapcar '(lambda (u) (strcat u ",")) lst))
- )
- "]."
- )
- )
- )
- ((princ "\nNo polylines found on specified layers <!>"))
- )
- )
- )
- (princ)
- )(vl-load-com)
|