明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4917|回复: 11

获取三维多段线的节点坐标

[复制链接]
发表于 2011-8-29 09:16:08 | 显示全部楼层 |阅读模式
本帖最后由 雪山飞狐_lzh 于 2012-7-6 23:30 编辑

如何获取三维多段线的节点坐标,Polyline3d应该用哪个函数啊?
 楼主| 发表于 2011-8-29 09:16:55 | 显示全部楼层
在线等,急,先谢谢大家!
发表于 2011-8-29 10:22:48 | 显示全部楼层
  1. Public Function GetVerPts(ByVal ID As ObjectId) As Point3d()
  2.         Using Trans As Transaction = DB.TransactionManager.StartTransaction
  3.             Dim Ent As Entity = Trans.GetObject(ID, OpenMode.ForRead)
  4.             If TypeOf Ent Is Polyline3d Then
  5.                 Dim objPolyline3d As Polyline3d = Ent, pts As New List(Of Point3d)
  6.                 Dim VID As ObjectId = Nothing, Vtx As PolylineVertex3d = Nothing
  7.                 Dim Temp_type As Poly3dType = objPolyline3d.PolyType '将先前的拟合类型先保存下来,计算完毕后复原
  8.                 objPolyline3d.ConvertToPolyType(Poly3dType.SimplePoly)

  9.                 For Each VID In objPolyline3d
  10.                     Vtx = Trans.GetObject(ID, OpenMode.ForRead)
  11.                     pts.Add(New Point3d(Vtx.Position.X, Vtx.Position.Y, Vtx.Position.Z))
  12.                 Next
  13.                 objPolyline3d.ConvertToPolyType(Temp_type)

  14.                 GetVerPts = pts.ToArray
  15.             Else
  16.                 GetVerPts = New Point3d() {}
  17.             End If
  18.             Trans.Commit()
  19.         End Using
  20.         Return Nothing
  21.     End Function
看看这个能不能有用。(拟合的时候,计算可能有问题)
发表于 2011-8-29 11:10:56 | 显示全部楼层
   Point3dCollection cool = new Point3dCollection();  //定义一个点的集合
            Polyline3d pol = new Polyline3d();  //已知的三维多段线
            pol.GetStretchPoints(cool); //执行完这个函数,cool(点集合)就有值了
        //最后你遍历下cool 得到是点的坐标
    希望能帮到你!!!

点评

xgr
不错,学习了  发表于 2011-8-29 21:10
发表于 2012-7-6 15:47:38 | 显示全部楼层
  Polyline2d 的,  二维pline节点坐标怎么获取?
发表于 2012-7-6 23:24:43 | 显示全部楼层
多义线都是复合实体(简单实体集合),可以foreach的
发表于 2012-7-7 08:50:23 | 显示全部楼层
本帖最后由 sxpd 于 2012-7-7 08:50 编辑

  1.         /// <summary>
  2.         /// 获取复合实体的子实体集合
  3.         /// </summary>
  4.         /// <typeparam name="T">复合实体类型(PolyLine2d/3d、PolyfaceMesh......)</typeparam>
  5.         /// <param name="ent">复合实体</param>
  6.         /// <param name="tr">事务实例</param>
  7.         /// <returns>子实体迭代器</returns>
  8.         public static IEnumerable<Vertex> GetVertexs<T>(this T ent, Transaction tr) where T : Entity, IEnumerable
  9.         {
  10.             
  11.             foreach (ObjectId id in ent)
  12.             {
  13.                 yield return (Vertex)tr.GetObject(id, OpenMode.ForRead);
  14.             }

  15.         }

  16.         /// <summary>
  17.         /// 获取复合实体的子实体集合
  18.         /// </summary>
  19.         /// <typeparam name="T">复合实体类型(PolyLine2d/3d、PolyfaceMesh......)</typeparam>
  20.         /// <param name="ent">复合实体</param>
  21.         /// <param name="tr">事务实例</param>
  22.         /// <param name="mode">打开模式(读/写)</param>
  23.         /// <returns>子实体迭代器</returns>
  24.         public static IEnumerable<Vertex> GetVertexs<T>(this T ent, Transaction tr, OpenMode mode) where T : Entity, IEnumerable
  25.         {

  26.             foreach (ObjectId id in ent)
  27.             {
  28.                 yield return (Vertex)tr.GetObject(id, mode);
  29.             }

  30.         }
发表于 2012-7-9 09:50:14 | 显示全部楼层
  Point3dCollection cool = new Point3dCollection();  //定义一个点的集合
            Polyline3d pol = new Polyline3d();  //已知的三维多段线
            pol.GetStretchPoints(cool); //执行完这个函数,cool(点集合)就有值了
        //最后你遍历下cool 得到是点的坐标

上面是Polyline3d (三维pline)节点坐标获取方法,不知道对不?。

Polyline2d (二维pline)节点坐标怎么获取?
Polyline(lwpline)( 轻便或普通的pline)节点坐标怎么获取?
发表于 2012-7-9 21:33:12 | 显示全部楼层
GetStretchPoints容易出问题的
发表于 2012-7-12 12:44:49 | 显示全部楼层
我以前的代码

                    LWPolyline pl = tr.GetObject(resEnt.ObjectId, OpenMode.ForRead) as LWPolyline;
                    var ptlst =
                        Enumerable
                        .Range(0, pl.NumberOfVertices)
                        .Select(i => pl.GetPoint2dAt(i));

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

本版积分规则

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

GMT+8, 2024-11-25 13:47 , Processed in 0.270482 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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