Assuming that polylines don't have arcs, this should do it :
Code:
(vl-load-com)
(defun c:selbycurlaycolplfence ( / curlay curcol ss n pl plvla plcoords pt plptlst ssflst )
(setq curlay (getvar 'clayer))
(setq curcol (getvar 'cecolor))
(cond ((eq curcol "BYLAYER") (setq curcol 256))
((eq curcol "BYBLOCK") (setq curcol 0))
(t (setq curcol (atoi curcol)))
)
(command "._zoom" "_E")
(setq ss (ssget "_X" (list (cons 0 "*POLYLINE") (cons 100 "AcDb2dPolyline") (cons 8 curlay) (cons 62 curcol))))
(repeat (setq n (sslength ss))
(setq pl (ssname ss (setq n (1- n))))
(setq plvla (vlax-ename->vla-object pl))
(setq plcoords (vlax-safearray->list (vlax-variant-value (vla-get-coordinates plvla))))
(if (eq (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
(progn
(repeat (/ (length plcoords) 2)
(setq pt (list (car plcoords) (cadr plcoords) 0.0))
(setq plcoords (cddr plcoords))
(setq plptlst (cons pt plptlst))
)
)
(progn
(repeat (/ (length plcoords) 3)
(setq pt (list (car plcoords) (cadr plcoords) (caddr plcoords)))
(setq plcoords (cdddr plcoords))
(setq plptlst (cons pt plptlst))
)
)
)
(if (eq (cdr (assoc 70 (entget pl))) 1) (setq plptlst (cons (last plptlst) plptlst)))
(set (read (strcat "ssf" (itoa n))) (ssget "_F" plptlst))
(setq plptlst nil)
(ssdel pl (eval (read (strcat "ssf" (itoa n)))))
)
(repeat (setq n (sslength ss))
(setq ssflst (append (list (read (strcat "ssf" (itoa (setq n (1- n)))))) ssflst))
)
(sssetfirst nil (acet-ss-union (eval (cons 'list ssflst))))
(foreach ssf ssflst
(set ssf nil)
)
(princ)
)
(defun c:scpf nil (c:selbycurlaycolplfence))
(prompt "\nShortcut for c:selbycurlaycolplfence is c:scpf")
(princ)
M.R.