乐筑天下

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

不定维数组

[复制链接]
jhl

4

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
26
发表于 2002-7-12 09:39:00 | 显示全部楼层 |阅读模式
vba中有无方法建立二维不定维数组,问题是这样的:我需要依次从当前图形中选在几个选择集,然后取出其控制点排序后重生成图形,首先用户选取几个选择集是不确定的,其次,每个选择集中所含控制点数也是不确定的,这样,我起初打算使用二维数组,在读取选择集中每一对象控制点的过程中来redim其维数,但是是行不通的,因为该数组第二维无法统一,就是说每个选择集的点数是不同的.请问如何解决?
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2002-7-15 13:23:00 | 显示全部楼层
对你的问题还有些不明白:
1、用户提供的地形线是什么对象类型(例如:AcadSpline)?
2、RayObj在你的程序中是什么类型(你的Dim语句)?
3、我个人理解,版主的意思是IntersectWith函数前那个Set不需要,而不是说不用地形线集合(Set)。
回复

使用道具 举报

jhl

4

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
26
发表于 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
回复

使用道具 举报

jhl

4

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
26
发表于 2002-7-12 16:28:00 | 显示全部楼层

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

使用道具 举报

jhl

4

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
26
发表于 2002-7-12 17:40:00 | 显示全部楼层
版主,该问题已解决,问题出在:redim语句只能应用于二维及以上数组的最后一维,还是因为没有仔细阅读帮助文件.认识到这一点,程序中略加修改,就可通过了
回复

使用道具 举报

jhl

4

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
26
发表于 2002-7-12 22:00:00 | 显示全部楼层

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编辑过]
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2002-7-12 22:30:00 | 显示全部楼层
至于第二个问题,不要用set应该可能,因为set对于对象才有效
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 06:42 , Processed in 0.282183 second(s), 66 queries .

© 2020-2024 乐筑天下

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