SWAYWOOD 发表于 2013-10-14 10:26:15

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

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

SWAYWOOD 发表于 2013-10-14 11:12:39

大家帮忙看看啊!多谢了!

liuxu042 发表于 2013-10-14 11:27:28

当然需要重定义

SWAYWOOD 发表于 2013-10-14 13:27:18

怎么重定义?能讲讲方法吗?

SWAYWOOD 发表于 2013-10-14 16:19:11

有没有人搞过啊,怎么没人懂呢

sieben 发表于 2013-10-15 13:40:29

你会不会用程序画出一个图形?或者你会不会加一个图形到模型空间?
若会,把代码贴出来

s305040093 发表于 2013-10-16 09:55:30

pBlockRecord->appendAcDbEntity(entityId, pEnt);
pBlockRecord为你test块定义的记录,pEnt为要添加的图元

SWAYWOOD 发表于 2013-10-16 12:16:49

sieben 发表于 2013-10-15 13:40 static/image/common/back.gif
你会不会用程序画出一个图形?或者你会不会加一个图形到模型空间?
若会,把代码贴出来

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

      /// <summary>
      /// 创建一个块表记录并添加到数据库中
      /// </summary>
      /// <param name="db">数据库对象</param>
      /// <param name="blockName">块名</param>
      /// <param name="ents">加入块中的实体列表</param>
      /// <returns>返回块表记录的Id</returns>
      public static ObjectId AddBlockTableRecord(this Database db, string blockName, List<Entity> ents)
      {
            //打开块表
            BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
            if (!bt.Has(blockName)) //判断是否存在名为blockName的块
            {
                //创建一个BlockTableRecord类的对象,表示所要创建的块
                BlockTableRecord btr = new BlockTableRecord();
                btr.Name = blockName;//设置块名
                btr.Explodable = false;
                //将列表中的实体加入到新建的BlockTableRecord对象
                ents.ForEach(ent => btr.AppendEntity((Entity)ent.Clone()));
                bt.UpgradeOpen();//切换块表为写的状态
                bt.Add(btr);//在块表中加入blockName块
                db.TransactionManager.AddNewlyCreatedDBObject(btr, true);//通知事务处理
                bt.DowngradeOpen();//为了安全,将块表状态改为读
            }
            //else{
            //    //获取块表记录的Id
            //    ObjectId btrId = bt;
            //    //获取BlockTableRecord
            //    //BlockTableRecord btr = (BlockTableRecord)btrId.GetObject(OpenMode.ForWrite);
            //    BlockTableRecord btr = new BlockTableRecord();
            //    //将列表中的实体加入到新建的BlockTableRecord对象
            //    ents.ForEach(ent => btr.AppendEntity((Entity)ent.Clone()));
            //    btr.Name = blockName;//设置块名
            //    bt.Add(btr);//在块表中加入blockName块
            //    db.TransactionManager.AddNewlyCreatedDBObject(btr, true);//通知事务处理
            //    bt.DowngradeOpen();//为了安全,将块表状态改为读
            //}
                return bt;//返回块表记录的Id

      }

sieben 发表于 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, OpenMode.ForWrite);
          }
          else
          {
            if (cbt.Has(nameSpace))
            {
            cbtr = (BlockTableRecord)ctrans.GetObject(cbt, 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;
      }
    }

SWAYWOOD 发表于 2013-10-16 15:56:37

sieben 发表于 2013-10-16 13:04 static/image/common/back.gif
///
    /// 将实体提交到AutoCAD Database
    /// Version : 2007.10.08 Sieben


多谢,赶紧学习一下!
页: [1]
查看完整版本: 一个块TEST已经定义好了,现在想要增加一个图元进去怎么搞?