← Inbox

C3D-0395 · ACAD C-Store: SEWER_* E1 -> standard SEWER layers, delete E1 layers [C3D-E1MOVE2] done

Moves SEWER_LINE E1->SEWER_LINE, SEWER_MANHOLE E1->SEWER_MANHOLE top-level entities to their standard layers; SEWER_LINE_TEXT E1 is all in-block guts so those go to 0 (its standard target doesn't exist here). Sends all in-block guts to 0, deletes emptied E1 layers, verifies target counts.

Script file
C3D-0395.cs
Target
ACAD-260612-C-Store Sewer As-Built 60 EASEMENT PLAT LEGAL.dwg · model space
Author
claude
Approved
yes · auto-auth
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" },
};
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("note: target " + kv.Value + " absent - top-level on " + kv.Key + " (if any) will go to 0 instead");
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 = lt.Has(map[probe.Layer]) ? map[probe.Layer] : "0"; 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\ACAD-260612-C-Store Sewer As-Built 60 EASEMENT PLAT LEGAL.dwg
Message
Executed C3D-0395 (0 entities touched).
Entities
Duration
392 ms
Civil 3D
25.0.0.0

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
note: target SEWER_LINE_TEXT absent - top-level on SEWER_LINE_TEXT E1 (if any) will go to 0 instead
moved 11 top-level to standard layers, 7 in-block guts to 0
  deleted SEWER_LINE E1
  deleted SEWER_LINE_TEXT E1
  deleted SEWER_MANHOLE E1
deleted 3 E1 layers, kept 0
  SEWER_LINE now has 18 entities
  SEWER_LINE_TEXT now has 0 entities
  SEWER_MANHOLE now has 7 entities

Notes

What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.

No notes yet.