This may help to understand paperspace viewports as well
create non rectangular viewport
freeze layer in viewport
[CommandMethod("NRVPS")]
static public void CreateNonRectangularViewports()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord ps = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite);
Polyline pl = new Polyline(4);
pl.AddVertexAt(0, new Point2d(10, 10), 0, 0, 0);
pl.AddVertexAt(1, new Point2d(200, 10), 0, 0, 0);
pl.AddVertexAt(2, new Point2d(200, 287), 0, 0, 0);
pl.AddVertexAt(3, new Point2d(10, 287), 0, 0, 0);
pl.Closed = true;
Entity ent = pl as Entity;
Viewport vp = null;
if (ent != null)
{
ObjectId plID = ps.AppendEntity(ent);
tr.AddNewlyCreatedDBObject(pl, true);
vp = new Viewport();
ps.AppendEntity(vp);
tr.AddNewlyCreatedDBObject(vp, true);
vp.NonRectClipEntityId = plID;
vp.NonRectClipOn = true;
vp.On = true;
vp.UpdateDisplay();
}
LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
if (!lt.Has("myLayerName"))
{
LayerTableRecord ltr = new LayerTableRecord();
ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 30);
ltr.Name = "myLayerName";
ObjectId layerId = lt.Add(ltr);
tr.AddNewlyCreatedDBObject(ltr, true);
ObjectId[] layersToFreezeIDs = new ObjectId[1] { layerId };
vp.FreezeLayersInViewport(layersToFreezeIDs.GetEnumerator());
}
tr.Commit();
}
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ObjectId ldid = db.LayoutDictionaryId;
DBDictionary ld = (DBDictionary)tr.GetObject(ldid, OpenMode.ForRead, false);
LayerTable layers = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
foreach (DBDictionaryEntry de in ld)
{
Layout layout = (Layout)tr.GetObject(de.Value, OpenMode.ForRead, false);
if (layout.LayoutName.ToLower() != "model")
{
ObjectIdCollection vpIDs = layout.GetViewports();
for (int i = 1; i < vpIDs.Count; i++)
{
Viewport vp2 = (Viewport)tr.GetObject(vpIDs[i], OpenMode.ForRead, false);
if (vp2 != null)
{
foreach (ObjectId layerId in layers)
{
LayerTableRecord layer = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForRead);
if (vp2.IsLayerFrozenInViewport(layer.ObjectId))
{
ed.WriteMessage("\n Frozen Layer: " + layer.Name);
}
ObjectIdCollection frozenLayerIDs = vp2.GetFrozenLayers();
ed.WriteMessage("\n Frozen Layers");
foreach (ObjectId lyrId in frozenLayerIDs)
{
LayerTableRecord lyrTblRec = (LayerTableRecord)tr.GetObject(lyrId, OpenMode.ForRead);
ed.WriteMessage("\n " + lyrTblRec.Name);
}
ed.WriteMessage("\n");
}
}
}
}
}
tr.Commit();
}
db.TileMode = false;
}