ntchjie 发表于 2004-11-16 20:15:00

[VBA]两个问题,很菜,请教

1、如何将选择集内各首尾相连的直线,圆弧或多义先连成多义线,能给出具体的函数或代码吗?

ntchjie 发表于 2004-11-16 20:18:00

2、遍历选择集内的物体,这些物体都有扩展数据的,我发现遍历后只能读出第一个物体的扩展数据,好像原来定义的xdata为variant类型,第一次赋值后,纪录下来了,第二次不可以重新赋值了,不知道为什么?

雪山飞狐_lzh 发表于 2004-11-16 20:51:00

用SendCommand方法调用Pedit命令最简单,VBA直接实现的话代码有点复杂,:)


第二个问题没看懂,有代码么?

ntchjie 发表于 2004-11-16 21:12:00

代码没有拷贝回来,明早再贴上吧。谢谢了。


从论坛里面搜索到SetBulge方法,如果用这个能不能实现?这个是专门对付圆弧的,主要是在圆弧方面有些复杂吧?

雪山飞狐_lzh 发表于 2004-11-16 21:25:00

提供一个思路吧


1、找到多义线的起始点,如果是闭合的就随便找一个


2、从起始点出发,依次找到下一个点,并记录该段的凸度,直线为0,圆弧的计算在本版找找,至于多义线,涉及正序和反序的问题


3、生成多义线,并设置各段凸度

ntchjie 发表于 2004-11-17 20:26:00

多谢了,应该不成问题,可以弄出来了。附上我的另外一段代码,请斑竹看看,为什么只能读出第一个数据。


Dim returnobj As Object<BR>Dim prjname As String<BR>Dim ss As Object<BR>Dim gpcode(1) As Integer<BR>Dim datavalue(1) As Variant<BR>Dim xdtype As Variant<BR>Dim xdata As Variant<BR>Dim p As Variant<BR>Dim ent As Object


'On Error Resume Next<BR>Call acadopen<BR>AppActivate "Autocad"<BR>Set acadutil = acadobj.ActiveDocument.Utility<BR>Call acadutil.GetEntity(returnobj, , "..选择任意井")<BR>prjname = returnobj.layer


Set ss = acadobj.ActiveDocument.SelectionSets.Add("*TEST*")<BR>gpcode(0) = 8: gpcode(1) = 1001<BR>datavalue(0) = prjname: datavalue(1) = "cj_gx_10"<BR>ss.Select 5, , , gpcode, datavalue<BR>'ss.selectonscreen gpcode, datavalue<BR>If ss.Count = 0 Then<BR>                       ss.Delete<BR>                       Exit Sub<BR>Else:<BR>                       grid.Rows = 1<BR>                       For Each ent In ss<BR>                                                       '逐个加入表格<BR>                                                       grid.AddItem (grid.Rows)<BR>                                                       returnobj.GetXData "cj_gx_10", xdtype, xdata<BR>                                                       grid.TextMatrix(grid.Rows - 1, 1) = xdata(4)<BR>                                                       grid.TextMatrix(grid.Rows - 1, 2) = ent.Handle<BR>                                                       grid.TextMatrix(grid.Rows - 1, 5) = xdata(3)<BR>                       Next ent<BR>End If<BR>ss.Delete


上面是vb代码,可以读出当前图形中所有的含某特定扩展数据的物体,我看了一下,实体的句饼是不同的也就是确实把各个实体读了出来,但是用returnobj.GetXData "cj_gx_10", xdtype, xdata


获取实体的扩展数据的时候,第一次是能获得的,到第二次的时候好像是不能获得的,所以写出来的数据都是和第一次相同的。我想是可能xdtype, xdata不为空的原因,不知道是不是这个?又需要如何处理?


谢谢了。

雪山飞狐_lzh 发表于 2004-11-17 20:42:00

returnobj.GetXData "cj_gx_10", xdtype, xdata?





ent.GetXData "cj_gx_10", xdtype, xdata吧

ntchjie 发表于 2004-11-17 20:55:00

这个错误很弱智,sorry。
页: [1]
查看完整版本: [VBA]两个问题,很菜,请教