C3D-0397 · Move SEWER_MANHOLE E2 + WATER_VALVE to HIDDEN, delete the layers [C3D-E2WVKILL] done
Moves all SEWER_MANHOLE E2 and WATER_VALVE entities (in-block guts included, per the user) to the frozen HIDDEN layer and deletes the emptied source layers.
C# payload
// Move SEWER_MANHOLE E2 and WATER_VALVE entities to HIDDEN (all content, guts included, per the
// user), delete the emptied source layers. HIDDEN stays frozen.
var srcNames = new List<string>{ "SEWER_MANHOLE E2", "WATER_VALVE" };
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);
var srcSet = new HashSet<string>(srcNames, StringComparer.OrdinalIgnoreCase);
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); }
{ var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); t.IsFrozen=false; t.IsOff=false; t.IsLocked=false; }
foreach (var n in srcNames) if (lt.Has(n)) { var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }
int moved=0;
foreach (ObjectId bid in bt){
var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead);
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 || !srcSet.Contains(probe.Layer)) continue;
var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
e.Layer=TARGET; moved++;
}
}
Log("moved " + moved + " entities to " + TARGET);
{ var t=(LayerTableRecord)Tx.GetObject(targetId,OpenMode.ForWrite); t.IsFrozen=true; }
{ var cl=(LayerTableRecord)Tx.GetObject(Db.Clayer,OpenMode.ForRead); if (srcSet.Contains(cl.Name)){ Db.Clayer=lt["0"]; } }
int deleted=0;
foreach (var n in srcNames){ if(!lt.Has(n)) continue;
int still=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(n,StringComparison.OrdinalIgnoreCase)) still++; } }
if (still>0){ Log(" kept " + n + " (" + still + ")"); continue; }
try { ((LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite)).Erase(); deleted++; Log(" deleted " + n); } catch (System.Exception ex){ Log(" keep " + n + ": " + ex.Message); }
}
Log("deleted " + deleted + " layers");
Ed.Regen();
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612-C-Store Sewer As-Built 60 EASEMENT PLAT LEGAL.dwg moved 11 entities to HIDDEN deleted SEWER_MANHOLE E2 deleted WATER_VALVE deleted 2 layers
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.