2017-09-11 3 views
1

Kann mir jemand helfen, einen C# -Code zu erstellen, um das Ansichtsfenster in Layouts zu löschen.Autocad C# Layout-Ansichtsfenster löschen

Ich habe versucht, einen Code, um das Ansichtsfenster zu löschen, kompiliert es kein Problem, aber es löscht nicht das Ansichtsfenster, ich bin mir nicht sicher, was ich hier falsch mache.

Dank

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(); 
     } 
    } 

} 
+1

Haben Sie zumindest etwas versucht? https://StackOverflow.com/Help/how-to-ask – Isma

+0

Ich bin neu in C# für AutoCAD, nur versuchen, einen Code zu greifen, der das Ansichtsfenster löschen kann. Ich weiß nicht einmal, wie ich es anfangen soll. Hier ist was ich habe. –

+0

Sie werden Ihren Code in einem Debugger schrittweise durchlaufen müssen. – Amy

Antwort

0

Du eine ViewportTableRecord kein Ansichtsfenster zu löschen.

Sie müssen BlockTableRecordId aus dem Layout abrufen, dessen Ansichtsfenster gelöscht werden sollen. Führen Sie dann eine Iteration durch jede ObjectId in diesem BlockTableRecord durch, um festzustellen, ob es sich um einen Viewport handelt. Nur dann können Sie löschen sie

Also, wenn Sie alle Ansichtsfenster im aktuellen Layout löschen möchten tun Sie so etwas wie dieses (Sie müssen in Papierbereich werden dafür zu arbeiten, weil es nicht überprüft)

[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

Hey Mavios, vielen Dank für das Aufzeigen, was ich falsch gemacht habe, und ich habe es mit deinem Code versucht, aber ich bekomme einen Fatalen Fehler und er zerschmettert den Autocad. Ich werde versuchen, mit der Blocktabellen-ID zu spielen, um zu sehen, ob ich Glück habe. –

+0

@IStop Ich habe den Code bearbeitet, damit er nur auf dem aktuellen Layout funktioniert. Ich habe den Code getestet und es funktioniert. Sie haben das Layout-Objekt wahrscheinlich nicht richtig geladen. – mavios

+0

Hi Mavios, es funktioniert jetzt, ich muss etwas falsch gemacht haben, wenn ich es zum ersten Mal benutze. Vielen Dank, dass Sie mir dabei geholfen haben, ich habe Ihre Zeit und Ihre Bemühungen sehr geschätzt. –