一个块TEST已经定义好了,现在想要增加一个图元进去怎么搞?
一个块TEST已经定义好了,现在想要增加一个图元进去怎么搞?大家帮忙看看啊!多谢了! 当然需要重定义 怎么重定义?能讲讲方法吗? 有没有人搞过啊,怎么没人懂呢 你会不会用程序画出一个图形?或者你会不会加一个图形到模型空间?
若会,把代码贴出来 pBlockRecord->appendAcDbEntity(entityId, pEnt);
pBlockRecord为你test块定义的记录,pEnt为要添加的图元 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
}
/// <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;
}
} sieben 发表于 2013-10-16 13:04 static/image/common/back.gif
///
/// 将实体提交到AutoCAD Database
/// Version : 2007.10.08 Sieben
多谢,赶紧学习一下!
页:
[1]