← Inbox

C3D-PDFCHK · Post-PDFIMPORT audit (read-only) done

Layer inventory after the PDF import

Script file
C3D-PDFCHK.cs
Target
active document · model space
Author
claude
Approved
yes · claude (read-only inspection)
Timeout
60s

C# payload

// Read-only audit of the 260613 drawing against the HCWA As-built CAD Standards.
// Reports: every layer with entity counts by type, drawing units/coord system, and the
// point-code inventory relevant to water/sewer features.
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var ms = (BlockTableRecord)Tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);

var byLayer = new Dictionary<string, Dictionary<string,int>>();
int total = 0;
foreach (ObjectId id in ms) {
    var o = Tx.GetObject(id, OpenMode.ForRead);
    var e = o as Autodesk.AutoCAD.DatabaseServices.Entity;
    if (e == null) continue;
    total++;
    string lay = e.Layer, t = o.GetType().Name;
    if (!byLayer.ContainsKey(lay)) byLayer[lay] = new Dictionary<string,int>();
    byLayer[lay][t] = byLayer[lay].TryGetValue(t, out var n) ? n+1 : 1;
}
Log("=== MODEL SPACE LAYERS ===");
foreach (var kv in byLayer.OrderBy(k => k.Key)) {
    var parts = new List<string>();
    foreach (var t in kv.Value.OrderByDescending(x => x.Value)) parts.Add($"{t.Key}x{t.Value}");
    Log($"  {kv.Key,-34} {string.Join(", ", parts)}");
}
Log($"model entities: {total}, layers used: {byLayer.Count}");

// all layers defined in the drawing (even empty) — HCWA requires exact layer names
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
int defined = 0; var hcwa = new List<string>();
foreach (ObjectId id in lt) {
    var l = (LayerTableRecord)Tx.GetObject(id, OpenMode.ForRead);
    defined++;
    var n = l.Name.ToUpperInvariant();
    if (n.Contains("WATER") || n.Contains("SEWER") || n.Contains("HYDRANT") || n.Contains("EASEMENT")
        || n.Contains("PROJECT_BOUND") || n.Contains("ROAD_") || n.Contains("LOT_") || n.Contains("ADDRESS"))
        hcwa.Add(l.Name);
}
Log($"=== LAYERS DEFINED: {defined} ===");
Log("HCWA-looking layers present:");
foreach (var n in hcwa.OrderBy(x => x)) Log("   " + n);

Log($"INSUNITS={Db.Insunits}");

Result

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

Log

=== MODEL SPACE LAYERS ===
  0                                  CogoPointx68, ParcelSegmentLabelx15, Parcelx1, ParcelSegmentTablex1
  FIRE_HYDRANT                       Circlex2
  FIRE_HYDRANT_TEXT                  DBTextx3
  FIRE_HYDRANT_VALVE                 Circlex2
  ROAD_EDGE_OF_PAVEMENT              Polylinex1
  ROAD_TEXT                          DBTextx1
  SEWER_EASEMENT                     Polylinex3, Linex1
  SEWER_EASEMENT_TEXT                DBTextx1
  SEWER_LINE                         Linex12
  SEWER_LINE_TEXT                    DBTextx7
  SEWER_MANHOLE                      Circlex10
  SEWER_MANHOLE_TEXT                 DBTextx20
  SS-ESMT-SSE20                      Sitex1, ParcelSegmentx1
  SS-FRZ                             CogoPointx57, Circlex1
  SS-GREASE                          CogoPointx4
  SS-V-ROAD-CURB                     Polylinex6
  V-GREASE                           Circlex4, DBTextx4
  V-SSWR-MHOL                        BlockReferencex1
  V-STRM-STRC                        Polylinex9
  V-STRM-TEXT                        CogoPointx11, DBTextx9
  V-WATR-STRC                        Polylinex1
  WATER_END_CAP                      Circlex1
  WATER_LINE                         Polylinex4
  WATER_LINE_TEXT                    DBTextx11
  WATER_SERVICE                      Circlex6
  WATER_VALVE                        Circlex1
  WATER_VALVE_TEXT                   DBTextx5
  WATER_VAULT                        Polylinex2
  WATER_VAULT_TEXT                   DBTextx4
model entities: 291, layers used: 29
=== LAYERS DEFINED: 164 ===
HCWA-looking layers present:
   ADDRESS_TEXT
   FIRE_HYDRANT
   FIRE_HYDRANT_EXISTING
   FIRE_HYDRANT_EXISTING_TEXT
   FIRE_HYDRANT_MANUFACTURED_YEAR
   FIRE_HYDRANT_MANUFACTURER
   FIRE_HYDRANT_TEXT
   FIRE_HYDRANT_VALVE
   FIRE_HYDRANT_VALVE_EXISTING
   FIRE_HYDRANT_VALVE_EXISTING_TEXT
   FIRE_HYDRANT_VALVE_TEXT
   LAND_LOT_LINE
   LAND_LOT_LINE_TEXT
   LOT_NUMBER_TEXT
   PROJECT_BOUNDARY
   PROJECT_BOUNDARY_TEXT
   ROAD_EDGE_OF_PAVEMENT
   ROAD_RIGHT-OF-WAY
   ROAD_RIGHT-OF-WAY_TEXT
   ROAD_TEXT
   SEWER_EASEMENT
   SEWER_EASEMENT_TEXT
   SEWER_END_OF_LINE
   SEWER_END_OF_LINE_TEXT
   SEWER_FORCE_MAIN
   SEWER_FORCE_MAIN_TEXT
   SEWER_LINE
   SEWER_LINE_EXISTING
   SEWER_LINE_EXISTING_TEXT
   SEWER_LINE_TEXT
   SEWER_MANHOLE
   SEWER_MANHOLE_EXISTING
   SEWER_MANHOLE_EXISTING_TEXT
   SEWER_MANHOLE_TEXT
   SEWER_TAP
   SEWER_TAP_TEXT
   UTILITY_EASEMENT
   UTILITY_EASEMENT_EXISTING
   UTILITY_EASEMENT_EXISTING_TEXT
   UTILITY_EASEMENT_TEXT
   WATER_EASEMENT
   WATER_EASEMENT_TEXT
   WATER_END_CAP
   WATER_END_CAP_TEXT
   WATER_LINE
   WATER_LINE_EXISTING
   WATER_LINE_EXISTING_TEXT
   WATER_LINE_TEXT
   WATER_METER
   WATER_METER_TEXT
   WATER_QUALITY_CRITICAL_AREA
   WATER_SERVICE
   WATER_SERVICE_TEXT
   WATER_VALVE
   WATER_VALVE_EXISTING
   WATER_VALVE_EXISTING_TEXT
   WATER_VALVE_TEXT
   WATER_VAULT
   WATER_VAULT_TEXT
INSUNITS=Feet

Notes

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

No notes yet.