- 积分
- 452
- 明经币
- 个
- 注册时间
- 2013-12-29
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
//根据模板中的布局创建布局,并复制模板布局中的实体到新布局中
public static ObjectId CreateLayout(Database curDb, Database templateDb, string strLayoutName)
{
ObjectId layoutId = ObjectId.Null;
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
DocumentLock _lock = doc.LockDocument();
using (_lock)
{
using (Transaction trans = curDb.TransactionManager.StartTransaction())
{
LayoutManager lm = LayoutManager.Current;
//检查当前布局中有没有与指定布局同名的布局,有则删除。
layoutId = lm.GetLayoutId(strLayoutName);
if (layoutId != ObjectId.Null)
{
lm.DeleteLayout(strLayoutName);
}
//创建布局
layoutId = lm.CreateLayout(strLayoutName);
Layout layout = (Layout)layoutId.GetObject(OpenMode.ForWrite);
lm.CurrentLayout = strLayoutName;
//删除布局中的实体
ObjectIdCollection entIds = LayoutTools.GetEntsInLayout(curDb,layout, true);
foreach (ObjectId entId in entIds)
{
DBObject ent = entId.GetObject(OpenMode.ForWrite) as DBObject;
ent.Erase();
}
//获得模板图中指定布局的ID和布局中的所有实体ID
ObjectIdCollection entIdsInLayout = new ObjectIdCollection();
ObjectId srcLayoutId = LayoutTools.GetLayoutId(templateDb, strLayoutName, ref entIdsInLayout);
ObjectId newBtrId = new ObjectId();
if (srcLayoutId.IsValid)
{
//复制布局中的所有实体
Layout srcLayout = (Layout)srcLayoutId.GetObject(OpenMode.ForRead);
layout.CopyFrom(srcLayout);
newBtrId = layout.BlockTableRecordId;
}
//将模板布局中的实体复制到新布局
if (entIdsInLayout.Count > 0)
{
IdMapping idmap = new IdMapping();
templateDb.WblockCloneObjects(entIdsInLayout, newBtrId, idmap, DuplicateRecordCloning.Replace, false);
}
trans.Commit();
}
}
return layoutId;
}
以上是根据模板布局创建新布局的函数。
问题:这样创建出来的布局中的视口与模板布局中的视口大小不一样(即高、宽与模板布局中视口的高、宽不一样),请高手指教,不胜感激啊!!!搞了一天了,不知为什么?是不是复制的时候有问题?
该贴已经同步到 NiNe苦瓜的微博 |
|