fmfm 发表于 2004-4-22 21:01:00

用vba保存图形中所有直线坐标时的问题

是这样的,我的目的是用二维数组保存图形中所有直线的起点终点坐标。比如有10条直线<BR>那我弄个10*4的数组<BR>每行中前两个保存每条线的起点坐标,后两个保存<BR>终点坐标。


程序在下面,程序太烂了,555。请高手帮忙看看啦。好郁闷


Private Sub CommandButton1_Click()<BR>Dim myss As AcadSelectionSet<BR>Set myss = ThisDrawing.SelectionSets.Add("125555553")<BR>Dim llll As AcadLine<BR>Dim gpcode(0) As Integer<BR>Dim datavalue(0) As Variant<BR>Dim linecount, i, j, q As Integer<BR>Dim stpt, enpt As Variant<BR>gpcode(0) = 0<BR>datavalue(0) = "line"<BR>myss.Select acSelectionSetAll, , , gpcode, datavalue<BR>ReDim lineco(myss.count - 1, 3) As Variant<BR>i = 0<BR>For Each lll In myss<BR>                       For j = 0 To 1<BR>                       lineco(i, j) = lll.StartPoint(0)<BR>                       lineco(i, j + 1) = lll.StartPoint(1)<BR>                       Next<BR>                       For q = 2 To 3<BR>                       lineco(i, q) = lll.EndPoint(0)<BR>                       lineco(i, q + 1) = lll.EndPoint(1)<BR>                       Next<BR>                       i = i + 1<BR>Next<BR>myss.Delete<BR>End Sub

efan2000 发表于 2004-4-22 21:42:00

Dim llll As AcadLine<BR>For Each lll In myss<BR>声明的和使用的变量名称不一致。

bluemoon 发表于 2004-4-22 22:05:00

lineco(i, j) = lll.StartPoint(0)<BR>                       lineco(i, j + 1) = lll.StartPoint(1)<BR>不能直接引用StartPoint


必须先定义


dim vst as variant


vst=lll.StartPoint


vst=lineco(i, j)

mikewolf2k 发表于 2004-4-22 22:09:00

2楼发现的问题应该是笔误,一运行就可以发现


3楼发现的问题很关键,不能直接取insertionpoint(0),要先pnt=insertionpoint ,然后x=pnt(0)

雪山飞狐_lzh 发表于 2004-4-22 22:14:00

bluemoon发表于2004-4-22 22:05:00static/image/common/back.giflineco(i, j) = lll.StartPoint(0)                       lineco(i, j + 1) = lll.StartPoint(1)不能直接引用StartPoint



必须先定义


dim vst as variant


vst=ll...

<BR>没有这回事,我从来都是这么干的

efan2000 发表于 2004-4-22 22:20:00

lll.StartPoint(0)<BR>这种用法分两种情况,一种是lll确定了对象类型,如上例的为AcadLine,可以这样使用,而另一种是不确定类型,比如lll为Object,则必须先保存到一个Variant类型的变量中,再检索其中的数据。


dim vst as variant


vst=lll.StartPoint


lineco(i, j)=vst

mikewolf2k 发表于 2004-4-22 22:26:00

选择集必须要通过其它变量取得点坐标.


5楼能不能发个你直接取点坐标的代码?

雪山飞狐_lzh 发表于 2004-4-22 22:28:00

算了,不用猜谜了,实际是这里:


ReDim lineco(myss.count - 1, 3) As Variant


多维数组只能改变最后一维

fmfm 发表于 2004-4-23 15:51:00

呵呵,现在程序可以了 是 llll --lll 的问题


还有像<A name=14256><FONT color=#000066><B>lzh741206</B></FONT></A>说的,startpoint可以直接用的


不过有一点,就是用ReDim直接定义数组前面的好象可以改前面的

雪山飞狐_lzh 发表于 2004-4-23 16:34:00

是我搞错了,哈哈,我想到<b>Preserve</b> 关键字上去了


如果使用了 <B>Preserve</B> 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
页: [1] 2
查看完整版本: 用vba保存图形中所有直线坐标时的问题