家居装修知识
模具知识|AutoCAD中尺寸公差的自动标注
2017-01-14  浏览:89
模具之家讯:AutoCAD中尺寸公差标注很麻烦,本文给出一短小AutoLISP程序,实现了公差值的自动标准,通过鼠标两次选择即可完成其操作,使用起来非常方便、快捷。
AutoCAD在用于机械设计时,公差标注有两种方法;其一是通过DIM参数设定完成,但参数设定繁琐,速度也慢,每一个不同公差值都要设定一次,在R120中名义尺寸与公差值的小数点位数相同使名义尺寸显得累赘(R130对此作了改进);其二是用TEXT指令直接写入,但速度也慢,字的位置也不易写准,常需用MOVE指令移动一次。上述两种方法都需在作图时备公差数值表,先查表后标注,因此在尺寸公差标注上所花时间很多。

笔者用AutoLisp编写了一尺寸公差自动标注程序,使用效果良好,速度也快,调用时仅两次操作即可完成:首次操作选择公差等级;再次操作选择被标注尺寸即可完成尺寸公差的自动标注。程序由四部分组成:输入公差等级自动查表;选取被标注尺寸并进行相应处理;尺寸大小分类并查取上下偏差值;公差值写入。若将该指令加入菜单后操作起来将更方便,即将公差等级符号(如H7、b6、r6、JS7等)做成幻灯片在菜单上调用。

一、输入公差等级和查表

在菜单上选择了公差标准条目后、屏幕上出现相应幻灯片(如图示)当选取相应公差等级的项目后,完成了两个指令输入:首先给出了公差等级(实际上是给出了在公差值表中该等级的相应行号n值);其次是启动了公差标准Lisp程序。Lisp程序启动后,打开公差值表(Tole.TXT)使用repeat函数在公差值表中连续读取一行数据,至直与所标公差等级相应的第n行为止。

若所标公差为H8,则菜单上相应行内容为:

[DAN(LH8)]^C^P(setg n 3)tolerance

若所标公差为JS6,则菜单上相应行内容为:

[DAN(JS6)]^C^P(setg n 10)tolerance

公差标注幻灯片

(注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级公差作特殊处理(n=10、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 c:tolerance ()
(setq txt (open "tole.txt" "r"))
(repeat n (setq tols$ (read-line txt)))
(close txt)
(setvar "cmdecho" 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 3) (> dimt 0)) (setq st1 5 st2 12))
((and (<= dimt 6) (> dimt 3)) (setq st1 19 st2 26))
((and (<= dimt 10) (> dimt 6)) (setq st1 33 st2 40))
((and (<= dimt 18) (> dimt 10)) (setq st1 47 st2 54))
((and (<= dimt 30) (> dimt 18)) (setq st1 61 st2 68))
((and (<= dimt 50) (> dimt 30)) (setq st1 75 st2 82))
((and (<= dimt 80) (> dimt 50)) (setq st1 89 st2 96))
((and (<= dimt 120) (> dimt 80)) (setq st1 103 st2 110 ))
((and (<= dimt 180) (> dimt 120)) (setq st1 117 st2 124))
((and (<= dimt 250) (> dimt 180)) (setq st1 131 st2 138))
((and (<= dimt 315) (> dimt 250)) (setq st1 145 st2 152))
((and (<= dimt 400) (> dimt 315)) (setq st1 159 st2 166))
((and (<= dimt 500) (> dimt 400)) (setq st1 173 st2 180))
((and (<= dimt 630) (> 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" tole1$))(command "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) 公差值表tole.txt
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 0+0.018 0 +0.021 0 +0.025 0 …

H8 |+0.014 0 +0.018 0 +0.022 0+0.027 0 +0.033 0 +0.039 0 …

H9 |+0.025 0 +0.030 0 +0.036 0+0.043 0 +0.052 0 +0.062 0 …

G7 |+0.012 +0.002 +0.016 +0.004 +0.020 +0.005 +0.024+0.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 …

模具之家为您提供最全面的塑胶,塑料,模具,模具设计,塑胶模具品牌的装修知识点和各种塑胶模具的导购与在线购买服务,拥有最便宜的塑胶模具价格和最优质的售后服务,敬请登陆模具之家:http://muju.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 塑胶 的产品:
南亚塑胶洛阳总经销 PVC塑料管

南亚塑胶洛阳总经销 PVC塑料管

价格:10.00/米

美国阿姆斯壮塑胶地板PVC地板印象龙地板山西总代理地板

美国阿姆斯壮塑胶地板PVC地板印象龙地板山西总代理地板

价格:到店咨询

美国阿姆斯壮Armstrong塑胶地板威牛pvc地板

美国阿姆斯壮Armstrong塑胶地板威牛pvc地板

价格:1.00/平方米

冠奥通告诉您塑胶跑道维护保养的10大注意事项

冠奥通告诉您塑胶跑道维护保养的10大注意事项

价格:到店咨询

导致塑胶跑道起泡和裂缝的施工环节及不同季节的维护

导致塑胶跑道起泡和裂缝的施工环节及不同季节的维护

价格:到店咨询

冠奥通告诉您PVC塑胶地板的篮球场如何正确的使用

冠奥通告诉您PVC塑胶地板的篮球场如何正确的使用

价格:到店咨询

易博仕铝方通吊顶木纹铝方通厂家直销

易博仕铝方通吊顶木纹铝方通厂家直销

价格:7.50/米

易博仕勾搭式垂帘铝挂片吊顶天花

易博仕勾搭式垂帘铝挂片吊顶天花

价格:8.50/米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

价格:38.00/平方米

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

价格:38.00/平方米

  • 头条资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 建材风水 木板之家 电工之家 壁纸之家 净化之家 安防之家 水暖之家 洁具之家 窗帘头条 家饰之窗 老姚之家 灯饰之家 电气之家 全景头条 陶瓷之家 照明之家 防水之家 防盗之家 博一建材 卫浴之家 区快洞察 建材 郑州建材 周口建材 信阳建材 商丘建材 南阳建材 漯河建材 许昌建材 濮阳建材 焦作建材 新乡建材 鹤壁建材 安阳建材 洛阳建材 开封建材 武汉建材 天门建材 企业之家 驻马店建材 三门峡建材 平顶山建材 神农架建材 建材之家 720全景
    (c)2015-2017 BO-YI.COM SYSTEM All Rights Reserved