← Inbox

C3D-0049 · READ-ONLY: layer audit data - points by description, entities by layer [LAYER-AUDIT] done

Groups all CogoPoints by raw description and the layer they sit on (so the correct-layer mapping can be read from points already placed correctly), and lists every non-point entity on the 29 used layers by type with samples. No changes.

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

C# payload

// READ-ONLY. Layer audit data for "is everything on the correct layer".
//
// Part 1: the 524 CogoPoints on layer 0 - grouped by raw description, since the description is
//   what decides which layer a point belongs on. Points already on a named layer are listed too,
//   so the correct-layer mapping can be read off what is ALREADY right rather than invented.
// Part 2: every non-point entity on the 29 used layers, by layer and type, with a sample.
// Nothing is modified. No layer is changed. This only reports.
var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);

// ---- Part 1: CogoPoints by (layer, description) ----
var byDesc = new Dictionary<string, Dictionary<string,int>>();   // desc -> layer -> count
int npts = 0;
foreach (ObjectId id in ms) {
    var cp = Tx.GetObject(id, OpenMode.ForRead) as CogoPoint;
    if (cp == null) continue;
    npts++;
    string d = (cp.RawDescription ?? "").Trim().ToUpper();
    if (d.Length == 0) d = "<blank>";
    string lay = cp.Layer;
    if (!byDesc.ContainsKey(d)) byDesc[d] = new Dictionary<string,int>();
    if (!byDesc[d].ContainsKey(lay)) byDesc[d][lay] = 0;
    byDesc[d][lay]++;
}

Log("=== COGO POINTS: " + npts + " total, by DESCRIPTION -> layer(count) ===");
var descs = new List<string>(byDesc.Keys);
descs.Sort();
foreach (var d in descs) {
    var parts = new List<string>();
    int tot = 0;
    foreach (var kv in byDesc[d]) { parts.Add(kv.Key + "(" + kv.Value + ")"); tot += kv.Value; }
    Log(String.Format("  {0,-16} n={1,-4} {2}", d, tot, String.Join("  ", parts)));
}

// ---- Part 2: non-point entities on the used non-PDF/C- layers ----
var KEEP = new HashSet<string>(new string[] {
    "0","BLOCK_CLOSURE","BLOCK_NORTH_ARROW","PROPERTY_LINE","ROAD_EDGE_OF_PAVEMENT",
    "ROAD_RIGHT-OF-WAY","SEWER_EASEMENT","SEWER_EASEMENT_20","SEWER_EASEMENT_TEXT",
    "SEWER_LINE","SEWER_LINE_TEXT","SEWER_MANHOLE","SEWER_MANHOLE_EXISTING",
    "SEWER_MANHOLE_TEXT","SS-0-FRAME","SS-BOUNDARY","SS-BOUNDARY LAND LOT",
    "SS-ROAD-BUILDING","SS-ROAD-CANOPY","SS-ROAD-CL","SS-ROAD-DUMPSTER",
    "SS-ROAD-GUARDRAIL","SS-ROAD-SIDEWALK","SS-ROAD-STRIPE","SS-ROAD-TBC",
    "V-CTRL-LINE-SHOT","V-CTRL-TEXT","WATER_VALVE","WATER_VAULT" });

Log("");
Log("=== NON-POINT ENTITIES on the 29 used layers ===");
var rows = new Dictionary<string, List<string>>();   // "layer|type" -> samples
var cnts = new Dictionary<string, int>();
foreach (ObjectId id in ms) {
    Autodesk.AutoCAD.DatabaseServices.DBObject o;
    try { o = Tx.GetObject(id, OpenMode.ForRead); } catch { continue; }
    if (o is CogoPoint) continue;
    var ent = o as Autodesk.AutoCAD.DatabaseServices.Entity;
    if (ent == null || !KEEP.Contains(ent.Layer)) continue;

    string key = ent.Layer + "|" + o.GetType().Name;
    if (!cnts.ContainsKey(key)) { cnts[key] = 0; rows[key] = new List<string>(); }
    cnts[key]++;

    if (rows[key].Count < 3) {
        string samp = "[" + o.Handle + "]";
        var mt = o as MText;   if (mt != null) samp += " \"" + (mt.Contents.Length > 40 ? mt.Contents.Substring(0,40) : mt.Contents).Replace("\n"," ") + "\"";
        var dt = o as DBText;  if (dt != null) samp += " \"" + dt.TextString + "\"";
        var pl = o as Polyline; if (pl != null) samp += String.Format(" verts={0} len={1:F1} closed={2}", pl.NumberOfVertices, pl.Length, pl.Closed);
        var ln = o as Line;    if (ln != null) samp += String.Format(" len={0:F1}", ln.Length);
        var br = o as BlockReference; if (br != null) samp += " block=" + br.Name;
        rows[key].Add(samp);
    }
}
var keys = new List<string>(cnts.Keys);
keys.Sort();
foreach (var k in keys) {
    var bits = k.Split('|');
    Log(String.Format("  {0,-24} {1,-22} n={2}", bits[0], bits[1], cnts[k]));
    foreach (var s in rows[k]) Log("        " + s);
}

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-0049 (0 entities touched).
Entities
Duration
609 ms
Civil 3D
25.0.0.0

Log

=== COGO POINTS: 564 total, by DESCRIPTION -> layer(count) ===
  <blank>          n=1    0(1)
  1 IN BLUE WATER LINE STUB n=1    0(1)
  1 IN WATER LINE  n=1    0(1)
  18 CON PIPEINV 6.1 TO TOP OF BOX n=1    0(1)
  2 IN  PVC LINE   n=1    0(1)
  2 IN RPZ BFP  COR n=4    0(4)
  24IN RIDGED INV 9.42 WITH SILT n=1    0(1)
  24IN RIDGED PIPE INV TO 18 PIPE INV 5.3 BOT 11.1 n=1    0(1)
  2X1 TRAFIC SIG BX n=1    SS-0-FRAME(1)
  40EASEMENT       n=2    0(2)
  6 IN BOL         n=19   0(19)
  6 IN PVC STUB    n=1    0(1)
  AC               n=5    0(5)
  BLDG COR  SW     n=4    0(4)
  BLDG COR CON TBC START n=1    0(1)
  BOX COR          n=3    0(3)
  CL               n=20   0(20)
  CL YELLOW LINE SPLITS n=1    0(1)
  CLEAN OUT        n=5    0(5)
  CON              n=3    0(3)
  CON COR CANOPY   n=2    0(2)
  CON EP           n=9    0(9)
  CON EP CANOPY    n=2    0(2)
  CON PAD          n=8    0(8)
  CON PAD VAULT    n=1    0(1)
  CON VAC\AIR      n=1    0(1)
  CROSS WALK SIG   n=1    SS-0-FRAME(1)
  CURB CUT BACK CON  GUTTER n=5    0(5)
  DI               n=7    0(7)
  DI 18 CON PIPE INV 4.73 n=1    0(1)
  DI 18 METAL PIPE INV 3.73 n=1    0(1)
  DI 18 METAL PIPE INV 3.95 n=1    0(1)
  DI 18 PIPE INV 3.4 n=1    0(1)
  DI 2FT ROUND INV 10.11 n=1    0(1)
  DI INV BOT 5.08 18 CON PIPE n=1    0(1)
  DOT SIG BOX 4X4  n=1    SS-0-FRAME(1)
  DUMP STER COR    n=3    0(3)
  DUMPSTER COR TBC n=1    0(1)
  ELEC POWERBMETER AND STUT OFF n=1    0(1)
  ELEC STUB        n=4    0(4)
  END CON          n=2    0(2)
  EP               n=37   0(37)
  EP CON           n=2    0(2)
  EP CON COR       n=4    0(4)
  EP DUMPSTER WALL n=1    0(1)
  EP TBC           n=1    0(1)
  FH               n=4    WATER_VALVE(4)
  G RAIL           n=4    0(4)
  G WIRE           n=5    0(5)
  GREASE TRAP      n=5    0(5)
  GREASE TRAP 6 PVC 6.52 INV 7.77 n=1    0(1)
  GREASE TRAP ASPHALT OVER n=1    0(1)
  GUTTER           n=3    0(3)
  GUTTER END TBC   n=1    0(1)
  H CAP SIGN       n=2    0(2)
  HANDY CAP        n=2    0(2)
  HC07-05          n=1    0(1)
  HC07-06          n=1    0(1)
  IPF              n=5    0(5)
  LAT              n=1    0(1)
  MAIN VAVLE       n=1    0(1)
  MH               n=1    SS-0-FRAME(1)
  OHP              n=3    0(3)
  P STRIPE         n=9    0(9)
  P STRIPE CON EP  n=8    0(8)
  P STRIPE SW      n=7    0(7)
  PP               n=1    0(1)
  PP AND ELECT STUB n=1    0(1)
  R/W              n=3    0(3)
  RAMP             n=4    0(4)
  RT LANE BIKE ONLY SIGN n=1    SS-0-FRAME(1)
  SIG POLE         n=1    SS-0-FRAME(1)
  SIGN             n=1    0(1)
  SSMH             n=6    SEWER_MANHOLE(4)  SS-0-FRAME(2)
  SSMH A1          n=1    SEWER_MANHOLE(1)
  SSMH A10         n=1    SEWER_MANHOLE(1)
  SSMH A2          n=1    SEWER_MANHOLE(1)
  SSMH A3          n=1    SEWER_MANHOLE(1)
  SSMH A4          n=1    SEWER_MANHOLE(1)
  SSMH A5          n=1    SEWER_MANHOLE(1)
  SSMH A6          n=1    SEWER_MANHOLE(1)
  SSMH INV 10.28   n=1    SS-0-FRAME(1)
  SSMH INV 12.22   n=1    SS-0-FRAME(1)
  SSMH INV 12.65   n=1    SS-0-FRAME(1)
  SSMH INV 9.45    n=1    SS-0-FRAME(1)
  SSMH MAIN        n=1    SEWER_MANHOLE_EXISTING(1)
  SSMH TEST MH     n=2    SEWER_MANHOLE(2)
  SW               n=6    0(6)
  SW  P STRIPE     n=8    0(8)
  SW BLDG LINE     n=1    0(1)
  SW COR           n=2    0(2)
  SW END           n=2    0(2)
  SW RAMP          n=4    0(4)
  SW TBC COR       n=1    0(1)
  TBC              n=152  0(152)
  TBC COR          n=1    0(1)
  TBC DUMP WALL    n=1    0(1)
  TBC DWY          n=2    0(2)
  TBC END          n=2    0(2)
  TBC END EP       n=4    0(4)
  TBC EP           n=2    0(2)
  TBC SW           n=3    0(3)
  TBC SW COR       n=2    0(2)
  TBC SW CROSS WALK n=2    0(2)
  TBC SW WATER TO BLDG n=1    0(1)
  TBC WALL         n=4    0(4)
  TBM              n=1    0(1)
  TRAFFIC SIG BX   n=2    SS-0-FRAME(2)
  TURN LANE        n=6    0(6)
  TURNING LANE     n=3    0(3)
  UTIL POLE        n=1    0(1)
  VAULT            n=4    0(4)
  VAULT COR        n=6    0(6)
  WATER            n=1    0(1)
  WATER LINE       n=13   0(13)
  WATER LINE   AT CROSS WALK n=1    0(1)
  WATER LINE  AT CROSS WALK n=1    0(1)
  WATER LINE  MARK FOR NEW LINE TO BLDG n=1    0(1)
  WATER LINE STUB  n=2    0(2)
  WATER LINE TO BLDG n=1    0(1)
  WATER STUB       n=1    0(1)
  WATER V STUB     n=1    0(1)
  WATER VAULT      n=2    0(2)
  WHITE LINE       n=14   0(14)
  WHITE LINE END   n=1    0(1)
  WHITE LINE ENDS  n=1    0(1)
  WHITE LINE TURNING LANE n=2    0(2)
  WV               n=8    WATER_VALVE(8)
  WV STUB          n=1    0(1)
  YELLOW LINE      n=18   0(18)

=== NON-POINT ENTITIES on the 29 used layers ===
  0                        PdfReference           n=1
        [23B6B]
  PROPERTY_LINE            Polyline               n=1
        [2E1D3] verts=8 len=1913.6 closed=True
  ROAD_EDGE_OF_PAVEMENT    Hatch                  n=1
        [2F280]
  ROAD_EDGE_OF_PAVEMENT    Line                   n=7
        [2E421] len=18.2
        [2E423] len=23.6
        [2E424] len=26.7
  ROAD_EDGE_OF_PAVEMENT    Polyline               n=5
        [23A31] verts=5 len=117.3 closed=False
        [23A32] verts=7 len=155.9 closed=False
        [23A39] verts=7 len=27.1 closed=False
  ROAD_RIGHT-OF-WAY        Line                   n=3
        [2E1FD] len=195.9
        [2F27D] len=229.9
        [2F27E] len=229.9
  ROAD_RIGHT-OF-WAY        Polyline               n=1
        [2E434] verts=3 len=104.5 closed=False
  SEWER_EASEMENT_20        ParcelSegment          n=1
        [2F0E1]
  SEWER_EASEMENT_TEXT      ParcelSegmentLabel     n=29
        [2EE59]
        [2EE5A]
        [2EE5B]
  SEWER_EASEMENT           Polyline               n=2
        [2EE30] verts=19 len=1663.3 closed=True
        [2EEB6] verts=8 len=1248.5 closed=True
  SEWER_EASEMENT           Site                   n=1
        [23922]
  SEWER_LINE_TEXT          MText                  n=28
        [2EF4E] "12.07'"
        [2EF4F] "131.42'"
        [2EF50] "133.04'"
  SEWER_LINE               Line                   n=14
        [2E95F] len=12.1
        [2EC86] len=132.5
        [2EC87] len=133.2
  SEWER_MANHOLE_TEXT       Leader                 n=5
        [2EDAA]
        [2EDAF]
        [2EDB3]
  SEWER_MANHOLE_TEXT       MText                  n=21
        [2ED70] "MH  A16\PRIM  751.17\PIN   N/A\POUT  N/A"
        [2ED72] "MH  A14\PRIM  734.14\PIN   722.02\POUT  "
        [2ED74] "MH  A12\PRIM  727.40\PIN   N/A\POUT  N/A"
  SS-0-FRAME               MText                  n=2
        [2E305] "FFE:728.5"
        [2E308] "F.F.E.=728.50"
  SS-0-FRAME               Polyline               n=5
        [23A40] verts=7 len=244.0 closed=False
        [23AEA] verts=5 len=33.7 closed=False
        [2EDE9] verts=4 len=36.9 closed=True
  SS-BOUNDARY              Parcel                 n=1
        [2F0E0]
  SS-BOUNDARY              Polyline               n=2
        [2F0C3] verts=27 len=2871.3 closed=True
        [2F0C7] verts=27 len=2871.3 closed=True
  SS-BOUNDARY              Site                   n=2
        [2E1E9]
        [2F0DE]
  SS-ROAD-BUILDING         Polyline               n=1
        [23A3B] verts=6 len=354.5 closed=True
  SS-ROAD-CANOPY           Polyline               n=1
        [23A3E] verts=5 len=302.7 closed=False
  SS-ROAD-CL               Line                   n=1
        [2E1FC] len=198.0
  SS-ROAD-CL               Polyline               n=3
        [23A22] verts=8 len=230.1 closed=False
        [23A23] verts=9 len=518.6 closed=False
        [23A24] verts=3 len=110.8 closed=False
  SS-ROAD-DUMPSTER         Polyline               n=1
        [23A3D] verts=6 len=58.8 closed=True
  SS-ROAD-GUARDRAIL        Polyline               n=1
        [23A3A] verts=4 len=150.2 closed=False
  SS-ROAD-SIDEWALK         Polyline               n=2
        [23A33] verts=5 len=400.7 closed=False
        [23A34] verts=36 len=344.4 closed=False
  SS-ROAD-STRIPE           Polyline               n=42
        [23A51] verts=2 len=17.8 closed=False
        [23A52] verts=2 len=16.9 closed=False
        [23A53] verts=2 len=17.8 closed=False
  SS-ROAD-TBC              Arc                    n=8
        [2ED4C]
        [2ED4D]
        [2ED4F]
  SS-ROAD-TBC              Line                   n=14
        [2ED4E] len=139.4
        [2ED50] len=48.3
        [2ED52] len=14.0
  SS-ROAD-TBC              Polyline               n=55
        [23ADA] verts=9 len=188.6 closed=False
        [23ADB] verts=9 len=146.1 closed=False
        [23ADE] verts=3 len=70.8 closed=False
  V-CTRL-LINE-SHOT         Leader                 n=2
        [2EDFE]
        [2EE00]
  V-CTRL-TEXT              MText                  n=2
        [2EDFF] "S43\U+00B0 30' 29"E 9725.42 TO CC HC07-0"
        [2EE01] "S12\U+00B0 39' 08"W 11339.24 TO CC HC07-"
  WATER_VAULT              Polyline               n=2
        [2E2BD] verts=4 len=28.6 closed=True
        [2E2BE] verts=4 len=41.4 closed=True

Notes

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

No notes yet.