← Inbox

C3D-0399 · H2O wPROFILE: PDF->0, remove Aec layers [C3D-H2OAECPDF] done

Moves all PDF*/PDF2* content (top-level and guts) to layer 0 and deletes the emptied PDF layers; deletes the Aec* layers (erasing empty AecObjExplode inserts, moving any real content to 0), purges unused AecObjExplode block defs. Verifies none remain.

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

C# payload

// Move ALL PDF2* content to layer 0 (top-level and in-block guts), delete the emptied PDF2*
// layers; and delete the Aec* layers (moving any content off them first - guts to 0, top-level
// erased if it's the empty AecObjExplode insert, else moved to 0 to be safe).
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForWrite);

// collect target layers
var pdf=new List<string>(); var aec=new List<string>();
foreach (ObjectId id in lt){ var l=(LayerTableRecord)Tx.GetObject(id,OpenMode.ForRead);
    if (l.Name.StartsWith("PDF",StringComparison.OrdinalIgnoreCase)) pdf.Add(l.Name);
    if (l.Name.StartsWith("Aec",StringComparison.OrdinalIgnoreCase)) aec.Add(l.Name);
}
Log("PDF* layers: " + pdf.Count + "   Aec* layers: " + aec.Count);
var pset=new HashSet<string>(pdf,StringComparer.OrdinalIgnoreCase);
var aset=new HashSet<string>(aec,StringComparer.OrdinalIgnoreCase);

// thaw/unlock all targets
foreach (var n in pdf){ var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }
foreach (var n in aec){ var l=(LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite); l.IsFrozen=false; l.IsOff=false; l.IsLocked=false; }

// move all PDF2/Aec content to 0
int pdfMoved=0, aecErased=0, aecMoved=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) continue;
        if (pset.Contains(probe.Layer)){
            var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
            e.Layer="0"; pdfMoved++;
        } else if (aset.Contains(probe.Layer)){
            var e=(Autodesk.AutoCAD.DatabaseServices.Entity)Tx.GetObject(sid,OpenMode.ForWrite);
            var br=e as BlockReference;
            bool empty=false;
            if (br!=null){ try { var ex=br.GeometricExtents; if (ex.MinPoint.X>1e19||ex.MaxPoint.X<-1e19) empty=true; } catch { empty=true; } }
            if (isLayout && empty){ e.Erase(); aecErased++; } else { e.Layer="0"; aecMoved++; }
        }
    }
}
Log(string.Format("PDF2 -> 0: {0} entities.  Aec: erased {1} empty inserts, moved {2} to 0", pdfMoved, aecErased, aecMoved));

// current-layer guard
{ var cl=(LayerTableRecord)Tx.GetObject(Db.Clayer,OpenMode.ForRead); if (pset.Contains(cl.Name)||aset.Contains(cl.Name)){ Db.Clayer=lt["0"]; Log("current layer was a target - switched to 0"); } }

// delete now-empty PDF2 and Aec layers; purge AecObjExplode block defs
int delPdf=0, delAec=0, kept=0;
System.Func<string,int> stillOn = (name)=>{ 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(name,StringComparison.OrdinalIgnoreCase)) c++; } } return c; };
foreach (var n in pdf){ if (stillOn(n)>0){ kept++; continue; } try { ((LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite)).Erase(); delPdf++; } catch {} }
foreach (var n in aec){ if (stillOn(n)>0){ kept++; Log("  kept Aec " + n); continue; } try { ((LayerTableRecord)Tx.GetObject(lt[n],OpenMode.ForWrite)).Erase(); delAec++; } catch (System.Exception ex){ Log("  keep " + n + ": " + ex.Message); } }
// purge unused AecObjExplode block defs
var bt2=(BlockTable)Tx.GetObject(Db.BlockTableId,OpenMode.ForWrite);
foreach (ObjectId bid in bt2){ var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead); if (!def.Name.StartsWith("AecObjExplode",StringComparison.OrdinalIgnoreCase)) continue; if (def.GetBlockReferenceIds(true,false).Count==0){ try { ((BlockTableRecord)Tx.GetObject(bid,OpenMode.ForWrite)).Erase(); Log("purged block def " + def.Name); } catch {} } }
Log(string.Format("deleted {0} PDF layers, {1} Aec layers, kept {2}", delPdf, delAec, kept));

// verify
var lt3=(LayerTable)Tx.GetObject(Db.LayerTableId,OpenMode.ForRead);
int pRem=0,aRem=0; foreach (ObjectId id in lt3){ var l=(LayerTableRecord)Tx.GetObject(id,OpenMode.ForRead); if (l.Name.StartsWith("PDF",StringComparison.OrdinalIgnoreCase)) pRem++; if (l.Name.StartsWith("Aec",StringComparison.OrdinalIgnoreCase)) aRem++; }
Log(string.Format("VERIFY: PDF layers left={0}  Aec layers left={1}", pRem, aRem));
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 As-Built 60 H2O wPROFILE.dwg
Message
Executed C3D-0399 (0 entities touched).
Entities
Duration
676 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 As-Built 60 H2O wPROFILE.dwg
PDF* layers: 7   Aec* layers: 2
PDF2 -> 0: 5830 entities.  Aec: erased 1 empty inserts, moved 1 to 0
purged block def AecObjExplode_22X17_Pspace
deleted 7 PDF layers, 2 Aec layers, kept 0
VERIFY: PDF layers left=0  Aec layers left=0

Notes

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

No notes yet.