在AutoCAD中基于LISP程序简易标注粗糙度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在AutoCAD中基于AutoLISP程序简易标注粗糙度
陕西关中工具制造有限公司(陕西凤翔 721400)张科岐王建卫
对经常使用AutoCAD绘制二维机械图的用户来说,标注表面粗糙度是一件烦琐的事情。常用的方法是先画好粗糙度的符号,再将粗糙度值定义为属性,最后将符号和粗糙度定义为块。标注时插入这个块,按提示输入粗糙度值完成。笔者结合自己在工作中的实际经验,利用AutoCAD提供的AutoLISP程序二次开发功能编写了一个粗糙度标注程序。使用该程序标注粗糙度,操作简单、快捷、准确、美观。现将程序内容及使用方法介绍如下,供大家参考。
程序全文如下:
(defun rad->deg(rad)
(/ (* rad 180.0) pi)
)
(defun Deg->Rad(Deg)
(* pi (/ Deg 180.0))
)
(defun rgh()
(setvar "CMDECHO" 1)
(setq svar_old (getvar "osmode" ))
(setq svar_new 0)
(setvar "osmode" svar_new)
(setq pos_pt (getpoint"\n标注位置:"))
(setq sym_dir (getpoint"\n符号方向:"))
(setq sym_hgt (getreal"\n符号高度<5>:"))
(setq txt (getstring"\n数值大小<3.2>:"))
(if (= txt "")
(setq txt "3.2")
)
(setq txt_hgt(getreal"\n字符高度<2.5>:"))
(if (= txt_hgt nil)
(setq txt_hgt 2.5)
)
(if (= sym_hgt nil)
(setq sym_hgt 5.0)
)
(setq sym_lgt (/ sym_hgt (cos (/ pi 6.0))))
(setq sym_angle (angle pos_pt sym_dir))
(setq sym_pt1 (polar pos_pt (+ (/ pi 3.0) sym_angle) (* 0.5 sym_lgt)))
(setq sym_pt2 (polar pos_pt (+ (/ pi 3.0) sym_angle) sym_lgt))
(setq sym_pt3 (polar pos_pt (+ (/ (* 2 pi) 3.0) sym_angle) (* 0.5 sym_lgt))) (setq txt_pt1 (polar pos_pt (+ (/ (* 2 pi) 3.0) sym_angle)
(/ (+ (* 0.5 (+ sym_hgt txt_hgt)) 1.0)
(cos (/ pi 6.0))
)
)
)
(setq sym_ptx1 (car sym_pt3 ))
(setq sym_ptx2 (car pos_pt ))
(setq sym_ptx3 (car sym_pt1 ))
(setq sym_pty1 (cadr sym_pt3))
(setq sym_pty2 (cadr pos_pt))
(setq sym_pty3 (cadr sym_pt1))
(setq sym_cen (list
(/ (+ sym_ptx1 sym_ptx2 sym_ptx3) 3.0)
(/ (+ sym_pty1 sym_pty2 sym_pty3) 3.0)
)
)
(setq sym_rad (*
(/ (sqrt 3.0) 6.0)
sym_lgt 0.5)
)
(setq txt_pt2 (polar pos_pt (+ (/ pi 3.0) sym_angle)
(/ (+ (* 0.5 (+ sym_hgt txt_hgt)) 1.0)
(cos (/ pi 6.0))
)
)
)
(setq txt_dist1 (distance txt_pt1 txt_pt2))
(setq txt_dist2 (* txt_hgt (strlen txt)))
(setq txt_scale (/ (- txt_dist1 1.0) txt_dist2))
(setq txt_xpt1 (car txt_pt1))
(setq txt_ypt1 (cadr txt_pt1))
(setq txt_xpt2 (car txt_pt2))
(setq txt_ypt2 (cadr txt_pt2))
(setq txt_cenx (/ (+ txt_xpt1 txt_xpt2) 2.0))
(setq txt_ceny (/ (+ txt_ypt1 txt_ypt2) 2.0))
(setq txt_cen (list txt_cenx txt_ceny))
(cond
((<= sym_angle (* 0.5 pi))
(setq txt_angle sym_angle)
)
((and (> sym_angle (* 0.5 pi)) (<= sym_angle pi))
(setq txt_angle (+ sym_angle pi))
)
((and (> sym_angle pi) (<= sym_angle (* 1.5 pi)))
(setq txt_angle (+ sym_angle pi))
)
((and (> sym_angle (* 1.5 pi)) (<= sym_angle (* 2.0 pi)))
(setq txt_angle (- sym_angle (* pi 2.0)))
)