本帖最后由 llsheng_73 于 2015-8-4 13:24 编辑
 - (defun c:tt(/ ss i a e s)
- (if(setq i 0
- s(ssadd)
- ss(ssget'((0 . "lwpolyline")(-4 . "<or")(90 . 3)(90 . 4)(-4 . "or>"))))
- (progn
- (repeat(sslength ss)
- (setq e(ssname ss i)a(plinexy e)i(1+ i))
- (if(or(apply'or(mapcar'(lambda(x)(equal 160 x 1e-10))(isrectangle a)))
- (apply'or(mapcar'(lambda(x)(equal 349 x 1e-10))(istriangle a))))
- (setq s(ssadd e s))))
- (sssetfirst'nil s)))
- )
- (defun plinexy(e / a q m p p1);;;LWPolyline,POLYLINE顶点,去掉完全重合点
- (setq a(vlax-ename->vla-object e)
- q(vlax-safearray->list(vlax-variant-value(vla-get-Coordinates a)))
- m(if(=(vla-get-objectname a)"AcDb3dPolyline")'(setq p1(list (car q)(cadr q)(caddr q))q(cdddr q))
- '(setq p1(list (car q)(cadr q))q (cddr q))))
- (while q(eval m)
- (setq p(if(member p1 p)p(append p(list p1))))))
- (defun isrectangle(pt);;如果为矩形返回长X宽
- (IF(and(=(length pt)4)
- (equal(apply'-(mapcar'distance(cddr pt)pt))1e-10))
- (vl-sort(mapcar'distance(cdr pt)(cddr pt))'>))
- )
- (defun istriangle(pt);;如果为三角形返回边长
- (IF(and(=(length pt)3)
- (/=(car(trans(mapcar'-(car pt)(cadr pt))0(mapcar'-(last pt)(cadr pt))))0))
- (mapcar'distance pt(cons(last pt)pt)))
- )
|