← Inbox

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.

Script file
C3D-0385.cs
Target
260612-C-Store As-Built 60 H2O.dwg · model space
Author
claude
Approved
yes · reviewer
Timeout
120s

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

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612-C-Store As-Built 60 H2O.dwg
Message
Executed C3D-0385 (0 entities touched).
Entities
Duration
1047 ms
Civil 3D
25.0.0.0

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.