AutoCAD中尺寸公差的自动标注.doc
AutoCAD中尺寸公差的自动标注 AutoCAD中尺寸公差标注很麻烦,本文给出一短小AutoLISP程序,实现了公差值的自动标准,通过鼠标两次选择即可完成其操作,使用起来非常方便、快捷。 AutoCAD在用于机械设计时,公差标注有两种方法;其一是通过DIM参数设定完成,但参数设定繁琐,速度也慢,每一个不同公差值都要设定一次,在R120中名义尺寸与公差值的小数点位数相同使名义尺寸显得累赘R130对此作了改进;其二是用TEXT指令直接写入,但速度也慢,字的位置也不易写准,常需用MOVE指令移动一次。上述两种方法都需在作图时备公差数值表,先查表后标注,因此在尺寸公差标注上所花时间很多。 笔者用AutoLisp编写了一尺寸公差自动标注程序,使用效果良好,速度也快,调用时仅两次操作即可完成首次操作选择公差等级;再次操作选择被标注尺寸即可完成尺寸公差的自动标注。程序由四部分组成输入公差等级自动查表;选取被标注尺寸并进行相应处理;尺寸大小分类并查取上下偏差值;公差值写入。若将该指令加入菜单后操作起来将更方便,即将公差等级符号如H7、b6、r6、JS7等做成幻灯片在菜单上调用。 一、输入公差等级和查表 在菜单上选择了公差标准条目后、屏幕上出现相应幻灯片如图示当选取相应公差等级的项目后,完成了两个指令输入首先给出了公差等级实际上是给出了在公差值表中该等级的相应行号n值;其次是启动了公差标准Lisp程序。Lisp程序启动后,打开公差值表Tole.TXT使用repeat函数在公差值表中连续读取一行数据,至直与所标公差等级相应的第n行为止。 若所标公差为H8,则菜单上相应行内容为 [DANLH8]CPsetg n 3tolerance 若所标公差为JS6,则菜单上相应行内容为 [DANJS6]CPsetg n 10tolerance 公差标注幻灯片 注DAN为幻灯片库名 DAN.SLB,LH8、JS6为幻灯片名LH8.SLD和JS6.SLP,tolerance为公差标准Lisp程序指令名 若不做幻灯片则在启动Lisp前先键入Lisp变量n的值。为使标注更方便,操作当前层自动换至尺寸标注层DIM层。 二、选取被标注尺寸并进行处理 根据Lisp提示在图形中选取被标注尺寸,通过相应处理,得到了该尺寸的数值、字体高度、位置、角度等留作备用,使用的函数是entget和assoc。在获取被标注尺寸时,使用了Substr函数将圆标注尺寸前面的R、r、Φ隐去便于后续数值大小判别。同时还判别了该尺寸是否带有小数点,可使公差值写入时位置更准确,因为小数点所占不到一个字宽。 三、尺寸大小分类并获取相应上下限偏差值 在第一步查表所得的数据行含有该公差等级中的全部上下限数值GB1801-79表中的一列结合第二步获取的被标注尺寸数值,本步即可查出被标注尺寸的上下限偏差值,选用Cond函数判别偏差值所处位置,再用Substr函数将其读出,如若被标注尺寸为40,则上偏差值为第75字符起的6个字符,下偏差值为第82字符起的6个字符,要求Tole.TXT数据表应竖列整齐。 四、公差值写入 用TEXT指令将公差值写入,其写入位置依据名义尺寸的位数及是否有小数点算出,角度字高也随名义尺寸变化。对JS级公差作特殊处理n10、11、12*。 为了使Lisp具有通用性,对绝对值公差如0.01 0、0.02 0、0 0.01、*0.01 等也作了考虑,因为这些公差常用的不多,直接写入了Lisp程序。程序中n从40起,数据表中并没有第40行以及后续行。 该Lisp程序不大,但函盖了全部机械设计中的公差标注类型如相对公差国标、绝对公差、一般尺寸、半径尺寸。为了使标注美观还考虑了小数点,使用了While函数可对同公差等级的尺寸连续标注。 五、几点说明 1 由于需获取尺寸标注的名义尺寸,故在尺寸标注前DIMASO应设定为DFF,否则取不到尺寸数值。 2 程序是以字符位置取上、下限偏差,故公差数值表tole.TXT中应整齐,只能用纯文本编辑软件编写如EDIT。 3 幻灯片编排可根据使用频度来安排,本人是用AutoCAD进行模具设计,故幻灯片第一页20个做了上述排序,读者可根据实际情况作调整。 4本程序在AutoCAD R11.0 R12.0、R13.0上通过,源程序和公差值表如下 defun ctolerance setq txt open “tole.txt“ “r“ repeat n setq tols read-line txt close txt setvar “echo“ 0 command “layer“ “s“ “dim“ ““ while T setq obj entget car entsel setq posi assoc 10 obj setq txth cdr assoc 40 obj setq toleh * 0.6 txth setq angr cdr assoc 50 obj setq angd * / angr pi 180 setq dim cdr assoc 1 obj setq ln strlen dim if substr dim 1 1 “R“ setq dim substr dim 2 - ln 1 if substr dim 1 1 “r“ setq dim substr dim 2 - ln 1 if substr dim 1 1 ““ setq dim substr dim 4 - ln 3 ln - ln 2 setq dimt atof dim setq lupr getvar “luprec“ setvar “luprec“ 0 if strlen dim strlen rtos atoi dim setq ln ln 0.7 setvar “luprec“ lupr cond and dimt 0 setq st1 5 st2 12 and dimt 3 setq st1 19 st2 26 and dimt 6 setq st1 33 st2 40 and dimt 10 setq st1 47 st2 54 and dimt 18 setq st1 61 st2 68 and dimt 30 setq st1 75 st2 82 and dimt 50 setq st1 89 st2 96 and dimt 80 setq st1 103 st2 110 and dimt 120 setq st1 117 st2 124 and dimt 180 setq st1 131 st2 138 and dimt 250 setq st1 145 st2 152 and dimt 315 setq st1 159 st2 166 and dimt 400 setq st1 173 st2 180 and dimt 500 setq st1 187 st2 194 setq tole1 substr tols st1 6 tole2 substr tols st2 6 setq x1 cadr posi * cos angr * - ln 1.2 txth setq y1 caddr posi * sin angr * - ln 1.2 txth setq x2 x1 * cos angr 1.5708 * 0.85 txth setq y2 y1 * sin angr 1.5708 * 0.85 txth setq xy1 list x1 y1 setq xy2 list x2 y2 if or n 10 n 11 n 12 n 13 n 27 n 28 progn setq tole strcat “p“ tole1command “text“ xy1 txth angd tole progn if n 40 setq tole1 “0.01“ tole2 “ 0“ if n 41 setq tole1 “0.02“ tole2 “ 0“ if n 42 setq tole1 “0.05“ tole2 “ 0“ if n 43 setq tole1 “0.10“ tole2 “ 0“ if n 48 setq tole1 “ 0“ tole2 “-0.10“ if n 47 setq tole1 “ 0“ tole2 “-0.05“ if n 46 setq tole1 “ 0“ tole2 “-0.02“ if n 45 setq tole1 “ 0“ tole2 “-0.01“ command “text“ xy2 toleh angd tole1 “text“ xy1 toleh angd tole2 princ H6 |0.006 0 0.008 0 0.009 0 0.011 0 0.013 0 0.016 0 H7 |0.010 0 0.012 0 0.015 00.018 0 0.021 0 0.025 0 H8 |0.014 0 0.018 0 0.022 00.027 0 0.033 0 0.039 0 H9 |0.025 0 0.030 0 0.036 00.043 0 0.052 0 0.062 0 G7 |0.012 0.002 0.016 0.004 0.020 0.005 0.0240.006 0.028 0.007 0.034 0.009 K7 | 0 -0.010 0.003 -0.009 0.005 -0.010 0.006 -0.012 0.006 -0.015 0.007 -0.018 N7 |-0.004 -0.014 -0.004 -0.016 -0.004 -0.019 -0.005-0.023 -0.007 -0.028 -0.008 -0.033 S7 |-0.014 -0.024 -0.015 -0.027 -0.017 -0.032 -0.021 -0.039 -0.027 -0.048 -0.034 -0.059 U7 |-0.018 -0.028 -0.019 -0.031 -0.022 -0.037 -0.026-0.044 -0.033 -0.054 -0.051 -0.076 JS6 |0.003 0.004 0.005 0.006 0.007 0.008 JS7 |0.005 0.006 0.007 0.009 0.010 0.012 JS8 |0.007 0.009 0.011 0.013 0.016 0.019 JS9 |0.012 0.015 0.018 0.021 0.026 0.031 h6 | 0 -0.006 0 -0.008 0 -0.009 0 -0.011 0 -0.013 0 -0.016 h7 | 0 -0.010 0 -0.012 0 -0.015 0 -0.018 0 -0.021 0 -0.025 h8 | 0 -0.014 0 -0.018 0 -0.022 0 -0.027 0 -0.033 0 -0.039 h9 | 0 -0.025 0 -0.030 0 -0.036 0 -0.043 0 -0.052 0 -0.062 m6 |0.008 0.002 0.012 0.004 0.015 0.006 0.018 0.007 0.021 0.008 0.025 0.009 m7 |0.012 0.002 0.016 0.004 0.021 0.006 0.025 0.007 0.029 0.008 0.034 0.009 g6 |-0.002 -0.008 -0.004 -0.012 -0.005 -0.014 -0.006 -0.017 -0.007 -0.020 -0.009 -0.025 k6 |0.006 0 0.009 0.001 0.010 0.001 0.012 0.001 0.015 0.002 0.018 0.002 n6 |0.010 0.004 0.016 0.008 0.019 0.010 0.023 0.012 0.028 0.015 0.033 0.017 s6 |0.020 0.014 0.027 0.019 0.032 0.023 0.039 0.028 0.048 0.035 0.059 0.043 u6 |0.024 0.018 0.031 0.023 0.037 0.028 0.044 0.033 0.054 0.041 0.076 0.060 f7 |-0.006 -0.016 -0.010 -0.022 -0.013 -0.028 -0.016 -0.034 -0.020 -0.041 -0.025 -0.050 f8 |-0.006 -0.020 -0.010 -0.028 -0.013 -0.035 -0.016 -0.043 -0.020 -0.053 -0.025 -0.064 公差值表tole.txt