The link from AutoCAD .NET Developer's Guide helps to create 2 horizontal model viewports. The main point is that model viewport comes from database.ViewportTableId. We need to create a new ViewportTableRecord with defined LowerLeftCorner and UpperRightCorner properties, and then add it to the Viewport Table.
You should assign the name of a new created viewport as "*Active". Otherwise, AutoCAD will not show correctly.
I rewrote the code to be more basic and simpler, to create two vertical tiled viewports:
[CommandMethod("CreateModelViewports")]
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
if (viewport.Name == "*Active")
{
viewport.UpgradeOpen();
viewport.Erase();
}
}
// Create a left viewport
var vport = new ViewportTableRecord
{
Name = "*Active",
LowerLeftCorner = new Point2d(0, 0),
UpperRightCorner = new Point2d(0.5, 1),
};
viewportTable.Add(vport);
trans.AddNewlyCreatedDBObject(vport, true);
// Create a right viewport
vport = new ViewportTableRecord
{
Name = "*Active",
LowerLeftCorner = new Point2d(0.5, 0),
UpperRightCorner = new Point2d(1, 1),
};
viewportTable.Add(vport);
trans.AddNewlyCreatedDBObject(vport, true);
viewportTable.DowngradeOpen();
// Update the display with the new tiled viewports arrangement
doc.Editor.UpdateTiledViewportsFromDatabase();
trans.Commit();
}
}
-Khoa