← Inbox

C3D-0150 · READ-ONLY: as-built features to label [ASBUILT-READ] done

Lists every polyline on sidewalk, wall, concrete, driveway, fence and curb layers with midpoint, tangent rotation, length, closure and arc count for label placement, plus related points and all existing model-space text so labels are not duplicated. No changes.

Script file
C3D-0150.cs
Target
active document · model space
Author
claude
Approved
yes · reviewer
Timeout
240s

C# payload

// READ-ONLY. The as-built features to label: sidewalk, wall, concrete pad, fence.
// Report every polyline on those layers with its midpoint, direction and length, plus any point
// whose description mentions them, so the labels can be placed on the geometry. Nothing is modified.
var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);
Log("drawing: " + Db.Filename);

string[] KEYS = { "SIDEWALK", "EPVM", "WALL", "DRIV", "CONC", "FENCE", "ROAD-", "CURB" };

Log("=== polylines on candidate layers ===");
foreach (ObjectId id in ms) {
    var pl = Tx.GetObject(id, OpenMode.ForRead) as Polyline;
    if (pl == null || pl.IsErased) continue;
    string u = pl.Layer.ToUpper();
    bool hit = false;
    foreach (string k in KEYS) if (u.IndexOf(k) >= 0) { hit = true; break; }
    if (!hit) continue;

    // midpoint + tangent for label placement
    double half = pl.Length / 2.0;
    Point3d mid; double ang = 0;
    try {
        mid = pl.GetPointAtDist(half);
        var d = pl.GetFirstDerivative(mid);
        ang = Math.Atan2(d.Y, d.X) * 180.0 / Math.PI;
    } catch { mid = pl.StartPoint; }

    int arcs = 0;
    for (int i = 0; i < pl.NumberOfVertices; i++) if (Math.Abs(pl.GetBulgeAt(i)) > 1e-9) arcs++;

    Log(String.Format("[{0}] {1,-22} verts={2,-3} len={3,7:F2} closed={4,-5} arcs={5}  mid {6:F2},{7:F2} rot={8:F1}",
        pl.Handle, pl.Layer, pl.NumberOfVertices, pl.Length, pl.Closed, arcs, mid.X, mid.Y, ang));
}

Log("");
Log("=== points mentioning sidewalk / wall / pad / fence ===");
foreach (ObjectId id in ms) {
    var cp = Tx.GetObject(id, OpenMode.ForRead) as CogoPoint;
    if (cp == null) continue;
    string d = "";
    try { d = (cp.RawDescription ?? "").ToUpper(); } catch { }
    if (d.IndexOf("SW") < 0 && d.IndexOf("WALL") < 0 && d.IndexOf("PAD") < 0
        && d.IndexOf("FENCE") < 0 && d.IndexOf("CON") < 0) continue;
    Log(String.Format("   pt {0,-5} \"{1}\"  {2:F2},{3:F2}  layer={4}",
        cp.PointNumber, cp.RawDescription, cp.Easting, cp.Northing, cp.Layer));
}

Log("");
Log("=== existing model-space text (so labels are not duplicated) ===");
int nt = 0;
foreach (ObjectId id in ms) {
    Autodesk.AutoCAD.DatabaseServices.DBObject o;
    try { o = Tx.GetObject(id, OpenMode.ForRead); } catch { continue; }
    var mt = o as MText; var dt = o as DBText;
    if (mt == null && dt == null) continue;
    var ent = (Autodesk.AutoCAD.DatabaseServices.Entity)o;
    nt++;
    if (nt <= 30)
        Log(String.Format("   [{0}] {1,-16} h={2:F2} \"{3}\"", o.Handle, ent.Layer,
            mt != null ? mt.TextHeight : dt.Height,
            mt != null ? mt.Contents : dt.TextString));
}
Log("   model-space text entities: " + nt);

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260802 - 4082 Sweetbriar Ln, Forest Park, GA 30297, USA\260802 - 4082 Sweetbriar Ln.dwg
Message
Executed C3D-0150 (0 entities touched).
Entities
Duration
371 ms
Civil 3D
25.0.0.0

Log

drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260802 - 4082 Sweetbriar Ln, Forest Park, GA 30297, USA\260802 - 4082 Sweetbriar Ln.dwg
=== polylines on candidate layers ===
[20AD7] SS-V-ROAD-CNTR         verts=3   len= 187.56 closed=False arcs=0  mid 2238197.85,1325215.03 rot=-110.8
[20AD8] SS-V-ROAD-CNTR         verts=8   len= 191.85 closed=False arcs=0  mid 2238323.35,1325200.98 rot=-49.7
[20AD9] SS-V-ROAD-CURB         verts=4   len= 193.16 closed=False arcs=0  mid 2238185.30,1325218.65 rot=68.7
[20ADB] SS-V-ROAD-CURB         verts=9   len= 176.26 closed=False arcs=1  mid 2238318.49,1325187.21 rot=130.6
[20ADC] SS-V-ROAD-CURB         verts=3   len= 153.52 closed=False arcs=1  mid 2238204.24,1325194.62 rot=-111.5
[20ADD] SS-V-ROAD-CURB         verts=10  len= 229.80 closed=False arcs=1  mid 2238320.61,1325223.18 rot=139.8
[20ADE] V-STRC-WALL            verts=2   len= 102.95 closed=False arcs=0  mid 2238240.08,1325110.00 rot=159.0
[20AE0] X-DRIV-CONC            verts=5   len= 106.06 closed=False arcs=2  mid 2238210.22,1325139.07 rot=156.7
[20AE2] X-DRIV-CONC            verts=2   len=  15.24 closed=False arcs=0  mid 2238187.40,1325151.58 rot=-111.1
[20AE3] X-DRIV-CONC            verts=2   len=  68.78 closed=False arcs=0  mid 2238230.95,1325139.79 rot=-22.2
[20AE4] X-DRIV-CONC            verts=2   len=   9.57 closed=False arcs=0  mid 2238260.85,1325122.44 rot=-113.9
[20AE5] X-DRIV-CONC            verts=5   len=  95.01 closed=False arcs=0  mid 2238275.24,1325161.02 rot=-23.9
[20AE6] SS-V-ROAD-EPVM         verts=5   len=  37.45 closed=False arcs=0  mid 2238232.65,1325138.60 rot=156.5
[20AFC] V-STRC-WALL            verts=2   len= 102.95 closed=False arcs=0  mid 2238239.63,1325109.33 rot=159.0
[20B0E] SS-X-FENCE             verts=2   len=  75.19 closed=False arcs=0  mid 2238320.85,1325110.30 rot=-149.9

=== points mentioning sidewalk / wall / pad / fence ===
   pt 240   "BACK OF WALL"  2238181.48,1325131.58  layer=0
   pt 239   "FACE OF WALL"  2238181.93,1325132.25  layer=0
   pt 235   "FACE OF WALL"  2238192.02,1325128.43  layer=0
   pt 233   "SW DWY"  2238230.39,1325139.58  layer=0
   pt 232   "SW DWY"  2238233.04,1325138.43  layer=0
   pt 231   "SW"  2238239.00,1325153.24  layer=0
   pt 230   "SW"  2238237.01,1325154.45  layer=0
   pt 229   "CON PAD"  2238276.46,1325160.48  layer=0
   pt 228   "CON PAD"  2238255.63,1325169.69  layer=0
   pt 227   "CON PAD"  2238246.66,1325145.21  layer=0
   pt 226   "CON PAD"  2238265.66,1325137.29  layer=0
   pt 225   "CON DWY COR"  2238262.80,1325126.81  layer=0
   pt 224   "CON DWY COR"  2238258.91,1325118.06  layer=0
   pt 223   "FACE OF WALL"  2238252.60,1325104.73  layer=0
   pt 221   "FACE OF WALL"  2238288.14,1325091.56  layer=0
   pt 220   "FC FL BACK WOOD CON WALL"  2238288.32,1325091.45  layer=0

=== existing model-space text (so labels are not duplicated) ===
   [20C33] ROAD_TEXT        h=3.20 "SWEETBRIAR LN (50' R/W)"
   [20C34] ROAD_TEXT        h=3.20 "C"
   [20C35] ROAD_TEXT        h=3.20 "A"
   [20C36] ROAD_TEXT        h=3.20 "M"
   [20C37] ROAD_TEXT        h=3.20 "E"
   [20C38] ROAD_TEXT        h=3.20 "L"
   [20C39] ROAD_TEXT        h=3.20 "L"
   [20C3A] ROAD_TEXT        h=3.20 "I"
   [20C3B] ROAD_TEXT        h=3.20 "A"
   [20C3C] ROAD_TEXT        h=3.20 "C"
   [20C3D] ROAD_TEXT        h=3.20 "I"
   [20C3E] ROAD_TEXT        h=3.20 "R"
   [20C3F] ROAD_TEXT        h=3.20 "("
   [20C40] ROAD_TEXT        h=3.20 "5"
   [20C41] ROAD_TEXT        h=3.20 "0"
   [20C42] ROAD_TEXT        h=3.20 "'"
   [20C43] ROAD_TEXT        h=3.20 "R"
   [20C44] ROAD_TEXT        h=3.20 "/"
   [20C45] ROAD_TEXT        h=3.20 "W"
   [20C46] ROAD_TEXT        h=3.20 ")"
   model-space text entities: 20

Notes

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

No notes yet.