C3D-0407 · Erase + delete WATER_LINE_PTS, SS-0-FRAME, 4 SEWER_EASEMENT layers, PDF* [C3D-KILLLAYERS] error
Erases all content (top-level AND in-block guts) on WATER_LINE_PTS, SS-0-FRAME, SEWER_EASEMENT 1 ORNAGE, SEWER_EASEMENT 1 YELLOW, SEWER_EASEMENT E2, SEWER_EASEMENT RED and any PDF* layer, then deletes those layers. User confirmed these are unwanted. Keeps and reports any layer that still holds geometry.
C# payload
// Erase ALL content (top-level and in-block guts) on the named layers, then delete the layers.
// User explicitly wants these gone - not moved.
var kill = new List<string>{
"WATER_LINE_PTS", "SS-0-FRAME",
"SEWER_EASEMENT 1 ORNAGE", "SEWER_EASEMENT 1 YELLOW",
"SEWER_EASEMENT E2", "SEWER_EASEMENT RED"
};
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);
// add any PDF* layers present
foreach (ObjectId id in lt){ var l=(LayerTableRecord)Tx.GetObject(id,OpenMode.ForRead); if(l.Name.StartsWith("PDF",StringComparison.OrdinalIgnoreCase) && !kill.Contains(l.Name)) kill.Add(l.Name); }
var kset = new HashSet<string>(kill, StringComparer.OrdinalIgnoreCase);
Log("layers to kill: " + kill.Count);
foreach (var n in kill) Log(" " + n);
// thaw/unlock so their content is editable
foreach (var n in kill) if (lt.Has(n)){ var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }
// erase every entity on these layers, anywhere (top-level and inside block defs)
int erased=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 || probe.IsErased || !kset.Contains(probe.Layer)) continue;
var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
e.Erase(); erased++;
}
}
Log("erased " + erased + " entities");
// current-layer guard, then delete the layers
{ var cl=(LayerTableRecord)Tx.GetObject(Db.Clayer,OpenMode.ForRead); if (kset.Contains(cl.Name)){ Db.Clayer=lt["0"]; Log("current layer was a target - switched to 0"); } }
int deleted=0, kept=0;
foreach (var n in kill){
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){ kept++; Log(" KEPT " + n + " (" + still + " still on it)"); continue; }
try { ((LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite)).Erase(); deleted++; Log(" deleted " + n); }
catch (System.Exception ex){ kept++; Log(" keep " + n + ": " + ex.Message); }
}
Log(string.Format("deleted {0} layers, kept {1}", deleted, kept));
Ed.Regen();
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612-C-Store As-Built 60 H2O wPROFILE.dwg layers to kill: 7 WATER_LINE_PTS SS-0-FRAME SEWER_EASEMENT 1 ORNAGE SEWER_EASEMENT 1 YELLOW SEWER_EASEMENT E2 SEWER_EASEMENT RED PDF2_E IPF-SET
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.