找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1144|回复: 1

[原创] 练习 Lisp定义测试查询属性

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-4-28 22:39:14 | 显示全部楼层 |阅读模式

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

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

×
  1.   
  2.       [LispFunction("dumpproperties")]
  3.         public void DumpProperties(ResultBuffer rb)
  4.         {
  5.             Document document = Application.DocumentManager.MdiActiveDocument;
  6.             Editor ed = document.Editor;
  7.             Transaction transaction = document.TransactionManager.StartTransaction();
  8.             TypedValue[] values = rb.AsArray();
  9.             var obj = transaction.GetObject((ObjectId) values[0].Value, OpenMode.ForRead);
  10.             var properties = TypeDescriptor.GetProperties(obj.AcadObject).Cast<PropertyDescriptor>().OrderBy(prop => prop.Name);
  11.             foreach (var property in properties)
  12.             {
  13.                 var propertyObject = property.GetValue(obj.AcadObject);
  14.                 ed .WriteMessage( "\n  {0} = {1}", property.Name, propertyObject);
  15.             }
  16.         }

绘制一个 Line

命令: (dumpproperties (entlast))

  Angle = 0.435887138861478
  Application =
  color = Color Bylayer.
  Database = System.__ComObject
  Delta = System.Double[]
  Document = System.__ComObject
  EndPoint = System.Double[]
  EntityName = AcDbLine
  EntityTransparency = ByLayer
  EntityType = 19
  Handle = 242
  HasExtensionDictionary = False
  Hyperlinks = System.__ComObject
  Layer = 0
  Length = 1840.55428060375
  Linetype = ByLayer
  LinetypeScale = 1
  Lineweight = acLnWtByLayer
  Material = ByLayer
  Normal = System.Double[]
  ObjectID = 2129671760
  ObjectName = AcDbLine
  OwnerID = 2129665272
  PlotStyleName = ByLayer
  StartPoint = System.Double[]
  Thickness = 0
  TrueColor = System.__ComObject
  Visible = True
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-4-28 22:45:04 | 显示全部楼层
If you want to get ALL items from Database, then use it:
  1. // Get all items from drawing Database. All ObjectIds will grouped by types;
  2. Database db = Application.DocumentManager.MdiActiveDocument.Database;           
  3. Dictionary<string, List<ObjectId>> dict = new Dictionary<string, List<ObjectId>>();
  4. using (Transaction t = db.TransactionManager.StartTransaction()) {
  5.     for (long i = db.BlockTableId.Handle.Value; i < db.Handseed.Value; i++) {
  6.         ObjectId id = ObjectId.Null;
  7.         Handle h = new Handle(i);
  8.         if (db.TryGetObjectId(h, out id)) {
  9.             string type = id.ObjectClass.Name;
  10.             if (!dict.Keys.Contains(type))
  11.                 dict.Add(type, new List<ObjectId>());
  12.             dict[type].Add(id);
  13.         }
  14.     }
  15.     t.Commit();
  16. }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-19 00:05 , Processed in 0.385443 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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