C3D-INSP619A · Read 260619 boundary+deed text (read-only) done
Parcels/areas, boundary line+curve calls (bearing/distance), and deed/adjoiner text for the open Stonewall Tell drawing.
C# payload
// READ-ONLY: what's in the open 260619 drawing for deed review.
// boundary layers + their line/curve calls (bearing+distance), any deed/adjoiner text, parcels.
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
var db = Db;
Log($"ACTIVE: {System.IO.Path.GetFileName(Doc.Name)}");
// parcels + areas
using (var tr = db.TransactionManager.StartTransaction())
{
var cdoc = CivilDocument.GetCivilDocument(db);
foreach (ObjectId sid in cdoc.GetSiteIds())
{
var site = (Site)tr.GetObject(sid, OpenMode.ForRead);
foreach (ObjectId pid in site.GetParcelIds())
{
var p = (Parcel)tr.GetObject(pid, OpenMode.ForRead);
Log($"PARCEL #{p.Number} '{p.Name}' {p.Area/43560.0:0.000} ac layer='{p.Layer}'");
}
}
tr.Commit();
}
// boundary geometry: lines/arcs on boundary-ish layers, as bearing+distance calls
double toBearing(double ang) { var d = ang*180/Math.PI; return d; }
string bearingStr(Point3d a, Point3d b)
{
double dx=b.X-a.X, dy=b.Y-a.Y;
double az = Math.Atan2(dx,dy)*180/Math.PI; if(az<0)az+=360; // azimuth from north
string ns = (dy>=0)?"N":"S"; string ew=(dx>=0)?"E":"W";
double q = Math.Atan2(Math.Abs(dx),Math.Abs(dy))*180/Math.PI;
int deg=(int)q; double mf=(q-deg)*60; int min=(int)mf; int sec=(int)Math.Round((mf-min)*60);
if(sec==60){sec=0;min++;} if(min==60){min=0;deg++;}
return $"{ns}{deg:00}°{min:00}'{sec:00}\"{ew}";
}
using (var tr = db.TransactionManager.StartTransaction())
{
var ms = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
var boundaryLayers = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
foreach (ObjectId id in lt){ var l=(LayerTableRecord)tr.GetObject(id,OpenMode.ForRead); if(l.Name.IndexOf("BOUNDARY",StringComparison.OrdinalIgnoreCase)>=0) boundaryLayers.Add(l.Name);}
Log($"BOUNDARY LAYERS: {string.Join(", ", boundaryLayers)}");
int shown=0;
foreach (ObjectId id in ms)
{
var e = tr.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (e==null || !boundaryLayers.Contains(e.Layer)) continue;
if (e is Line ln){ Log($" [{e.Layer}] L {bearingStr(ln.StartPoint,ln.EndPoint)} {ln.Length:0.00}'"); shown++; }
else if (e is Arc a){ double chord=a.StartPoint.DistanceTo(a.EndPoint); Log($" [{e.Layer}] C R={a.Radius:0.00}' L={a.Length:0.00}' chord={chord:0.00}'"); shown++; }
else if (e is Polyline pl){ Log($" [{e.Layer}] PL verts={pl.NumberOfVertices} len={pl.Length:0.00}' closed={pl.Closed} area={pl.Area:0.0}sf ({pl.Area/43560.0:0.000}ac)"); shown++; }
}
Log($"boundary entities shown: {shown}");
tr.Commit();
}
// deed/adjoiner text (DB xxxxx, PB xx, N/F, TRACT)
using (var tr = db.TransactionManager.StartTransaction())
{
var ms = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
var hits = new List<string>();
foreach (ObjectId id in ms)
{
var e = tr.GetObject(id, OpenMode.ForRead);
string s=null;
if(e is DBText t) s=t.TextString; else if(e is MText m) s=m.Text;
if(string.IsNullOrWhiteSpace(s)) continue;
var u=s.ToUpperInvariant();
if(u.Contains("DB ")||u.Contains("D.B")||u.Contains("PB ")||u.Contains("P.B")||u.Contains("N/F")||u.Contains("TRACT")||u.Contains("DEED")||u.Contains("R/W"))
hits.Add(s.Replace("\n"," ").Trim());
}
Log($"DEED/ADJOINER TEXT ({hits.Count}):");
foreach(var h in hits.Distinct().Take(60)) Log($" {h}");
tr.Commit();
}
Result
Log
ACTIVE: 260619 - 3625 Stonewall Tell Rd.dwg PARCEL #5 'TRACT B' 3.314 ac layer='C-PROP' PARCEL #6 'TRACT A' 0.994 ac layer='C-PROP' BOUNDARY LAYERS: SS-BOUNDARY BLUE, SS-BOUNDARY_PTS, SS-BOUNDARY RED, SS-BOUNDARY, SS-BOUNDARY LAND LOT, BOUNDARY PTS, SS-BOUNDARY CYAN, SS-BOUNDARY MAG [SS-BOUNDARY] L S00°10'45"E 902.74' [SS-BOUNDARY] L N86°29'57"W 81.68' [SS-BOUNDARY MAG] PL verts=19 len=1200.80' closed=False area=129561.8sf (2.974ac) [SS-BOUNDARY MAG] L S12°55'50"W 236.86' [SS-BOUNDARY MAG] L S12°51'39"W 46.50' [SS-BOUNDARY MAG] L S13°01'55"W 101.37' [SS-BOUNDARY MAG] L S12°42'16"W 48.14' [SS-BOUNDARY MAG] L S12°37'13"W 94.86' [SS-BOUNDARY MAG] L S13°00'34"W 53.16' [SS-BOUNDARY MAG] L S12°35'09"W 147.36' [SS-BOUNDARY MAG] L S13°10'31"W 81.66' [SS-BOUNDARY MAG] L S12°48'49"W 24.16' [SS-BOUNDARY MAG] L S13°00'13"W 41.31' [SS-BOUNDARY] L N87°46'52"W 185.75' [SS-BOUNDARY] L S02°41'24"W 669.56' [SS-BOUNDARY] L S74°19'43"E 125.40' boundary entities shown: 16 DEED/ADJOINER TEXT (17): STONEWALL TELL ROAD (R/W VARIES) DEMONEY ROAD (R/W VARIES) NEWBORN DRIVE SW (R/W VARIES) N/F BOBBY WALKER DB 32512 - PG 402 MARCH 11, 2002 N/F LATISSA NECOLE THOMAS & DANIEL WEBSTER WHITE JANUARY 30, 2001 N/F JEFFERY L. VAUGHAN APRIL 30, 2001 DB 30326 - PG 474 DB 16958 - PG 165 - NOT REFERENCED TRACT "A" AREA 43,299 sq.ft. 0.99 acres TRACT "B" AREA 144,347 sq.ft. 3.31 acres TRACT "D" AREA 119,893 sq.ft. 2.75 acres PROPERTY LINE PER MONUMENTS FOUND AND ADJOINER'S DB 32512 - PG 402 LAND LOT LINE PER PB PG 82 - PG 17 NORTH TRACT CALLS FOR 50' R/W STONEWALL TELL ROAD DB 30122 - PG 413 PROPERTY LINE PER MONUMENTS FOUND AND ADJOINER'S DB 28196 - PG 23 (R=700.3') NO DEED REFERENCED FOR MONUMENTATION SURVEYOR RECOMMENDS BOUNDARY LINE AGREEMENT PROPERTY LINE PER MONUMENTS FOUND AND ADJOINER'S DB 32449 - PG 421 LINE PER TAX - NO DEED REFERENCED NO DEED REFERENCED FOR CONVEYANCE
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.