乐筑天下

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

求助:我在cad08或06里画的多段线怎么不支持对象

[复制链接]

3

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2009-4-14 21:26:00 | 显示全部楼层 |阅读模式
Sub toudu()
Dim pl(7) As Double
pt(2) as Double
Dim plineObj As AcadLWPolyline
pl(0) = 5.6811
pl(1) = 0
pl(2) = -5.6811
pl(3) = 0
pl(4) = -5.6811
pl(5) = 0
pl(6) = 5.6811
pl(7) = 0
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(pl)
plineObj.SetBulge 0, 1.72677826
plineObj.SetBulge 1, 0
dim q as Double
   pt(0) = 4.470
   pt(1) = 7.921
   pt(2) = 0
q = DistancePt2Poly(pt1, plineObj)‘调用乐筑天下的点到多段线的最短距离
    MsgBox "点到多段线的最近距离是:" & q
end sub
Private Function DistancePt2Poly(ByVal pt As Variant, ByVal objPoly As AcadLWPolyline) As Double
    Dim intVertCount As Integer         ' 多段线的顶点数量
    Dim varCoords As Variant            ' 保存所有顶点的坐标数组
    varCoords = objPoly.Coordinates
    intVertCount = (UBound(varCoords) + 1) / 2
   
    ' 遍历所有顶点,判断每一段曲线与点之间的距离
    Dim i As Integer
    Dim ptCurrent As Variant, ptNext As Variant     ' 当前顶点和下一个顶点
    Dim minDistance As Double                          ' 最短距离
    For i = 0 To intVertCount - 1
        ' 获得当前顶点和下一个顶点的坐标
        If i
' 计算点到直线的最短距离
Private Function DisPt2Line(ByVal pt As Variant, ByVal ptStart As Variant, _
                            ByVal ptEnd As Variant) As Double
    ' 计算三点所组成的三角形的面积s=sqr(p*(p-a)*(p-b)*(p-c)),p=0.5*(a+b+c)
    Dim area As Double
    Dim p As Double         ' 周长的一半
    Dim a As Double, b As Double, c As Double       ' 各条边的边长
    a = Distance(pt, ptStart)
    b = Distance(pt, ptEnd)
    c = Distance(ptStart, ptEnd)
    p = (a + b + c) / 2
    area = Sqr(p * (p - a) * (p - b) * (p - c))
   
    ' 计算点到直线的垂直距离
    Dim dblDistance As Double
    dblDistance = 2 * area / c
   
    ' 计算垂足到直线两端点的距离
    Dim dblDis1 As Double, dblDis2 As Double
    dblDis1 = Sqr(a ^ 2 - dblDistance ^ 2)
    dblDis2 = Sqr(b ^ 2 - dblDistance ^ 2)
   
    ' 根据点是否在直线两端点之间,返回点到直线的最短距离
    If dblDis1 > c Or dblDis2 > c Then
        If a > b Then
            DisPt2Line = b
        Else
            DisPt2Line = a
        End If
    Else
        DisPt2Line = dblDistance
    End If
End Function
' 计算点到圆弧的最短距离
Private Function DisPt2Arc(ByVal pt As Variant, ByVal objArc As AcadArc) As Double
    ' 假设点在圆弧的扇形区域内,返回点到圆弧的距离
    DisPt2Arc = Distance(pt, objArc.Center) - objArc.Radius
   
    ' 计算点到圆弧两个端点的距离
    Dim dblDis1 As Double, dblDis2 As Double
    dblDis1 = Distance(pt, objArc.StartPoint)
    dblDis2 = Distance(pt, objArc.EndPoint)
   
    ' 如果点不在圆弧的扇形区域内,则到两端点的距离包含了一个最小距离
    Dim angle As Double         ' 圆心到点的矢量的角度
    angle = ThisDrawing.Utility.AngleFromXAxis(objArc.Center, pt)
    Dim angleStart As Double, angleEnd As Double
    angleStart = objArc.StartAngle
    angleEnd = objArc.EndAngle
    If (angle - angleStart) * (angle - angleEnd) * (angleEnd - angleStart) > ZERO Then
        If dblDis1 > dblDis2 Then
            DisPt2Arc = dblDis2
        Else
            DisPt2Arc = dblDis1
        End If
    End If
End Function
' 计算两点之间的距离
Private Function Distance(ByVal pt1 As Variant, ByVal pt2 As Variant) As Double
    Distance = Sqr((pt1(0) - pt2(0)) ^ 2 + (pt1(1) - pt2(1)) ^ 2)
End Function
' 测试本节的函数
Sub GetDistancePt2Poly()
    Dim pt As Variant
    pt = ThisDrawing.Utility.GetPoint(, "拾取一点:")
    Dim objPoly As AcadLWPolyline
    Dim ptPick As Variant
    ThisDrawing.Utility.GetEntity objPoly, ptPick, "选择多段线:"
   
    MsgBox "点到多段线的最近距离是:" & DistancePt2Poly(pt, objPoly)
End Sub

怎么q的值是空值,要呢显示错误:(溢出)调试了好久就没有,但是在命令行用pline画一个,用哪个测试函数GetDistancePt2Poly就有了。请高手看是怎么回事?多谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-2 05:37 , Processed in 1.572638 second(s), 54 queries .

© 2020-2025 乐筑天下

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