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.
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
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: 20Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.