← Inbox

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.

Script file
C3D-0375.cs
Target
260612-Springdale Sanitary Sewer Extension As-Built 60 wPROFILE.dwg · model space
Author
claude
Approved
yes · auto-auth
Timeout
120s

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

Status
success
Drawing file
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
Message
Executed C3D-0375 (0 entities touched).
Entities
Duration
362 ms
Civil 3D
25.0.0.0

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.