You enter points and select objects in the current viewport. To make a viewport current, use the CVPORT system variable and specify the viewport by its number that you want to set current.
You can iterate through existing viewports to find a particular viewport. To do this, identify the Viewport table records with the name "*Active" using the Name property.
This example splits the active viewport into two horizontal windows. It then iterates through all the tiled viewports in the drawing and displays the viewport name and the lower-left and upper-right corner for each viewport.
Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.Geometry <CommandMethod("SplitAndIterateModelViewports")> _ Public Sub SplitAndIterateModelViewports() '' Get the current database Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = acDoc.Database '' Start a transaction Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' Open the Viewport table for write Dim acVportTbl As ViewportTable acVportTbl = acTrans.GetObject(acCurDb.ViewportTableId, _ OpenMode.ForWrite) '' Open the active viewport for write Dim acVportTblRec As ViewportTableRecord acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, _ OpenMode.ForWrite) Using acVportTblRecNew As ViewportTableRecord = New ViewportTableRecord() '' Add the new viewport to the Viewport table and the transaction acVportTbl.Add(acVportTblRecNew) acTrans.AddNewlyCreatedDBObject(acVportTblRecNew, True) '' Assign the name '*Active' to the new Viewport acVportTblRecNew.Name = "*Active" '' Use the existing lower left corner for the new viewport acVportTblRecNew.LowerLeftCorner = acVportTblRec.LowerLeftCorner '' Get half the X of the existing upper corner acVportTblRecNew.UpperRightCorner = New Point2d(acVportTblRec.UpperRightCorner.X, _ acVportTblRec.LowerLeftCorner.Y + _ ((acVportTblRec.UpperRightCorner.Y - _ acVportTblRec.LowerLeftCorner.Y) / 2)) '' Recalculate the corner of the active viewport acVportTblRec.LowerLeftCorner = New Point2d(acVportTblRec.LowerLeftCorner.X, _ acVportTblRecNew.UpperRightCorner.Y) '' Update the display with the new tiled viewports arrangement acDoc.Editor.UpdateTiledViewportsFromDatabase() '' Step through each object in the symbol table For Each acObjId As ObjectId In acVportTbl '' Open the object for read Dim acVportTblRecCur As ViewportTableRecord acVportTblRecCur = acTrans.GetObject(acObjId, _ OpenMode.ForRead) If (acVportTblRecCur.Name = "*Active") Then Application.SetSystemVariable("CVPORT", acVportTblRecCur.Number) Application.ShowAlertDialog("Viewport: " & acVportTblRecCur.Number & _ " is now active." & _ vbLf & "Lower left corner: " & _ acVportTblRecCur.LowerLeftCorner.X & ", " & _ acVportTblRecCur.LowerLeftCorner.Y & _ vbLf & "Upper right corner: " & _ acVportTblRecCur.UpperRightCorner.X & ", " & _ acVportTblRecCur.UpperRightCorner.Y) End If Next End Using '' Commit the changes and dispose of the transaction acTrans.Commit() End Using End Sub
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Geometry; [CommandMethod("SplitAndIterateModelViewports")] public static void SplitAndIterateModelViewports() { // Get the current database Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // Start a transaction using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Viewport table for write ViewportTable acVportTbl; acVportTbl = acTrans.GetObject(acCurDb.ViewportTableId, OpenMode.ForWrite) as ViewportTable; // Open the active viewport for write ViewportTableRecord acVportTblRec; acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, OpenMode.ForWrite) as ViewportTableRecord; using (ViewportTableRecord acVportTblRecNew = new ViewportTableRecord()) { // Add the new viewport to the Viewport table and the transaction acVportTbl.Add(acVportTblRecNew); acTrans.AddNewlyCreatedDBObject(acVportTblRecNew, true); // Assign the name '*Active' to the new Viewport acVportTblRecNew.Name = "*Active"; // Use the existing lower left corner for the new viewport acVportTblRecNew.LowerLeftCorner = acVportTblRec.LowerLeftCorner; // Get half the X of the existing upper corner acVportTblRecNew.UpperRightCorner = new Point2d(acVportTblRec.UpperRightCorner.X, acVportTblRec.LowerLeftCorner.Y + ((acVportTblRec.UpperRightCorner.Y - acVportTblRec.LowerLeftCorner.Y) / 2)); // Recalculate the corner of the active viewport acVportTblRec.LowerLeftCorner = new Point2d(acVportTblRec.LowerLeftCorner.X, acVportTblRecNew.UpperRightCorner.Y); // Update the display with the new tiled viewports arrangement acDoc.Editor.UpdateTiledViewportsFromDatabase(); // Step through each object in the symbol table foreach (ObjectId acObjId in acVportTbl) { // Open the object for read ViewportTableRecord acVportTblRecCur; acVportTblRecCur = acTrans.GetObject(acObjId, OpenMode.ForRead) as ViewportTableRecord; if (acVportTblRecCur.Name == "*Active") { Application.SetSystemVariable("CVPORT", acVportTblRecCur.Number); Application.ShowAlertDialog("Viewport: " + acVportTblRecCur.Number + " is now active." + "\nLower left corner: " + acVportTblRecCur.LowerLeftCorner.X + ", " + acVportTblRecCur.LowerLeftCorner.Y + "\nUpper right corner: " + acVportTblRecCur.UpperRightCorner.X + ", " + acVportTblRecCur.UpperRightCorner.Y); } } } // Commit the changes and dispose of the transaction acTrans.Commit(); } }
Sub SplitandInterateModelViewports() ' Get the active viewport Dim vportObj As AcadViewport Set vportObj = ThisDrawing.ActiveViewport ' Split the viewport into 2 windows vportObj.Split acViewport2Horizontal ' Iterate through the viewports, ' highlighting each viewport and displaying ' the upper right and lower left corners ' for each. Dim vport As AcadViewport Dim LLCorner As Variant Dim URCorner As Variant For Each vport In ThisDrawing.Viewports ThisDrawing.ActiveViewport = vport LLCorner = vport.LowerLeftCorner URCorner = vport.UpperRightCorner MsgBox "Viewport: " & vport.Name & " is now active." & _ vbCrLf & "Lower left corner: " & _ LLCorner(0) & ", " & LLCorner(1) & vbCrLf & _ "Upper right corner: " & _ URCorner(0) & ", " & URCorner(1) Next vport End Sub