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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1172|回复: 27
打印 上一主题 下一主题

[数据库操作] 给一条直线新增一个属性

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 16:40:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在AutoCAD2010程序界面画一条直线保存为Drawing.dwg,在C#中启动AutoCAD2010打开Drawing.dwg获取这条直线并给这条直线新增一个属性length。
执行下面代码不报异常,但在直线的特性中找不到Length属性。麻烦各位帮我看看是什么问题。

  • class AutoClass
  •     {
  •         [CommandMethod("WriteData")]
  •         public void AddData()
  •         {
  •             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  •             Database db = doc.Database;
  •             Editor ed = doc.Editor;
  •             PromptEntityResult ent = ed.GetEntity("\n选择要写数据的对象");
  •             if (ent.Status == PromptStatus.OK)
  •             {
  •                 using (Transaction tr = db.TransactionManager.StartTransaction())
  •                 {
  •                     Entity entity = (Entity)tr.GetObject(ent.ObjectId, OpenMode.ForWrite, true);
  •                     if (entity.GetType().Name.ToString() == "Line")
  •                     {
  •                         Line line = entity as Line;
  •                         AttributeDefinition ad = AttributeDefinition("Length", "L", line.Length.ToString(), new Point3d(100, 100, 0));
  •                         BlockTableRecord btr = new BlockTableRecord();
  •                         btr.Name = "LineBlock2";
  •                         btr.AppendEntity(entity);
  •                         btr.AppendEntity(ad);
  •                         ObjectId id;
  •                         id = AddToBlockTable(btr);
  •                         ToModelSpace(id, Point3d.Origin, db);
  •                         tr.Commit();
  •                     }
  •                 }
  •             }
  •         }
  •         /// <summary>
  •         /// 创建属性
  •         /// </summary>
  •         /// <param name="Label">标记名</param>
  •         /// <param name="Prompt">提示</param>
  •         /// <param name="Value">属性值</param>
  •         /// <param name="pt">属性插入点位置</param>
  •         /// <returns></returns>
  •         public static AttributeDefinition AttributeDefinition(string Label, string Prompt, string Value, Point3d pt)
  •         {
  •             AttributeDefinition ad = new AttributeDefinition();
  •             ad.Constant = false;
  •             ad.Tag = Label;
  •             ad.Prompt = Prompt;
  •             ad.TextString = Value;
  •             ad.Position = pt;
  •             return ad;
  •         }
  •         /// <summary>
  •         /// 将指定的块定义变成块参照添加到指定模型空间
  •         /// </summary>
  •         /// <param name="blkid">块定义Id</param>
  •         /// <param name="pt">插入点</param>
  •         /// <param name="db">数据库</param>
  •         /// <returns></returns>
  •         public static ObjectId ToModelSpace(ObjectId blkid, Point3d pt, Database db)
  •         {
  •             ObjectId blkrfid = new ObjectId();
  •             using (Transaction trans = db.TransactionManager.StartTransaction())
  •             {
  •                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  •                 BlockTableRecord modelspace = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  •                 BlockTableRecord block = trans.GetObject(blkid, OpenMode.ForRead) as BlockTableRecord;
  •                 BlockReference br = new BlockReference(pt, blkid); // 通过块定义添加块参照
  •                 blkrfid = modelspace.AppendEntity(br); //把块参照添加到块表记录
  •                 trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
  •                 foreach (ObjectId id in block)
  •                 {
  •                     if (id.ObjectClass.Equals(RXClass.GetClass(typeof(AttributeDefinition))))
  •                     {
  •                         AttributeDefinition ad = trans.GetObject(id, OpenMode.ForRead) as AttributeDefinition;
  •                         AttributeReference ar = new AttributeReference(ad.Position, ad.TextString, ad.Tag, new ObjectId());
  •                         br.AttributeCollection.AppendAttribute(ar);
  •                     }
  •                 }
  •                 trans.Commit();
  •             }
  •             return blkrfid;
  •         }
  •         /// <summary>
  •         /// 将块表记录加入到块表中
  •         /// </summary>
  •         /// <returns></returns>
  •         public static ObjectId AddToBlockTable(BlockTableRecord Record)
  •         {
  •             Database db = HostApplicationServices.WorkingDatabase;
  •             ObjectId id = new ObjectId();
  •             using (Transaction transaction = db.TransactionManager.StartTransaction())
  •             {
  •                 BlockTable table = transaction.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
  •                 id = table.Add(Record);
  •                 transaction.AddNewlyCreatedDBObject(Record, true);
  •                 transaction.Commit();
  •             }
  •             return id;
  •         }
  • }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

12

主题

854

帖子

1923

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1923
推荐
发表于 2014-2-13 10:00:08 | 只看该作者
帮我解决了很多实际的问题

12

主题

821

帖子

1427

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1427
推荐
发表于 2014-6-9 15:46:30 | 只看该作者
路过!!! 不发表意见……

11

主题

846

帖子

1772

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1772
推荐
发表于 2014-5-13 10:19:59 | 只看该作者
路过!!! 不发表意见……

17

主题

877

帖子

1517

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1517
11F
发表于 2014-3-14 11:24:18 | 只看该作者
(*^__^*) 嘻嘻……

5

主题

843

帖子

1376

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1376
13F
发表于 2014-3-14 11:34:58 | 只看该作者
(*^__^*) 嘻嘻……

7

主题

896

帖子

1515

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1515
15F
发表于 2014-5-7 10:15:13 | 只看该作者
顶......
楼下跟上.....
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 16:44

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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