在AutoCAD中基于LISP程序简易标注粗糙度

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)))

)

相关文档
最新文档