明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1417|回复: 3

請問如何選取畫好的pline找到各節點座標跟bulge

[复制链接]
发表于 2009-12-14 22:22:00 | 显示全部楼层 |阅读模式

謝謝大大

想請問一下這個問題

選取畫好的pline找到各節點座標跟bulge

目前座標已經解決 可是bulge一直抓不到 方法也有查到可是抓出來資料一直是0不正確

寫法在下面 有錯誤請大大們指正 謝謝

Public Sub ShowPolyLinePoint1()
    Dim objAcadEntity As AcadEntity
    
    Dim varPickedPoint As Variant
    Dim intIndex As Integer
    Dim varCoordinates As Variant
    Dim dblX As Double
    Dim dblY As Double
    Dim dblZ As Double
    Dim varbulge As Variant
    Dim objpline As AcadLWPolyline
    
    UserForm1.Hide
    
    ThisDrawing.Utility.GetEntity objAcadEntity, varPickedPoint, "請選擇 olyline"
    
    If TypeOf objAcadEntity Is AcadLWPolyline Then
        
        Set objLwpolyline = objAcadEntity
        
        
        
        varCoordinates = objLwpolyline.Coordinates
        
        varbulge = objLwpolyline.GetBulge(3)
        
      
        For intIndex = LBound(varCoordinates) To (UBound(varCoordinates) - 1) / 2
            '取得 (X,Y) 座標
            dblX = varCoordinates((intIndex) * 2)
            dblY = varCoordinates((intIndex) * 2 + 1)
            db1Z = varbulge((intIndex))
           
            MsgBox ("X(" + CStr(intIndex) + ")=" + CStr(dblX))
            MsgBox ("Y(" + CStr(intIndex) + ")=" + CStr(dblY))
            MsgBox ("bulde(" + CStr(intIndex) + ")=" + CStr(dblZ))
        Next
    End If

End Sub

发表于 2009-12-15 08:07:00 | 显示全部楼层
  1. Public Sub ShowPolyLinePoint1()
  2.     Dim objAcadEntity As AcadEntity
  3.    
  4.     Dim varPickedPoint As Variant
  5.     Dim intIndex As Integer
  6.     Dim varCoordinates As Variant
  7.     Dim dblX As Double
  8.     Dim dblY As Double
  9.     Dim dblZ As Double
  10. '    Dim varbulge As Variant
  11. '    Dim objpline As AcadLWPolyline
  12.     Dim objLwpolyline As AcadLWPolyline
  13.    
  14.     UserForm1.Hide
  15.    
  16.     ThisDrawing.Utility.GetEntity objAcadEntity, varPickedPoint, "請選擇 Polyline"
  17.    
  18.     If TypeOf objAcadEntity Is AcadLWPolyline Then
  19.         
  20.         Set objLwpolyline = objAcadEntity
  21.         
  22.         
  23.         
  24.         varCoordinates = objLwpolyline.Coordinates
  25.         
  26. '        varbulge = objLwpolyline.GetBulge(3)
  27.         
  28.       
  29.         For intIndex = LBound(varCoordinates) To (UBound(varCoordinates) - 1) / 2
  30.             '取得 (X,Y) 座標
  31.             dblX = varCoordinates((intIndex) * 2)
  32.             dblY = varCoordinates((intIndex) * 2 + 1)
  33. '            db1Z = varbulge((intIndex))
  34.             dblZ = objLwpolyline.GetBulge(intIndex)
  35.            
  36.             MsgBox ("X(" + CStr(intIndex) + ")=" + CStr(dblX))
  37.             MsgBox ("Y(" + CStr(intIndex) + ")=" + CStr(dblY))
  38.             MsgBox ("bulde(" + CStr(intIndex) + ")=" + CStr(dblZ))
  39.         Next
  40.     End If
  41. End Sub
 楼主| 发表于 2009-12-15 11:28:00 | 显示全部楼层

謝謝大大 問題已經解決了

想請問一下 關鍵是因為 Dim objLwpolyline As AcadLWPolyline 這句嗎?

可是不是也已經有了 objLwpolyline 不是已經是objAcadEntity了嗎?

為什麼還可以是AcadLWPolyline

小弟是新手 所以還不太懂 謝謝

发表于 2009-12-15 11:48:00 | 显示全部楼层

你的代码存在3个错误

1.

Dim objpline As AcadLWPolyline 中变量 objpline 与后面用到的 objLwpolyline 不一致.因此把这一行改为

Dim objLwpolyline As AcadLWPolyline

2.

varbulge = objLwpolyline.GetBulge(3) 与你的目的不符.GetBulge() 函数用于获取指定顶点的凸起值,这一行运行的结果是 varbulge 被赋予一个双精度数,就是多段线第4个顶点(索引值是你代码中的"3")的凸起值,而不是一个数组.因此把这行移到了循环体内部,针对每个顶点分别获取.

3.

db1Z = varbulge((intIndex)).首先 db1Z 中间的字符是阿拉伯数字"1"而不是你声明的字母"l",写错了;其次,前面已经说了 varbulge 不是一个数组;最后, intIndex 外面为什么要用两层括号呢?

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

本版积分规则

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

GMT+8, 2024-11-26 00:40 , Processed in 0.187105 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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