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