← Inbox

C3D-260619-HERONEST · Find why HERO/TRACT hides with C-PROP-LINE done

Read-only: block references on C-PROP-LINE and which layers their contents use, plus where HERO/TRACT entities actually live (top level vs nested in a block definition) and what layer those blocks are inserted on.

Script file
C3D-260619-HERONEST.cs
Target
260619 · model space
Author
claude
Approved
yes · auto-auth
Timeout
60s

C# payload

// READ-ONLY: HERO/TRACT geometry vanishes when C-PROP-LINE is turned off. Suspect it is nested
// inside a block whose INSERT sits on C-PROP-LINE - turning the parent layer off hides the whole
// reference regardless of what layers the nested entities are on.
// Find every block reference on C-PROP-LINE and report which layers its contents use.
var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);

bool IsHero(string s) { var u = s.ToUpper(); return u.Contains("HERO") || u.Contains("TRACT"); }

Log("--- block references on C-PROP-LINE ---");
int n = 0;
foreach (ObjectId id in ms)
{
    var br = Tx.GetObject(id, OpenMode.ForRead) as BlockReference;
    if (br == null || br.Layer != "C-PROP-LINE") continue;
    n++;
    var def = (BlockTableRecord)Tx.GetObject(br.BlockTableRecord, OpenMode.ForRead);
    var layers = new Dictionary<string,int>();
    foreach (ObjectId cid in def)
    {
        var ce = Tx.GetObject(cid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
        if (ce == null) continue;
        layers[ce.Layer] = layers.ContainsKey(ce.Layer) ? layers[ce.Layer]+1 : 1;
    }
    var heroLayers = new List<string>();
    foreach (var kv in layers) if (IsHero(kv.Key)) heroLayers.Add(kv.Key + "(" + kv.Value + ")");
    Log("  BlockRef h=" + br.Handle + " block='" + def.Name + "' at (" +
        br.Position.X.ToString("F1") + "," + br.Position.Y.ToString("F1") + ")  contents span " + layers.Count + " layers");
    if (heroLayers.Count > 0) Log("      >>> CONTAINS HERO/TRACT: " + string.Join(", ", heroLayers));
    else {
        var top = new List<string>();
        int shown = 0;
        foreach (var kv in layers) { if (shown++ >= 6) break; top.Add(kv.Key + "(" + kv.Value + ")"); }
        Log("      layers: " + string.Join(", ", top) + (layers.Count > 6 ? " ..." : ""));
    }
}
if (n == 0) Log("  (no block references on C-PROP-LINE)");

Log("--- where do HERO/TRACT entities actually live? ---");
// top level
var top2 = new Dictionary<string,int>();
foreach (ObjectId id in ms)
{
    var e = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
    if (e == null || !IsHero(e.Layer)) continue;
    top2[e.Layer] = top2.ContainsKey(e.Layer) ? top2[e.Layer]+1 : 1;
}
foreach (var kv in top2) Log("  MODEL SPACE top level: " + kv.Value + " on '" + kv.Key + "'");
if (top2.Count == 0) Log("  none at model-space top level");

// inside any block definition
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
foreach (ObjectId bid in bt)
{
    var def = (BlockTableRecord)Tx.GetObject(bid, OpenMode.ForRead);
    if (def.IsLayout) continue;
    var inner = new Dictionary<string,int>();
    foreach (ObjectId cid in def)
    {
        var ce = Tx.GetObject(cid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
        if (ce == null || !IsHero(ce.Layer)) continue;
        inner[ce.Layer] = inner.ContainsKey(ce.Layer) ? inner[ce.Layer]+1 : 1;
    }
    if (inner.Count == 0) continue;
    var refs = def.GetBlockReferenceIds(true, true);
    var refLayers = new List<string>();
    foreach (ObjectId rid in refs)
    {
        var rb = Tx.GetObject(rid, OpenMode.ForRead) as BlockReference;
        if (rb != null && !refLayers.Contains(rb.Layer)) refLayers.Add(rb.Layer);
    }
    var parts = new List<string>();
    foreach (var kv in inner) parts.Add(kv.Value + " on " + kv.Key);
    Log("  INSIDE block '" + def.Name + "': " + string.Join(", ", parts) +
        "   | " + refs.Count + " insert(s) on layer(s): " + string.Join(", ", refLayers));
}

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260619 - 3625 Stonewall Tell Rd, Atlanta, GA 30349, USA\260619 - 3625 Stonewall Tell Rd ROTATE.dwg
Message
Executed C3D-260619-HERONEST (0 entities touched).
Entities
Duration
670 ms
Civil 3D
25.0.0.0

Log

--- block references on C-PROP-LINE ---
  (no block references on C-PROP-LINE)
--- where do HERO/TRACT entities actually live? ---
  MODEL SPACE top level: 6 on 'SS-HERO TRACT A ANNO'
  MODEL SPACE top level: 1 on 'SS-BOUNDARY TRACT B'
  MODEL SPACE top level: 5 on 'SS-HERO TRACT B ANNO'
  MODEL SPACE top level: 1 on 'SS-HERO TRACT B'
  MODEL SPACE top level: 2 on 'SS-BOUNDARY TRACT A'
  MODEL SPACE top level: 1 on 'SS-HERO TRACT A'
  MODEL SPACE top level: 1 on 'SS-BOUNDARY TRACT NF'
  INSIDE block 'A$C472a2048': 1 on SS-BOUNDARY TRACT B   | 0 insert(s) on layer(s): 
  INSIDE block 'A$C1440516e': 1 on SS-BOUNDARY TRACT B   | 0 insert(s) on layer(s): 
  INSIDE block 'A$C893b8ef4': 1 on SS-BOUNDARY TRACT B   | 0 insert(s) on layer(s): 
  INSIDE block 'A$C2d99e39c': 1 on SS-BOUNDARY TRACT B   | 0 insert(s) on layer(s): 
  INSIDE block 'A$C6d903de4': 1 on SS-BOUNDARY TRACT B   | 0 insert(s) on layer(s): 
  INSIDE block 'A$Ca73fa60a': 1 on SS-HERO TRACT B   | 0 insert(s) on layer(s): 

Notes

What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.

No notes yet.