C3D-0067 · READ-ONLY: current KEEP and C- filter membership [RESCAN-KEEP-C] done
Same re-derivation, printing the KEEP (used, non-PDF, non-C-) and C- lists in full; the PDF list was already captured. No changes.
C# payload
// READ-ONLY. Re-read the drawing so the three filters can be rebuilt from CURRENT state.
// Layers have changed since C3D-0045 (water/CL moves, user edits), so membership must be
// re-derived, not reused.
//
// Emits three lists:
// KEEP : used, not PDF*, not C-* -> "USED - NO PDF/C-"
// CDASH: used, name starts C- -> "USED C-"
// PDF : used, name starts PDF -> the PDF filter
// Nothing is modified.
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var counts = new Dictionary<string,int>();
foreach (ObjectId btrId in bt) {
var btr = (BlockTableRecord)Tx.GetObject(btrId, OpenMode.ForRead);
if (!btr.IsLayout) continue; // model space + layouts only
foreach (ObjectId id in btr) {
Autodesk.AutoCAD.DatabaseServices.DBObject o;
try { o = Tx.GetObject(id, OpenMode.ForRead); } catch { continue; }
var ent = o as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
string lay;
try { lay = ent.Layer; } catch { continue; }
if (!counts.ContainsKey(lay)) counts[lay] = 0;
counts[lay]++;
}
}
var keep = new List<string>(); var cdash = new List<string>(); var pdf = new List<string>();
foreach (ObjectId lid in lt) {
var l = (LayerTableRecord)Tx.GetObject(lid, OpenMode.ForRead);
string nm = l.Name;
if (!counts.ContainsKey(nm) || counts[nm] == 0) continue; // unused
string u = nm.ToUpper();
if (u.StartsWith("PDF")) pdf.Add(nm);
else if (u.StartsWith("C-")) cdash.Add(nm);
else keep.Add(nm);
}
keep.Sort(); cdash.Sort(); pdf.Sort();
Log("=== KEEP (used, no PDF/C-) : " + keep.Count + " ===");
foreach (var n in keep) Log(" " + n + " n=" + counts[n]);
Log("");
Log("=== C- (used) : " + cdash.Count + " ===");
foreach (var n in cdash) Log(" " + n + " n=" + counts[n]);
Log("");
Log("=== PDF (used) : " + pdf.Count + " === (list already captured in C3D-0066)");
Log("");
Log("totals: keep=" + keep.Count + " cdash=" + cdash.Count + " pdf=" + pdf.Count);
Result
Log
=== KEEP (used, no PDF/C-) : 33 === 0 n=499 BLOCK_CERT n=17 BLOCK_CLOSURE n=35 BLOCK_LEGEND n=1 BLOCK_NORTH_ARROW n=101 FIRE_HYDRANT n=4 PROPERTY_LINE n=2 ROAD_EDGE_OF_PAVEMENT n=13 ROAD_RIGHT-OF-WAY n=5 SEWER_EASEMENT n=3 SEWER_EASEMENT POLY n=2 SEWER_EASEMENT_20 n=1 SEWER_EASEMENT_TEXT n=29 SEWER_LINE n=14 SEWER_LINE_TEXT n=28 SEWER_MANHOLE n=13 SEWER_MANHOLE_EXISTING n=2 SEWER_MANHOLE_TEXT n=26 SS-0-FRAME n=18 SS-BOUNDARY n=5 SS-ROAD-BUILDING n=1 SS-ROAD-CANOPY n=1 SS-ROAD-CL n=4 SS-ROAD-DUMPSTER n=1 SS-ROAD-GUARDRAIL n=1 SS-ROAD-SIDEWALK n=2 SS-ROAD-STRIPE n=46 SS-ROAD-TBC n=77 V-CTRL-LINE-SHOT n=2 V-CTRL-TEXT n=2 WATER_LINE n=30 WATER_VALVE n=8 WATER_VAULT n=2 === C- (used) : 6 === C-ANNO n=3 C-ANNO-TABL-TTBL n=5 C-PROP n=3 C-PROP-LINE n=1 C-PROP-LINE-TEXT n=8 C-PROP-TABL n=2 === PDF (used) : 76 === (list already captured in C3D-0066) totals: keep=33 cdash=6 pdf=76
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.