明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1542|回复: 3

[基础] 如何访问块定义和成组数据?

[复制链接]
发表于 2011-8-4 11:48:41 | 显示全部楼层 |阅读模式
本帖最后由 suzhiyu 于 2011-8-4 15:08 编辑

块定义数据也是保存在BlockTable中吗, 怎么读取?如果复杂的块是点、线、面和文字混合组成,如何分解为单项?同样的如果是成组group的数据,怎么读取和分解?

在《AutoCAD .NET 开发人员手册》中这些内容我没有看到,高手出来指点下,或者在ObjectARX有解答也可以。

----------------------------------------------------------------------------------------------------------
在论坛找了好久,根据下面这个帖子:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=84543&highlight=%CD%BC%BF%E9

实现了BlockTable中的块定义名称遍历,后面有新的突破我会继续更新。
  1.         /// <summary>
  2.         /// 遍历一个DWG文件的块定义
  3.         /// </summary>
  4.         [Autodesk.AutoCAD.Runtime.CommandMethod("ListBlockDef")]
  5.         public void ListBlockDef()
  6.         {
  7.             try
  8.             {
  9.                 Database acDatabase = Application.DocumentManager.MdiActiveDocument.Database;

  10.                 using (Transaction trans = acDatabase.TransactionManager.StartTransaction())
  11.                 {
  12.                     BlockTable acBlkTable = trans.GetObject(acDatabase.BlockTableId, OpenMode.ForRead) as BlockTable;
  13.                     StringBuilder strBuilder = new StringBuilder();

  14.                     foreach (ObjectId id in acBlkTable)
  15.                     {   
  16.                         SymbolTableRecord symTableRec = trans.GetObject(id, OpenMode.ForRead) as SymbolTableRecord;
  17.                          strBuilder.Append(string.Format("{0} \n", symTableRec.Name));
  18.                     }

  19.                     Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(strBuilder.ToString());
  20.                 }
  21.             }
  22.             catch (System.Exception ex)
  23.             {
  24.                 Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message);
  25.             }
  26.         }

 楼主| 发表于 2011-8-4 15:34:29 | 显示全部楼层
本帖最后由 suzhiyu 于 2011-8-4 15:36 编辑

继续在论坛翻找资料,根据http://bbs.mjtd.com/thread-78973-1-1.html【[符号表] [原创]翔麟专集——获取图块里的所有对象(包含子图块的对象)】实现了块数据的分解,重构了getBlockSubEntity函数

-----------------------------------------------------------
目前对编组group这个功能还是不够了解
  1. /// <summary>
  2.         /// 遍历一个DWG文件的块定义
  3.         /// </summary>
  4.         [Autodesk.AutoCAD.Runtime.CommandMethod("ListBlockDef")]
  5.         public void ListBlockDef()
  6.         {
  7.             try
  8.             {
  9.                 Database acDatabase = Application.DocumentManager.MdiActiveDocument.Database;

  10.                 using (Transaction trans = acDatabase.TransactionManager.StartTransaction())
  11.                 {
  12.                     BlockTable acBlkTable = trans.GetObject(acDatabase.BlockTableId, OpenMode.ForRead) as BlockTable;
  13.                     StringBuilder strBuilder = new StringBuilder();
  14.                     foreach (ObjectId id in acBlkTable)
  15.                     {   
  16.                         SymbolTableRecord symTableRec = trans.GetObject(id, OpenMode.ForRead) as SymbolTableRecord;
  17.                         string str = symTableRec.GetType().ToString();
  18.                         strBuilder.Append(string.Format("{0}-{1} \n", symTableRec.Name, str));
  19.                         str = getBlockSubEntity(trans, symTableRec as BlockTableRecord);
  20.                         strBuilder.Append(str);
  21.                     }
  22.                     Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(strBuilder.ToString());
  23.                 }
  24.             }
  25.             catch (System.Exception ex)
  26.             {
  27.                 Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message);
  28.             }
  29.         }



  30.         /// <summary>
  31.         ///
  32.         /// </summary>
  33.         /// <param name="trans"></param>
  34.         /// <param name="btrBlock"></param>
  35.         /// <returns></returns>
  36.         private string getBlockSubEntity(Transaction trans, BlockTableRecord btrBlock)
  37.         {
  38.             try
  39.             {
  40.                 StringBuilder strBuilder = new StringBuilder();
  41.                 //遍历图块里的所有实体对象
  42.                 foreach (ObjectId BlcokId in btrBlock)
  43.                 {
  44.                     Entity BlockEntity = trans.GetObject(BlcokId, OpenMode.ForRead) as Entity;
  45.                     if (BlockEntity is BlockReference)
  46.                     {
  47.                         //获取图块的块名称
  48.                         BlockReference blockObject = BlockEntity as BlockReference;
  49.                         strBuilder.Append(blockObject.Name + "\n\n");
  50.                         //获取图块中的所有实体对象
  51.                         BlockTableRecord btrBlockSub = trans.GetObject(blockObject.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
  52.                         string str = getBlockSubEntity(trans, btrBlockSub);
  53.                         strBuilder.Append(str);
  54.                     }
  55.                     strBuilder.Append("实体对象类型:" + BlockEntity.GetType().ToString() + "\n");
  56.                     strBuilder.Append("实体objectId:" + BlockEntity.ObjectId + "\n");
  57.                     strBuilder.Append("实体对象句柄:" + BlockEntity.Handle + "\n");
  58.                     strBuilder.Append("\n");
  59.                 }
  60.                 strBuilder.Append("===============================================================\n");
  61.                 return strBuilder.ToString();
  62.             }
  63.             catch (System.Exception ex)
  64.             {
  65.                 return ex.Message;
  66.             }
  67.         }



               
 楼主| 发表于 2011-8-4 16:08:00 | 显示全部楼层
编组的代码情形可以看:
http://bbs.mjtd.com/forum.php?mo ... 63&star=1#37398
http://bbs.mjtd.com/thread-76123-1-1.html

在论坛翻找了4-5个小时,对雪山飞狐_lzh的仰慕之情溢于言表、受益良多
发表于 2011-8-4 20:04:51 | 显示全部楼层
建议LZ自己写一遍,你就理解了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 20:54 , Processed in 0.166462 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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