← Inbox

C3D-0386 · Move PROJECT_BOUNDARY_TEXT to SS-0-FRAME and delete the layer [C3D-PBTMOVE] done

Moves all top-level entities on PROJECT_BOUNDARY_TEXT to SS-0-FRAME, sends any in-block guts to 0, then deletes the emptied PROJECT_BOUNDARY_TEXT layer. Verifies SS-0-FRAME's new count.

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

C# payload

// Move everything on PROJECT_BOUNDARY_TEXT to SS-0-FRAME, then delete the emptied layer.
// In-block guts go to 0 (stay connected); top-level goes to SS-0-FRAME.
const string SRC = "PROJECT_BOUNDARY_TEXT";
const string DST = "SS-0-FRAME";
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);
if (!lt.Has(SRC)) { Log(SRC + " not present"); return; }
if (!lt.Has(DST)) { Log("target " + DST + " missing - aborting"); return; }
{ var l=(LayerTableRecord)Tx.GetObject(lt[SRC],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }

int top=0, guts=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 || !probe.Layer.Equals(SRC,StringComparison.OrdinalIgnoreCase)) continue;
        var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
        if (isLayout){ e.Layer=DST; top++; } else { e.Layer="0"; guts++; }
    }
}
Log(string.Format("moved {0} top-level to {1}, {2} in-block guts to 0", top, DST, guts));

{ var cl=(LayerTableRecord)Tx.GetObject(Db.Clayer,OpenMode.ForRead); if (cl.Name.Equals(SRC,StringComparison.OrdinalIgnoreCase)){ Db.Clayer=lt["0"]; Log("current layer was src - switched to 0"); } }
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(SRC,StringComparison.OrdinalIgnoreCase)) still++; } }
if (still==0){ try { var l=(LayerTableRecord)Tx.GetObject(lt[SRC],OpenMode.ForWrite); l.Erase(); Log("deleted " + SRC); } catch (System.Exception ex){ Log("could not delete " + SRC + ": " + ex.Message); } }
else Log("KEPT " + SRC + " (" + still + " left)");

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(DST,StringComparison.OrdinalIgnoreCase)) c++; } }
Log("VERIFY: " + DST + " now has " + c + " entities");
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-0386 (0 entities touched).
Entities
Duration
859 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 9 top-level to SS-0-FRAME, 0 in-block guts to 0
deleted PROJECT_BOUNDARY_TEXT
VERIFY: SS-0-FRAME now has 68 entities

Notes

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

No notes yet.