← Inbox

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.

Script file
C3D-HERO10.cs
Target
281 MARANTHA LOT 10.dwg · paper space
Author
claude
Approved
yes · reviewer
Timeout
60s

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

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\251009 - 281 Maranatha Trail, Lawrenceville, GA 30045, USA\281 MARANATHA 2403\281 MARANTHA LOT 10.dwg
Message
Executed C3D-HERO10 (0 entities touched).
Entities
Duration
322 ms
Civil 3D
25.0.0.0

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.