切换到宽版
  • 7790阅读
  • 10回复

C#中读取cad文件中的属性(原创) [复制链接]

上一主题 下一主题
离线wzx
 

发帖
897
金币
2267
怪币
0
只看楼主 倒序阅读 楼主  发表于: 2009-09-28
— 本帖被 水潭 从 CAD 移动到本区(2009-11-14) —
获取CAD属性单行文本的代码片断:
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Autodesk.AutoCAD.ApplicationServices;
  10. using Autodesk.AutoCAD.DatabaseServices;
  11. Database db = new Database(false, true);
  12. try
  13.                     {
  14.                         //把DWG文件读入到一个临时的内存数据库中
  15.                         db.ReadDwgFile(fullFileName, System.IO.FileShare.ReadWrite, true, null);
  16.                         //现在进入数据库并获得数据库的块表引用
  17.                         BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false, true);
  18.                         //从块表的模型空间特性中获得块表记录,块表记录对象包含DWG文件数据库实体
  19.                         BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead, false, true);
  20.                         foreach (ObjectId btrId in btr)
  21.                         {
  22.                             DBObject entBlock = (DBObject)trans.GetObject(btrId, OpenMode.ForRead, false, true);
  23.                             if (entBlock.GetRXClass().DxfName.ToUpper() == "INSERT")
  24.                                 {
  25.                                     BlockReference bRef = (BlockReference)entBlock;                                   
  26.                                     if (bRef.AttributeCollection.Count != 0)
  27.                                     {
  28.                                         System.Collections.IEnumerator bRefEnum = bRef.AttributeCollection.GetEnumerator();
  29.                                         while (bRefEnum.MoveNext())
  30.                                         {
  31.                                             ObjectId aId = (ObjectId)bRefEnum.Current;//这一句极其关键
  32.                                             AttributeReference aRef = (AttributeReference)trans.GetObject(aId, OpenMode.ForRead, false, true);
  33.                                                 aRef.TextString;//此语句即获得属性单行文本,请自行在此语句前添加 属性单行文本 赋于的变量
  34.                                          }
  35.                                     }
  36.                               }
  37.                         }
  38.                         trans.Commit(); //提交事务处理
  39.                 btr.Dispose();
  40.                         bt.Dispose();
  41.                     }
  42.                     catch (System.Exception ex)
  43.                     {
  44.                         MessageBox.Show("\n出错啦: " + ex.Message);
  45.                     }
  46.                     finally
  47.                     {                       
  48.                         db.Dispose();
  49.                     }

2条评分
zhangwcx 威望 +1 优秀文章 2009-09-30
happy 铜币 +8 原创内容 2009-09-28
离线smallbug

发帖
175
金币
155
怪币
0
只看该作者 沙发  发表于: 2009-09-28
楼主能说明一下这个东西怎么用,用在哪里?
离线wzx

发帖
897
金币
2267
怪币
0
只看该作者 板凳  发表于: 2009-09-29
功能: 用C#编程方法实现提取CAD中属性块中的属性.
对用.net二次开发CAD的兄弟们应该不用介绍用法了.
离线bezdz

发帖
298
金币
31
怪币
0
只看该作者 地板  发表于: 2009-09-30
好东西啊
能提取CAD里的属性,就可以出材料表了
让“牛人”逼得走投无路,
人称“牛逼的人”
离线njhjw

发帖
872
金币
3018
怪币
0
只看该作者 4楼 发表于: 2009-10-02
支持原创,能多发点这方面的代码.造福论坛那就更好了!
离线半夜星星

发帖
633
金币
3048866
怪币
-2
只看该作者 5楼 发表于: 2009-10-03
谢谢楼主了,我要好好学习C#,其实已经买了书就是没时间看啊
离线camwin

发帖
356
金币
522607
怪币
0
只看该作者 6楼 发表于: 2009-10-04
先搞定了c#再说其他
离线刺天

发帖
135
金币
0
怪币
0
只看该作者 7楼 发表于: 2014-05-19
打开看看学习学习
离线slz

发帖
6143
金币
1739
怪币
0
只看该作者 8楼 发表于: 2015-06-27
谢谢楼主了,我要好好学习C#,其实已经买了书就是没时间看啊 谢谢楼主了,我要好好学习C#,其实已经买了书就是没时间看啊
离线slz

发帖
6143
金币
1739
怪币
0
只看该作者 9楼 发表于: 2019-12-24
楼主能说明一下这个东西怎么用,用在哪里?
离线slz

发帖
6143
金币
1739
怪币
0
只看该作者 10楼 发表于: 2021-03-30
楼主能说明一下这个东西怎么用,用在哪里?