本帖最后由 llsheng_73 于 2015-11-24 10:55 编辑
- (defun c:tt(/ e a b s i)
- (if(and(setq e(car(entsel)))
- (member(cdr(assoc 0(entget e)))'("LINE""ARC""CIRCLE""ELLIPSE""SPLINE""LWPOLYLINE""POLYLINE"))
- (vlax-method-applicable-p(setq e(vlax-ename->vla-object e))'getboundingbox))
- (progn(vla-getboundingbox e'a'b)
- (if(setq i 0 s(ssget"X"(list'(0 . "INSERT")'(2 . "A1")'(-4 . ">=,>=")(cons 10(vlax-safearray->list a))'(-4 . "<=,<=")(cons 10(vlax-safearray->list b)))));;2组里边的块名根据自己情况更换
- (progn
- (repeat(sslength s)
- (setq a(ssname s i)p(cdr(assoc 10(entget a))))
- (if(equal(vlax-curve-getClosestPointTo e p)p 1e-8);;块插入点在线上
- (setq i(1+ i))
- (setq s(ssdel a s))))
- (if(>(sslength s)0)(sssetfirst'nil s)
- (setq s nil))
- (alert(strcat(if s(itoa(sslength s))"0")"个图块被选出!\n接下来该你表演"))
- ;;;
- )))))
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代替曲线,然而这并不是最主要的,更重要的是另一个原因,进行栏选所用的点不能产生自相交,因此对于drawing1中的那个自相交的样条曲线将无法得到希望的选择结果
|