田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 4 48
 123456
78910111213
14151617181920
21222324252627
282930


站点统计

最新评论



qq斗地主输得最惨的一次 电影《那些年,我们一起追的女孩》
未知 VB.net AutoCAD 点是否在曲线上[Kean]   [ 日期:2012-01-09 ]   [ 来自:代码转换 ]  HTML
原文地址:http://through-the-interface.typepad.com/through_the_interface/201 ... t-is-on-any-autocad-curve-using-net.html
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime

Namespace CurveTesting
    Public Class Commands
        <CommandMethod("POC")> _
        Public Sub PointOnCurve()
            Dim doc As Document = Application.DocumentManager.MdiActiveDocument
            Dim db As Database = doc.Database
            Dim ed As Editor = doc.Editor

            Dim peo As New PromptEntityOptions(vbLf & "选择一条曲线:")
            peo.SetRejectMessage("选择一条曲线:")
            peo.AddAllowedClass(GetType(Curve), False)

            Dim per As PromptEntityResult = ed.GetEntity(peo)
            If per.Status <> PromptStatus.OK Then
                Return
            End If

            Dim ppr As PromptPointResult = ed.GetPoint(vbLf & "选择一个点;")
            If ppr.Status <> PromptStatus.OK Then
                Return
            End If

            Dim tr As Transaction = db.TransactionManager.StartTransaction()
            Using tr
                Dim curve As Curve = TryCast(tr.GetObject(per.ObjectId, OpenMode.ForRead), Curve)
                If curve IsNot Nothing Then
                    Dim isOn As Boolean = IsPointOnCurveGCP(curve, ppr.Value)
                    If isOn = True Then
                        ed.WriteMessage(vbLf & "所选点在曲线上。")
                    Else
                        ed.WriteMessage(vbLf & "所选点不在曲线上。")
                    End If
                End If
                tr.Commit()
            End Using

        End Sub

        '函数 IsPointOnCurveGDAP 适用与所有类型的曲线(包括折线)
        Private Function IsPointOnCurveGDAP(ByVal cv As Curve, ByVal pt As Point3d) As Boolean
            Try
                '点在曲线上,就能得到GetDistAtPoint的值 ,返回True
                cv.GetDistAtPoint(pt)
                'MsgBox(cv.GetDistAtPoint(pt).ToString)
                Return True
            Catch
            End Try
            '点不在曲线上, 出错 ,返回False
            Return False

        End Function

        '函数 IsPointOnCurveGCP 适用与所有类型的曲线(包括折线)
        Private Function IsPointOnCurveGCP(ByVal cv As Curve, ByVal pt As Point3d) As Boolean
            Try
                '点到曲线最近点
                Dim p As Point3d = cv.GetClosestPointTo(pt, False)
                '两点距离在容差范围内
                Return (p - pt).Length <= Tolerance.[Global].EqualPoint
            Catch
            End Try
            Return False
        End Function
    End Class
End Namespace



  Private Function IsPointOnPolyline(ByVal pl As Polyline, ByVal pt As Point3d) As Boolean
            Dim isOn As Boolean = False
            For i As Integer = 0 To pl.NumberOfVertices - 1
                Dim seg As Curve3d = Nothing
                '线段
                Dim segType As SegmentType = pl.GetSegmentType(i)

                If segType = SegmentType.Arc Then '线段是圆弧
                    seg = pl.GetArcSegmentAt(i)
                ElseIf segType = SegmentType.Line Then '线段是直线段
                    seg = pl.GetLineSegmentAt(i)
                End If
                '使用IsOn函数判断点是否在线段上
                If seg IsNot Nothing Then
                    isOn = seg.IsOn(pt)
                    If isOn Then
                        Exit For
                    End If
                End If
            Next
            Return isOn
        End Function




[本日志由 tiancao1001 于 2012-01-09 09:14 PM 编辑]


暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:3*6=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©