找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: ahlzl

[原创]:三维螺旋线

[复制链接]
发表于 2003-5-17 15:44:24 | 显示全部楼层
切换到正视图,画出弹簧的截面圆,进行2维面拉伸(用路径),再用3维面拉伸
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-17 15:45:27 | 显示全部楼层
再用阵列
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-17 15:57:33 | 显示全部楼层
最初由 herohao 发布
[B]再用阵列
完 [/B]


我还没细看过程,正在写VBA程序。可你这弹簧太……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-17 17:05:12 | 显示全部楼层
33楼主,可以把程序帖上来吗,谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-17 20:41:07 | 显示全部楼层
我写了几行代码,还有点问题,指efan2000斑竹PP。
一、这段代码能画出一“整体”的三维螺旋线,但匝数无法输入,只能在代码中改。

Sub Example_Add3DPoly()
    '画一五匝三维螺旋线
    pi = 3.1415926535
    Dim polyObj As Acad3DPolyline
    Dim points(0 To 3 * 360 * 5 + 2) As Double
    Dim a, b, c, n As Integer
    Dim R, h As Double
    Dim pa As Variant
   
    pa = ThisDrawing.Utility.GetPoint(, "请输入基点:")
    R = ThisDrawing.Utility.GetDistance(pa, "请输入半径:")
    h = ThisDrawing.Utility.GetDistance(pa, "请单匝高度:")
    'n是匝数
    n = 5
   
    For a = 0 To 3 * 360 * n Step 3
    points(a) = pa(0) + R * Cos(2 * pi * (a / 3) / 360)
    Next
    For b = 1 To 3 * 360 * n + 1 Step 3
    points(b) = pa(1) + R * Sin(2 * pi * ((b - 1) / 3) / 360)
    Next
    For c = 2 To 3 * 360 * n + 2 Step 3
    points(c) = pa(2) + h * ((c - 2) / 3) / 360
    Next
    Set polyObj = ThisDrawing.ModelSpace.Add3DPoly(points)
    ZoomAll
End Sub

二、这段代码能输入匝数,但画的不是一“整体”三维螺旋线。

Sub Example_Add3DPoly()
    pi = 3.1415926535
    Dim polyObj As Acad3DPolyline
    Dim points(0 To 3 * 360 + 2) As Double
    Dim a, b, c, n, m As Integer
    Dim R, h As Double
    Dim pa As Variant
   
    pa = ThisDrawing.Utility.GetPoint(, "请输入基点:")
    R = ThisDrawing.Utility.GetDistance(pa, "请输入半径:")
    h = ThisDrawing.Utility.GetDistance(pa, "请单匝高度:")
    n = ThisDrawing.Utility.GetReal("请输入匝数:")
   
    For m = 1 To n Step 1
    For a = 0 To 3 * 360 Step 3
    points(a) = pa(0) + R * Cos(2 * pi * (a / 3) / 360)
    Next
    For b = 1 To 3 * 360 + 1 Step 3
    points(b) = pa(1) + R * Sin(2 * pi * ((b - 1) / 3) / 360)
    Next
    For c = 2 To 3 * 360 + 2 Step 3
    points(c) = pa(2) + h * ((c - 2) / 3) / 360
    Next
    Set polyObj = ThisDrawing.ModelSpace.Add3DPoly(points)
    pa(2) = pa(2) + h
    Next
    ZoomAll
End Sub

to Laoyao:你的程序只能打开EXCEL,却没一条“画”的命令。不行!我又写了一段:
三、将附件解压在C盘根目录,运行下面代码,(速度很慢,也不方便,远不如上两段代码!)
Sub getEXCEL()
Dim excel As Object
Set excelworkbook = Workbooks.Open("c:\3.xls")
Set excel = excelworkbook.Application
excel.Visible = True

Dim xlSheet As Worksheet
Dim a, b, c As Double

Set xlSheet = excelworkbook.Sheets(1)

Dim Points(0 To 1800 * 3 + 2) As Double
Dim polyObj As Acad3DPolyline

For a = 0 To 1800 * 3 + 2 Step 3
Points(a) = xlSheet.Cells((a + 3) / 3, 2).Value
Next
For b = 1 To 1800 * 3 + 2 Step 3
Points(b) = xlSheet.Cells((b + 2) / 3, 3).Value
Next
For c = 2 To 1800 * 3 + 2 Step 3
Points(c) = xlSheet.Cells((c + 1) / 3, 4).Value
Next

Set polyObj = ThisDrawing.ModelSpace.Add3DPoly(Points)
excel.Quit
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-18 10:58:05 | 显示全部楼层
For a = 0 To 3 * 360 * n Step 3
points(a) = pa(0) + R * Cos(2 * pi * (a / 3) / 360)
Next
For b = 1 To 3 * 360 * n + 1 Step 3
points(b) = pa(1) + R * Sin(2 * pi * ((b - 1) / 3) / 360)
Next
For c = 2 To 3 * 360 * n + 2 Step 3
points(c) = pa(2) + h * ((c - 2) / 3) / 360
Next
这一部分可在合并在一个循环过程中。如:
For a = 0 To 3 * 360 * n Step 3
points(a) = pa(0) + R * Cos(2 * pi * (a / 3) / 360)
points(a+1) = pa(1) + R * Sin(2 * pi * (a / 3) / 360)
points(a+2) = pa(2) + h * (a / 3) / 360
Next
程序运行一个循环所花费的时间比三个循环的几乎节省了三分之二的时间。类似的,在EXCEL中的操作也可以这样修改:
Dim n As Integer
For a = 0 To 1800 * 3 + 2 Step 3
n=(a + 3) / 3
Points(a) = xlSheet.Cells(n, 2).Value
Points(a+1) = xlSheet.Cells(n, 3).Value
Points(a+2) = xlSheet.Cells(n, 4).Value
Next
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-18 13:32:55 | 显示全部楼层
Sub Example_Add3DPoly()

    Dim polyObj As Acad3DPolyline
    Dim points() As Double 'change
    Dim a, b, c, n As Integer
    Dim R, h As Double
    Dim pa As Variant
    Const PI = 3.1415926535

    pa = ThisDrawing.Utility.GetPoint(, "Input base point:")
    R = ThisDrawing.Utility.GetDistance(pa, "Input Radius:")
    h = ThisDrawing.Utility.GetDistance(pa, "Input height:")
    n = ThisDrawing.Utility.GetDistance(pa, "Input circles:") 'change

    ReDim points(0 To 3 * 360 * n + 2) As Double 'add

    For a = 0 To 3 * 360 * n Step 3
        points(a) = pa(0) + R * Cos(2 * PI * (a / 3) / 360)
        points(a + 1) = pa(1) + R * Sin(2 * PI * (a / 3) / 360)
        points(a + 2) = pa(2) + h * (a / 3) / 360
    Next

    Set polyObj = ThisDrawing.ModelSpace.Add3DPoly(points)
    ZoomAll
End Sub

如上修改后,可以输出任意匝.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-18 17:09:19 | 显示全部楼层
谢谢efan200和laoyao!虽然已是长老了,可VBA方面还是新手……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-1 19:28:19 | 显示全部楼层
能不能详细介绍一下做这些图片是步骤!请指教!
现在对这样一种曲线图,甚至螺旋形的图片是我的薄弱点!
看了后还真有点找到了师傅的感觉!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-12 22:56:36 | 显示全部楼层
最初由 ahlzl 发布
[B][QUOTE]最初由 Laoyao 发布
[B]Sub getDataFromEXCEL()
    Dim xlApp As Excel.Application
    Dim xlWorkBook As Workbook
    Dim xlSheet As Worksheet
    Dim a As Double
    'Open EXCEL
   ... [/B]

'open execel
if declare as not object,u sure include excel.tlb at vb
then
set xlapp=createobject("excel.application")
then ....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-12 23:44:18 | 显示全部楼层
我在这儿又贴了个改进的VBA程序和使用方法:http://www.xdcad.net/forum/showt ... d=317570#post317570
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-15 09:56:47 | 显示全部楼层
你可以将这个文件:3dspiral.zip文件解压后复制到你的硬功夫盘下,然后工具————Autolisp(s)————加载(l),就可以画出任意类形的弹黄类形了。然后在CAD中直接输入3dspiral(二维的用spiral)就可以了,紧接着是六个参数:
1。螺旋线的起点坐标;
2。起始半径;
3。你要的螺旋线的圈数;
4。螺旋线水平方向的间距(0就是等距离的。);
5。螺旋线竖直方向的间距;
6。最后是螺旋线的近似线数(默认是30,越大越精确。)。
注:这只是一种近似的画法,特别是非圆截面(矩形、棱形、梯形)的弹簧用此方法绘制是不可行的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-20 01:54:51 | 显示全部楼层
请问哪里有画3D弹簧的程序 下载
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-20 15:28:36 | 显示全部楼层
先看看这个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-20 15:34:44 | 显示全部楼层
我想应该能够满足大家的要求了吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:20 , Processed in 0.376793 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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