CAD标注巷道弯道的小程序(LISP源码)

在单位画中段开拓图的时候,弯道很多,有时候标注弯道需要一个上午,所以写了一个小程序,帮我偷懒,程序比较粗糙,但是能用^_^
(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””)
)

发表回复