C3D-0385 · Move SEWER_* E1 objects to standard SEWER_* layers, delete E1 layers [C3D-E1MOVE] done
Moves each E1 layer's top-level objects to its standard counterpart (SEWER_LINE E1->SEWER_LINE, SEWER_LINE_TEXT E1->SEWER_LINE_TEXT, SEWER_MANHOLE E1->SEWER_MANHOLE, SEWER_MANHOLE_TEXT E1->SEWER_MANHOLE_TEXT), sends the 2 in-block symbol guts to layer 0, then deletes the emptied E1 layers. Verifies each standard layer's new count.
C# payload
// Move each SEWER_* E1 layer's objects to its standard SEWER_* layer, then delete the emptied
// E1 layers. In-block symbol guts go to "0" (stay connected to their insert). E1 top-level
// entities go to the standard layer.
var map = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase) {
{ "SEWER_LINE E1", "SEWER_LINE" },
{ "SEWER_LINE_TEXT E1", "SEWER_LINE_TEXT" },
{ "SEWER_MANHOLE E1", "SEWER_MANHOLE" },
{ "SEWER_MANHOLE_TEXT E1","SEWER_MANHOLE_TEXT" },
};
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);
// every target must exist
foreach (var kv in map) if (!lt.Has(kv.Value)) { Log("standard layer missing: " + kv.Value + " - aborting"); return; }
var srcSet = new HashSet<string>(map.Keys, StringComparer.OrdinalIgnoreCase);
// thaw/unlock sources
foreach (var n in map.Keys) if (lt.Has(n)) { var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }
int movedTop=0, movedGuts=0;
foreach (ObjectId bid in bt) {
var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead);
bool isLayout=def.IsLayout;
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);
if (isLayout) { e.Layer = map[probe.Layer]; movedTop++; } // top-level -> standard layer
else { e.Layer = "0"; movedGuts++; } // guts -> 0
}
}
Log(string.Format("moved {0} top-level to standard layers, {1} in-block guts to 0", movedTop, movedGuts));
// current-layer guard, delete emptied E1 layers
{ var cl=(LayerTableRecord)Tx.GetObject(Db.Clayer,OpenMode.ForRead); if (srcSet.Contains(cl.Name)){ Db.Clayer=lt["0"]; Log("current layer was E1 - switched to 0"); } }
int deleted=0, kept=0;
foreach (var n in map.Keys){
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 + " left)"); continue; }
try { var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.Erase(); deleted++; Log(" deleted " + n); }
catch (System.Exception ex){ Log(" could not delete " + n + ": " + ex.Message); }
}
Log(string.Format("deleted {0} E1 layers, kept {1}", deleted, kept));
// verify targets picked up the objects
foreach (var kv in map){
int c=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(kv.Value,StringComparison.OrdinalIgnoreCase)) c++; } }
Log(string.Format(" {0} now has {1} entities", kv.Value, c));
}
Ed.Regen();
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612-C-Store As-Built 60 H2O.dwg moved 31 top-level to standard layers, 2 in-block guts to 0 deleted SEWER_LINE E1 deleted SEWER_LINE_TEXT E1 deleted SEWER_MANHOLE E1 deleted SEWER_MANHOLE_TEXT E1 deleted 4 E1 layers, kept 0 SEWER_LINE now has 8 entities SEWER_LINE_TEXT now has 13 entities SEWER_MANHOLE now has 6 entities SEWER_MANHOLE_TEXT now has 15 entities
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.