在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))))(t nil))(setq txt_angle (rad->deg txt_angle))(if (>= txt_angle 360.0)(setq txt_angle (- txt_angle 360.0)))(defun draw1()(command"pline" sym_pt1 "w" 0.0 "" sym_pt3 pos_pt sym_pt2 "")(command"_style" "" "" "" txt_scale "" "" "" "")(command"Text" "J" "_MC" txt_cen txt_hgt txt_angle txt ""))(defun draw2()(command"pline" sym_pt3 "w" 0.0 "" pos_pt sym_pt2 "")(command"_style" "" "" "" txt_scale "" "" "" "")(command"Text" "J" "_MC" txt_cen txt_hgt txt_angle txt "")(command"circle" sym_cen sym_rad ""))(defun draw3()(command"pline" sym_pt3 "w" 0.0 "" pos_pt sym_pt2 "")(command"_style" "" "" "" txt_scale "" "" "" "")(command"Text" "J" "_MC" txt_cen txt_hgt txt_angle txt ""))(initget "Finished Unfinished Coated")(setq string (getkword"加工面/非加工面/涂层面 <F/U/C>:"))(cond((= string "Finished")(draw1))((= string "Unfinished")(draw2))((= string "Coated")(draw3))))(defun C:rgh()(rgh)(princ))(defun C:roughness()(rgh)(princ))程序的使用方法:1.运行Autocad2005等版本,首先点击窗口菜单中的“工具(T)”选项,然后从下拉菜单中选择Visual LISP编辑器,如图1所示,点击出现图2窗口。
图1图22.点击Visual LISP编辑器窗口菜单中“文件(F)”选项,然后从下拉菜单中选择新建文件(N),输入上述程序,保存名为nrgh.lsp 文件。
(见图3)图33. 点击Autocad2005等版本窗口菜单中的“工具(T)”选项,然后从下拉菜单中选择“AutoLISP(S)-加载(L)”,选择rgh.lsp文件,点击加载(L)。
窗口左下角出现“已成功加载rgh.lsp。
”即可使用。
(见图4)图44.在Autocad200 5等版本命令行中输入:rgh按回车键后,命令行出现提示“标注位置”。
在绘制的机械图中要绘出粗糙度符号的直线上选取一点用于放置粗糙度符号(该点将是粗糙度符号三角顶点放置点),随后命令行出现输入“符号方向”提示(见图5),依据粗糙度符号最长边在所画图形中需要绘制粗糙度符号的直线上的投影方向,选取投影方向任一点(这一点也必须在图形中要标注粗糙度的直线上),这样就确定了符号方向。
图55.接着Autocad2005等版本命令行出现“符号高度<5>”提示,同意默认值5,按回车键。