
;;;2026/6/16;;;XUYANYAN;;;选择圆弧绘制圆弧切线交点并标注交点信息(defun c:ACJD(/ arcent centpt arcR strang endang strpt endpt cenang cenang* ajdpt ajdT jdaz arcinf)(setq sign(lambda(x)(cond((> x 0)1)((< x 0)-1)(t 0))))(while(and(setq arcent(car(entsel"\n选择圆弧 <Exit>:")))(=(cdr(assoc 0(setq Arcode(entget arcent))))"ARC"))(setq centpt(cdr(assoc 10 Arcode))arcR(cdr(assoc 40 Arcode))strang(cdr(assoc 50 Arcode))endang(cdr(assoc 51 Arcode))strpt(polar centpt strang arcR)endpt(polar centpt endang arcR)cenang(-(cdr(assoc 51 Arcode))(cdr(assoc 50 Arcode)))cenang(if(< cenang 0)(+ cenang(* 2 pi))cenang))(if(< cenang pi)(setq ajdpt(polar centpt(setq jdaz(+ strang(* 0.5 cenang)))(/ arcR(cos(* 0.5 cenang))))ajdT(* arcR(/(sin(* 0.5 cenang))(cos(* 0.5 cenang)))))(setq cenang*(-(* 2 pi)cenang)ajdpt(polar centpt(setq jdaz(+ endang(* 0.5 cenang*)))(/ arcR(cos(* 0.5 cenang*))))ajdT(* arcR(/(sin(* 0.5 cenang*))(cos(* 0.5 cenang*))))))(entmake(append(list'(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)'(8 . "切线")'(62 . 1))(mapcar'(lambda(pt)(cons 10 pt))(list strpt ajdpt endpt))))(setq arcinf(strcat "N=" (rtos(cadr ajdpt) 2 4)"\\P""E=" (rtos(car ajdpt) 2 4)"\\P""a="(angtos cenang 1 5)"\\P""R="(rtos arcR 2 3)" L="(rtos(* arcR cenang)2 3)"\\P""T="(rtos ajdT 2 3)" E="(rtos(-(distance centpt ajdpt)arcR)2 3)))(entmake(append(list '(0 . "MTEXT")'(100 . "AcDbEntity")'(100 . "AcDbMText")'(7 . "HZ")(cons 1 arcinf)(cons 10(mapcar'+ ajdpt(list(-(*(sign(cos jdaz))11)10.4)(+(*(sign(sin jdaz))6.5)5.9))))(cons 40 1.5)(cons 90 18)(cons 63 256)(cons 45 1.4)))))(princ))(prompt"\n输入命令\"ACJD\"进行切线交点标注")
已关注
关注
重播 分享 赞
夜雨聆风