2017-09-11 194 views
1

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

} 
+1

你至少尝试过一些东西吗? https://stackoverflow.com/help/how-to-ask – Isma

+0

我是新来的C#autocad,只是试图抓住一个代码,可以删除视口。我甚至不知道如何开始。这是我的。 –

+0

您将需要在调试器中遍历代码。 – Amy

回答

0

您擦除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(); 
     } 
    } 
+0

嗨Mavios,非常感谢你指出我做错了什么,我也尝试了你的代码,但是我得到了一个致命错误,它只是压碎了autocad。我会尝试使用块表记录ID来看看我是否有幸运。 –

+0

@IStop我编辑了代码,使其仅适用于当前布局。我测试了代码,它的工作原理。您可能没有正确加载Layout对象。 – mavios

+0

嗨Mavios,它现在正在工作,当我第一次运行它时,我必须做错事。非常感谢你帮助我解决这个问题,我非常感谢你的时间和努力。 –