找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1044|回复: 0

[原创] 练习 Lisp定义实体或选集TransformedCopy后返回新实体或选集

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-10 16:25:55 | 显示全部楼层 |阅读模式

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

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

×
[ 本帖最后由 csharp 于 2014-5-10 16:27 编辑 ]\n\n
  1.         [LispFunction("Entity_Transformedcopy")]
  2.         public object EntityTransformedcopy(ResultBuffer rb)
  3.         {
  4.             TypedValue[] values = rb.AsArray();
  5.             Document doc = Application.DocumentManager.MdiActiveDocument;
  6.             Editor ed = doc.Editor;
  7.             Transaction tr = doc.TransactionManager.StartTransaction();
  8.             if (rb != null)
  9.             {
  10.                 if (values[0].TypeCode == (int)LispDataType.ObjectId | values[0].TypeCode == (int)LispDataType.SelectionSet)
  11.                 {
  12.                     Double[] data = new double[16];
  13.                     int j = 0;
  14.                     for (int i = 0; i < values.Count(); i++)
  15.                     {
  16.                         if (values[i].TypeCode == (int)LispDataType.Double)
  17.                         {
  18.                             data[j] = (double)values[i].Value;
  19.                             j++;
  20.                         }
  21.                     }
  22.                     Matrix3d matrix3D = new Matrix3d(data);
  23.                     using (tr)
  24.                         try
  25.                         {
  26.                             if (values[0].TypeCode == (int)LispDataType.ObjectId)
  27.                             {
  28.                                 ObjectId id = (ObjectId)values[0].Value;
  29.                                 Entity ent = (Entity)id.GetObject(OpenMode.ForWrite);
  30.                                 Entity nent = (Entity)ent.Clone();
  31.                                 nent.TransformBy(matrix3D);
  32.                                 tr.Commit();
  33.                                 return Tools .MyAppendEntity( nent)[0];
  34.                             }
  35.                             else
  36.                             {
  37.                                 SelectionSet sset = (SelectionSet)values[0].Value;
  38.                                 ObjectId[] ids = sset.GetObjectIds();
  39.                                 ObjectId[] nIds = new ObjectId[ids.Count()];
  40.                                 Entity[] ents = new Entity[ids.Count()];
  41.                                 for (int i = 0; i < ids.Count(); i++)
  42.                                 {
  43.                                     Entity ent = (Entity)ids[i].GetObject(OpenMode.ForRead);
  44.                                     ents[i] = (Entity)ent.GetTransformedCopy(matrix3D);
  45.                                 }
  46.                                 ObjectIdCollection idCollection = Tools.MyAppendEntity( ents);
  47.                                 for (int i = 0; i < idCollection.Count; i++)
  48.                                 {
  49.                                     nIds[i] = idCollection[i];
  50.                                 }
  51.                                 tr.Commit();
  52.                                 SelectionSet nsSet = SelectionSet.FromObjectIds(nIds);
  53.                                 return nsSet;
  54.                             }
  55.                         }
  56.                         catch (Exception)
  57.                         {
  58.                             throw;
  59.                         }
  60.                 }
  61.             }
  62.             return null;
  63.         }

添加实体
  1.         public static ObjectIdCollection MyAppendEntity (params Entity[] ents)
  2.         {
  3.             ObjectIdCollection ids = new ObjectIdCollection();
  4.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  5.             var trans = db.TransactionManager;
  6.             BlockTableRecord btr = (BlockTableRecord)trans.GetObject(HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite);
  7.             foreach (var ent in ents)
  8.                 {
  9.                 ids.Add(btr.AppendEntity(ent));
  10.                 trans.AddNewlyCreatedDBObject(ent, true);
  11.                 }
  12.             btr.DowngradeOpen();
  13.             return ids;
  14.         }


只有 translation.Commit();后才可以有SelectionSet.FromObjectIds(ids);

(entity_transformedcopy (ssget) (xdrx_matrix_settranslation (matrix_identity) '(100. 100. 0.)))

评分

参与人数 1D豆 +5 收起 理由
ScmTools + 5 出题引导交流奖!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-22 01:14 , Processed in 0.214868 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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