本帖最后由 llsheng_73 于 2015-8-6 01:58 编辑
 - (defun c:tt(/ pt p la)
- (foreach x(sstoes(ssget'((0 . "*polyline")(-4 . ">=")(90 . 4))))
- (if(>(last(isrectangle(setq pt(optimpl(plinexy x)))))60)
- (progn
- (makepl(list(setq la(cdr(assoc 8(entget x)))p(offsetpt pt -30 t))1 0 0 la 138))
- (mapcar'(lambda(x)(xxxx x(*(sqrt 2)15)(angle(car p)(cadr p))la))(offsetpt pt -15 t))
- )))
- (princ))
- (defun SstoEs(ss / a lst)
- (if(and ss(=(type ss)'pickset))
- (repeat(setq a(sslength ss))
- (setq a(1- a)lst(cons(ssname ss a)lst)))))
- (defun makepl(argments);;by Llsheng_73
- (entmakex(append(mapcar'cons'(0 100 100 43 370 8 62 39 6)(append'("LWPOLYLINE""AcDbEntity""AcDbPolyline")(cddr argments)))
- (cons(cons 90(length(car argments)))
- (cons(cons 70(if(cadr argments)(cadr argments)0))(mapcar'(lambda(x)(cons 10 x))(car argments)))))))
- (defun xxxx(p r ang la / pt)
- (makepl(list(setq pt(mapcar'(lambda(x)(polar p(+(* x pi)ang) r))'(0.25 0.75 1.25 1.75)))1 0 0 la 8))
- (mapcar'(lambda(x y)(makepl(list(list x y)1 0 0 la 250)))(cddr pt)pt))
- (defun plinexy(e / a q m p p1);;by Llsheng_73
- (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 Ptoline(pt p1 p2)
- (trans(mapcar'- pt p1)0(mapcar'- p2 p1)))
- (defun optimpl(pt / a i b c);;by Llsheng_73
- (setq i 0 a(append(cons(last pt)pt)(list(car pt))))
- (vl-remove-if'(lambda(x)(setq i(1+ i)b(nth(1- i)a)c(nth(1+ i)a)x(Ptoline x b c)x(and(equal(car x)0 1e-10)(< 0(last x)(distance b c)))))pt))
- (defun Pldir(pts);;by Llsheng_73
- (<(apply'+(mapcar'(lambda(x y)(-(*(car x)(cadr y))(*(car y)(cadr x))))(cons(car pts)pts)pts))0))
- (defun offsetpt(pt d flag / fx m n pi15 pi2 d1 p1 p0 p q0 q2 q22 q1 q pt1 pt2 ang1 ang2);;by Llsheng_73
- (setq m(length pt)fx(if flag(PlDir pt))pt(if fx(reverse pt)pt)
- d1(abs d)
- pi15(*(if(> d 0)1.5 -1.5)pi)
- pt2(mapcar'(lambda(y x z)
- (if(setq ang1(+(angle y x)pi15)
- ang2(+(angle x z)pi15)
- q(inters(polar y ang1 d1)(polar x ang1 d1)(polar x ang2 d1)(polar z ang2 d1)nil))
- q(polar x ang2 d1)))(append(list(last pt))pt)pt(cdr(append pt(list(car pt)))))
- pt2(cond((< m 2)pt)
- ((= m 2)(list(polar(car pt)ang1 d1)(polar(last pt)ang1 d1)))
- (flag pt2)
- (t(cons(polar(car pt)(+(angle(car pt)(cadr pt))pi15)d1)
- (cdr(reverse(cons(polar(last pt)(+(angle(cadr(reverse pt))(last pt))pi15)d1)(cdr(reverse pt2)))))))))
- (if fx(reverse pt2)pt2))
- (defun isrectangle(pt);;by Llsheng_73
- (IF(and(=(length pt)4)
- (equal(apply'-(mapcar'distance(cddr pt)pt))0 1e-10))
- (vl-sort(mapcar'distance(cdr pt)(cddr pt))'>)))
|