C3D-0383 · C-Store: move top-level layer-0 entities to frozen HIDDEN (guts kept on 0) [C3D-CSZERO] done
Moves only TOP-LEVEL entities on layer 0 to the frozen HIDDEN layer; block-internal symbol guts on layer 0 are left where they belong (inheriting the insert layer). Layer 0 kept. Verifies layer 0 has no top-level entities left and reports the guts count still on 0.
C# payload
// C-Store: move TOP-LEVEL layer-0 entities to frozen HIDDEN. Layer 0 kept (cannot delete).
// Block-internal guts on 0 are LEFT ALONE (that is where they belong - they inherit the insert
// layer). Only entities whose owner IsLayout are moved.
const string TARGET = "HIDDEN";
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);
ObjectId targetId = lt.Has(TARGET) ? lt[TARGET] : ObjectId.Null;
if (targetId.IsNull){ var nl=new LayerTableRecord(); nl.Name=TARGET; targetId=lt.Add(nl); Tx.AddNewlyCreatedDBObject(nl,true); }
bool wasFrozen; { var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); wasFrozen=t.IsFrozen; t.IsFrozen=false; t.IsOff=false; t.IsLocked=false; }
int moved=0;
foreach (ObjectId bid in bt) {
var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead);
if (!def.IsLayout) continue; // only top-level; guts on 0 stay
var ids=new List<ObjectId>(); foreach (ObjectId sid in def) ids.Add(sid);
foreach (var sid in ids){
var probe=Tx.GetObject(sid,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (probe==null || !probe.Layer.Equals("0",StringComparison.Ordinal)) continue;
var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
e.Layer=TARGET; moved++;
}
}
Log("moved " + moved + " top-level layer-0 entities to " + TARGET);
{ var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); t.IsFrozen=true; }
// verify layer 0 has no top-level left; report guts count still on 0 (expected, kept)
int top0=0, blk0=0;
foreach (ObjectId bid in bt){ var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead); foreach (ObjectId sid in def){ var e=Tx.GetObject(sid,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity; if (e==null||e.IsErased||!e.Layer.Equals("0",StringComparison.Ordinal)) continue; if (def.IsLayout) top0++; else blk0++; } }
Log(string.Format("VERIFY: layer 0 top-level={0} (want 0) in-block guts kept on 0={1}", top0, blk0));
Ed.Regen();
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612-C-Store Sewer As-Built 60 EASEMENT PLAT LEGAL.dwg moved 493 top-level layer-0 entities to HIDDEN VERIFY: layer 0 top-level=0 (want 0) in-block guts kept on 0=13042
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.