明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1666|回复: 9

[运行时] 一个块TEST已经定义好了,现在想要增加一个图元进去怎么搞?

[复制链接]
发表于 2013-10-14 10:26:15 | 显示全部楼层 |阅读模式
一个块TEST已经定义好了,现在想要增加一个图元进去怎么搞?
 楼主| 发表于 2013-10-14 11:12:39 | 显示全部楼层
大家帮忙看看啊!多谢了!
发表于 2013-10-14 11:27:28 | 显示全部楼层
当然需要重定义
 楼主| 发表于 2013-10-14 13:27:18 | 显示全部楼层
怎么重定义?能讲讲方法吗?
 楼主| 发表于 2013-10-14 16:19:11 | 显示全部楼层
有没有人搞过啊,怎么没人懂呢
发表于 2013-10-15 13:40:29 | 显示全部楼层
你会不会用程序画出一个图形?或者你会不会加一个图形到模型空间?
若会,把代码贴出来
发表于 2013-10-16 09:55:30 | 显示全部楼层
pBlockRecord->appendAcDbEntity(entityId, pEnt);
pBlockRecord为你test块定义的记录,pEnt为要添加的图元
 楼主| 发表于 2013-10-16 12:16:49 | 显示全部楼层
sieben 发表于 2013-10-15 13:40
你会不会用程序画出一个图形?或者你会不会加一个图形到模型空间?
若会,把代码贴出来

我的原来代码是这样的,想实现就是当图中不存在blockname块定义时定义新块,如果存在则往该块中增加图元,就是else后面的不知道怎么写,请帮忙看看,多谢!

  1.         /// <summary>
  2.         /// 创建一个块表记录并添加到数据库中
  3.         /// </summary>
  4.         /// <param name="db">数据库对象</param>
  5.         /// <param name="blockName">块名</param>
  6.         /// <param name="ents">加入块中的实体列表</param>
  7.         /// <returns>返回块表记录的Id</returns>
  8.         public static ObjectId AddBlockTableRecord(this Database db, string blockName, List<Entity> ents)
  9.         {
  10.             //打开块表
  11.             BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
  12.             if (!bt.Has(blockName)) //判断是否存在名为blockName的块
  13.             {
  14.                 //创建一个BlockTableRecord类的对象,表示所要创建的块
  15.                 BlockTableRecord btr = new BlockTableRecord();
  16.                 btr.Name = blockName;//设置块名
  17.                 btr.Explodable = false;
  18.                 //将列表中的实体加入到新建的BlockTableRecord对象
  19.                 ents.ForEach(ent => btr.AppendEntity((Entity)ent.Clone()));
  20.                 bt.UpgradeOpen();//切换块表为写的状态
  21.                 bt.Add(btr);//在块表中加入blockName块
  22.                 db.TransactionManager.AddNewlyCreatedDBObject(btr, true);//通知事务处理
  23.                 bt.DowngradeOpen();//为了安全,将块表状态改为读
  24.             }
  25.             //else{
  26.             //    //获取块表记录的Id
  27.             //    ObjectId btrId = bt[blockName];
  28.             //    //获取BlockTableRecord
  29.             //    //BlockTableRecord btr = (BlockTableRecord)btrId.GetObject(OpenMode.ForWrite);
  30.             //    BlockTableRecord btr = new BlockTableRecord();
  31.             //    //将列表中的实体加入到新建的BlockTableRecord对象
  32.             //    ents.ForEach(ent => btr.AppendEntity((Entity)ent.Clone()));
  33.             //    btr.Name = blockName;//设置块名
  34.             //    bt.Add(btr);//在块表中加入blockName块
  35.             //    db.TransactionManager.AddNewlyCreatedDBObject(btr, true);//通知事务处理
  36.             //    bt.DowngradeOpen();//为了安全,将块表状态改为读
  37.             //}
  38.                 return bt[blockName];//返回块表记录的Id

  39.         }
发表于 2013-10-16 13:04:34 | 显示全部楼层
    /// <summary>
    /// 将实体提交到AutoCAD Database
    /// Version : 2007.10.08 Sieben
    /// </summary>
    /// <param name="ent">提交的实体</param>
    /// <param name="nameSpace">块记录名即图块名,空字符串则将实体加到模型空间</param>
    /// <param name="cleanUp">是否清空块记录原有实体</param>
    /// <returns>成功返回实体ObjectId,否则返回ObjectId.Null</returns>
public static ObjectId DrawEntity(Entity ent, string nameSpace, bool cleanUp)
    {
      try
      {
        if (ent == null) return ObjectId.Null;
        if (ent.ObjectId.IsValid) return ent.ObjectId;
        using (Transaction ctrans = db.TransactionManager.StartTransaction())
        {
          BlockTable cbt = (BlockTable)ctrans.GetObject(sc.db.BlockTableId, OpenMode.ForRead);
          BlockTableRecord cbtr;
          if (nameSpace == "")
          {
            cbtr = (BlockTableRecord)ctrans.GetObject(cbt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
          }
          else
          {
            if (cbt.Has(nameSpace))
            {
              cbtr = (BlockTableRecord)ctrans.GetObject(cbt[nameSpace], OpenMode.ForWrite);
              if (cleanUp == true)
              {
                foreach (ObjectId objId in cbtr)
                {
                  DBObject obj = (DBObject)ctrans.GetObject(objId, OpenMode.ForWrite);
                  obj.Erase();
                }
              }
            }
            else
            {
              cbt.UpgradeOpen();
              cbtr = new BlockTableRecord();
              cbtr.Name = nameSpace;
              cbt.Add(cbtr);
              ctrans.AddNewlyCreatedDBObject(cbtr, true);
            }
          }
                 cbtr.AppendEntity(ent);
          ctrans.AddNewlyCreatedDBObject(ent, true);
          ctrans.Commit();
        }
        return ent.ObjectId;
      }
      catch (System.Exception ex)
      {     
        return ObjectId.Null;
      }
    }
 楼主| 发表于 2013-10-16 15:56:37 | 显示全部楼层
sieben 发表于 2013-10-16 13:04
///
    /// 将实体提交到AutoCAD Database
    /// Version : 2007.10.08 Sieben

多谢,赶紧学习一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:43 , Processed in 0.205131 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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