C3D-HERO10 · Hero 1.6ac on sheet 10, keep 09 at 1.22 (per-VP freeze) done
Sheet 10 viewport: freeze SS-BOUNDARY_CYAN, thaw SS-BOUNDARY_RED (=1.6ac). Sheet 09: freeze RED, keep CYAN (=1.22ac). Globally thaws RED first. Reversible (freeze, not erase). Verifies per-VP frozen layers after.
C# payload
// Hero the 1.6 AC (SS-BOUNDARY_RED) on sheet 10; keep 09 on the 1.22 (SS-BOUNDARY_CYAN).
// Per-viewport layer FREEZE (reversible; nothing erased):
// sheet 10 VP: freeze SS-BOUNDARY_CYAN, thaw SS-BOUNDARY_RED
// sheet 09 VP: freeze SS-BOUNDARY_RED, thaw SS-BOUNDARY_CYAN
// RED is globally frozen today -> thaw it globally so the per-VP thaw can show it, then freeze it
// only in 09's VP. Verify-and-report after.
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
var db = Db;
ObjectId cyan = ObjectId.Null, red = ObjectId.Null;
// resolve layer ids + globally thaw RED (needed so a VP can display it)
using (var tr = db.TransactionManager.StartTransaction())
{
var lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
foreach (ObjectId id in lt)
{
var l = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);
if (string.Equals(l.Name,"SS-BOUNDARY_CYAN",StringComparison.OrdinalIgnoreCase)) cyan = id;
if (string.Equals(l.Name,"SS-BOUNDARY_RED",StringComparison.OrdinalIgnoreCase)) red = id;
}
if (red != ObjectId.Null)
{
var rl = (LayerTableRecord)tr.GetObject(red, OpenMode.ForWrite);
if (rl.IsFrozen) { rl.IsFrozen = false; Log("Globally THAWED SS-BOUNDARY_RED (was frozen)."); }
}
tr.Commit();
}
if (cyan == ObjectId.Null || red == ObjectId.Null) { Log($"ABORT: cyan={cyan} red={red} — layer not found."); return; }
void SetVpFreeze(string layoutName, ObjectId freezeLayer, ObjectId thawLayer)
{
using (var tr = db.TransactionManager.StartTransaction())
{
var ld = (DBDictionary)tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead);
Layout lay = null;
foreach (DBDictionaryEntry e in ld)
{
var l = (Layout)tr.GetObject(e.Value, OpenMode.ForRead);
if (string.Equals(l.LayoutName, layoutName, StringComparison.OrdinalIgnoreCase)) { lay = l; break; }
}
if (lay == null) { Log($" [{layoutName}] layout not found"); tr.Commit(); return; }
foreach (ObjectId vid in lay.GetViewports())
{
var vp = tr.GetObject(vid, OpenMode.ForWrite) as Viewport;
if (vp == null || vp.Number == 1) continue; // skip paper
vp.FreezeLayersInViewport(new ObjectId[]{ freezeLayer }.AsEnumerable().GetEnumerator());
vp.ThawLayersInViewport(new ObjectId[]{ thawLayer }.AsEnumerable().GetEnumerator());
Log($" [{layoutName}] VP#{vp.Number}: froze {LName(tr,freezeLayer)}, thawed {LName(tr,thawLayer)}");
}
tr.Commit();
}
}
string LName(Transaction tr, ObjectId id) => ((LayerTableRecord)tr.GetObject(id, OpenMode.ForRead)).Name;
Log("== Sheet 10 -> hero 1.6 (RED) ==");
SetVpFreeze("10", cyan, red); // freeze CYAN, thaw RED
Log("== Sheet 09 -> keep 1.22 (CYAN) ==");
SetVpFreeze("09", red, cyan); // freeze RED, thaw CYAN
// verify: report each sheet's per-VP frozen SS layers
using (var tr = db.TransactionManager.StartTransaction())
{
var ld = (DBDictionary)tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead);
foreach (var name in new[]{"09","10","R4"})
{
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 ss = 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) ss.Add(n);
}
Log($"VERIFY [{name}] VP#{vp.Number} frozen SS: {(ss.Count==0?"<none>":string.Join(", ", ss))}");
}
}
}
tr.Commit();
}
Log("DONE. 10 heroes 1.6 (RED); 09 heroes 1.22 (CYAN). All reversible (freeze, not erase).");
Result
Log
== Sheet 10 -> hero 1.6 (RED) == [10] VP#-1: froze SS-BOUNDARY_CYAN, thawed SS-BOUNDARY_RED [10] VP#-1: froze SS-BOUNDARY_CYAN, thawed SS-BOUNDARY_RED == Sheet 09 -> keep 1.22 (CYAN) == [09] VP#-1: froze SS-BOUNDARY_RED, thawed SS-BOUNDARY_CYAN [09] VP#-1: froze SS-BOUNDARY_RED, thawed SS-BOUNDARY_CYAN VERIFY [09] VP#-1 frozen SS: SS-BOUNDARY_RED VERIFY [09] VP#-1 frozen SS: SS-BOUNDARY_RED VERIFY [10] VP#-1 frozen SS: SS-BOUNDARY_CYAN VERIFY [10] VP#-1 frozen SS: SS-BOUNDARY_CYAN VERIFY [R4] VP#-1 frozen SS: <none> VERIFY [R4] VP#-1 frozen SS: <none> DONE. 10 heroes 1.6 (RED); 09 heroes 1.22 (CYAN). All reversible (freeze, not erase).
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.