在单位画中段开拓图的时候,弯道很多,有时候标注弯道需要一个上午,所以写了一个小程序,帮我偷懒,程序比较粗糙,但是能用^_^
(defun c:cr (/)
(prompt “\n please enjoy it”)
;;; 选取对象
(setq en1 (entsel “\n 请选取轨道中心线弧线:”))
;;; 取得对象属性列表
(setq en1_data (entget (car en1)))
;;; 提取标注半径R:
(setq radius (fix (atof (rtos (* 1000 (cdr (assoc 40 en1_data))) 2 0))))
;;; 提取起至角度50和终止角度51以及计算夹角以及T值
(setq ang1_rad (cdr (assoc 50 en1_data))) ;ang1_rad是起至角度的弧度表示
(setq ang2_rad (cdr (assoc 51 en1_data))) ;ang2_rad是终止角度的弧度表示
(setq ang3_rad (abs (- ang2_rad ang1_rad))) ;ang3_rad是夹角的弧度表示
(setq ang4 (/ (* ang3_rad 180) pi)) ;ang4是夹角的度数表示
(setq ang9 (/ ang3_rad 2)) ;ang9是用弧度表述的夹角的半角
(setq tg (/ (sin ang9) (cos ang9))) ;计算ang9的正切
(setq tt (fix (atof (rtos (* tg radius)))))
(setq ang5 (fix ang4)) ;ang5是角度的整数部分,既标注的度数部分
(setq ang6 (* (- ang4 ang5) 60))
(setq ang7 (fix ang6)) ;ang7是标注的分数部分,rtos是四舍五入
(setq ang8 (fix (atof (rtos (* (- ang6 ang7) 60) 2 0))));ang8是标注的秒数部分
;;; 计算弧长K值
(setq 2pi (* pi 2))
(setq d (* radius 2))
(setq c (* d pi))
(setq k (fix (atof (rtos (/ (* c ang3_rad) 2pi) 2 0))))
;;; 标注
;;; (setvar “cmdecho” 0)
(setq pt1 (getpoint “\n请选择文本框左下点:”))
(setq x2 (+ (car pt1) 15))
(setq y2 (+ (cadr pt1) 17))
(setq pt2 (list x2 y2))
(setq ang55 (itoa ang5))
(setq ang77 (itoa ang7))
(setq ang88 (itoa ang8))
(setq radius_new (itoa radius))
(setq tt_new (itoa tt))
(setq k_new (itoa k))
(setq ang_new (strcat “α=” ang55 “°” ang77 “′” ang88 “&Prime”))
(setq r (strcat “R=” radius_new))
(setq ttt (strcat “T=” tt_new))
(setq kkk (strcat “K=” k_new))
(command “mtext” pt1 pt2 ang_new r ttt kkk””)
)