C3D-0329 · List all segment labels with segment length, layer, lineweight and style [C3D-PSL3] done
Read-only. Each ParcelSegmentLabel with its labelled segment length (so 408.70 / 79.34 / 1089.00 / 150.35 can be identified by handle), plus its layer, entity lineweight, style name and screen position. Also enumerates the parcel line/curve label styles.
C# payload
Log("drawing: " + Db.Filename);
var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);
int n = 0;
foreach (ObjectId id in ms) {
var obj = Tx.GetObject(id, OpenMode.ForRead);
string cls = obj.GetType().Name;
if (cls != "ParcelSegmentLabel" && cls != "GeneralSegmentLabel") continue;
var ent = (Autodesk.AutoCAD.DatabaseServices.Entity)obj;
n++;
string styleName = "?";
try {
var sid = (ObjectId)obj.GetType().GetProperty("StyleId").GetValue(obj, null);
if (!sid.IsNull) {
var st = Tx.GetObject(sid, OpenMode.ForRead);
styleName = (st.GetType().GetProperty("Name").GetValue(st, null) ?? "").ToString();
}
} catch { }
// the labelled segment length - this is the 408.70 / 79.34 / 1089.00 / 150.35
double len = -1; double bearing = -1;
try {
var fid = (ObjectId)obj.GetType().GetProperty("FeatureId").GetValue(obj, null);
if (!fid.IsNull) {
var f = Tx.GetObject(fid, OpenMode.ForRead);
var cv = f.GetType().GetProperty("BaseCurve");
if (cv != null) {
var c = cv.GetValue(f, null) as Autodesk.AutoCAD.DatabaseServices.Curve;
if (c != null) {
len = c.GetDistanceAtParameter(c.EndParam) - c.GetDistanceAtParameter(c.StartParam);
var sp = c.StartPoint; var epp = c.EndPoint;
bearing = Math.Atan2(epp.Y - sp.Y, epp.X - sp.X) * 180.0 / Math.PI;
}
}
}
} catch (System.Exception e) { Log(" feat err: " + e.Message); }
Autodesk.AutoCAD.DatabaseServices.Extents3d ex;
string loc = "";
try { ex = ent.GeometricExtents; loc = string.Format("({0:F1},{1:F1})", (ex.MinPoint.X+ex.MaxPoint.X)/2, (ex.MinPoint.Y+ex.MaxPoint.Y)/2); } catch { }
Log(string.Format("[{0}] {1,-20} len={2,9:F2} brg={3,8:F2} layer={4,-18} lw={5,-22} style=\"{6}\" at {7}",
ent.Handle, cls, len, bearing, ent.Layer, ent.LineWeight, styleName, loc));
}
Log("");
Log("segment labels: " + n);
Log("--- parcel segment label styles in the drawing ---");
var civ = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;
try {
var styles = civ.Styles.LabelStyles.ParcelLabelStyles.LineLabelStyles;
foreach (ObjectId sid in styles) {
var s = Tx.GetObject(sid, OpenMode.ForRead);
Log(" LINE " + (s.GetType().GetProperty("Name").GetValue(s,null)));
}
foreach (ObjectId sid in civ.Styles.LabelStyles.ParcelLabelStyles.CurveLabelStyles) {
var s = Tx.GetObject(sid, OpenMode.ForRead);
Log(" CURVE " + (s.GetType().GetProperty("Name").GetValue(s,null)));
}
} catch (System.Exception e) { Log(" style enum: " + e.Message); }
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260714 - 285 Huckaby Rd, Brooks, GA 30205, USA\260714 - 285 Huckaby Rd R2.dwg [21453] GeneralSegmentLabel len= -1.00 brg= -1.00 layer=SS-0-FRAME lw=ByLayer style="?" at (0.5,0.0) [21458] ParcelSegmentLabel len= 7011.06 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2203439.5,1207001.8) [21459] ParcelSegmentLabel len= 7011.06 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2204346.4,1206714.8) [2145A] ParcelSegmentLabel len= 7011.06 brg= 0.00 layer=C-PROP-LINE lw=ByLayer style="?" at (2205327.4,1206731.4) [2145B] ParcelSegmentLabel len= 7011.06 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2205800.3,1206804.1) [2145D] ParcelSegmentLabel len= 7011.06 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2204909.7,1207303.3) [2148C] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2205807.7,1206954.0) [2148D] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2205316.3,1206985.5) [2148E] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2205068.8,1207018.1) [2148F] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2204778.5,1206844.8) [21490] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=C-PROP-LINE lw=ByLayer style="?" at (2205049.2,1206718.5) [21491] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2205254.7,1206759.3) [21492] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=C-PROP-LINE lw=ByLayer style="?" at (2205800.3,1206804.1) [21493] ParcelSegmentLabel len= 3511.51 brg= 0.00 layer=C-PROP-LINE lw=ByLayer style="?" at (2206284.6,1206886.6) [214AA] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2204718.6,1207302.1) [214AB] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=SS-0-FRAME lw=ByLayer style="?" at (2203439.7,1207171.9) [214AC] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2204142.1,1206713.7) [214AD] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2204764.3,1206850.7) [214AE] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2205051.6,1206968.5) [214AF] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2205326.5,1206997.4) [214B0] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2205807.7,1206954.0) [214B1] ParcelSegmentLabel len= 7067.70 brg= 0.00 layer=C-PROP-LINE-TEXT lw=ByLayer style="?" at (2206263.5,1207229.8) segment labels: 22 --- parcel segment label styles in the drawing --- style enum: Property Get method was not found.
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.