EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 685|回复: 0
打印 上一主题 下一主题

[实体对象] 对象扩展数据--DataTable

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于实体对象只有几何信息,如果你的形状表达的是某些有其他参数信息的对象,如表现建筑对象的梁,可能要附加材料信息,那么我们可以将这些附加的信息加入到几何对象的扩展数据中,目前可以给对象添加附加的数据有XdataXrecord、以及DataTable,附着到对象的做法都差不多但是Xdata存储数据量有限,Xrecord储存及读取的时候条理性比较差,所以用DataTable作为扩展数据最为合适。添加扩展数据时必须注意的是对象必须添加到数据库中后才能添加扩展数据。
  1. /////////////////////////////////////////////////////////////////////////////////////////////////
  2. //http://www.bimcad.org 数字建筑
  3. //深入浅出AutoCAD二次开发(李冠亿)
  4. /////////////////////////////////////////////////////////////////////////////////////////////////
  5. using System;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. using Autodesk.AutoCAD.EditorInput;
  9. using Autodesk.AutoCAD.Geometry;
  10. using Autodesk.AutoCAD.Runtime;
  11. [assembly: CommandClass(typeof(Sample.EntityData))]
  12. namespace Sample
  13. {
  14.     class EntityData
  15.     {
  16.         [CommandMethod("WriteData")]
  17.         public void AddData()
  18.         {
  19.             DataTable dt = new DataTable();
  20.             dt.TableName = "ParameterTable";
  21.             dt.AppendColumn(CellType.CharPtr, "Name");
  22.             dt.AppendColumn(CellType.CharPtr, "Meterial");
  23.             dt.AppendColumn(CellType.CharPtr, "Parameter");
  24.             DataCellCollection Row = new DataCellCollection();
  25.             DataCell Name = new DataCell();
  26.             DataCell Meterial = new DataCell();
  27.             DataCell Parameter = new DataCell();
  28.             Name.SetString("工字钢");
  29.             Meterial.SetString("Q235B");
  30.             Parameter.SetString("200*200*32*25");
  31.             Row.Add(Name);
  32.             Row.Add(Meterial);
  33.             Row.Add(Parameter);
  34.             dt.AppendRow(Row, true);
  35.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  36.             Database db = doc.Database;
  37.             Editor ed = doc.Editor;
  38.             PromptEntityResult ent = ed.GetEntity("\n选择要写数据的对象");
  39.             if (ent.Status == PromptStatus.OK)
  40.             {
  41.                 using (Transaction tr = db.TransactionManager.StartTransaction())
  42.                 {
  43.                     Entity entity = (Entity)tr.GetObject(ent.ObjectId, OpenMode.ForWrite, true);
  44.                     if (entity.ExtensionDictionary == new ObjectId())
  45.                         entity.CreateExtensionDictionary();
  46.                     DBDictionary extensionDic = (DBDictionary)tr.GetObject(entity.ExtensionDictionary, OpenMode.ForWrite, false);
  47.                     extensionDic.SetAt("ParameterTable", dt);
  48.                     tr.AddNewlyCreatedDBObject(dt, true);
  49.                     tr.Commit();
  50.                 }
  51.             }
  52.         }
  53.         [CommandMethod("ReadData")]
  54.         public void ReadData()
  55.         {
  56.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  57.             Database db = doc.Database;
  58.             Editor ed = doc.Editor;
  59.             Entity entity = null;
  60.             PromptEntityResult ent = ed.GetEntity("\n选择要读取数据的对象");
  61.             if (ent.Status == PromptStatus.OK)
  62.             {
  63.                 using (Transaction transaction = db.TransactionManager.StartTransaction())
  64.                 {
  65.                     entity = (Entity)transaction.GetObject(ent.ObjectId, OpenMode.ForRead, true);
  66.                     DBDictionary extensionDic = transaction.GetObject(entity.ExtensionDictionary, OpenMode.ForRead) as DBDictionary;
  67.                     DataTable dt = transaction.GetObject(extensionDic.GetAt("ParameterTable"), OpenMode.ForRead) as DataTable;
  68.                     ed.WriteMessage("\n Name:" + dt.GetCellAt(0, 0).Value.ToString());
  69.                     ed.WriteMessage("\n Meterial:" + dt.GetCellAt(0, 1).Value.ToString());
  70.                     ed.WriteMessage("\n Parameter:" + dt.GetCellAt(0, 2).Value.ToString());
  71.                     transaction.Commit();
  72.                 }
  73.             }
  74.         }
  75.     }
  76. }
复制代码
运行”WriteData”命令选择要写扩展数据的对象:

再运行“ReadData“选择要读取扩展数据的对象,命令行中则显示对象的扩展数据:


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-16 12:28

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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