(defun c:knicken( / SEG SELECTED) (defun xordraw(p1 p2 p3 / ) (grdraw p1 p3 -1) (grdraw p2 p3 -1) ) (defun get-pt(p1 p2 / p pp) (setq pp(grread'T 1)) (xordraw p1 p2(cadr pp)) (while(= 5(car(setq p(grread 'T 1)))) (xordraw p1 p2(cadr pp)) (xordraw p1 p2(cadr p)) (setq pp p) ) (xordraw p1 p2(cadr pp)) (if(= 3(car p))p) ) (defun line( / p3 p10 p11) (if(setq p3(cadr(get-pt(setq p10(cdr(assoc 10 edata)))(setq p11(cdr(assoc 11 edata)))))) (progn (entmake(subst(cons 10 p3)(assoc 10 edata)edata)) (entmod(subst(cons 11 p3)(assoc 11 edata)edata)) ) ) ) (defun lwpolyline( / vtcs seg p3 p10 p11 n) (setq seg(lwgetsegno edata(setq vtcs(lwgetvtcs edata))pp)) (setq n 0) (repeat 4 (setq vtcs(append vtcs(list(nth n vtcs)))) (setq n(1+ n)) ) (setq p3 (cadr (get-pt (setq p10(cdr(nth(* 4 seg)vtcs))) (setq p11(cdr(nth(* 4(1+ seg))vtcs))) ) ) ) (addvtx edata vtcs p3 seg) ) (defun addvtx(edata vtcs p10 nr / result) (while(/=(caar edata)10) (setq result(cons(car edata)result)edata(cdr edata)) ) (repeat(* 4(1+ seg)) (setq result(cons(car edata)result)) (setq edata(cdr edata)) ) (setq result (append(reverse result) (list (cons 10 p10) (nth(+ 1(* 4(1+ seg)))vtcs) (nth(+ 2(* 4(1+ seg)))vtcs) (nth(+ 3(* 4(1+ seg)))vtcs) ) ) ) (setq edata(append result edata)) (setq edata (subst (cons 90(1+(cdr(assoc 90 edata)))) (assoc 90 edata) edata ) ) (entmod edata) ) (defun lwgetvtcs(edata / ) (vl-remove-if-not (function(lambda(v / )(member(car v)'(10 40 41 42)))) edata ) ) (defun getdistance (ent pt / ) (vlax-curve-getDistAtPoint(vlax-ename->vla-object ent)pt) ) (defun lwgetsegno(edata vtcs pp / result count dist) (setq count -1) (setq dist(getdistance ent pp)) (while(not result) (if(or(null vtcs)(>(getdistance ent(cdar vtcs))dist)) (setq result count) (setq count(1+ count)vtcs(cddddr vtcs)) ) ) result ) ;; Hauptprogramm ;(StartErrorHandler ...) (setq selected(entsel)) (setq ent(car selected)) (setq edata(entget ent)) (setq pp(vlax-curve-getClosestPointTo ent(cadr selected))) (if(member(cdr(assoc 0 edata))'("LINE""LWPOLYLINE")) ((eval(read(cdr(assoc 0 edata))))) ) ;(EndErrorHandler ...) (princ) )