C3D-VPSTATE · Read per-VP freeze on sheets A/B (read-only) done
Current frozen SS-BOUNDARY/SS-HERO layers in 22X17 A and B viewports.
C# payload
// READ-ONLY: current per-VP frozen layers on 22X17 A and 22X17 B (SS-BOUNDARY / SS-HERO only),
// so we know what still needs freezing so each sheet shows only its own bold hero.
using System;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
var db=Db;
using (var tr=db.TransactionManager.StartTransaction())
{
var ld=(DBDictionary)tr.GetObject(db.LayoutDictionaryId,OpenMode.ForRead);
foreach(var name in new[]{"22X17 A","22X17 B"})
{
foreach(DBDictionaryEntry e in ld){var lay=(Layout)tr.GetObject(e.Value,OpenMode.ForRead);
if(!string.Equals(lay.LayoutName,name,StringComparison.OrdinalIgnoreCase))continue;
foreach(ObjectId vid in lay.GetViewports()){var vp=tr.GetObject(vid,OpenMode.ForRead) as Viewport;
if(vp==null||vp.Number==1)continue;
var fl=vp.GetFrozenLayers(); var names=new List<string>();
if(fl!=null)foreach(ObjectId lid in fl){var n=((LayerTableRecord)tr.GetObject(lid,OpenMode.ForRead)).Name;
if(n.IndexOf("SS-BOUNDARY",StringComparison.OrdinalIgnoreCase)>=0||n.IndexOf("SS-HERO",StringComparison.OrdinalIgnoreCase)>=0) names.Add(n);}
names.Sort(StringComparer.OrdinalIgnoreCase);
Log($"[{name}] frozen: {(names.Count==0?"<none>":string.Join(", ", names))}");
}
}
}
tr.Commit();
}
Result
Log
[22X17 A] frozen: SS-HERO TRACT B [22X17 B] frozen: SS-HERO TRACT A [22X17 B] frozen: SS-HERO TRACT A
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.