AutoCAD C#删除布局视口



任何人都可以帮助我创建一个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();
        }
    }

最新更新