C3D-0066 · READ-ONLY: re-derive filter membership from current state [RESCAN-LAYERS] done
Re-reads every layer and its live entity count across model space and layouts, splitting used layers into three lists: not PDF/C-, C-, and PDF. Membership for all three filters is re-derived from the current drawing rather than reused from the earlier scan. 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 + " ===");
foreach (var n in pdf) Log(" " + n + " n=" + counts[n]);
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 === PDF2_0-ALIGN-SDL2-T n=31 PDF2_0-PIPE-EX SS n=1 PDF2_0-PIPE-SS-A n=31 PDF2_0-PIPE-SS-A-T n=93 PDF2_0-PIPE-STM A n=32 PDF2_0-PIPE-STM B n=32 PDF2_0-PIPE-STM C n=42 PDF2_2015_Flood_Map_DFIRM n=3 PDF2_ae_title-36x24$SEAL n=37 PDF2_ae_title-36x24$SEAL2 n=59 PDF2_ae_title-36x24$T-BD-COPY n=469 PDF2_ae_title-36x24$T-BD-INFO1 n=88 PDF2_ae_title-36x24$T-BD-INFO2 n=27 PDF2_ae_title-36x24$T-BD-LINE n=13 PDF2_ae_title-36x24$T-BD-LOGO n=84 PDF2_ae_title-36x24$T-BD-PROJ n=113 PDF2_ae_title-36x24$T-BD-PROJ2 n=19 PDF2_ae_title-36x24$TBORDER n=228 PDF2_ae_title-36x24$TITLE n=45 PDF2_C-ANNO n=25 PDF2_C-BLDG-COLS n=120 PDF2_C-CONC n=15 PDF2_C-CURB-FACE n=246 PDF2_C-DEMO n=4 PDF2_C-ESMT-BLDG-SBAK n=12 PDF2_C-ESMT-BLDG-SBAK-ANNO n=2 PDF2_C-SIDEWALKS n=8 PDF2_C-SIDEWLK-HTC n=477 PDF2_C-SIGNS n=4 PDF2_C-SSWR-LATS n=33 PDF2_C-SSWR-PIPE n=100 PDF2_C-SSWR-PIPE-PATT n=71 PDF2_C-SSWR-STRC-PATT n=35 PDF2_C-STRIPES n=129 PDF2_C-STRM-CNTR n=94 PDF2_C-WATR-ANNO n=29 PDF2_C-WATR-CNTR n=45 PDF2_C-WATR-STRC n=17 PDF2_C-WATR-TEXT n=14 PDF2_E CONCRETE n=2 PDF2_E EDGE PVMT n=2 PDF2_E FENCE n=5 PDF2_E GRAVEL n=427 PDF2_E IPF-SET n=40 PDF2_E POWER n=23 PDF2_E STORM n=7 PDF2_E STORM TEXT n=17 PDF2_E WALL n=2 PDF2_ESMT v2 n=15 PDF2_GENERAL-TEXT n=4 PDF2_GRAPHIC_SCALE n=70 PDF2_INDEX_CONTOURS n=1152 PDF2_INTER_CONTOURS n=5365 PDF2_Level 3 n=2 PDF2_NOTES n=1 PDF2_P-ESMT n=3 PDF2_P-RW n=3 PDF2_P-Setbacks n=1 PDF2_PGRADE n=417 PDF2_REVISIONS n=3 PDF2_SWM n=14 PDF2_SWM-TXT n=1 PDF2_Text n=204 PDF2_TXT200 n=62 PDF2_V-BNDY n=35 PDF2_V-BNDY-ANNO n=329 PDF2_V-ESMT n=3 PDF2_V-POWR-OVHD n=280 PDF2_V-RIVR-EDGE n=41 PDF2_V-ROAD-CURB n=239 PDF2_V-ROAD-MRKG n=61 PDF2_V-SSWR n=16 PDF2_V-SSWR-ANNO n=10 PDF2_V-STRM-GRAT n=18 PDF2_V-STRM-STRC-TEXT n=14 PDF2_V-WATR n=137 totals: keep=33 cdash=6 pdf=76
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.