明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2287|回复: 8

net如何取得二维和三维多段线的顶点或顶点集合?

[复制链接]
发表于 2011-2-22 15:53:13 | 显示全部楼层 |阅读模式
请教:
  net如何取得二维和三维多段线的顶点或顶点集合?
  即COM编程中的Obj.Coordinate(i)或Obj.Coordinates。
  谢谢!
发表于 2011-2-22 21:06:26 | 显示全部楼层
  1.                 Polyline2d pl2d = tr.GetObject(resEnt.ObjectId, OpenMode.ForRead) as Polyline2d;
  2.                 foreach (ObjectId id in pl2d)
  3.                 {
  4.                     Vertex2d ver = tr.GetObject(id, OpenMode.ForRead) as Vertex2d;
  5.                     ed.WriteMessage(ver.Position.ToString());
  6.                 }

  1.                 Polyline3d pl3d = tr.GetObject(resEnt.ObjectId, OpenMode.ForRead) as Polyline3d;
  2.                 foreach (ObjectId id in pl3d)
  3.                 {
  4.                     PolylineVertex3d ver = tr.GetObject(id, OpenMode.ForRead) as PolylineVertex3d;
  5.                     ed.WriteMessage(ver.Position.ToString());
  6.                 }
 楼主| 发表于 2011-2-25 13:29:21 | 显示全部楼层
谢谢版主!!
 楼主| 发表于 2011-3-14 16:22:21 | 显示全部楼层
再请教:
  如何取得所选取曲线时拾取点。即实现在ActiveX技术中GetEntity方法能够返回一个AcadEntity类型的对象和一个Variant类型变量(表示拾取点的位置)。
  谢谢!
发表于 2011-3-14 20:37:03 | 显示全部楼层
本帖最后由 epwt 于 2011-3-14 20:38 编辑

/// <summary>
  /// 获得用户选中的实体及选中点的坐标
  /// </summary>
  const int RTNORM = 5100;
  [System.Security.SuppressUnmanagedCodeSecurity]
  [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
  private static extern int acedEntSel(string prompt, long[] name, double[] pt);
  [DllImport("acdb17.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
  private static extern int acdbGetObjectId(ref ObjectId objId, long[] name);
  /// <summary>
  /// 获得用户选中的实体及选中点的坐标
  /// </summary>
  /// <param name="prompMessage">提示信息</param>
  /// <param name="pickPoint"></param>
  /// <returns>返回选中实体的Id</returns>
  private static ObjectId getObjectFromPoint(string prompMessage, out Point3d pickPoint)
  {
   ObjectId id = ObjectId.Null;
   long[] ent ={ 0, 0 };
   double[] pt ={ 0, 0, 0 };
   if (acedEntSel(prompMessage, ent, pt) == RTNORM) {
    if (acdbGetObjectId(ref id, ent) == 0) {
     pickPoint = new Point3d(pt[0], pt[1], pt[2]);
    }
   }
   return id;
  }

这是C#版的,具体C++版的你可以参考这个试一下。
发表于 2011-3-15 10:45:42 | 显示全部楼层
如何获取具有凸度(弧段)上的点????或者计算出来?有好的方法吗???
 楼主| 发表于 2011-3-15 15:48:01 | 显示全部楼层
有疑问:此程序只获得用户选中的实体,并未返回选中点的坐标。
是如此吗?
 谢谢!
发表于 2011-9-13 22:40:16 | 显示全部楼层
为什么用polyline画出来的多段线不能适用呢
发表于 2011-9-14 00:13:10 | 显示全部楼层
飞狐的polyline2d不适用于polyline啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:54 , Processed in 0.174232 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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