I dont know how to edit this lisp i found...
I like to remove the need to select polylines.
instead of selecting... can it be done to select whats ever is visible on screen???
(defun LD:ss2lst( ss opt / cnt lst)
(cond ( (and ss (= (type ss) 'PICKSET))
(repeat (setq cnt (sslength ss)) (setq lst (cons (ssname ss (setq cnt (1- cnt))) lst)))
(if opt (setq lst (mapcar 'vlax-ename->vla-object lst)))
)
);end_cond
);end_defun
(defun LD:223 (lst z / a) (setq a (reverse (cons z (reverse lst)))))
(defun LD:322 (lst / a) (setq a (reverse (cdr (reverse lst)))))
(defun LD:trp (pt1 pt2 obj / xobj ent v xpt)
(setq xobj (vlax-invoke *c_spc* 'addxline pt1 pt2)
ent (vlax-vla-object->ename obj)
v (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))
xpt (LD:322 (vlax-invoke xobj 'intersectwith obj acextendotherentity))
);end_setq
(if (> (distance xpt (car v)) (distance xpt (last v)))
(setq v (reverse (cons xpt (cdr (reverse v)))))
(setq v (cons xpt (cdr v)))
);end_if
(vla-delete xobj)
(vlax-put obj 'coordinates (apply 'append v))
);end_defun
(vl-load-com)
(defun c:xtr ( / ss lst flst xlst ele v1 v2 xobj obj ent v3 xpt nlst)
(or *c_doc* (setq *c_doc* (vla-get-activedocument (vlax-get-acad-object))))
(or *c_spc* (setq *c_spc* (vlax-get-property *c_doc* (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))))
(while (or (not ss) (/= (sslength ss) 4))
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(cond ( (not ss) (alert "Nothing Selected"))
( (/= (sslength ss) 4) (alert "Only Select 4 LWPolylines"))
);end_cond
);end_while
(setq lst (LD:ss2lst ss t))
(foreach x lst (if (= (vlax-get-property x 'color) 256) (setq flst (cons x flst)) (setq xlst (cons x xlst))))
(setq lst (mapcar 'vlax-vla-object->ename xlst))
(setq ele (cdr (assoc 38 (entget (car lst)))))
(setq v1 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car lst)))))
(setq v2 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (cadr lst)))))
(if (> (distance (car v1) (car v2)) (distance (car v1) (last v2))) (setq v2 (reverse v2)))
(LD:trp (LD:223 (car v1) ele) (LD:223 (car v2) ele) (car flst))
(LD:trp (LD:223 (car v1) ele) (LD:223 (car v2) ele) (cadr flst))
(LD:trp (LD:223 (last v1) ele) (LD:223 (last v2) ele) (car flst))
(LD:trp (LD:223 (last v1) ele) (LD:223 (last v2) ele) (cadr flst))
(foreach x xlst (vla-delete x))
(setq lst (mapcar 'vlax-vla-object->ename flst))
(setq v1 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car lst)))))
(setq v2 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (cadr lst)))))
(if (> (distance (car v1) (car v2)) (distance (car v1) (last v2)))
(setq nlst (append v1 v2))
(setq nlst (append v1 (reverse v2)))
);end_if
(vlax-put (car flst) 'coordinates (apply 'append nlst))
(vlax-put-property (car flst) 'closed :vlax-true)
(vla-delete (cadr flst))
(princ)
);end_defun
(vl-load-com)
while searching i found this function... maybe its possible, but i dont know how to incorporate it.
(defun LD:selonscreen ( / i rtn ss)
(repeat
(setq i
(sslength
(cond
((setq ss
(ssget "_C" ; <-- Crossing Window (only accept selection visible on screen by default)
(getvar "EXTMIN")
(getvar "EXTMAX")
'((0 . "LWPOLYLINE")) ; <-- Your filters
)
)
)
((ssadd))
)
)
)
(setq rtn (cons (ssname ss (setq i (1- i))) rtn))
)
(reverse rtn)
)
i just googled this function so IDK if its possible...
i just want to select the 4 lines visible on screen, instead of selecting it manually