Autocad C#删除布局视口
任何人都可以帮助我创建一个C#代码来删除布局中的视口。Autocad C#删除布局视口
我试过一个代码来删除视口,它编译没有问题,但它不会删除视口,我不知道我在做什么这里错了。
感谢
公共类的Class1 { [CommandMethod( “哈哈”)
public static void CreateModelViewports()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
var viewportTable = (ViewportTable)trans.GetObject(db.ViewportTableId, OpenMode.ForWrite);
foreach (ObjectId id in viewportTable)
{
var viewport = (ViewportTableRecord)trans.GetObject(id, OpenMode.ForRead);
// Delete the active viewport
viewport.UpgradeOpen();
viewport.Erase();
}
trans.Commit();
}
}
}
您擦除ViewportTableRecord不是视口。
您需要从布局中获取BlockTableRecordId以擦除其视口。然后遍历该BlockTableRecord中的每个ObjectId以查看它是否是一个视口。只有这样,你可以将它们删除
所以,如果你想删除所有视口在当前布局你做这样的事情(你必须在图纸空间这个工作,因为它不检查)
[CommandMethod("GOO")]
public static void test()
{
Database DB = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction trans = DB.TransactionManager.StartTransaction())
{
LayoutManager LM = LayoutManager.Current;
string currentLo = LM.CurrentLayout;
DBDictionary LayoutDict = trans.GetObject(DB.LayoutDictionaryId, OpenMode.ForRead) as DBDictionary;
Layout CurrentLo = trans.GetObject((ObjectId)LayoutDict[currentLo], OpenMode.ForRead) as Layout;
BlockTableRecord BlkTblRec = trans.GetObject(CurrentLo.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord;
foreach (ObjectId ID in BlkTblRec)
{
Viewport VP = trans.GetObject(ID, OpenMode.ForRead) as Viewport;
if (VP != null)
{
VP.UpgradeOpen();
VP.Erase();
}
}
trans.Commit();
}
}
嗨Mavios,非常感谢你指出我做错了什么,我也尝试了你的代码,但是我得到了一个致命错误,它只是压碎了autocad。我会尝试使用块表记录ID来看看我是否有幸运。 –
@IStop我编辑了代码,使其仅适用于当前布局。我测试了代码,它的工作原理。您可能没有正确加载Layout对象。 – mavios
嗨Mavios,它现在正在工作,当我第一次运行它时,我必须做错事。非常感谢你帮助我解决这个问题,我非常感谢你的时间和努力。 –
你至少尝试过一些东西吗? https://*.com/help/how-to-ask – Isma
我是新来的C#autocad,只是试图抓住一个代码,可以删除视口。我甚至不知道如何开始。这是我的。 –
您将需要在调试器中遍历代码。 – Amy