jhl 发表于 2002-7-12 09:39:00

不定维数组

vba中有无方法建立二维不定维数组,问题是这样的:我需要依次从当前图形中选在几个选择集,然后取出其控制点排序后重生成图形,首先用户选取几个选择集是不确定的,其次,每个选择集中所含控制点数也是不确定的,这样,我起初打算使用二维数组,在读取选择集中每一对象控制点的过程中来redim其维数,但是是行不通的,因为该数组第二维无法统一,就是说每个选择集的点数是不同的.请问如何解决?

leeyeafu 发表于 2002-7-15 13:23:00

对你的问题还有些不明白

对你的问题还有些不明白:
1、用户提供的地形线是什么对象类型(例如:AcadSpline)?
2、RayObj在你的程序中是什么类型(你的Dim语句)?
3、我个人理解,版主的意思是IntersectWith函数前那个Set不需要,而不是说不用地形线集合(Set)。

jhl 发表于 2002-7-12 11:45:00

对上述问题的初步解决方法:

不知这样好不好:仍采用双重循环,第一重由用户选择集数目确定,不存在问题,第二维需从图形中提取数据,如果是首次第一重循环或该次提取数据量(本程序中为点数)大于当前的第二维的上界,这时方可用redim preserve语句对当前第二维进行扩充,则之前的第二维数据自动补零,之后程序中控制,如数据为0则不进行原定操作.缩短程序如下:
For k = 0 To UBound(LayerLineSele)
For Each entry In LayerLineSele(k)
   ......
   ElseIf (TypeOf entry Is AcadPolyline) Then
       Dim plctrlpnts As Variant
       plctrlpnts = entry.Coordinates
       If k = 0 Or i + UBound(plctrlpnts) > UBound(LayerlinePoints, 2) Then
         ReDim Preserve LayerlinePoints(k, i + UBound(plctrlpnts))
       End If
       For t = 0 To UBound(plctrlpnts)
          LayerlinePoints(k, i + t) = plctrlpnts(t)
       Next t
       i = i + UBound(plctrlpnts) + 1
       ......
    Next
Next k
End Sub

mccad 发表于 2002-7-12 12:25:00

把几个选择集合并成一个选择集再做吧,实用函数栏目中的相应函数

jhl 发表于 2002-7-12 16:28:00

不能合并

本帖最后由 作者 于 2002-7-12 16:28:56 编辑

因为对程序功能的要求,不能把几个选择集合并起来做,因为要分别对几个选择集中的控制点排序,然后重现.今天按上次帖子上的方法做了以后,应该可以成功,只是还有一些小问题过不去:首先dim points() as double,而后再以变量将其redim为二维,程序均可通过.只是在外循环进行到第二次时,总是提示下标越界,通过观察程序,我觉得问题好像出在对第一维的redim上,但无论怎么修改,都过不去.不知是什么原因?用不用我把程序发过去呢?不好意思,问的都是vb中的问题,但确实是因为与cad图形相关,才出现了如此多的不确定因素.


jhl 发表于 2002-7-12 17:40:00

solved

版主,该问题已解决,问题出在:redim语句只能应用于二维及以上数组的最后一维,还是因为没有仔细阅读帮助文件.认识到这一点,程序中略加修改,就可通过了

jhl 发表于 2002-7-12 22:00:00

问:

本帖最后由 作者 于 2002-7-12 22:00:54 编辑

1、为什么用thisdrawing.modelspace.objectname.delete无法删除掉对象,而直接用objectname.delete就可以删掉呢?
2、求一条射线与一个选择集的交点,用下列语句实现,却显示错误,应该怎么实现呢?
dim landformsele as acadselectionset
dim entry as acadobject
dim intpnt as variant
landformsele.selectonscreen
for each entry in landformsele
Set IntPnt = RayObj.IntersectWith(Entry, acExtendBoth) '该句显示类型不匹配错误
next



[此贴子已经被作者于2002-7-12 21:00:38编辑过]

mccad 发表于 2002-7-12 22:30:00

objectname本身就是你需要的对象,为什么还要加那么多的前缀

至于第二个问题,不要用set应该可能,因为set对于对象才有效

jhl 发表于 2002-7-12 23:09:00

可是真的必须用set才能实现我想要的功能

mccad 发表于 2002-7-12 23:18:00

为什么,你需要什么样的功能?

页: [1] 2
查看完整版本: 不定维数组