2017-09-11 197 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,它現在正在工作,當我第一次運行它時,我必須做錯事。非常感謝你幫助我解決這個問題,我非常感謝你的時間和努力。 –