← Inbox

C3D-ROAD619 · Road: TBC curb + CL + label done

Curb runs (END-broken), centerline, road name text from survey points

Script file
C3D-ROAD619.cs
Target
active document · model space
Author
claude
Approved
yes · claude (session)
Timeout
60s

C# payload

// Draw road linework from survey points: TBC curb runs (break at 'END'), CL centerline, road label.
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var ms = (BlockTableRecord)Tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
var cd = CivilDoc; var cps = cd.CogoPoints;

List<(uint num, Point2d p, string d)> Grp(string name) {
    var list = new List<(uint, Point2d, string)>();
    foreach (ObjectId gid in cd.PointGroups) {
        var pg = (Autodesk.Civil.DatabaseServices.PointGroup)Tx.GetObject(gid, OpenMode.ForRead);
        if (pg.Name != name) continue;
        foreach (var pn in pg.GetPointNumbers()) { try { var cp = (Autodesk.Civil.DatabaseServices.CogoPoint)Tx.GetObject(cps.GetPointByPointNumber(pn), OpenMode.ForRead); list.Add((pn, new Point2d(cp.Easting, cp.Northing), cp.RawDescription ?? "")); } catch {} }
    }
    return list;
}
ObjectId AddPl(List<Point2d> pts, string layer) {
    var pl = new Polyline(); for (int i = 0; i < pts.Count; i++) pl.AddVertexAt(i, pts[i], 0, 0, 0);
    pl.Layer = layer; ms.AppendEntity(pl); Tx.AddNewlyCreatedDBObject(pl, true); return pl.ObjectId;
}

// --- TBC curb: connect in point-number order, new run at each 'END' ---
EnsureLayer("SS-V-ROAD-CURB", 1);
var tbc = Grp("TBC").OrderBy(x => x.num).ToList();
int runs = 0; var cur = new List<Point2d>();
foreach (var t in tbc) {
    cur.Add(t.p);
    if (t.d.ToUpperInvariant().Contains("END")) { if (cur.Count >= 2) { AddPl(cur, "SS-V-ROAD-CURB"); runs++; } cur = new List<Point2d>(); }
}
if (cur.Count >= 2) { AddPl(cur, "SS-V-ROAD-CURB"); runs++; }
Log($"TBC: {runs} curb run(s) drawn on SS-V-ROAD-CURB");

// --- Road CL: main through-road points, sorted N->S (drop far-west spur) ---
EnsureLayer("SS-V-ROAD-CNTR", 3);
var cl = Grp("CL").Where(x => x.p.X >= 2166550).OrderByDescending(x => x.p.Y).Select(x => x.p).ToList();
if (cl.Count >= 2) { AddPl(cl, "SS-V-ROAD-CNTR"); Log($"CL: {cl.Count} pts -> centerline on SS-V-ROAD-CNTR"); }

// --- Road name text along CL ---
if (cl.Count >= 2) {
    var n0 = cl[0]; var nL = cl[cl.Count - 1];
    double rot = System.Math.Atan2(n0.Y - nL.Y, n0.X - nL.X); // south->north, reads upward
    var m = cl[cl.Count / 2];
    var mt = new MText { Location = new Point3d(m.X, m.Y, 0), Contents = "STONEWALL TELL ROAD", TextHeight = 8, Rotation = rot, Attachment = AttachmentPoint.MiddleCenter };
    mt.Layer = "C-ANNO"; ms.AppendEntity(mt); Tx.AddNewlyCreatedDBObject(mt, true);
    Log("Road label 'STONEWALL TELL ROAD' added on C-ANNO");
}
Log("Road linework complete.");

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260619 - 3625 Stonewall Tell Rd, Atlanta, GA 30349, USA\260619 - 3625 Stonewall Tell Rd.dwg
Message
Executed C3D-ROAD619 (0 entities touched).
Entities
Duration
660 ms
Civil 3D
25.0.0.0

Log

TBC: 4 curb run(s) drawn on SS-V-ROAD-CURB
CL: 21 pts -> centerline on SS-V-ROAD-CNTR
Road label 'STONEWALL TELL ROAD' added on C-ANNO
Road linework complete.

Notes

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

No notes yet.