(setq objPolygon (vlax-ename->vla-object entPolygon))
(setq ss2 (ssget "_WP" ptlst))
where ptlst is variable containing point lists obtained from your polygon entity (setq ptlst (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) (entget polygon))))
... Then to obtain common sel.set, you can use this : (setq ss (ACET-SS-INTERSECTION ss1 ss2))
consisting of all those objects which are present in SelSetTotal and crossing or within the polygon object defined by variable objPolygon.
(defun c:test ( / app ent enx lst sel )
(if
(and
(setq ent (car (entsel "\nSelect polyline: ")))
(= "LWPOLYLINE" (cdr (assoc 0 (setq enx (entget ent)))))
)
(progn
(setq app (vlax-get-acad-object)
lst (mapcar '(lambda ( x ) (trans (cdr x) ent 0)) (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) enx))
)
(vla-zoomwindow app
(vlax-3d-point (apply 'mapcar (cons 'min lst)))
(vlax-3d-point (apply 'mapcar (cons 'max lst)))
)
(setq sel
(ssget "_WP" (mapcar '(lambda ( x ) (trans x 0 1)) lst)
'(
(0 . "TEXT,LINE")
)
)
)
(vla-zoomprevious app)
(sssetfirst nil sel)
)
)
(princ)
)
(vl-load-com) (princ)
(defun c:test ()
(setq ss1 (ssget "_:L"))
(setq ss2 (ssget "_:L"))
(setq Start (getvar "Millisecs"))
(repeat 250 (setq ss (ACET-SS-INTERSECTION ss1 ss2)))
(setq End (getvar "Millisecs"))
(setq yu (- End Start))
(setq yu (/ yu 1000.00))
(princ "\nTime Taken to Run in ACET Method : ")
(princ yu)
(princ " seconds \n")
(setq Start (getvar "Millisecs"))
(repeat 250 (setq ss (kdub:ssintersect ss1 ss2)))
(setq End (getvar "Millisecs"))
(setq yu (- End Start))
(setq yu (/ yu 1000.00))
(princ "\nTime Taken to Run in KDUB Method : ")
(princ yu)
(princ " seconds \n")
(princ)
)
(defun kdub:ssintersect (ss1 ss2 / ss l1 l2)
(setq ss (ssadd))
(cond ((and ss1 ss2)
(setq l1 (kdub:ss->entlist ss1)
l2 (kdub:ss->entlist ss2)
)
(foreach x (vl-remove-if-not '(lambda (x) (member x l2)) l1)
(ssadd x ss)
)
)
(t (setq ss nil))
)
ss
)
(defun kdub:ss->entlist (ss / i returnval)
(if (and ss (< 0 (sslength ss)))
(setq returnval (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
)
returnval
)
Select objects: Specify opposite corner: 364 found
Time Taken to Run in ACET Method : 2.527 seconds
Time Taken to Run in KDUB Method : 5.102 seconds
; 1 form loaded from #<editor "K:/TestForum/ss stuff.LSP">
_$
Benchmarking [M.P. 2005 < revised kdub 2005>] ........
Elapsed milliseconds for 32 iteration(s)/ relative Timing :
(KDUB:SSINTERSECT SS1 SS2).........686 / 2.0000 <slowest>
(ACET-SS-INTERSECTION SS1 SS2).....390 / 1.1370
(KDUB:SSINTERSECT2 SS1 SS2)........343 / 1.0000 <fastest>
You might be able to squeeze out a little extra performance by only iterating over the smallest set, e.g.:
The ACET function are pre-compiled this is where
you get the difference.
If you do compile Kerry's function they may end up being faster.
ymg