2017-09-11 17 views
1

レイアウトでビューポートを削除するためのC#コードを作成する手助けがあります。AutoCAD C#でレイアウトビューポートを削除する

ビューポートを削除するためのコードを試しましたが、問題は発生しませんが、ビューポートは削除されません。ここで間違っていることはわかりません。あなたはViewportTableRecordないビューポートを消去している

おかげ

パブリッククラス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#を初めて使っていますが、ビューポートを削除できるコードを取得しようとしています。私はそれを始める方法を知らない。ここに私が持っているものがあります。 –

+0

デバッガでコードをステップ実行する必要があります。 – Amy

答えて

0

ビューポートを消去するレイアウトから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

ちょっとマビオス、私が間違っていたことを指摘してくれてありがとう、私はあなたのコードで試してみましたが、私は致命的なエラーを取得し、それはちょうどオートカードを粉砕します。私はブロックテーブルのレコードのIDと遊ぶしようとしますが、私は幸運を得るかどうかを見てみましょう。 –

+0

@IStop現在のレイアウトでのみ動作するようにコードを編集しました。私はコードをテストし、それは動作します。 Layoutオブジェクトを適切にロードしていない可能性があります。 – mavios

+0

こんにちはMavios、それは今働いている、私は最初にそれを実行するときに何か間違っていた必要があります。私にこれを手伝ってくれてありがとう、あなたの時間と努力を本当に感謝します。 –

関連する問題