天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 100|回复: 0

获取图块里的所有对象(包含子图块的对象)

[复制链接]
  • TA的每日心情
    开心
    昨天 08:01
  • 签到天数: 82 天

    [LV.6]常住居民II

    1585

    主题

    204

    回帖

    214748万

    积分

    管理员

    积分
    2147483647
    发表于 2024-3-9 11:09:44 | 显示全部楼层 |阅读模式
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using Autodesk.AutoCAD.EditorInput;
    6. using Autodesk.AutoCAD.DatabaseServices;
    7. using Autodesk.AutoCAD.ApplicationServices;

    8. namespace ForeachBlockAllObject
    9. {
    10.     public class Class1
    11.     {
    12.         private static int intLayerNum;

    13.         [Autodesk.AutoCAD.Runtime.CommandMethod("GetBlockObject")]
    14.         public void foreachBlockAllObject()
    15.         {
    16.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
    17.             Database db = HostApplicationServices.WorkingDatabase;

    18.             using (DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument())
    19.             {
    20.                 //定义过滤器
    21.                 TypedValue[] filList = new TypedValue[1];
    22.                 filList[0] = new TypedValue(0, "Insert");
    23.                 SelectionFilter filter = new SelectionFilter(filList);
    24.                 //选择对象
    25.                 PromptSelectionResult res = ed.GetSelection(filter);
    26.                 if (res.Status == PromptStatus.OK)
    27.                 {
    28.                     intLayerNum = 1;
    29.                     using (Transaction trans = db.TransactionManager.StartTransaction())
    30.                     {
    31.                         //遍历选择集
    32.                         foreach (ObjectId id in res.Value.GetObjectIds())
    33.                         {
    34.                             //获取选择集里的图块
    35.                             BlockReference blockObject = trans.GetObject(id, OpenMode.ForRead) as BlockReference;

    36.                             ed.WriteMessage("***************************************************************\n");

    37.                             //获取图块的块名称
    38.                             ed.WriteMessage("第" + intLayerNum++.ToString("000") + "层 图块名称:" + blockObject.Name + "\n");
    39.                             ed.WriteMessage("===============================================================\n");

    40.                             //获取图块中的所有实体对象
    41.                             getBlockSubEntity(ed, trans, blockObject);
    42.                             ed.WriteMessage("***************************************************************\n");
    43.                         }
    44.                         trans.Commit();
    45.                     }
    46.                 }
    47.             }
    48.         }

    49.         /// <summary>
    50.         /// 获取图块中的所有实体对象
    51.         /// </summary>
    52.         /// <param name="ed"></param>
    53.         /// <param name="trans"></param>
    54.         /// <param name="blockObject"></param>
    55.         private static void getBlockSubEntity(Editor ed, Transaction trans, BlockReference blockObject)
    56.         {

    57.             //获取图块的块表记录
    58.             BlockTableRecord btrBlock = trans.GetObject(blockObject.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;

    59.             //遍历图块里的所有实体对象
    60.             foreach (ObjectId BlcokId in btrBlock)
    61.             {
    62.                 Entity BlockEntity = trans.GetObject(BlcokId, OpenMode.ForRead) as Entity;
    63.                 if (BlockEntity is BlockReference)
    64.                 {
    65.                     //获取图块的块名称
    66.                     ed.WriteMessage("第" + intLayerNum++.ToString("000") + "层 图块名称:" + ((BlockReference)BlockEntity).Name + "\n");
    67.                     ed.WriteMessage("===============================================================\n");

    68.                     //获取图块中的所有实体对象
    69.                     getBlockSubEntity(ed, trans, (BlockReference)BlockEntity);
    70.                 }
    71.                 ed.WriteMessage("实体对象类型:" + BlockEntity.GetType().ToString() + "\n");
    72.                 ed.WriteMessage("实体objectId:" + BlockEntity.ObjectId + "\n");
    73.                 ed.WriteMessage("实体对象句柄:" + BlockEntity.Handle + "\n");
    74.                 ed.WriteMessage("---------------------------------------------------------------\n");
    75.             }
    76.             ed.WriteMessage("===============================================================\n");
    77.         }
    78.     }
    79. }
    复制代码


    1. using System.Reflection;
    2. using System.Runtime.CompilerServices;
    3. using System.Runtime.InteropServices;

    4. // 有关程序集的常规信息通过下列属性集
    5. // 控制。更改这些属性值可修改
    6. // 与程序集关联的信息。
    7. [assembly: AssemblyTitle("ForeachBlockAllObject")]
    8. [assembly: AssemblyDescription("")]
    9. [assembly: AssemblyConfiguration("")]
    10. [assembly: AssemblyCompany("TC")]
    11. [assembly: AssemblyProduct("ForeachBlockAllObject")]
    12. [assembly: AssemblyCopyright("Copyright © TC 2009")]
    13. [assembly: AssemblyTrademark("")]
    14. [assembly: AssemblyCulture("")]

    15. // 将 ComVisible 设置为 false 使此程序集中的类型
    16. // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
    17. // 则将该类型上的 ComVisible 属性设置为 true。
    18. [assembly: ComVisible(false)]

    19. // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
    20. [assembly: Guid("dcd5c6be-8cce-4b70-8528-b6dec48e20cf")]

    21. // 程序集的版本信息由下面四个值组成:
    22. //
    23. //      主版本
    24. //      次版本
    25. //      内部版本号
    26. //      修订号
    27. //
    28. // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
    29. // 方法是按如下所示使用“*”:
    30. // [assembly: AssemblyVersion("1.0.*")]
    31. [assembly: AssemblyVersion("1.0.0.0")]
    32. [assembly: AssemblyFileVersion("1.0.0.0")]
    复制代码

     

     

     

     

    获取图块里的所有对象(包含子图块的对象)
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-5-17 19:05 , Processed in 0.058403 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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