QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 32122|回复: 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还没这个功能.
0 q) o- S3 U0 `2 _另外可以从三维网上找一下渐开线弹簧的LISP程序,也许可以一试!
 楼主| 发表于 2007-3-30 14:20:48 | 显示全部楼层 来自: 中国北京
CAD能画参数曲线吗?如果能画怎么没见在论坛里有人提起呢
发表于 2007-3-31 11:57:59 | 显示全部楼层 来自: 中国辽宁营口
原帖由 qinjiaqing 于 2007-3-30 10:14 发表
& F' f1 r4 b) k1 c: [1 U9 f怎么没人应战呢?不象三维网的作风啊?骨头越硬越要啃啊.
: c3 F4 K( K6 V! H/ F, ~
% L! c$ S  `4 y% W8 z% K3 x% s% x
楼主这种话是很无礼的!!!这个坛子里高手如云,只是人家都不屑于理你罢了。5 U: D! n  M5 Q& i: J
考虑到其它网友可能有关于渐开线画法的要求,把我的常用方法发上来,供大家参考:
# `- \( t9 E# j) [! M) Z6 W6 n0 G4 w  o' c) a  \  `$ a
Sub JKX()! w9 j6 Y. E7 \8 [$ O/ |
    Dim O As Variant '基圆圆心坐标; o0 w8 g$ T$ R/ c7 S
    Dim R As Double '基圆半径! g* I# I0 i2 j! P5 X! k
    Dim T As Double '展开角度(正角度为逆时针,负角度为顺时针)
5 g! T) {7 ~8 J" J! e    Dim C As AcadCircle '基圆; x4 X& O1 M9 h
    Dim I As Integer '样条曲线拟合点数量& b! w- F+ i3 U" ~
    Dim J As Integer '循环变量
8 w- r  F! y* A: g' o' B    Dim TT As Double '逐点展开时的展开角度
; M" e* I- e  K+ q    Dim P() As Double '样条曲线拟合点坐标
* w0 M/ d8 X; F3 Q4 i    Dim T1(2) As Double '样条曲线起点切线方向5 n, A  i$ r! k7 |. v3 S
    Dim T2(2) As Double '样条曲线端点切线方向
2 {1 h* t. i. t) ]  q   
0 D, l3 U* ~0 r5 O, p: u    With ThisDrawing
9 ?% }& ]8 n' V" {& O1 K+ v        On Error GoTo 10 '用户输入基圆圆心和半径出错时退出程序
  ~8 v; r" K8 b- r' W) \- a        O = .Utility.GetPoint(, vbCrLf & "指定基圆的圆心:") '用户输入基圆圆心
& l" v- p/ v0 i+ a        R = .Utility.GetDistance(O, vbCrLf & "指定基圆的半径:") '用户输入基圆半径
6 y# u( s2 ]& j0 V3 Y2 Z        Set C = .ModelSpace.AddCircle(O, R) '画基圆
  \% c# ~* \2 a" C. ~! D        On Error Resume Next '用户输入展开角度和拟合点数量出错时检查出错方式,判断是否为默认输入: u& T2 I9 q. L1 h  z" d
        Do While T = 0 '用户输入展开角度为0时要求用户重新输入8 h+ m; `" e& L$ G' C$ H; Z& ~
            T = .Utility.GetReal(vbCrLf & "指定展开角度<360>:") '用户输入展开角度% \3 Q7 r* ~( h6 I4 M
            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,展开角度默认为360度
, Q; N* R. b# R& D0 x8 \6 f                T = 360
1 z$ S/ {/ o5 i- D$ f& l! Y: V            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序
6 c* _8 R; N% ]# A3 G# z+ y                C.Delete0 x1 C0 c$ ~2 w! Z: T6 H1 m/ J2 x, T
                Exit Sub' t, A, I) R; y& d+ q
            End If2 i" x( S' M" ?8 n
        Loop
: G" \: O5 T7 P, U
        T = T * 1.74532925199433E-02 '换算为弧度
3 Q  t9 o. M' g  t        Err.Clear '清空错误代码,便于用户下一步输入# a: p* _3 }( ^2 g" s3 Q6 A9 N
        Do While I < 3 '用户输入拟合点数量小于3时要求用户重新输入! Y  o# Q  v7 F5 ^! i- \
            I = .Utility.GetInteger(vbCrLf & "指定样条曲线拟合点数量<50>:") '用户输入拟合点数量5 p! v7 k; ]: X2 O. c% W9 f6 N
            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,拟合点数量默认为50& K" @5 a- \* @5 E. w4 l: L9 u5 C1 V
                I = 50
, M2 x6 \. R8 _9 h- v            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序6 V) w7 B5 K+ @, n7 T9 x
                C.Delete6 N' X$ ?; U2 C' z3 s
                Exit Sub0 q) b+ F" n/ m9 l* }& q8 ?/ L
            End If
* o; c* N8 _; l) z8 P6 e- r
        Loop. H5 ~* ]) t" o; ?  t% S
        ReDim P(I * 3 - 1) '按拟合点数量重定义拟合点坐标数组1 c9 N$ x2 @- m2 A7 p
       For J = 0 To I - 1 '按渐开线公式逐点计算拟合点坐标0 H  S* ^- E- R- y" [
            TT = Abs(T) * J / (I - 1) '计算该点的展开角度' v0 q4 C- R- @
            P(J * 3) = R * (Cos(TT) + TT * Sin(TT)) + O(0) '计算该点横坐标(相对于基圆圆心)
" ]6 L$ W" x) g, A6 u+ g/ o            If T > 0 Then '判断逆时针展开还是顺时针展开* Q$ L1 Z! Z' V# n' c# t/ R
                P(J * 3 + 1) = R * (Sin(TT) - TT * Cos(TT)) + O(1) '逆时针展开时的该点纵坐标
5 ], [1 {5 a6 ~: D5 s# T            Else) x* h2 M( |' R& }, Q& ~% p
                P(J * 3 + 1) = -R * (Sin(TT) - TT * Cos(TT)) + O(1) '顺时针展开时的该点纵坐标* n2 }  x9 z9 @& a0 w
            End If
: T3 }) {# q( n4 p4 L        Next
1 ~! z) C' g+ }+ B
        T1(0) = 1 '起点切向
# H' i. N! Y/ n, r4 i
        T2(0) = Cos(T) '端点切向1 t! l" H# q% Q# M" e6 c# m+ G
        T2(1) = Sin(T)0 q) \! I! \+ w% U+ z( {8 O' _! k
        .ModelSpace.AddSpline P, T1, T2 '画样条曲线* Z+ F) A8 i* `& I4 u; ~+ ?: A, L
    End With
% L0 E( r* _: K: A4 M* H- A10: End Sub
* m8 c3 ?8 I: V
/ t9 l+ x- Q9 W9 h5 i1 U$ d' X( l6 E
加载程序方法一:
6 @8 p5 x. j. V2 @$ n3 }5 T2 Y1、拷贝上面的源代码;" o+ P$ V+ `% {" h& A4 E" e
2、打开autocad;/ q! O9 B- s' w8 _9 h0 \8 {
3、Alt+F11
, j# a" h. g* u$ \; x4 a4、“插入”→“模块”→粘贴
  A  }/ g, j: [+ o8 I. D% r, s; A, |( k, C: V2 T4 s* Q
加载程序方法二:
: C$ \5 N8 ]7 g( |# I1、下载附件并解压( H  l2 N0 h9 O! D2 D6 z
2、打开autocad;
4 ~3 ?9 Z- w8 Z- f; c3、在命令行键入“appload”(或“工具”→“加载应用程序(L)..."),加载解压后的文件,关闭加载窗口;
( P# f0 h: w5 z7 F. Q" j  D! C
9 v" |6 p+ o& J4 \2 d& B, ^' A- S  }使用方法一:  A; h' n7 K3 w7 I2 g6 B' O
在VBA编辑器界面,按F5,回到CAD界面按命令行提示操作。图形在模型空间生成。
5 Z/ ^/ U4 V" b2 k' v1 t4 R* D
# S0 Q# _6 y7 Q$ W8 {7 K使用方法二:( g, g, U/ x! Z( n  l
在CAD模型空间,命令行键入“-vbarun",回车,"jkx",回车,按命令行提示操作。. m. ?- }+ J7 m0 h3 u
6 b3 L% c$ C! u
使用方法三:
* W2 x; I6 q, r4 p) S3 }$ A4 B在CAD模型空间,Alt+F8,选择名为“JKX”的宏,“运行”,按命令行提示操作。. G  c4 R0 |. W0 e

6 U( l2 E0 L; ]+ O$ P) T- b[ 本帖最后由 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 | 显示全部楼层 来自: 中国北京
首先对大家道歉,但是我真的没有其他意思,我只是看我发了这个帖子后一直没人给的答案,所以才说了上面的话,但是无论从字面还是从我本人来说都没有任何贬义,可能有歧异呵呵.对不起大家嘿嘿.
9 E% o2 Q, g9 k3 _, ~Dim I As Integer '样条曲线拟合点数量3 B6 @- g" p3 G
我想问下如果是拟合出来的那又如何能达到所要求的精度呢?拟合点的数量取多少合适呢?
: i. x6 ^) T- r- N4 t- b: Q6 |+ I0 y+ P- k
[ 本帖最后由 qinjiaqing 于 2007-3-31 17:20 编辑 ]
发表于 2007-3-31 21:48:54 | 显示全部楼层 来自: 中国湖北荆州
5楼的厉害啊!
$ V# z) |5 E4 O% o- Q) p% R. ?! t+ V  Z大家应该多学学
发表于 2007-4-14 17:57:49 | 显示全部楼层 来自: 中国四川成都

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

http://www.3dportal.cn/discuz/viewthread.php?tid=250487&extra=page%3D1. ~; x1 Q0 w+ A; E
不仅仅可以画渐开线。
发表于 2007-4-14 22:27:49 | 显示全部楼层 来自: 中国广东广州
哈哈,,CAD就这个好,可以编程,,省去不少烦恼
发表于 2007-4-15 00:14:53 | 显示全部楼层 来自: 中国浙江金华
CAD是不是只可以用C语言编程啊???
. i$ ~6 d# X7 t0 J5 X3 K& S: w4 f1 o1 r: n
不能用DELPHI吧?????
发表于 2007-4-15 20:27:02 | 显示全部楼层 来自: 中国江苏苏州
原帖由 XZY521 于 2007-4-15 00:14 发表 http://www.3dportal.cn/discuz/images/common/back.gif
3 ]: w; I# V  ~: G0 V: h) N) lCAD是不是只可以用C语言编程啊???! K4 d% e  x3 k5 t7 s  t( g9 M

0 i$ l3 `# R# w6 V: r/ @  G不能用DELPHI吧?????
# p8 ^$ W; e6 w: `( e/ h* m% g

+ X- h7 h* _& f1 I; X5 A8 n) k/ W! B) O7 c) A0 N5 ?+ `- O- W; g& S
干国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 )

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