QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 31053|回复: 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还没这个功能.: V6 W3 }& _" w$ S/ P: d" n
另外可以从三维网上找一下渐开线弹簧的LISP程序,也许可以一试!
 楼主| 发表于 2007-3-30 14:20:48 | 显示全部楼层 来自: 中国北京
CAD能画参数曲线吗?如果能画怎么没见在论坛里有人提起呢
发表于 2007-3-31 11:57:59 | 显示全部楼层 来自: 中国辽宁营口
原帖由 qinjiaqing 于 2007-3-30 10:14 发表$ W7 x9 t1 j; W, `: E2 |; D
怎么没人应战呢?不象三维网的作风啊?骨头越硬越要啃啊.

% p  d3 M1 h  E. y/ {) w
5 x) o  A5 N3 E5 A! y  ^/ [, h5 R楼主这种话是很无礼的!!!这个坛子里高手如云,只是人家都不屑于理你罢了。
% _, z1 {  N6 Q$ C. O4 a6 N6 B考虑到其它网友可能有关于渐开线画法的要求,把我的常用方法发上来,供大家参考:
: I6 z& B9 ]! ^" _6 ^( _
, L6 B0 V' f% [$ G% xSub JKX(), E5 `* P3 c6 U4 o
    Dim O As Variant '基圆圆心坐标" ]* }+ o2 z) P. x$ R, W. n0 X2 `9 H
    Dim R As Double '基圆半径
* c2 }& X, V/ x" H( E8 y7 Q  j! Y
    Dim T As Double '展开角度(正角度为逆时针,负角度为顺时针)  w) N, U5 f) l$ h' B7 U, S
    Dim C As AcadCircle '基圆  j5 ^. R2 g, m& G
    Dim I As Integer '样条曲线拟合点数量  g/ G6 n5 ?, S6 f7 {: B
    Dim J As Integer '循环变量, C9 Q# J  s6 I3 h5 Z0 |8 `
    Dim TT As Double '逐点展开时的展开角度
% D! i- Q" x- J7 `  N2 |    Dim P() As Double '样条曲线拟合点坐标
; U9 u! j$ g3 t1 T5 ]7 f; ~    Dim T1(2) As Double '样条曲线起点切线方向  L. Y0 ]9 M& b5 E; e/ ^. Q- f
    Dim T2(2) As Double '样条曲线端点切线方向
! p8 `, X" l2 I. k9 }2 ~( N0 d1 X    * v5 j) I) P* {0 W) D3 E
    With ThisDrawing, d& e8 D  L% {2 ]4 @
        On Error GoTo 10 '用户输入基圆圆心和半径出错时退出程序# J6 A7 Q1 m# b2 ?/ l0 i0 X
        O = .Utility.GetPoint(, vbCrLf & "指定基圆的圆心:") '用户输入基圆圆心
, |* M8 c7 |: [& @& g        R = .Utility.GetDistance(O, vbCrLf & "指定基圆的半径:") '用户输入基圆半径
( k, N! E/ _$ Y6 V3 D        Set C = .ModelSpace.AddCircle(O, R) '画基圆
5 w, P* Q0 v) m% o! v! h        On Error Resume Next '用户输入展开角度和拟合点数量出错时检查出错方式,判断是否为默认输入8 o) `! _2 i' j* F: x
        Do While T = 0 '用户输入展开角度为0时要求用户重新输入
# B: V6 ~' J2 ?4 c            T = .Utility.GetReal(vbCrLf & "指定展开角度<360>:") '用户输入展开角度
6 T6 {8 d) r% [& @. l% z            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,展开角度默认为360度
- d: ?3 C8 ~$ W+ H( d4 q0 m4 k                T = 360
; ^+ K! y  n( ~5 f7 n            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序
2 c7 [5 ~! y) d7 j+ g8 D6 U                C.Delete
% r! G" `# ]% g1 I8 G* Y* A                Exit Sub
8 I1 y$ x4 q0 X# r; N            End If
% S  w! |+ V) v5 C$ l. h        Loop! J! B! B1 h7 }
        T = T * 1.74532925199433E-02 '换算为弧度
0 d: V# Z  o* J& P) m, S# k$ p  `5 G        Err.Clear '清空错误代码,便于用户下一步输入
# `- o# n+ r* Q, d- O) ~        Do While I < 3 '用户输入拟合点数量小于3时要求用户重新输入% I* q) o/ u7 l0 k4 b
            I = .Utility.GetInteger(vbCrLf & "指定样条曲线拟合点数量<50>:") '用户输入拟合点数量2 S6 A* h% p" w) a$ @7 b8 p% L7 `
            If Err.Number = -2145320928 Then '命令行为空时用户按回车或空格键,拟合点数量默认为500 r3 v3 V- ~- r: @* B
                I = 50, b/ O: s, h4 B2 f, U; a$ I$ {' S& f
            ElseIf Err.Number <> 0 Then '用户按ESC键等其它错误,删除已画成的圆C,退出程序" E0 y8 L  w* W! b
                C.Delete" }* n" }& n2 u) P* U4 j
                Exit Sub
) ^& h3 G4 ~' ^* o  B            End If
! b5 _0 \9 O4 K5 @9 N
        Loop
8 u9 e! Y4 T8 x4 m6 B; g! {        ReDim P(I * 3 - 1) '按拟合点数量重定义拟合点坐标数组
) ~4 ^8 ^0 A) w: g/ H/ B  A: X       For J = 0 To I - 1 '按渐开线公式逐点计算拟合点坐标/ J2 P+ l- g1 r' b9 \' x4 A  u
            TT = Abs(T) * J / (I - 1) '计算该点的展开角度
9 m- U1 z1 [/ i2 l. p
            P(J * 3) = R * (Cos(TT) + TT * Sin(TT)) + O(0) '计算该点横坐标(相对于基圆圆心)
7 T- O& Z3 u3 B, F( ~+ }0 b            If T > 0 Then '判断逆时针展开还是顺时针展开
# F0 n" q+ C! k; W5 W& q1 o6 Z                P(J * 3 + 1) = R * (Sin(TT) - TT * Cos(TT)) + O(1) '逆时针展开时的该点纵坐标# A/ Z$ P  Q& i, J6 h
            Else& u7 `, X. o8 a, D" g  g
                P(J * 3 + 1) = -R * (Sin(TT) - TT * Cos(TT)) + O(1) '顺时针展开时的该点纵坐标: h- `$ N3 }- R3 r* e7 {" t) u
            End If% q+ s; U* D) B
        Next4 H/ \) ~+ d6 k8 g$ ^
        T1(0) = 1 '起点切向
8 T7 P% C/ D8 Q9 E) Q2 W# x8 Z/ N8 D
        T2(0) = Cos(T) '端点切向2 b! z5 n3 r9 ?8 L9 p5 s
        T2(1) = Sin(T)# T9 i% U4 N9 b
        .ModelSpace.AddSpline P, T1, T2 '画样条曲线
+ ~# ~3 r( K/ N& Q! G: D- |    End With
* K4 V7 f, G/ [10: End Sub+ J# _  w% y2 P0 [: X3 e

  D0 F6 C1 H9 d( ^* F* h# y3 d7 l
9 I% X* B% U2 y$ P0 b$ l( q5 c: K加载程序方法一:, k  i1 V1 B9 r/ \
1、拷贝上面的源代码;
5 C  Y2 _3 c, Y  e( _% |5 ^2、打开autocad;8 z1 g0 f3 F$ z# x
3、Alt+F11
- X) D, T! Q& `# D! g/ ?4、“插入”→“模块”→粘贴; I9 l& y4 f$ L! W+ O
3 _4 e; W; ]+ E& ?' X2 {* ]% \6 A
加载程序方法二:: _) w+ {4 U$ i' e+ D  ^7 h
1、下载附件并解压
1 ^( Z- z& T/ \; {7 t) w2、打开autocad;9 n4 d+ F) D4 d- O7 I
3、在命令行键入“appload”(或“工具”→“加载应用程序(L)..."),加载解压后的文件,关闭加载窗口;
  o4 b, r; C, U9 @% u; g" T: d  p+ H; p8 I* H% u
使用方法一:3 V$ M4 m; s& N
在VBA编辑器界面,按F5,回到CAD界面按命令行提示操作。图形在模型空间生成。& ~! Q. T- {5 t! I) o4 y+ x
5 \+ i! _0 v% x
使用方法二:
3 f  J6 }7 O1 I: X' M6 Q在CAD模型空间,命令行键入“-vbarun",回车,"jkx",回车,按命令行提示操作。
- U( \4 c5 ?6 C* K9 t! U4 U* w! E1 X3 R2 F% o( ?+ K! [4 O
使用方法三:
% `% s1 G  m# @  M% t在CAD模型空间,Alt+F8,选择名为“JKX”的宏,“运行”,按命令行提示操作。5 V: k" K/ p: y! J" p) P1 _
: l3 z2 z" Q6 N6 s
[ 本帖最后由 woaishuijia 于 2007-3-31 12:58 编辑 ]

JKX.rar

7.6 KB, 下载次数: 594

评分

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

查看全部评分

发表于 2007-3-31 12:06:02 | 显示全部楼层 来自: 中国山东烟台
楼上真是太历害了,这样的水平人就是高啊
 楼主| 发表于 2007-3-31 17:16:23 | 显示全部楼层 来自: 中国北京
首先对大家道歉,但是我真的没有其他意思,我只是看我发了这个帖子后一直没人给的答案,所以才说了上面的话,但是无论从字面还是从我本人来说都没有任何贬义,可能有歧异呵呵.对不起大家嘿嘿.
& q# |! d* B2 d4 N1 cDim I As Integer '样条曲线拟合点数量
% u) \$ P* f' A/ k我想问下如果是拟合出来的那又如何能达到所要求的精度呢?拟合点的数量取多少合适呢?: L, j% u8 w3 E6 o! F

9 d9 c/ q1 p9 d- G- h# Z$ b; [[ 本帖最后由 qinjiaqing 于 2007-3-31 17:20 编辑 ]
发表于 2007-3-31 21:48:54 | 显示全部楼层 来自: 中国湖北荆州
5楼的厉害啊!
3 g% K6 u6 F6 |; P) K大家应该多学学
发表于 2007-4-14 17:57:49 | 显示全部楼层 来自: 中国四川成都

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

http://www.3dportal.cn/discuz/viewthread.php?tid=250487&extra=page%3D1
8 l' \  @/ q0 {) I$ l! c; F不仅仅可以画渐开线。
发表于 2007-4-14 22:27:49 | 显示全部楼层 来自: 中国广东广州
哈哈,,CAD就这个好,可以编程,,省去不少烦恼
发表于 2007-4-15 00:14:53 | 显示全部楼层 来自: 中国浙江金华
CAD是不是只可以用C语言编程啊???
) ^/ `( S' M& c4 J3 [5 |, l8 N. g6 }' m
不能用DELPHI吧?????
发表于 2007-4-15 20:27:02 | 显示全部楼层 来自: 中国江苏苏州
原帖由 XZY521 于 2007-4-15 00:14 发表 http://www.3dportal.cn/discuz/images/common/back.gif5 t' n2 F& f# t2 g0 n" J7 i; E, j
CAD是不是只可以用C语言编程啊???1 q+ j9 G1 V5 Q( A: S
, b7 }, e, b9 z. c. E
不能用DELPHI吧?????

  u$ z( N. `2 G" p/ @3 |
: h2 C$ u5 C3 W) k4 ^; i: C1 q5 Q$ ^" j4 x* h2 g& ]" f+ E1 F* y
干国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 )

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