如何编写代码实现从外部输入块,并插入到当前文件中
答案:1 悬赏:20 手机版
解决时间 2021-11-15 13:56
- 提问者网友:萌卜娃娃
- 2021-11-14 14:11
如何编写代码实现从外部输入块,并插入到当前文件中
最佳答案
- 五星知识达人网友:夜余生
- 2021-11-14 15:27
///
/// 使用一个新建的database从另外一个不打开的文件引入块记录
/// ImportBlock_DB里的ReadDwgFile方法在编译调试环境下会出错,错误为:尝试读取或写入受保护的内存
/// 但在正常AutoCAD启动装载程序情况下可用
/// Version : 2008.11.11 Sieben
///
/// 另外一个文件的文件名
/// 引入的一个块记录名,若为空字符串"",将引入文件里面的全部图块
///成功返回true,否则返回false
static public StringCollection ImportBlock_DB(string fileName, string blockName)
{
if (!File.Exists(fileName)) return null;
Database sourceDb = new Database(false, true);
try
{
//下面的ReadDwgFile方法在编译调试环境下会出错,错误为:尝试读取或写入受保护的内存
//但在正常AutoCAD启动装载程序情况下可用.
sourceDb.ReadDwgFile(fileName, System.IO.FileShare.Read, false, "");
Database destDb = aApp.DocumentManager.MdiActiveDocument.Database;
ObjectIdCollection blockIds = new ObjectIdCollection();
StringCollection reValue = new StringCollection();
using (Transaction ctrans = sourceDb.TransactionManager.StartTransaction())
{
BlockTable cbt = (BlockTable)ctrans.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false);
if (blockName == "")
{
foreach (ObjectId btrId in cbt)
{
BlockTableRecord cbtr = (BlockTableRecord)ctrans.GetObject(btrId, OpenMode.ForRead, false);
if (!cbtr.IsAnonymous && !cbtr.IsLayout)
{
blockIds.Add(btrId);
reValue.Add(cbtr.Name);
}
cbtr.Dispose();
}
}
else if (cbt.Has(blockName))
{
blockIds.Add(cbt[blockName]);
}
cbt.Dispose();
}
if (blockIds.Count == 0)
{
return null;
}
else
{
IdMapping mapping = new IdMapping();
sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, new IdMapping(), DuplicateRecordCloning.Replace, false);
return reValue;
}
}
catch (System.Exception ex)
{
se.WriteMessage(ex);
return null;
}
finally { sourceDb.Dispose(); }
}
/// 使用一个新建的database从另外一个不打开的文件引入块记录
/// ImportBlock_DB里的ReadDwgFile方法在编译调试环境下会出错,错误为:尝试读取或写入受保护的内存
/// 但在正常AutoCAD启动装载程序情况下可用
/// Version : 2008.11.11 Sieben
///
/// 另外一个文件的文件名
/// 引入的一个块记录名,若为空字符串"",将引入文件里面的全部图块
///
static public StringCollection ImportBlock_DB(string fileName, string blockName)
{
if (!File.Exists(fileName)) return null;
Database sourceDb = new Database(false, true);
try
{
//下面的ReadDwgFile方法在编译调试环境下会出错,错误为:尝试读取或写入受保护的内存
//但在正常AutoCAD启动装载程序情况下可用.
sourceDb.ReadDwgFile(fileName, System.IO.FileShare.Read, false, "");
Database destDb = aApp.DocumentManager.MdiActiveDocument.Database;
ObjectIdCollection blockIds = new ObjectIdCollection();
StringCollection reValue = new StringCollection();
using (Transaction ctrans = sourceDb.TransactionManager.StartTransaction())
{
BlockTable cbt = (BlockTable)ctrans.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false);
if (blockName == "")
{
foreach (ObjectId btrId in cbt)
{
BlockTableRecord cbtr = (BlockTableRecord)ctrans.GetObject(btrId, OpenMode.ForRead, false);
if (!cbtr.IsAnonymous && !cbtr.IsLayout)
{
blockIds.Add(btrId);
reValue.Add(cbtr.Name);
}
cbtr.Dispose();
}
}
else if (cbt.Has(blockName))
{
blockIds.Add(cbt[blockName]);
}
cbt.Dispose();
}
if (blockIds.Count == 0)
{
return null;
}
else
{
IdMapping mapping = new IdMapping();
sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, new IdMapping(), DuplicateRecordCloning.Replace, false);
return reValue;
}
}
catch (System.Exception ex)
{
se.WriteMessage(ex);
return null;
}
finally { sourceDb.Dispose(); }
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯