找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 946|回复: 0

[每日一码] C#中GetObjectSnapPoints函数的用法

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2017-5-24 08:39:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本程序运用于对象捕捉,运行时,拾取一个圆或圆弧、椭圆,能得到圆心(当然,不用这个方法也能得到)。圆心捕捉也可更改为中点捕捉、象限点捕捉等……

  1. using System;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using Autodesk.AutoCAD.Geometry;
  7. namespace CS对象捕捉
  8. {
  9.     /// <summary>
  10.     /// TestClass的说明。
  11.     /// </summary>
  12.     public class TestClass
  13.     {
  14.         [CommandMethod("Test")]
  15.         public void Test()
  16.         {
  17.             Database db = HostApplicationServices.WorkingDatabase;
  18.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  19.             PromptEntityOptions opt = new PromptEntityOptions("\n请选择圆、圆弧或椭圆");
  20.             opt.SetRejectMessage("\n您选择的对象不存在圆心,请重新选择!");
  21.             opt.AddAllowedClass(typeof(Circle), true);
  22.             opt.AddAllowedClass(typeof(Arc), true);
  23.             opt.AddAllowedClass(typeof(Ellipse), true);
  24.             PromptEntityResult res = ed.GetEntity(opt);
  25.             if (res.Status == PromptStatus.OK)
  26.             {
  27.                 using (Transaction trans = db.TransactionManager.StartTransaction())
  28.                 {
  29.                     Entity ent = (Entity)trans.GetObject(res.ObjectId, OpenMode.ForRead);
  30.                     Point3d pickPt = res.PickedPoint;
  31.                     Point3dCollection snapPts = new Point3dCollection();
  32.                     IntegerCollection geomIds = new IntegerCollection();
  33.                     geomIds.Add(0);
  34.                     ent.GetObjectSnapPoints(ObjectSnapModes.ModeCenter, 0, pickPt,
  35.                         pickPt, Matrix3d.Identity, snapPts, geomIds);
  36.                     ed.WriteMessage("\n您点取的点是:" + pickPt.ToString());
  37.                     for (int i = 0; i < snapPts.Count; i++)
  38.                     {               
  39.                         ed.WriteMessage("\n您捕捉到的点是:" + snapPts.ToString());
  40.                     }
  41.                     trans.Commit();
  42.                 }
  43.             }
  44.         }
  45.     }
  46. }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:23 , Processed in 0.269903 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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