明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 831|回复: 7

请教如何得到多段线里的顶点坐标

[复制链接]
发表于 2014-10-26 15:07:00 | 显示全部楼层 |阅读模式
Sub xzj()
'这样写不行,请教解决办法。我想得到多段线里的顶点坐标
     Dim i As Integer, j As Integer
     Dim ss1 As AcadSelectionSet
     Dim mode As Integer
     Dim ent As AcadPolyline
     Dim Y As Double, X As Double
     Dim FType(1) As Integer, FData(1) As Variant
   '  On Error GoTo a0
      mode = acSelectionSetWindowPolygon
     FType(0) = 0: FData(0) = "POLYLINE"
     FType(1) = 8: FData(1) = "SJW"
     Set ss1 = ThisDrawing.SelectionSets.Add("Ps1" & Time)
     ss1.Select acSelectionSetAll, mode, , FType, FData
     For Each ent In ss1
        For j = 0 To UBound(ent.Coordinates) \ 2
            X = ent.Coordinates(j * 2)
            Y = ent.Coordinates(j * 2 + 1)
        Next j
     Next
      ss1.Clear
      ss1.Delele
     Exit Sub
a0:

       ss1.Clear
       ss1.Delete
    MsgBox "发生了" & Err.Description & "错误"
  End Sub

发表于 2014-10-26 15:17:56 | 显示全部楼层
FData(0) = "LWPOLYLINE"
发表于 2014-10-26 15:24:31 | 显示全部楼层
楼上正解,不过你这还有问题。
UBound(ent.Coordinates) \ 2应该是(UBound(ent.Coordinates) -1)/2
接下来,你的X、Y应该搞成数组,否则只能接收最后一个点坐标
 楼主| 发表于 2014-10-26 16:09:12 | 显示全部楼层
zzyong00 发表于 2014-10-26 15:17
FData(0) = "LWPOLYLINE"

可是我所选择的确实是"POLYLINE"对象,那咋办?
发表于 2014-10-26 16:12:19 | 显示全部楼层
POLYLINE对象Coordinates属性是三维点,就是xyz....
UBound(ent.Coordinates) \ 2那当然不行了
坐标个数应该(UBound(ent.Coordinates) +1)\ 3
访问:
for i=0 to (UBound(ent.Coordinates) +1)\ 3-1
......
next i
 楼主| 发表于 2014-10-26 16:17:12 | 显示全部楼层
本帖最后由 wmz 于 2014-10-26 16:26 编辑
wangshuping42 发表于 2014-10-26 15:24
楼上正解,不过你这还有问题。
UBound(ent.Coordinates) \ 2应该是(UBound(ent.Coordinates) -1)/2
接下来 ...

谢谢!不过问题不在这儿,那是可以处理的。问题在这一句:ent.Coordinates
提示类型不匹配,我刚才换成 Dim ent As AcadLWPolyline对象也是一样》

点评

这一句ent.Coordinates什么 问题?  发表于 2014-10-26 16:25
发表于 2014-10-26 17:01:45 | 显示全部楼层
Sub xzj()
'这样写不行,请教解决办法。我想得到多段线里的顶点坐标
     Dim i As Integer, j As Integer, Points As Variant
     Dim ss1 As AcadSelectionSet
     Dim mode As Integer
     Dim ent As AcadEntity
     Dim Y As Double, X As Double
     Dim FType(1) As Integer, FData(1) As Variant
     
     On Error GoTo a0
     FType(0) = 0: FData(0) = "LWPOLYLINE"
     FType(1) = 8: FData(1) = "0"  '"SJW"
     Set ss1 = ThisDrawing.SelectionSets.Add("Ps1" & Time)
     ss1.Select acSelectionSetAll, , , FType, FData
     
     For Each ent In ss1
        Points = ent.Coordinates
        For j = 0 To (UBound(Points) - 1) / 2
            X = Points(j * 2)
            Y = Points(j * 2 + 1)
            Debug.Print X & ";" & Y
        Next j
     Next
     
      ss1.Clear
      ss1.Delete
     Exit Sub
     
a0:
       ss1.Clear
       ss1.Delete
      
    MsgBox "发生了" & Err.Description & "错误"
   
End Sub
 楼主| 发表于 2014-10-26 18:47:02 | 显示全部楼层
wangshuping42 发表于 2014-10-26 17:01
Sub xzj()
'这样写不行,请教解决办法。我想得到多段线里的顶点坐标
     Dim i As Integer, j As Integ ...

十分谢谢!这样写能行!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 10:55 , Processed in 0.165389 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表