乐筑天下

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

怎样提取三维多段线顶点坐标

[复制链接]
pmq

14

主题

61

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2018-12-7 11:17:00 | 显示全部楼层 |阅读模式
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '提取坐标
        SetFocus(Autodesk..ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle) 'CAD获得焦点
        Dim db As Database = HostApplicationServices.WorkingDatabase
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        Dim enOpts As PromptEntityOptions = New PromptEntityOptions("选择一条多段线")
        Dim enRes As PromptEntityResult = ed.GetEntity(enOpts)
        If enRes.Status = PromptStatus.OK Then
            Using trans As Transaction = db.TransactionManager.StartTransaction()
                Dim en As Entity = CType(trans.GetObject(enRes.ObjectId, OpenMode.ForRead), Entity)
                If TypeOf en Is Polyline Then
                    Dim pl As Polyline = CType(en, Polyline)
                    Dim pts_len As Integer = pl.NumberOfVertices
                    Dim i As Integer
                    For i = 0 To pts_len - 1
                        Dim JS As Integer = 0
                        JS = i + 1
                        ListBox1.Items.Add("X" & JS & "=" & pl.GetPoint3dAt(i).X.ToString("0.000") & vbCrLf)
                        ListBox1.Items.Add("Y" & JS & "=" & pl.GetPoint3dAt(i).Y.ToString("0.000") & vbCrLf)
                        ListBox1.Items.Add("H" & JS & "=" & pl.GetPoint3dAt(i).Z.ToString("0.000") & vbCrLf)
                        'ed.WriteMessage(pl.GetPoint3dAt(i).ToString() + "\n")
                    Next
                ElseIf TypeOf en Is Polyline3d Then
                    '三维多段线
                    ???
                ElseIf TypeOf en Is Line Then
                    Dim pl As Line = CType(en, Line)
                    ListBox1.Items.Add("XA=" & pl.StartPoint.X.ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("YA=" & pl.StartPoint.Y.ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("HA=" & pl.StartPoint.Z.ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("XB=" & pl.EndPoint.X.ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("YB=" & pl.EndPoint.Y.ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("HB=" & pl.EndPoint.Z.ToString("0.000") & vbCrLf)
                Else
                    ed.WriteMessage("你选择的是" + en.GetRXClass().Name)
                End If
                trans.Commit()
            End Using
        End If
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2018-12-11 14:08:00 | 显示全部楼层
三维多段线会不会只有控制点,没有顶点?
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2018-12-12 22:36:00 | 显示全部楼层
For Each ID As ObjectId In Polyline3d
                Dim Vertex As PolylineVertex3d = Trans.GetObject(ID, OpenMode.ForRead)
Next
回复

使用道具 举报

pmq

14

主题

61

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2018-12-19 11:09:00 | 显示全部楼层

ListBox1.Items.Add("X" & JS & "=" &
怎样显示各顶点的坐标
VB6与VB.net相差太大
回复

使用道具 举报

pmq

14

主题

61

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2021-5-13 10:19:00 | 显示全部楼层
Dim basePnt As Object = 0
        SetFocus(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle) 'CAD获得焦点
        AcadApp.ActiveDocument.Utility.GetEntity(returnObj, basePnt)
        returnObj.highlight(True)
        AppActivate(AcadApp.Caption)
        ListBox1.Items.Clear()
        Dim InPoint As Object
        Dim i As Integer = 0
        Dim JS As Long = 0
        Dim j As Integer = 0
        Dim ji As Long = 0
        
        Select Case returnObj.objectname
            Case "AcDb3dPolyline"
                ObjName.Text = "三维多段线"
                JS = (UBound(returnObj.Coordinates) + 1) / 3 - 1
                ReDim Preserve xx(JS)
                ReDim Preserve yy(JS)
                ReDim Preserve zz(JS)
                For i = 0 To JS
                    xx(i) = returnObj.Coordinate(i)(0)
                    yy(i) = returnObj.Coordinate(i)(1)
                    zz(i) = returnObj.Coordinate(i)(2)
                    ListBox1.Items.Add("X" & i + 1 & "= " & yy(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("Y" & i + 1 & "= " & xx(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("H" & i + 1 & "= " & zz(i).ToString("0.000") & vbCrLf)
                Next
            Case "AcDb2dPolyline"
                ObjName.Text = "二维多段线"
                JS = (UBound(returnObj.Coordinates) + 1) / 2 - 1
                ReDim Preserve xx(JS)
                ReDim Preserve yy(JS)
                ReDim Preserve zz(JS)
                For i = 0 To JS
                    xx(i) = returnObj.Coordinate(i)(0)
                    yy(i) = returnObj.Coordinate(i)(1)
                    'zz(i) = returnObj.elevation
                    ListBox1.Items.Add("X" & i + 1 & "= " & yy(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("Y" & i + 1 & "= " & xx(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("H" & i + 1 & "= " & zz(i).ToString("0.000") & vbCrLf)
                Next
            Case "AcDbPolyline"
                ObjName.Text = "多段线"
                JS = (UBound(returnObj.Coordinates) + 1) / 2 - 1
                ReDim Preserve xx(JS)
                ReDim Preserve yy(JS)
                ReDim Preserve zz(JS)
                For i = 0 To JS
                    xx(i) = returnObj.Coordinate(i)(0)
                    yy(i) = returnObj.Coordinate(i)(1)
                    zz(i) = returnObj.elevation
                    ListBox1.Items.Add("X" & i + 1 & "= " & yy(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("Y" & i + 1 & "= " & xx(i).ToString("0.000") & vbCrLf)
                    ListBox1.Items.Add("H" & i + 1 & "= " & zz(i).ToString("0.000") & vbCrLf)
                Next
            Case "AcDbLine"
                ObjName.Text = "直线"
                Dim StartPoints As Object
                Dim EndPoints As Object
                ReDim Preserve xx(1)
                ReDim Preserve yy(1)
                ReDim Preserve zz(1)
                StartPoints = returnObj.StartPoint
                EndPoints = returnObj.EndPoint
                xx(0) = StartPoints(0)
                yy(0) = StartPoints(1)
                zz(0) = StartPoints(2)
                xx(1) = EndPoints(0)
                yy(1) = EndPoints(1)
                zz(1) = EndPoints(2)
                ListBox1.Items.Add("X" & 1 & "= " & yy(0).ToString("0.000") & vbCrLf)
                ListBox1.Items.Add("Y" & 1 & "= " & xx(0).ToString("0.000") & vbCrLf)
                ListBox1.Items.Add("H" & 1 & "= " & zz(0).ToString("0.000") & vbCrLf)
                ListBox1.Items.Add("X" & 2 & "= " & yy(1).ToString("0.000") & vbCrLf)
                ListBox1.Items.Add("Y" & 2 & "= " & xx(1).ToString("0.000") & vbCrLf)
                ListBox1.Items.Add("H" & 2 & "= " & zz(1).ToString("0.000") & vbCrLf)
回复

使用道具 举报

0

主题

21

帖子

6

银币

初来乍到

Rank: 1

铜币
21
发表于 2021-5-15 06:05:00 | 显示全部楼层
回复

使用道具 举报

0

主题

8

帖子

2

银币

初来乍到

Rank: 1

铜币
8
发表于 2021-6-8 21:23:00 | 显示全部楼层
通过多边形的直线,怎么求其与多边形的交点
回复

使用道具 举报

0

主题

8

帖子

2

银币

初来乍到

Rank: 1

铜币
8
发表于 2021-6-8 21:31:00 | 显示全部楼层
多段线的顶点可以直接GetPoint2dAt(index),GetPoint2dAt(index)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 00:32 , Processed in 0.260394 second(s), 68 queries .

© 2020-2024 乐筑天下

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