乐于分享
好东西不私藏

【源码】圆弧端点切线、切线交点

【源码】圆弧端点切线、切线交点
        用VLISP编写程序实现功能:根据选取的圆弧绘制圆弧端点处的切线,求出切线交点及圆弧相关信息。
弧段示意图
;;;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\"进行切线交点标注")
视频
已关注
关注
重播 分享