[已解决]遍历数组造成原对象消失的情况还是不太懂
本帖最后由 作者 于 2009-6-3 9:04:59 编辑 <br /><br /> <p></p><p>之前发了一个帖子:<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=75425&replyID=&skin=1">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=75425&replyID=&skin=1</a></p><p>我的源代码是:</p><p>照着老大的做法,vb提示“实时错误,要求对象”,在For i=gearObj.Count-1 to 0这一句上</p><p>后来又想了一些方法,但都没成功,没办法只能来问大侠了。。。</p><p>我的源码是:<br/>dim gearobj as variant</p><p>Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)</p><p>dim i as integer</p><p>For i=gearObj.Count-1 to 0 ‘这句出错<br/>cylinder.Boolean 0, gearObj(i)<br/>Next<br/><br/><br/></p> 直接把gearObj.Count写到循环中是有问题的,因为每一循环gearObj.Count值都在变。 mccad发表于2009-6-2 17:51:00static/image/common/back.gif直接把gearObj.Count写到循环中是有问题的,因为每一循环gearObj.Count值都在变。<p></p>具体要怎么弄啊,还是不懂啊,恳求大侠帮帮我啊 <p>我的意思是先把gearObj.Count保存到一个变量中,如<br/>ObjCount=gearObj.Count<br/>然后用<br/>For i=ObjCount-1 to 0</p> mccad发表于2009-6-2 22:45:00static/image/common/back.gif我的意思是先把gearObj.Count保存到一个变量中,如ObjCount=gearObj.Count然后用For i=ObjCount-1 to 0
<p>objcount = gearObj.Count这句还是提示“实时错误424,要求对象”啊 5555555</p><p></p> <p>代码贴完整点</p> 本帖最后由 作者 于 2009-6-3 0:54:17 编辑 <br /><br /> <p>Dim objcount As Integer<br/>objcount = gearObj.Count<br/>For i = objcount - 1 To 0<br/>cylinder.Boolean 0, gearObj(i)<br/>Next</p><p>前面关于齿轮生成的代码写得很乱,我把后面的整理一下贴出来</p> 本帖最后由 作者 于 2009-6-3 1:02:29 编辑 <br /><br /> <p> ‘前面的代码太乱了,就是先形成了单个轮齿面域regobj,然后沿着path路径拉伸(画的斜齿轮,路径弄成斜的),形成斜齿轮单个齿圈。<br/>Dim gearR As Acad3DSolid ’geaR是单个齿圈,阵列一周后形成齿轮所有齿圈(所有齿圈就是后面的gearobj)<br/>Set gearR = acadApp.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(regObj(0), path) '面域是regobj,样条曲线是path<br/>Dim gearObj As Variant<br/>Dim pnt(0 To 2) As Double<br/>pnt(0) = InsertPnt(0): pnt(1) = InsertPnt(1): pnt(2) = InsertPnt(2) + L / 2 ‘L是齿宽<br/>Dim cylinder As Object ’cylinder是齿根圆圆柱,下面与gearobj进行交布尔运算<br/>gearObj = gearR.ArrayPolar(gearZ, 6.28, InsertPnt) 'gearz是齿数<br/>Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)<br/>Dim objcount As Integer <br/>objcount = gearObj.Count </p><p> For i = objcount - 1 To 0 ’这里会报错,实时错误,要求对象<br/>cylinder.Boolean 0, gearObj(i)<br/>Next</p><p> ‘我用for i=0 to ubound(gearobj)就会有一个轮齿未进行布尔运算,我齿数设为30时,感觉ubound(gearobj)应该是29(包括0),但是我逐行调试程序时ubound(gearobj)显示为28,搞不懂是怎么回事????<br/></p> <p>不好意思,有误。</p><p>1. objcount应该用 objcount=ubound(gearobj)</p><p>2.应该是 for i=0 to objcount step -1</p><p>3.阵列后的对象数组中并不包含原对象,所以循环并集完成后,需要把原对象也并集一次。</p><p>4.原来你所用的for each obj in gearobj 是没有问题的,一样可以进行循环。</p><p>另外,以后贴代码时,最好象这一次一样,贴全,这样找问题容易一些。</p> <p>搞定了!我理解了老大说的第三点的意思了,第一次先把gearR(原对象)和cylinder进行交运算,后面在和数组对象进行交运算,成功解决了这个问题!代码都在这:</p><p>Dim gearR As Acad3DSolid ’geaR是单个齿圈,阵列一周后形成齿轮所有齿圈(所有齿圈就是后面的gearobj)<br/>Set gearR = acadApp.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(regObj(0), path) '面域是regobj,样条曲线是path<br/>Dim gearObj As Variant<br/>Dim pnt(0 To 2) As Double<br/>pnt(0) = InsertPnt(0): pnt(1) = InsertPnt(1): pnt(2) = InsertPnt(2) + L / 2 ‘L是齿宽<br/>Dim cylinder As Object ’cylinder是齿根圆圆柱,下面与gearobj进行交布尔运算<br/>gearObj = gearR.ArrayPolar(gearZ, 6.28, InsertPnt) 'gearz是齿数<br/>Set cylinder = acadApp.ActiveDocument.ModelSpace.AddCylinder(pnt, Rf, L)</p><p>cylinder.boolean 0,gearR '先和原对象进行交运算<br/>Dim obj</p><p>For Each obj In gearObj<br/>cylinder.Boolean acUnion, obj<br/>Next <br/> </p><p>两个老大真是我心中的神啊!!感激不尽!!</p>
页:
[1]