C3D-260612-PTLAYERS · Point layers audit done
Read-only: points per layer, descriptions on each layer, any description split across multiple layers, and the point groups.
C# payload
// READ-ONLY: which LAYER each CogoPoint sits on, grouped by layer and by description,
// so mis-filed points are visible. Also lists the point groups and their layer overrides.
var cd = CivilDoc;
Log("Total points: " + (int)cd.CogoPoints.Count);
var byLayer = new Dictionary<string,int>();
var layerDesc = new Dictionary<string, Dictionary<string,int>>();
var descLayer = new Dictionary<string, Dictionary<string,int>>();
foreach (ObjectId id in cd.CogoPoints) {
var cp = (CogoPoint)Tx.GetObject(id, OpenMode.ForRead);
string lay = cp.Layer ?? "";
string desc = (cp.RawDescription ?? "").Trim();
if (desc.Length == 0) desc = "(blank)";
byLayer[lay] = byLayer.ContainsKey(lay) ? byLayer[lay]+1 : 1;
if (!layerDesc.ContainsKey(lay)) layerDesc[lay] = new Dictionary<string,int>();
layerDesc[lay][desc] = layerDesc[lay].ContainsKey(desc) ? layerDesc[lay][desc]+1 : 1;
if (!descLayer.ContainsKey(desc)) descLayer[desc] = new Dictionary<string,int>();
descLayer[desc][lay] = descLayer[desc].ContainsKey(lay) ? descLayer[desc][lay]+1 : 1;
}
Log("=== POINTS PER LAYER ===");
foreach (var kv in byLayer) Log(" " + kv.Value.ToString().PadLeft(4) + " '" + kv.Key + "'");
Log("=== DESCRIPTIONS ON EACH LAYER ===");
foreach (var kv in layerDesc) {
Log(" layer '" + kv.Key + "':");
foreach (var d in kv.Value) Log(" " + d.Value.ToString().PadLeft(4) + " " + d.Key);
}
Log("=== DESCRIPTIONS SPLIT ACROSS MORE THAN ONE LAYER ===");
int split = 0;
foreach (var kv in descLayer) {
if (kv.Value.Count < 2) continue;
split++;
var parts = new List<string>();
foreach (var l in kv.Value) parts.Add(l.Value + " on '" + l.Key + "'");
Log(" " + kv.Key + " -> " + string.Join(", ", parts));
}
if (split == 0) Log(" (none - every description is on a single layer)");
Log("=== POINT GROUPS ===");
foreach (ObjectId id in cd.PointGroups) {
var pg = Tx.GetObject(id, OpenMode.ForRead) as PointGroup;
if (pg == null) continue;
uint[] nums; try { nums = pg.GetPointNumbers(); } catch { nums = new uint[0]; }
Log(" '" + pg.Name + "' points=" + nums.Length);
}
Result
Log
Total points: 133
=== POINTS PER LAYER ===
61 '0'
57 'SS-FRZ'
11 'V-STRM-TEXT'
4 'SS-GREASE'
=== DESCRIPTIONS ON EACH LAYER ===
layer '0':
2 40EASEMENT
1 SSMH MD 21.95
1 SSMH MD 13.96 WATER
1 SSMH MD 10.3
1 SSMH INV 12.65
1 SSMH INV 10.28
3 SSMH
1 SSMH INV 12.22
1 R\W
29 TBC
1 EP TBC
1 TBC END
1 GUTTER END TBC
1 SSMH INV 9.45
1 AC
1 DI 18 METAL PIPE INV 3.73
2 FH
3 WV
2 WATER VAULT
1 2 IN RPZ BFP COR
1 6 IN PVC STUB
1 2 IN PVC LINE
1 1 IN BLUE WATER LINE STUB
1 (blank)
1 1 IN BLUE WATER LINE AT BLDING
1 WATER LINE TO BLDG
layer 'SS-FRZ':
7 EP
7 WHITE LINE
8 CL
4 TURNING LANE
8 YELLOW LINE
1 START WHITE LINE TURN
2 WHITE LINE TURNING LANE
1 WHITE LINE END
5 TBC
1 WATER
3 BOX COR
6 VAULT COR
3 2 IN RPZ BFP COR
1 WATER LINE MARK FOR NEW LINE TO BLDG
layer 'V-STRM-TEXT':
3 GUTTER
1 DI INV BOT 5.08 18 CON PIPE
1 18 CON PIPEINV 6.1 TO TOP OF BOX
1 24IN RIDGED PIPE INV TO 18 PIPE INV 5.3 BOT 11.1
1 24IN RIDGED INV 9.42 WITH SILT
1 DI 18 CON PIPE INV 4.73
1 DI 18 METAL PIPE INV 3.95
1 DI 18 PIPE INV 3.4
1 DI 2FT ROUND INV 10.11
layer 'SS-GREASE':
1 GREASE TRAP 6 PVC 6.52 INV 7.77
1 GREASE TRAP ASPHALT OVER
2 GREASE TRAP
=== DESCRIPTIONS SPLIT ACROSS MORE THAN ONE LAYER ===
TBC -> 29 on '0', 5 on 'SS-FRZ'
2 IN RPZ BFP COR -> 1 on '0', 3 on 'SS-FRZ'
=== POINT GROUPS ===
'2000' points=133
'_All Points' points=133
'TBC' points=37Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.