乐筑天下

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

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

[复制链接]
wmz

50

主题

247

帖子

8

银币

后起之秀

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

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

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2014-10-26 15:17:00 | 显示全部楼层
FData(0) = "LWPOLYLINE"
回复

使用道具 举报

8

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
104
发表于 2014-10-26 15:24:00 | 显示全部楼层
楼上正解,不过你这还有问题。
UBound(ent.Coordinates) \ 2应该是(UBound(ent.Coordinates) -1)/2
接下来,你的X、Y应该搞成数组,否则只能接收最后一个点坐标
回复

使用道具 举报

wmz

50

主题

247

帖子

8

银币

后起之秀

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

铜币
447
发表于 2014-10-26 16:09:00 | 显示全部楼层

可是我所选择的确实是"POLYLINE"对象,那咋办?
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2014-10-26 16:12:00 | 显示全部楼层
POLYLINE对象Coordinates属性是三维点,就是xyz....
UBound(ent.Coordinates) \ 2那当然不行了
坐标个数应该(UBound(ent.Coordinates) +1)\ 3
访问:
for i=0 to (UBound(ent.Coordinates) +1)\ 3-1
......
next i
回复

使用道具 举报

wmz

50

主题

247

帖子

8

银币

后起之秀

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

铜币
447
发表于 2014-10-26 16:17:00 | 显示全部楼层

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

使用道具 举报

8

主题

72

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
104
发表于 2014-10-26 17:01:00 | 显示全部楼层
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
回复

使用道具 举报

wmz

50

主题

247

帖子

8

银币

后起之秀

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

铜币
447
发表于 2014-10-26 18:47:00 | 显示全部楼层

十分谢谢!这样写能行!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-20 15:11 , Processed in 2.483680 second(s), 75 queries .

© 2020-2025 乐筑天下

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