I think that this function by GP isn't totally waterproof... I've tested it on A2014 with both variants (vla-checkinterference vla-obj1 vla-obj2 t t) and (vla-checkinterference vla-obj1 vla-obj2 :vlax-true :vlax-true) and it seems that it doesn't function... After some time I discovered that :vlax-false :vlax-false variant works, but sometime it skips obvious interference, so when run twice it works... I've modified original code to suit and for older versions of ACAD, where I had no problems... So please, verify on A2014, A2015 is it working OK now - I don't have A2015 installed... And if something's wrong please reply... M.R.
(defun c:chk3DSOLint ( / *error* sol_ el sol n newrel sol1 interf sol_interf ss )
(vl-load-com)
(defun *error* ( msg )
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(if msg (prompt msg))
(princ)
)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(if (and
(princ "\nSelect 3D SOLIDS")
(progn
(while (or (null sol_) (< (sslength sol_) 2))
(setq sol_ (ssget "_:L" '((0 . "3DSOLID"))))
(cond
( (null sol_) (prompt "\nEmpty sel. set... Try selecting again...") )
( (< (sslength sol_) 2) (prompt "\nSelected one 3D SOLID, please select more... Try selecting again...") )
)
)
t
)
)
(progn
(setq el (entlast))
(repeat (setq n (sslength sol_))
(setq sol (cons (ssname sol_ (setq n (1- n))) sol))
)
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-checkinterference (list (vlax-ename->vla-object (car sol)) (vlax-ename->vla-object (cadr sol)) :vlax-true)))
(setq newrel t)
(if (not (eq el (entlast)))
(entdel (entlast))
)
)
(setq sol1 sol)
(setq interf 0)
(if newrel
(progn
(mapcar
'(lambda (a)
(mapcar
'(lambda (b)
(if (vla-CheckInterference (vlax-ename->vla-object a) (vlax-ename->vla-object b) :vlax-true 'test)
(progn
(setq sol_interf (cons a sol_interf))
(setq sol_interf (cons b sol_interf))
(entdel (entlast))
(setq interf (1+ interf))
)
)
)
(setq sol1 (cdr sol1))
)
)
(reverse (cdr (reverse sol)))
)
)
(progn
(mapcar
'(lambda (a)
(mapcar
'(lambda (b)
(if (vla-CheckInterference (vlax-ename->vla-object a) (vlax-ename->vla-object b) :vlax-true)
(progn
(setq sol_interf (cons a sol_interf))
(setq sol_interf (cons b sol_interf))
(entdel (entlast))
(setq interf (1+ interf))
)
)
)
(setq sol1 (cdr sol1))
)
)
(reverse (cdr (reverse sol)))
)
)
)
(setq ss (ssadd))
(foreach ent sol_interf (ssadd ent ss))
(sssetfirst nil ss)
(princ
(strcat
"\nNumber of 3D SOLIDS : " (itoa (sslength ss))
" - Number of interferences : "(itoa interf)
)
)
)
)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)
Thanks, G.P.