C3D-0372 · Move all layer-0 entities to HIDDEN (layer 0 kept, emptied) [C3D-ZEROHIDE] done
Layer 0 cannot be deleted, so instead every entity on it is moved to the frozen HIDDEN layer (entities preserved, not erased). HIDDEN is thawed for the move and re-frozen after. Verifies layer 0 ends empty.
C# payload
// Move every entity currently on layer "0" to layer HIDDEN (kept frozen). Layer 0 cannot be
// deleted and is not - it just ends up empty. Entities preserved, not erased.
const string TARGET = "HIDDEN";
Log("drawing: " + Db.Filename);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);
ObjectId targetId;
if (lt.Has(TARGET)) targetId = lt[TARGET];
else { var nl=new LayerTableRecord(); nl.Name=TARGET; targetId=lt.Add(nl); Tx.AddNewlyCreatedDBObject(nl,true); Log("created "+TARGET); }
// thaw HIDDEN so entities can be moved onto it; re-freeze at the end
bool wasFrozen;
{ var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); wasFrozen=t.IsFrozen; t.IsFrozen=false; t.IsOff=false; t.IsLocked=false; }
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
int moved = 0;
foreach (ObjectId btrId in bt) {
var btr = (BlockTableRecord)Tx.GetObject(btrId, OpenMode.ForRead);
foreach (ObjectId id in btr) {
var probe = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (probe == null) continue;
if (!probe.Layer.Equals("0", StringComparison.Ordinal)) continue;
var e = (Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(id, OpenMode.ForWrite);
e.Layer = TARGET; moved++;
}
}
Log("moved " + moved + " entities from layer 0 to " + TARGET);
// re-freeze HIDDEN (keep it hidden as before)
{ var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); t.IsFrozen=true; }
// verify layer 0 is empty
var bt2 = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
int on0=0, onH=0;
foreach (ObjectId btrId in bt2) {
var btr = (BlockTableRecord)Tx.GetObject(btrId, OpenMode.ForRead);
foreach (ObjectId id in btr) {
var e = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (e==null || e.IsErased) continue;
if (e.Layer.Equals("0", StringComparison.Ordinal)) on0++;
else if (e.Layer.Equals(TARGET, StringComparison.OrdinalIgnoreCase)) onH++;
}
}
Log(string.Format("VERIFY: entities on layer 0={0} on {1}={2} {3}",
on0, TARGET, onH, on0==0 ? "CLEAN (layer 0 empty, kept)" : "*** still on 0 ***"));
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 moved 210 entities from layer 0 to HIDDEN VERIFY: entities on layer 0=0 on HIDDEN=548 CLEAN (layer 0 empty, kept)
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.