怎样画三维螺母

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

构建三维螺母模型的方法及其程序设计
何勇
贵州电力设计研究院,贵州贵阳遵义路133号邮编:550002
1螺母的作用与国家标准
螺母在设备或零部件中主要是起紧固作用,是不可或缺的元件。

许多机器设备的三维模型的建立必须从螺母开始,下面就来研究如何绘制螺母的三维模型。

首先螺母不能凭想象绘制,根据功能要求的不同螺母也是多种多样的,在我国关于螺母的国标有很多种,我们以其中比较常用的一种作为例子来研究螺母三维模型的建立。

下表是A级和B级粗牙(GB/T6170-2000)、细牙(GB/T6171-2000)Ⅰ型六角螺母的有关数据。

螺纹规格(6H)
D M1.6 M2 M2.5 D×P
———
———
2构建三维螺母的思路
上表中共列了29种规格,我们以M64的螺母为例来建立其三维模型。

通常在AutoCAD中若不需要绘制螺纹,经以下步骤即可画出一个逼真的螺母:
1)先根据给定尺寸绘制一个六边形;
2)将六边形拉伸至所需尺寸形成八面体;
3)绘制一个旋转体与八面体的两端进行布尔减运算。

4)绘制一个圆柱体与其进布尔减运算,生成孔洞。

5)最终成为标准的六角螺母。

3绘制三维螺母的详细步骤
以上是基本思路,具体操作如下:
1)启动AutoCAD2014,界面如下:
2)点视图选项卡,将视图切换到左视图
运行ucs命令,将视图设置成与屏幕平行,即与视线垂直,这是一个好的习惯,可避免很多建模错误。

命令: _ucs
当前UCS 名称: *左视*
指定UCS 的原点或[面(F)/命名(NA)/对象(OB)/上一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: _v
命令: OSMODE
输入OSMODE 的新值<0>: 55。

osmode为系统变量,用于设置目标捕捉方式。

在绘图区绘一条直线作为螺母的中心线(此阶段不用考虑其线型,若出二维图时中心线应采用“中心线”线型),在直线的左端画一个直径为95mm的圆,再以圆心为中心点绘制一个内切圆半径为47.5mm的六边形。

命令: LINE。

画线。

指定第一个点:用鼠标在A处点一下。

指定下一点或[放弃(U)]: 用鼠标在B处点一下。

指定下一点或[放弃(U)]: 回车终止画线命令。

命令: CIRCLE。

执行画圆命令。

指定圆的圆心或[三点(3P)/两点(2P)/切点、切点、半径(T)]: 用鼠标拾取A点。

指定圆的半径或[直径(D)]: d
指定圆的直径: 95
命令: _polygon 输入侧面数<4>: 6。

画六边形。

指定正多边形的中心点或[边(E)]:
输入选项[内接于圆(I)/外切于圆(C)] <I>: c。

画多边形的内切圆,即六边形外切于已知圆。

指定圆的半径:拖动鼠标捕捉圆的左象限点C。

如下图所示:
图1
3)将六边形以A为基点,绕Y轴旋转90°并将其拉伸51mm。

令: ROTATE3D。

三维旋转命令。

当前正向角度: ANGDIR=逆时针ANGBASE=0
选择对象: 找到1 个。

用鼠标选择六边形。

选择对象: 回车终止选择。

指定轴上的第一个点或定义轴依据。

用鼠标选择A点。

[对象(O)/最近的(L)/视图(V)/X 轴(X)/Y 轴(Y)/Z 轴(Z)/两点(2)]: y 以Y轴为旋转轴。

指定Y 轴上的点<0,0,0>:用鼠标选择A点。

指定旋转角度或[参照(R)]: 90
命令: _extrude。

拉伸命令,拉伸刚才被旋转的六边形。

当前线框密度: ISOLINES=4,闭合轮廓创建模式= 实体
选择要拉伸的对象或[模式(MO)]: _MO 闭合轮廓创建模式[实体(SO)/曲面(SU)] <实体>: _SO
选择要拉伸的对象或[模式(MO)]: 找到1 个。

用鼠标选择六边形。

选择要拉伸的对象或[模式(MO)]: 回车终止选择。

指定拉伸的高度或[方向(D)/路径(P)/倾斜角(T)/表达式(E)]: 51。

输入拉伸长度。

如下图所示:
图2
4)以圆的上部象限点D为基点画一个D点锐角为30度的三角形。

按国标此处角度为15~30
度,为了增加视觉效果,采用30度。

命令: PLINE 执行画多义线命令。

指定起点: 用鼠标选择D点。

当前线宽为0.0000
指定下一个点或[圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W)]: @15<60。

此处采用极座标输入法确定F点。

指定下一点或[圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)]: 用追踪法确定E点。

指定下一点或[圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)]: cl 确保三角形是闭合的。

图3
5)将三角形绕AB旋转扫掠360度,生成一个实体,并将其以PQ为轴镜象至G点,然将两个
旋转体并集。

从之前拉伸的八面体中减去两个旋转体,即执行差集布尔运算得到螺母的外形。

命令: _revolve 执行旋转扫掠命令。

当前线框密度: ISOLINES=4,闭合轮廓创建模式= 实体
选择要旋转的对象或[模式(MO)]: _MO 闭合轮廓创建模式[实体(SO)/曲面(SU)] <实体>: _SO 用鼠标选择三角形。

选择要旋转的对象或[模式(MO)]: 找到1 个
选择要旋转的对象或[模式(MO)]: 回车终止选择。

指定轴起点或根据以下选项之一定义轴[对象(O)/X/Y/Z] <对象>:用鼠标选择A点作为旋转轴的第一端点。

指定轴端点:用鼠标选择B点作为旋转轴的第二端点。

指定旋转角度或[起点角度(ST)/反转(R)/表达式(EX)] <360>: 回车以确认旋转360度。

命令: MI 执行镜象命令。

选择对象: 找到1 个
选择对象:回车终止选择。

指定镜像线的第一点: 用鼠标选择P点作为镜象轴的第一点。

指定镜像线的第二点:用鼠标选择Q点作为镜象轴的第二点。

要删除源对象吗?[是(Y)/否(N)] <N>: 回车确认不删除源对象。

命令: _union 执行并集命令。

选择对象: 找到1 个用鼠标选择第一个旋转体。

选择对象: 找到1 个,总计 2 个用鼠标选择第二个旋转体。

选择对象: 回车终止选择。

将两个旋转体并集为一个实体。

命令: _subtract 选择要从中减去的实体、曲面和面域... 执行差集命令,用鼠标选择八面体。

选择对象: 找到1 个
选择对象:回车终止选择。

选择要减去的实体、曲面和面域... 用鼠标选择第并集后的旋转体。

选择对象: 找到1 个
选择对象: 回车终止选择,生成螺母模型。

如下图:
图4 执行差集前执行差集后
6)在任意点画一直径为64mm的圆,将圆沿AB线扫掠,生成一个圆柱体。

将该圆柱体从螺
母模型中减除,即得到最终的螺母模型。

命令: circle 执行画圆命令。

指定圆的圆心或[三点(3P)/两点(2P)/切点、切点、半径(T)]: 在屏幕上指定任一点作为圆心。

指定圆的半径或[直径(D)]: d
指定圆的直径: 64 输入直径值。

命令: DELOBJ
输入DELOBJ 的新值<0>: 1 将系统变量DELOBJ的值设为1,扫掠后删除源物体。

命令: _sweep 执行扫掠命令。

当前线框密度: ISOLINES=4,闭合轮廓创建模式= 实体
选择要扫掠的对象或[模式(MO)]: _MO 闭合轮廓创建模式[实体(SO)/曲面(SU)] <实体>:
_SO
选择要扫掠的对象或[模式(MO)]: 找到1 个用鼠标选择刚画的圆。

选择要扫掠的对象或[模式(MO)]: 回车终止选择。

选择扫掠路径或[对齐(A)/基点(B)/比例(S)/扭曲(T)]: 用鼠标选择直线AB,生成圆柱体。

命令: _subtract 选择要从中减去的实体、曲面和面域...
选择对象: 找到1 个用鼠标选择螺母模型
选择对象: 回车终止选择。

选择要减去的实体、曲面和面域... 用鼠标选择圆柱体
选择对象: 找到1 个
选择对象: 回车终止选择。

最后,删除除模型以外的物体,并执行change命令修改颜色,将各个面的颜色改成一致的颜色。

命令: UCS 执行用户座标系设置命令。

当前UCS 名称: *左视*
指定UCS 的原点或[面(F)/命名(NA)/对象(OB)/上一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: 将当前座标系调成世界座标系,以避免运行change命令时提示UCS不平行。

命令: CHANGE 执行修改命令。

如果模型表面本身不存在颜色差异,就没必要执该命令。

选择对象: 找到1 个用鼠标选择螺母模型。

选择对象: 回车终止选择。

指定修改点或[特性(P)]: p
输入要更改的特性[颜色(C)/标高(E)/图层(LA)/线型(LT)/线型比例(S)/线宽(LW)/厚度(T)/透明度(TR)/材质(M)/注释性(A)]: c
新颜色[真彩色(T)/配色系统(CO)] <152>: 5
输入要更改的特性[颜色(C)/标高(E)/图层(LA)/线型(LT)/线型比例(S)/线宽(LW)/厚度(T)/透明度(TR)/材质(M)/注释性(A)]: 回车终止命令。

最终模型如下图:
图5
注:三维螺母的建模方法有多种,本文只描述了其中的一种,读者在建模过程中不必拘泥于上术步骤,可根据已掌握的命令灵活运用。

4绘制三维螺母的程序设计
每一种尺寸的螺母都将重复以上步聚,其过程也是相当繁琐且枯燥的,为解决这个问题,本人开发了以下程序,可根据不同尺寸生成所需的逼真的螺母,并求出其重量。

(defun c:luomu6170(/ data_list aa bz d d1 dd2 dist e1 e10 e2 e3 e4 e5 e6 e7 e8 e9 eL1 en en1 en2 h1 HH1 LL1 LL3 LL4 M m1 p1 p10 p2 p3 p7 p8 p9 pdm1 pdm2 pdm3 pdm4 pds1 pds2 pds3 pds4 pds5 pe pe1 pm1 pm2 ps ps1 rr s1 txt1 vm wt xobj)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "delobj" 1)
(vl-load-com)
(initget
"1.6 2 2.5 3 3.5 4 5 6 8 10 12 14 16 18 20 22 24 27 30 33 36 39 42 45 48 52 56 60 64 72 80 90 100 110"
)
(setq MMM (getkword
"\n请输入国标(GB/T6170-2000)六角螺母规格(括号内为非优选的规格,首次运行必输入一
个数值!!!)\nM:[1.6、2、2.5、3、3.5、4 5、6、8、10、12、(14)、16、(18)、20、(22)、24、(27)、30、(33)、36、(39)、42、(45)、48、(52)、56、(60)、64、72、80、90、100、110] <默认>:"
)
)
(if
(= MMM nil) ;;;;此处必须用nil不能用""
(setq MM MM);;;;MM不能设为局部变量!!!
(setq MM MMM)
)
(setq M MM)
(setq M (atof M))
(cond
((= M 1.6) (setq data_list '(1.6 3.41 0.2528 0.1459 1.3 3.2 0.14 0.15)))
((= M 2) (setq data_list '(2 4.32 0.3202 0.1849 1.6 4 0.18 0.19)))
((= M 2.5) (setq data_list '(2.5 5.45 0.404 0.2332 2 5 0.22 0.23)))
((= M 3) (setq data_list '(3 6.01 0.4455 0.2572 2.4 5.5 0.26 0.28)))
((= M 3.5) (setq data_list '(3.5 6.58 0.4877 0.2816 2.8 6 0.31 0.33)))
((= M 4) (setq data_list '(4 7.66 0.5678 0.3278 3.2 7 0.35 0.38)))
((= M 5) (setq data_list '(5 8.79 0.6515 0.3762 4.7 8 0.44 0.47)))
((= M 6) (setq data_list '(6 11.05 0.819 0.4729 5.2 10 0.53 0.56)))
((= M 8) (setq data_list '(8 15.0111 1.1127 0.6424 6.8 13 0.7 0.75)))
((= M 10) (setq data_list '(10 18.4752 1.2379 0.7147 8.4 16 0.99 1)))
((= M 12) (setq data_list '(12 20.7846 2.9506 1.7035 10.8 18 1.48 1.5)))
((= M 14) (setq data_list '(14 24.2487 3.4423 2.2999 12.8 21 1.48 1.5)))
((= M 16) (setq data_list '(16 27.7128 3.9341 2.6285 14.8 24 1.48 1.5)))
((= M 18) (setq data_list '(18 31.1769 4.4258 2.957 15.8 27 1.48 1.5)))
((= M 20) (setq data_list '(20 34.641 4.9176 3.2856 18 30 1.48 1.5)))
((= M 22) (setq data_list '(22 39.2598 5.5733 3.7237 19.4 34 1.48 1.5)))
((= M 24) (setq data_list '(24 41.5692 5.9011 3.9427 21.5 36 1.98 2)))
((= M 27) (setq data_list '(27 47.3427 6.7207 4.4903 23.8 41 1.98 2)))
((= M 30) (setq data_list '(30 53.1162 7.5403 5.0379 25.6 46 1.98 2)))
((= M 33) (setq data_list '(33 57.735 8.196 5.476 28.7 50 1.98 2)))
((= M 36) (setq data_list '(36 63.5085 9.0156 6.0236 31 55 2.97 3)))
((= M 39) (setq data_list '(39 69.282 9.8352 6.5712 33.4 60 2.97 3)))
((= M 42) (setq data_list '(42 75.0555 10.6548 7.1188 34 65 2.97 3)))
((= M 45) (setq data_list '(45 80.829 11.4744 7.6664 36 70 2.97 3)))
((= M 48) (setq data_list '(48 86.6025 12.294 8.214 38 75 2.97 3)))
((= M 52) (setq data_list '(52 92.376 13.1136 8.7616 42 80 3.96 4)))
((= M 56) (setq data_list '(56 98.1495 13.9332 9.3092 45 85 3.96 4)))
((= M 60) (setq data_list '(60 103.923 14.7528 9.8568 48 90 3.96 4)))
((= M 64) (setq data_list '(64 109.6966 15.5724 10.4044 51 95 3.96 4)))
;;;;以下数据为参考“发电厂汽水管道支架设计手册(D-ZD2010)”中的数据((= M 72) (setq data_list '(72 121.2436 8.9868 5.1885 58 105 4.4 4.79)))
((= M 80) (setq data_list '(80 132.7906 9.8427 5.6827 64 115 4.93 5.32)))
((= M 90) (setq data_list '(90 150.1111 11.1265 6.4239 72 130 5.54 5.99)))
((= M 100) (setq data_list '(100 167.4316 12.4104 7.1651 80 145 6.16 6.65)))
((= M 110) (setq data_list '(110 178.9786 13.2662 7.6593 88 155 6.78 7.32)))
)
(setq d1 (nth 0 data_list))
(setq eL1 (nth 1 data_list))
(setq HH1 (nth 2 data_list))
(setq LL1 (nth 3 data_list))
(setq m1 (nth 4 data_list))
(setq s1 (nth 5 data_list))
(setq LL3 (nth 6 data_list))
(setq h1 (nth 7 data_list));;螺旋线的螺距
(setq ps (getpoint "\n起点:"))
(setvar "osmode" 0) ;很关键,否则画线时容易出错
(setq rr (/ s1 2.0))
(setq pe (polar ps 0 m1))
(setq p1 (polar ps (/ PI 2) (/ s1 2.0)))
(setq p2 (polar p1 (/ PI 2) HH1))
(setq p3 (polar p2 0 LL1))
(setq pm1 (polar ps 0 (/ m1 2.0)))
(setq pm2 (polar pm1 (/ PI 2) (/ eL1 2.0)))
(command "polygon" 6 ps "c" rr)
(setq e1 (entlast))
(command "rotate" e1 "" ps 90)
(command "rotate3d" e1 "" "y" ps 90)
(command "extrude" e1 "" m1)
(setq e1 (entlast))
(command "pline" p1 p2 p3 "c")
(setq e2 (entlast))
(command "revolve" e2 "" ps pe 360 )
(setq e2 (entlast))
(command "mirror" e2 "" pm1 pm2 "n" )
(setq e3 (entlast))
(command "union" e2 e3 "")
(command "subtract" e1 "" e2 "")
(command "line" ps pe "")
(setq e2 (entlast))
(command "circle" ps "d" d1)
(setq e3 (entlast))
(command "sweep" e3 "" e2)
(setq e4 (entlast))
(command "subtract" e1 "" e4 "")
(command "erase" e2 "")
;;; 绘制螺纹
(setq p7 (polar pe (/ PI 2) (/ d1 2.0)))
(setq p8 (polar p7 PI (/ LL3 2)))
(setq p9 (polar p8 0 LL3))
(setq p10 (polar p8 (/ (* 300 PI) 180) LL3))
(setq ps1 (polar ps PI LL3))
(setq pe1 (polar pe 0 LL3))
(setq dist (distance ps1 pe1))
(setq aa (/ (* 30 PI) 180))
(setq LL4 (/ (* 0.5 LL3 (cos aa)) (sin aa)))
(setq dd2 (+ d1 LL4 LL4))
(setvar "cecolor" "2")
(command "line" ps1 pe1 "")
(setq e5 (entlast))
(command "circle" ps "d" dd2)
(setq e6 (entlast))
(command "sweep" e6 "" e5)
(setq e7 (entlast))
(command "erase" e5 "")
(command "pline" p8 p9 p10 "c")
(setq e8 (entlast))
(command "rotate3d" e8 "" "x" p7 90)
(command "helix" pe1 (/ dd2 2.0) (/ dd2 2.0) "H" h1 "T" (/ dist h1)) (setq e9 (entlast))
(command "rotate3d" e9 "" "y" pe1 270)
(command "sweep" e8 "" "B" p7 "A" "N" e9)
(setq e10 (entlast))
(command "subtract" e7 "" e10 "")
(command "subtract" e1 "" e7 "")
(command "erase" e9 "")
;;;标尺寸
(setq pds1 (polar ps (/ (* 3 PI) 2) (/ s1 2.0)))
(setq pds2 (polar ps (/ (* 3 PI) 2) (/ eL1 2.0)))
(setq pds3 (polar ps (/ PI 2) (/ eL1 2.0)))
(setq pds4 (polar pe (/ PI 2) (/ d1 2.0)))
(setq pds5 (polar pe (/ (* 3 PI) 2) (/ d1 2.0)))
(setq pdm1 (polar ps PI (/ m1 2)));;;标尺寸用
(setq pdm2 (polar ps PI m1));;;标尺寸用
(setq pdm3 (polar pe 0 (/ m1 2)));;;标尺寸用
(setq pdm4 (polar pm1 (/ (* 3 PI) 2) (* 0.8 s1)));;;标尺寸用(setq pdm5 (polar pdm4 (/ (* 3 PI) 2) (* 0.5 d1)));;;写文本(setvar "cecolor" "1")
(command "dim" "ver" p1 pds1 pdm1 "" "e")
(command "dim" "ver" pds2 pds3 pdm2 "" "e")
(command "dim" "ver" pds4 pds5 pdm3 "" "e")
(command "dim" "hor" ps pe pdm4 "" "e")
;;;求重量
(setq bz 7.85);;;;钢的比重
(setq en (entget e1))
(setq en1 (car en))
(setq en2 (cdr en1))
(setq xobj (vlax-ename->vla-object en2)) ;转换ename为vla对象(setq vm (vla-get-volume xobj)) ; 直接取得对象体积mm3 (setq vm (/ vm 1000000.0));;;;转换成立方分米:dm3
(setq wt (* bz vm))
(setq txt1 (strcat "M" (rtos M) " 重量:" (rtos wt 2 3) "kg")) (command "text" "J" "BC" pdm5 (* 0.08 eL1) 0 txt1 ) (setvar "osmode" 527)
(setvar "cecolor" "bylayer")
(prompt "\n已绘制一个螺母")
(prin1)
)
(prompt "绘制螺母程序,命令行输入luomu6170")
(prin1)
本程序加载后直接在命令运行luomu6170,按提示输入所需数值即可生成所需尺寸规格的螺母。

如下图所示:
图1 由程序生成的螺母
5小结
1)螺母螺栓是构成工业设备的基本构件之一,在工业设备的三维建模中,它对设备的
真实性起到画龙点睛的作用,本程序完美解决GB/T6170、GB/T6171中各种螺母的
绘制,在屏幕上给定一点即可画出所需螺母,极大提高的建模的工作效率,同时也
为其它设备零件的编程提供了思路,值得推广。

2)由于AutoCAD在我国有着广大的用户群,所以学习消化好AutoCAD的三维功能就不
必另外花钱购买别的三维设计软件,将为企业节约一笔可观的费用。

3)学习AutoCAD的三维设计,将比别的软件上手更快,可以更快地产生经济效益。


着AutoCAD软件的不断升级,其功能将会更加强大。

4)文中提供的程序在AutoCAD2013及以上版本中调试通过,低版本运行可能出错,或
不能求重量。

11。

相关文档
最新文档