CAD关于块表操作(com接口c#语言)

1. 得到所有图块

(1)下面代码,遍历块表的每条记录,然后得到块名,C#如下:

MxDrawDatabase databae = (MxDrawDatabase)axMxDrawX1.GetDatabase();
MxDrawBlockTable blkTab = databae.GetBlockTable();
MxDrawBlockTableIterator iter = blkTab.NewIterator();
for (; !iter.Done(); iter.Step())
{
    MxDrawBlockTableRecord blkRec = iter.GetRecord();
    MessageBox.Show(blkRec.Name);
 
}

(2)判断当前数据库中,是有指定的块名

MxDrawDatabase data = (MxDrawDatabase)axMxDrawX1.GetDatabase();
if (data.GetBlockTable().Has("BlkName"))
{
    // 已经插入.
}

(3)遍历某名称图块下所有实体

MxDrawDatabase database = (MxDrawDatabase)axMxDrawX1.GetDatabase();
      MxDrawBlockTableRecord blkRec = database.GetBlockTable().GetAt(sBlkName);
      MxDrawBlockTableRecordIterator iter = blkRec.NewIterator();
      if (iter == null)
          return;
      int iNum = 0;
      // 循环得到所有实体
      for (; !iter.Done(); iter.Step(true, false))
      {
          // 得到遍历器当前的实体
          MxDrawEntity ent = iter.GetEntity();
          MessageBox.Show(ent.ObjectName);
 
          iNum++;
      }
      MessageBox.Show(iNum.ToString());

2.得到当前空间中所有实体

下面代码演示如何得到当前块表记录,然后遍历块表记录,取到每个对象,判断对象类型,然后得到对象的属性数据。

private void GetAllEntity()
{
  
        MxDrawApplication app = new MxDrawApplication();
        MxDrawUtility mxUtility = new MxDrawUtility();
 
        // 得到当前图纸空间
        MxDrawBlockTableRecord blkRec = app.WorkingDatabase().CurrentSpace();
 
        // 创建一个用于遍历当前图纸空间的遍历器
        MxDrawBlockTableRecordIterator iter = blkRec.NewIterator();
        if (iter == null)
            return;
 
        // 所有实体的id数组。
        List<Int32> aryId = new List<Int32>();
 
        int iLineNum = 0;
        // 循环得到所有实体
 
        for (; !iter.Done(); iter.Step(true, false))
        {
            // 得到遍历器当前的实体
            MxDrawEntity ent = iter.GetEntity();
            if (ent == null)
                continue;
 
            // 得到实体的id
            aryId.Add(ent.ObjectID);
 
            if (ent is MxDrawLine)
            {
                // 当前实体是一个直线
                MxDrawLine line = (MxDrawLine)ent;
                iLineNum++;
            }
            else if (ent is MxDrawBlockReference)
            {
                // 当前实体是一个块引用
                MxDrawBlockReference blkRef = (MxDrawBlockReference)ent;
                for (int j = 0; j < blkRef.AttributeCount; j++)
                {
                    // 得到块引用中所有的属性
                    MxDrawAttribute attrib = blkRef.AttributeItem(j);
                    mxUtility.Prompt("n Tag: " + attrib.Tag + "Text:" + attrib.TextString);
                }
 
            }
            // else if (ent is 其它类型)
            //{
            //  ... ....
            //}
        }
 
        String sT;
        sT = "发现" + aryId.Count + "个实体,其中有" + iLineNum + "个直线";
        MessageBox.Show(sT);
    
}

3. 添加块表记录

(1)下面代码,判断块表中是否有指定名称的块表记录,如果没有就增一个块表记录。

// sName 是新增加的块名。
// blkOriginPoint 是图块的插入基点。
public bool AddBlockRrecord(String sName, MxDrawPoint blkOriginPoint)
{
    // 取当前数据库.
    MxDrawDatabase curDatabase = (MxDrawDatabase)(axMxDrawX1.GetDatabase());
    // 得到块表
    MxDrawBlockTable blkTable = curDatabase.GetBlockTable();
     
    // 判断块表是否已经有该名称的块名。
    if (blkTable.Has(sName))
    {
        MxDrawBlockTableRecord blkRec = blkTable.GetAt(sName, true);
        // 如果块被删除,就反删除。
        blkRec.SetProp("unErase", null);
        return true;
    }
    // 新增一个块表记录.
    MxDrawBlockTableRecord blkNewRec = blkTable.Add(sName);
    if (blkNewRec == null)
        return false;
    // 设置块表记录的插入基点
    blkNewRec.Origin = blkOriginPoint;
    return true;
}

(2)调用代码:

MxDrawPoint pt = new MxDrawPoint();
 pt.x = 100;
 pt.y = 100;
 AddBlockRrecord("MyBlkName", pt);

(3)运行后块表中多了一个我们添加的块表记录

blk1.png

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Autocad二次开发文档是指用于开发Autocad软件的相关文档。Autocad是一款设计类软件,广泛用于建筑、机械、电气等领域。二次开发是指在Autocad软件的基础上进行定制化开发,以满足用户特定的需求。 Autocad二次开发文档包括以下内容:首先是软件的开发环境和开发工具的介绍,如Autocad软件的版本、开发平台、开发语言等,以及开发所需的集成开发环境(IDE)、编译器等工具的使用说明。 其次是Autocad软件的API(Application Programming Interface)的介绍和使用说明。API是Autocad提供给开发者的一组接口和函数,用于访问和操作软件的各种功能和对象,如图形、图层、块等。开发者可以通过调用API来实现自定义的功能和操作。 还有开发过程中的示例代码和案例,它们可以帮助开发者更好地理解和掌握API的使用方法,并根据实际需求进行修改和扩展。 此外,Autocad二次开发文档中还包括了一些开发技术和注意事项的介绍,如常用的开发技巧、调试方法、错误处理等。这些内容可以帮助开发者提高开发效率和质量,并解决可能遇到的问题。 总之,Autocad二次开发文档是开发Autocad软件的重要参考资料,它提供了开发环境、API的使用方法、示例代码、开发技术和注意事项等内容,帮助开发者进行定制化开发,实现满足用户需求的自定义功能和操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值