任何人都可以帮助我创建一个C#代码以在布局中删除视口。
我已经尝试了一个代码来删除视口,它没问题,但是它没有删除视口,我不确定我在这里做错了什么。
谢谢
public class Class1
{
[CommandMethod("haha")]
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
而不是Viewport
。
您需要从要删除其视图的布局中获取BlockTableRecordId
。然后迭代该BlockTableRecord
中的每个ObjectId
,以查看它是否是Viewport
。只有这样您才能删除它们
因此,如果您想在当前布局中删除所有视口,则可以执行此类操作(您必须在纸张空间中才能正常工作,因为它不检查)
[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();
}
}