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.
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
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.