現在のビューポート内で点を入力したり、オブジェクトを選択できます。ビューポートを現在のビューポートに設定するには、システム変数 CVPORT を使用し、現在に設定するビューポートをその番号で指定します。
既存のビューポートの中から、1 つビューポートを選択することができます。そのためには、Name プロパティを使用し、「*Active」という名前でビューポート テーブル レコードを識別します。
この例では、アクティブなビューポートを 2 つの水平なウィンドウに分割します。次に図面内のすべてのタイル ビューポートで繰り返し、ビューポート名と各ビューポートの左下と右上のコーナーを表示します。
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();
}
}