← Inbox

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.

Script file
C3D-0066.cs
Target
260612 · model space
Author
claude
Approved
yes · reviewer
Timeout
240s

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

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612 - CSTORE WATER ABS 30.dwg
Message
Executed C3D-0066 (0 entities touched).
Entities
Duration
388 ms
Civil 3D
25.0.0.0

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.