C3D-0375 · Fix vanishing manholes: move block-internal geometry back from HIDDEN to 0 [C3D-MHFIX] done
C3D-0372 moved entities living inside block definitions onto HIDDEN, so freezing HIDDEN blanked the 14 sewer manholes, control point, hydrants, valves and trees that share those blocks (MH 384 used a different block). This moves any entity on HIDDEN that sits inside a non-layout block definition back to layer 0 (where it inherits the insert's layer). Top-level model/paper-space HIDDEN entities - what you actually wanted hidden - are untouched. Verifies no block-internal HIDDEN geometry remains.
C# payload
// Undo the damage from C3D-0372: it moved entities that live INSIDE block definitions onto
// HIDDEN. Block-internal geometry on layer "0" is meant to inherit the insert's layer, so
// freezing HIDDEN blanked every symbol using it. Fix: inside each NON-layout block definition,
// move any entity on HIDDEN back to "0". Top-level model/paper-space HIDDEN entities are left
// exactly as they are.
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
int fixedEnts = 0, fixedDefs = 0;
foreach (ObjectId bid in bt) {
var defRO = (BlockTableRecord)Tx.GetObject(bid, OpenMode.ForRead);
if (defRO.IsLayout) continue; // model/paper space handled separately - skip
// does this definition contain any HIDDEN entity?
bool any = false;
foreach (ObjectId sid in defRO) {
var se = Tx.GetObject(sid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (se != null && se.Layer.Equals("HIDDEN", StringComparison.OrdinalIgnoreCase)) { any = true; break; }
}
if (!any) continue;
int c = 0;
foreach (ObjectId sid in defRO) {
var probe = Tx.GetObject(sid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (probe == null) continue;
if (!probe.Layer.Equals("HIDDEN", StringComparison.OrdinalIgnoreCase)) continue;
var se = (Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid, OpenMode.ForWrite);
se.Layer = "0";
c++; fixedEnts++;
}
fixedDefs++;
Log(string.Format(" block \"{0}\": moved {1} inner entities HIDDEN -> 0", defRO.Name, c));
}
Log(string.Format("restored {0} inner entities across {1} block definitions", fixedEnts, fixedDefs));
// verify: no non-layout block definition still has HIDDEN geometry
int leftover = 0;
foreach (ObjectId bid in bt) {
var def = (BlockTableRecord)Tx.GetObject(bid, OpenMode.ForRead);
if (def.IsLayout) continue;
foreach (ObjectId sid in def) {
var se = Tx.GetObject(sid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (se != null && se.Layer.Equals("HIDDEN", StringComparison.OrdinalIgnoreCase)) leftover++;
}
}
// and report how many entities remain on HIDDEN at top level (what the user actually wanted hidden)
int topHidden = 0;
foreach (ObjectId bid in bt) {
var def = (BlockTableRecord)Tx.GetObject(bid, OpenMode.ForRead);
if (!def.IsLayout) continue;
foreach (ObjectId sid in def) {
var se = Tx.GetObject(sid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (se != null && !se.IsErased && se.Layer.Equals("HIDDEN", StringComparison.OrdinalIgnoreCase)) topHidden++;
}
}
Log(string.Format("VERIFY: block-internal HIDDEN entities remaining={0} top-level HIDDEN entities kept={1} {2}",
leftover, topHidden, leftover==0 ? "FIXED" : "*** still broken ***"));
Ed.Regen();
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612-Springdale Sanitary Sewer Extension As-Built 60 wPROFILE.dwg block "Drainage MH": moved 2 inner entities HIDDEN -> 0 block "*X1": moved 15 inner entities HIDDEN -> 0 block "Drill Hole": moved 3 inner entities HIDDEN -> 0 block "STA": moved 2 inner entities HIDDEN -> 0 block "Sewer Manhole": moved 2 inner entities HIDDEN -> 0 block "Existing Hyd": moved 10 inner entities HIDDEN -> 0 block "Water Valve": moved 5 inner entities HIDDEN -> 0 block "Tree 6": moved 144 inner entities HIDDEN -> 0 block "Catch Basin": moved 4 inner entities HIDDEN -> 0 block "Iron Pin": moved 2 inner entities HIDDEN -> 0 block "Utility Pole": moved 5 inner entities HIDDEN -> 0 block "_Wipeout_Circle": moved 1 inner entities HIDDEN -> 0 block "*U21": moved 2 inner entities HIDDEN -> 0 block "*U24": moved 2 inner entities HIDDEN -> 0 block "*U39": moved 2 inner entities HIDDEN -> 0 block "*U44": moved 2 inner entities HIDDEN -> 0 block "*U48": moved 2 inner entities HIDDEN -> 0 block "*U49": moved 2 inner entities HIDDEN -> 0 block "*U50": moved 2 inner entities HIDDEN -> 0 block "*U51": moved 2 inner entities HIDDEN -> 0 block "*U52": moved 2 inner entities HIDDEN -> 0 block "*U53": moved 2 inner entities HIDDEN -> 0 block "*U54": moved 2 inner entities HIDDEN -> 0 block "*U55": moved 2 inner entities HIDDEN -> 0 block "*U58": moved 2 inner entities HIDDEN -> 0 block "*U63": moved 2 inner entities HIDDEN -> 0 block "*U64": moved 2 inner entities HIDDEN -> 0 block "*U65": moved 2 inner entities HIDDEN -> 0 block "*U66": moved 2 inner entities HIDDEN -> 0 block "*U67": moved 2 inner entities HIDDEN -> 0 block "*U68": moved 2 inner entities HIDDEN -> 0 block "*U73": moved 2 inner entities HIDDEN -> 0 block "*U79": moved 2 inner entities HIDDEN -> 0 block "*U83": moved 2 inner entities HIDDEN -> 0 block "*U84": moved 2 inner entities HIDDEN -> 0 block "*U86": moved 2 inner entities HIDDEN -> 0 block "*U87": moved 2 inner entities HIDDEN -> 0 block "*U88": moved 2 inner entities HIDDEN -> 0 block "*U89": moved 2 inner entities HIDDEN -> 0 block "AecObjExplode_22X17_Vport_1D7E": moved 5 inner entities HIDDEN -> 0 restored 254 inner entities across 40 block definitions VERIFY: block-internal HIDDEN entities remaining=0 top-level HIDDEN entities kept=294 FIXED
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.