QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 32125|回复: 66
收起左侧

[讨论] CAD中渐开线的画法!(高手请进)

[复制链接]
发表于 2007-3-30 09:25:46 | 显示全部楼层 |阅读模式 来自: 中国北京

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
高手一定要不吝赐教啊,要求用CAD精确画出一个基圆大小为5,相位角为1440度的一段渐开线.(不要近似画法,精确到什么程度呢,就是我在你画的这段线上任意取一点,该点点坐标符合渐开线公式计算值)
 楼主| 发表于 2007-3-30 10:14:15 | 显示全部楼层 来自: 中国北京
怎么没人应战呢?不象三维网的作风啊?骨头越硬越要啃啊.
发表于 2007-3-30 12:55:05 | 显示全部楼层 来自: 中国江苏无锡
在线切割的软件中有这种功能,可以提供齿轮的渐开线曲线,但要随意画渐开线并达到理论的精度好像目前仅CAD还没这个功能.
! H- P( J. f% s$ O2 F5 r另外可以从三维网上找一下渐开线弹簧的LISP程序,也许可以一试!
 楼主| 发表于 2007-3-30 14:20:48 | 显示全部楼层 来自: 中国北京
CAD能画参数曲线吗?如果能画怎么没见在论坛里有人提起呢
发表于 2007-3-31 11:57:59 | 显示全部楼层 来自: 中国辽宁营口
原帖由 qinjiaqing 于 2007-3-30 10:14 发表
1 w' T( ~) }* |) p怎么没人应战呢?不象三维网的作风啊?骨头越硬越要啃啊.

$ g2 F' G! v. w9 s" {9 J  H1 D- ^2 s( l' S* V% |
楼主这种话是很无礼的!!!这个坛子里高手如云,只是人家都不屑于理你罢了。
+ M* F0 {. h) O考虑到其它网友可能有关于渐开线画法的要求,把我的常用方法发上来,供大家参考:
# Z6 v" t! j7 ?8 L8 \0 u
3 k/ F( ~$ ?+ Z) r: K+ j2 tSub JKX()/ L4 r/ i/ o* F- a- v
    Dim O As Variant '基圆圆心坐标
) Y( l$ A2 N2 X. m    Dim R As Double '基圆半径
( ~# j+ c: w7 q+ o/ C! L2 T! w
    Dim T As Double '展开角度(正角度为逆时针,负角度为顺时针)
. q6 }2 M( U+ Z5 l9 ?, ^4 U/ X9 b    Dim C As AcadCircle '基圆
$ D/ N7 \  j( N, g# g1 G
    Dim I As Integer '样条曲线拟合点数量
1 d+ ?0 W: \: U, N6 h    Dim J As Integer '循环变量3 d" v9 U) _* W! V) J7 w; B% w& h
    Dim TT As Double '逐点展开时的展开角度4 ^9 z. u. [1 a, n5 E: C  }% A
    Dim P() As Double '样条曲线拟合点坐标4 o3 L( H6 m; Q) o. T
    Dim T1(2) As Double '样条曲线起点切线方向8 L% g' o! h# X  `4 X+ V7 B) W
    Dim T2(2) As Double '样条曲线端点切线方向
# G( F& T% z" s- O* x5 ^    ; H8 I) C2 F. l3 [. a5 M
    With ThisDrawing5 f& x: Z$ E4 r0 I# M8 U+ c% {
        On Error GoTo 10 '用户输入基圆圆心和半径出错时退出程序
0 L" A% b* K! S+ `2 _: H% @        O = .Utility.GetPoint(, vbCrLf & "指定基圆的圆心:") '用户输入基圆圆心+ E' ^1 F6 x# R. ~+ z$ {8 v
        R = .Utility.GetDistance(O, vbCrLf & "指定基圆的半径:") '用户输入基圆半径  j, D$ g5 l- t( b9 E4 |
        Set C = .ModelSpace.AddCircle(O, R) '画基圆% L. A5 A3 Q  s& c
        On Error Resume Next '用户输入展开角度和拟合点数量出错时检查出错方式,判断是否为默认输入5 F2 k9 k1 r* ?/ d) g0 a6 J
        Do While T = 0 '用户输入展开角度为0时要求用户重新输入
, L6 t/ i$ O3 j& }" D            T = .Utility.GetReal(vbCrLf & "指定展开角度<360>:") '用户输入展开角度# ~) A+ _" G& v+ Y7 _- H
            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,展开角度默认为360度' x3 [; u# [8 G% z3 g
                T = 360- R. s0 f& F" m, V: ?% x7 d
            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序
3 G& `  P6 V% Y' e1 ]* u% Q) Y                C.Delete
0 @  y( Z! t" l0 |* X( P                Exit Sub+ q: ^- ~# o- _7 I; z( r1 g4 H
            End If
0 |3 ]% _) D9 }! C  w% V# G        Loop
# }* Z, U) Y# g3 `1 ?1 p
        T = T * 1.74532925199433E-02 '换算为弧度
9 U1 H4 V0 `' q2 H$ @        Err.Clear '清空错误代码,便于用户下一步输入
4 l/ h, I6 u* ]" F, b' ?, V' D7 [        Do While I < 3 '用户输入拟合点数量小于3时要求用户重新输入9 m) P% @9 u3 V& o. ]' j: V' y6 B+ Z6 I
            I = .Utility.GetInteger(vbCrLf & "指定样条曲线拟合点数量<50>:") '用户输入拟合点数量
2 V+ _; x) }0 E" ]* A, p
            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,拟合点数量默认为50
7 j5 n4 @* R& ]) g# ^+ c  s
                I = 50
1 @  I2 y3 m. L0 J1 T            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序
6 ^9 f+ @# f& |: J: x1 G                C.Delete
. u0 J6 ^/ t1 o" c                Exit Sub
, @6 k( Y" y) [; _            End If
+ g5 C% O. S  n4 q- E5 K/ n
        Loop4 A/ l, ]: d1 z- g' I
        ReDim P(I * 3 - 1) '按拟合点数量重定义拟合点坐标数组
% {! R3 O9 G# h% z1 I* }3 F# m       For J = 0 To I - 1 '按渐开线公式逐点计算拟合点坐标
# E: H' \+ f% b6 G: @2 o, I            TT = Abs(T) * J / (I - 1) '计算该点的展开角度
! \! Q( q4 D4 B; \
            P(J * 3) = R * (Cos(TT) + TT * Sin(TT)) + O(0) '计算该点横坐标(相对于基圆圆心)
  P# K0 `  V6 |2 t( Q$ Y            If T > 0 Then '判断逆时针展开还是顺时针展开6 C9 q4 A. B  ^- m
                P(J * 3 + 1) = R * (Sin(TT) - TT * Cos(TT)) + O(1) '逆时针展开时的该点纵坐标9 l1 o( w# x" i. X) ^, _$ o
            Else, }2 F/ @/ W7 o0 q4 E- A
                P(J * 3 + 1) = -R * (Sin(TT) - TT * Cos(TT)) + O(1) '顺时针展开时的该点纵坐标
$ z+ G$ I0 j- C1 F0 a            End If
; R, P5 b2 X7 b( [$ i  ?1 y        Next! K$ C7 K% t. c: T2 K5 X
        T1(0) = 1 '起点切向
1 f+ j/ b6 b; U$ ?
        T2(0) = Cos(T) '端点切向
& p  d5 Y, s4 U, H0 ]8 z        T2(1) = Sin(T)
) S4 I/ a9 s' f  E/ V        .ModelSpace.AddSpline P, T1, T2 '画样条曲线
6 e& J1 D, t3 {" T5 f$ P    End With
4 g" @$ A$ n6 w8 |3 V3 `10: End Sub
" L* a/ d, U6 i( f1 x( ~
( ]! h$ H$ x+ m5 u8 z  w+ s+ w+ y7 e
加载程序方法一:
/ Q: y5 _( [7 A1、拷贝上面的源代码;( m$ a/ T5 i% h2 H& B' D
2、打开autocad;
$ a3 b' Q, ]. m3、Alt+F11. E$ [" p' |# l
4、“插入”→“模块”→粘贴
/ o+ p: g8 b' |# X* r/ {
- v$ R, u% M( U0 L, s2 ^1 r加载程序方法二:
- J- [. ^6 `8 `% p1、下载附件并解压) Z( R  F9 a/ m" m, U" A
2、打开autocad;) G; b$ Z. t2 v. ?5 f
3、在命令行键入“appload”(或“工具”→“加载应用程序(L)..."),加载解压后的文件,关闭加载窗口;  S% Q4 \  X, \; f) g. H+ D% m; J6 A
" m! e; J6 Y7 c$ v4 R
使用方法一:
/ j$ a0 j$ z1 T+ [1 w在VBA编辑器界面,按F5,回到CAD界面按命令行提示操作。图形在模型空间生成。! u1 l; a* k- Y5 T2 T& ~4 {
; x$ X3 _% n, m$ A' ^4 V
使用方法二:; }& y( b+ f1 R' I$ f3 a$ h
在CAD模型空间,命令行键入“-vbarun",回车,"jkx",回车,按命令行提示操作。
( C+ _8 P8 N; [6 w/ f- I+ r8 ~
, f& _- j" w2 _: j: s. O$ a使用方法三:
! s6 O4 D$ m7 H) o9 d在CAD模型空间,Alt+F8,选择名为“JKX”的宏,“运行”,按命令行提示操作。* W9 t) h+ _2 [8 d1 @4 L4 p6 F
8 o# w9 l1 C& Y+ B. Q0 e
[ 本帖最后由 woaishuijia 于 2007-3-31 12:58 编辑 ]

JKX.rar

7.6 KB, 下载次数: 595

评分

参与人数 1三维币 +20 收起 理由
★新手★ + 20 技术讨论!

查看全部评分

发表于 2007-3-31 12:06:02 | 显示全部楼层 来自: 中国山东烟台
楼上真是太历害了,这样的水平人就是高啊
 楼主| 发表于 2007-3-31 17:16:23 | 显示全部楼层 来自: 中国北京
首先对大家道歉,但是我真的没有其他意思,我只是看我发了这个帖子后一直没人给的答案,所以才说了上面的话,但是无论从字面还是从我本人来说都没有任何贬义,可能有歧异呵呵.对不起大家嘿嘿.3 C& J; Z; \9 L! C/ X4 u* `( l
Dim I As Integer '样条曲线拟合点数量
" v+ U# \9 n, s3 h我想问下如果是拟合出来的那又如何能达到所要求的精度呢?拟合点的数量取多少合适呢?! o/ l4 j0 g9 N4 b* A  l

$ m) q4 O. ?  k6 y5 b" t, z[ 本帖最后由 qinjiaqing 于 2007-3-31 17:20 编辑 ]
发表于 2007-3-31 21:48:54 | 显示全部楼层 来自: 中国湖北荆州
5楼的厉害啊!: w" S& B; L8 m* x. i" b
大家应该多学学
发表于 2007-4-14 17:57:49 | 显示全部楼层 来自: 中国四川成都

AutoCAD下公式曲线(人人都会画函数)经典程序分享

http://www.3dportal.cn/discuz/viewthread.php?tid=250487&extra=page%3D1+ |' e0 y- z4 M  u% |+ @& K( {, a
不仅仅可以画渐开线。
发表于 2007-4-14 22:27:49 | 显示全部楼层 来自: 中国广东广州
哈哈,,CAD就这个好,可以编程,,省去不少烦恼
发表于 2007-4-15 00:14:53 | 显示全部楼层 来自: 中国浙江金华
CAD是不是只可以用C语言编程啊???) p$ d) N2 |% A

0 @$ e3 _: p, o) u  f  n: D不能用DELPHI吧?????
发表于 2007-4-15 20:27:02 | 显示全部楼层 来自: 中国江苏苏州
原帖由 XZY521 于 2007-4-15 00:14 发表 http://www.3dportal.cn/discuz/images/common/back.gif1 m; z' d/ l8 q$ p
CAD是不是只可以用C语言编程啊???2 y' o' b( M; b" X0 z% Y( E
* o3 |0 i- l( O8 ~5 V0 L1 @. r
不能用DELPHI吧?????

8 y: L: W! \! a- ^, T- F' O* ]) G( z- A' I" m2 r4 T! V% _

! W9 [4 O# K  u  |9 _. w干国CAD二次开发的都知道,VBA  C  AUTOLISP等是常用的开发语言!!
发表于 2007-4-23 14:09:20 | 显示全部楼层 来自: 中国上海
学习了,佩服!以后得好好学习高级应用
发表于 2007-4-23 15:30:22 | 显示全部楼层 来自: 中国山西太原
确实有高人啊,这也不是问题
发表于 2007-4-24 11:36:07 | 显示全部楼层 来自: 中国广西南宁
这里真是高手云集,枉我用了autocad这么多年。以前都是用华正cad画的渐开线,想不到autocad也可以画。学习了。谢谢!
发表于 2007-4-24 13:12:33 | 显示全部楼层 来自: 中国吉林长春
果然牛人多呀,学习了
发表于 2007-5-7 11:13:07 | 显示全部楼层 来自: 中国浙江台州
谢谢5楼的朋友~~学习一下~呵呵~~
发表于 2007-5-7 16:41:14 | 显示全部楼层 来自: 中国黑龙江哈尔滨
5楼真高啊 不知能否到我发的群里面来 真是万分期待啊37350498
发表于 2007-5-8 00:56:51 | 显示全部楼层 来自: 中国湖南益阳
5楼的程序好像是用拟合线连接的吧,不知道能够达到精度要求否
发表于 2007-5-8 09:46:44 | 显示全部楼层 来自: 中国北京
qinjiaqing ,我警告你,同时也敬告你,别人帮你是人情,不帮你是本分,你要清楚了,这里不是你挑衅的地方,请牢记,如果你要是在此挑衅,不会是扣分那么简单的事情。不尊重别人,你等于不尊重自己。
发表于 2007-5-11 15:03:12 | 显示全部楼层 来自: 中国北京
三维网就像水浒中的梁山泊,高手如云阿
发表于 2007-5-11 16:42:17 | 显示全部楼层 来自: 中国天津
强人太多了。什么时候自己能开发出来一个模块那
发表于 2008-10-17 08:19:38 | 显示全部楼层 来自: 中国河南郑州
厉害厉害,
发表于 2008-10-18 08:46:51 | 显示全部楼层 来自: 中国湖南娄底
牛~~顶~~"我爱我家"~~~~~~~
发表于 2008-12-28 12:08:47 | 显示全部楼层 来自: 中国甘肃嘉峪关
高手太多了,厉害啊,佩服,以后要多学习了!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表