Just finished this. Seems convoluted... is there a better solution?
namespace BCLOCKVP
{
public class BCCLOCKVIEWPORTS
{
[CommandMethod("BCC:LOCKVP")]
static public void BCCLOCKVP()
{
Document curDoc = Application.DocumentManager.MdiActiveDocument;
Database docdb = curDoc.Database;
ObjectIdCollection BCCVIEWPORTS = docdb.GetViewports(true);
LayoutManager lm = LayoutManager.Current;
Editor ed = curDoc.Editor;
using (Transaction ts = curDoc.TransactionManager.StartTransaction())
{
DBDictionary layoutDict = docdb.LayoutDictionaryId.GetObject(OpenMode.ForRead) as DBDictionary;
foreach (DBDictionaryEntry de in layoutDict)
{
Layout layout = de.Value.GetObject(OpenMode.ForRead) as Layout;
string layoutName = layout.LayoutName;
lm.CurrentLayout = layoutName;
ObjectIdCollection vpIdCol = layout.GetViewports();
foreach (ObjectId vpId in vpIdCol)
{
Viewport vp = vpId.GetObject(OpenMode.ForWrite) as Viewport;
vp.Locked = true;
ed.WriteMessage("VP {0} is Locked", layoutName);
}
}
ts.Commit();
}
}
}
}