找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1080|回复: 0

[分享] Move selection to origin

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-1 22:42:57 | 显示全部楼层 |阅读模式

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

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

×
  1.         [System.Security.SuppressUnmanagedCodeSecurity]
  2.         [DllImport("acad.exe", EntryPoint = "acedCmd", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
  3.         extern static private int acedCmd(IntPtr resbuf);

  4.         [CommandMethod("moveToOrig, mto", CommandFlags.UsePickSet | CommandFlags.Redraw)]
  5.         static public void testMoveToOrigin()
  6.         {
  7.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  8.             Editor ed = doc.Editor;
  9.             Database db = doc.Database;
  10.             ResultBuffer rb = new ResultBuffer();
  11.             try
  12.             {

  13.                 rb.Add(new TypedValue(5005, "_Zoom"));
  14.                 rb.Add(new TypedValue(5005, "_Extents"));
  15.                 acedCmd(rb.UnmanagedObject);

  16.                 Matrix3d ucs = ed.CurrentUserCoordinateSystem;
  17.                 CoordinateSystem3d ccos = ucs.CoordinateSystem3d;
  18.                 Point3d orig = ccos.Origin.TransformBy(Matrix3d.Identity);
  19.                 // select all objects
  20.                 SelectionSet sset = ed.SelectAll().Value;
  21.                 if (sset == null) return;
  22.                 List<Point3d> pts = new List<Point3d>();
  23.                 List<Entity> ents = new List<Entity>();
  24.                 Matrix3d mmx = new Matrix3d();
  25.                 using (Transaction tr = doc.TransactionManager.StartTransaction())
  26.                 {
  27.                     // iterate through selected objects
  28.                     foreach (ObjectId id in sset.GetObjectIds())
  29.                     {

  30.                         Entity ent = (Entity)tr.GetObject(id, OpenMode.ForRead, false);

  31.                         Extents3d ext = ent.GeometricExtents;
  32.                         if (ext != null)
  33.                         {
  34.                             Point3d minpt = ext.MinPoint.TransformBy(Matrix3d.Identity);
  35.                             // collect entities to List for the future work
  36.                             ents.Add(ent);
  37.                             pts.Add(minpt);
  38.                         }
  39.                     }
  40.                     // Get most lower left point of screen
  41.                     Point3d xpt = pts.OrderBy(p => p.X).First();// calculate minimal X value
  42.                     Point3d ypt = pts.OrderBy(p => p.Y).First();// calculate minimal Y value
  43.                  Point3d mp = new Point3d(xpt.X, ypt.Y, orig.Z).TransformBy(Matrix3d.Identity);
  44.                     mmx = Matrix3d.Displacement(orig-mp );
  45.                     // iterate through gathrered entities again
  46.                     foreach (Entity e in ents)
  47.                     {
  48.                         e.UpgradeOpen();
  49.                         // apply transformation matrix
  50.                         e.TransformBy(mmx);
  51.                     }

  52.                     tr.Commit();
  53.                 }
  54.             }
  55.             catch (Autodesk.AutoCAD.Runtime.Exception ex)
  56.             {
  57.                 ed.WriteMessage("\n" + ex.Message + "\n" + ex.StackTrace);
  58.             }
  59.             finally
  60.             {
  61.                 rb = new ResultBuffer();
  62.                 rb.Add(new TypedValue(5005, "_Zoom"));
  63.                 rb.Add(new TypedValue(5005, "_Extents"));
  64.                 acedCmd(rb.UnmanagedObject);
  65.             }
  66.         }

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

本版积分规则

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

GMT+8, 2024-12-19 00:10 , Processed in 0.364919 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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