乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 119|回复: 9

[已解决]遍历数组造成原对象消失的情况还是不太懂

[复制链接]

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-2 16:23:00 | 显示全部楼层 |阅读模式

zeoquoztdhj.JPG

zeoquoztdhj.JPG


之前发了一个帖子:
我的源代码是:
照着老大的做法,vb提示“实时错误,要求对象”,在For i=gearObj.Count-1 to 0这一句上
后来又想了一些方法,但都没成功,没办法只能来问大侠了。。。
我的源码是:
dim gearobj as variant
Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)
dim i as integer
For i=gearObj.Count-1 to 0                            ‘这句出错
cylinder.Boolean 0, gearObj(i)
Next

回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2009-6-2 17:51:00 | 显示全部楼层
直接把gearObj.Count写到循环中是有问题的,因为每一循环gearObj.Count值都在变。
回复

使用道具 举报

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-2 17:56:00 | 显示全部楼层

具体要怎么弄啊,还是不懂啊,恳求大侠帮帮我啊
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2009-6-2 22:45:00 | 显示全部楼层
我的意思是先把gearObj.Count保存到一个变量中,如
ObjCount=gearObj.Count
然后用
For i=ObjCount-1 to 0
回复

使用道具 举报

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-3 00:23:00 | 显示全部楼层

objcount = gearObj.Count这句还是提示“实时错误424,要求对象”啊 5555555
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2009-6-3 00:28:00 | 显示全部楼层
代码贴完整点
回复

使用道具 举报

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-3 00:32:00 | 显示全部楼层

Dim objcount As Integer
objcount = gearObj.Count
For i = objcount - 1 To 0
cylinder.Boolean 0, gearObj(i)
Next
前面关于齿轮生成的代码写得很乱,我把后面的整理一下贴出来
回复

使用道具 举报

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-3 00:37:00 | 显示全部楼层

      ‘前面的代码太乱了,就是先形成了单个轮齿面域regobj,然后沿着path路径拉伸(画的斜齿轮,路径弄成斜的),形成斜齿轮单个齿圈。
Dim gearR As Acad3DSolid                                                             ’geaR是单个齿圈,阵列一周后形成齿轮所有齿圈(所有齿圈就是后面的gearobj)
Set gearR = acadApp.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(regObj(0), path)    '面域是regobj,样条曲线是path
Dim gearObj As Variant
Dim pnt(0 To 2) As Double
pnt(0) = InsertPnt(0): pnt(1) = InsertPnt(1): pnt(2) = InsertPnt(2) + L / 2            ‘L是齿宽
Dim cylinder As Object                                                                                   ’cylinder是齿根圆圆柱,下面与gearobj进行交布尔运算
gearObj = gearR.ArrayPolar(gearZ, 6.28, InsertPnt)                                      'gearz是齿数
Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)
Dim objcount As Integer                     
objcount = gearObj.Count                              
For i = objcount - 1 To 0                                    ’这里会报错,实时错误,要求对象
cylinder.Boolean 0, gearObj(i)
Next
  ‘我用for i=0 to ubound(gearobj)就会有一个轮齿未进行布尔运算,我齿数设为30时,感觉ubound(gearobj)应该是29(包括0),但是我逐行调试程序时ubound(gearobj)显示为28,搞不懂是怎么回事????
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2009-6-3 06:22:00 | 显示全部楼层
不好意思,有误。
1. objcount应该用 objcount=ubound(gearobj)
2.应该是 for i=0 to objcount step -1
3.阵列后的对象数组中并不包含原对象,所以循环并集完成后,需要把原对象也并集一次。
4.原来你所用的for each obj in gearobj 是没有问题的,一样可以进行循环。
另外,以后贴代码时,最好象这一次一样,贴全,这样找问题容易一些。
回复

使用道具 举报

17

主题

52

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2009-6-3 09:03:00 | 显示全部楼层
搞定了!我理解了老大说的第三点的意思了,第一次先把gearR(原对象)和cylinder进行交运算,后面在和数组对象进行交运算,成功解决了这个问题!代码都在这:
Dim gearR As Acad3DSolid                                                             ’geaR是单个齿圈,阵列一周后形成齿轮所有齿圈(所有齿圈就是后面的gearobj)
Set gearR = acadApp.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(regObj(0), path)    '面域是regobj,样条曲线是path
Dim gearObj As Variant
Dim pnt(0 To 2) As Double
pnt(0) = InsertPnt(0): pnt(1) = InsertPnt(1): pnt(2) = InsertPnt(2) + L / 2            ‘L是齿宽
Dim cylinder As Object                                                                                   ’cylinder是齿根圆圆柱,下面与gearobj进行交布尔运算
gearObj = gearR.ArrayPolar(gearZ, 6.28, InsertPnt)                                      'gearz是齿数
Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)
cylinder.boolean 0,gearR                          '先和原对象进行交运算
Dim obj
For Each obj In gearObj
cylinder.Boolean acUnion, obj
Next               
                          
两个老大真是我心中的神啊!!感激不尽!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-2 03:56 , Processed in 0.257819 second(s), 76 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表