C3D-NOTES702 · 358 all plat notes/labels/dimensions done
All text from the photo on C-ANNO in the boundary frame
C# payload
// All plat text from the photo, placed in the boundary frame (f along front, d into lot). On C-ANNO.
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var ms = (BlockTableRecord)Tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Polyline bnd = null;
foreach (ObjectId id in ms) { var e = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity; if (e is Polyline p && p.Closed && p.Layer == "C-PROP-LINE" && p.NumberOfVertices == 4 && System.Math.Abs(p.Area - 10212) < 800) { bnd = p; break; } }
if (bnd == null) { Log("boundary not found"); return; }
var A = bnd.GetPoint2dAt(0); var B = bnd.GetPoint2dAt(1); var D = bnd.GetPoint2dAt(3);
double fl = A.GetDistanceTo(B), dl = A.GetDistanceTo(D);
double ux = (B.X - A.X)/fl, uy = (B.Y - A.Y)/fl, vx = (D.X - A.X)/dl, vy = (D.Y - A.Y)/dl;
Point2d P(double f, double d) => new Point2d(A.X + f*ux + d*vx, A.Y + f*uy + d*vy);
double uA = System.Math.Atan2(uy, ux), vA = System.Math.Atan2(vy, vx);
double up(double a) { if (a > System.Math.PI/2 || a < -System.Math.PI/2) a += System.Math.PI; return a; }
EnsureLayer("C-ANNO");
void N(string t, double f, double d, double h, double rot) { var mt = new MText { Location = new Point3d(P(f,d).X, P(f,d).Y, 0), Contents = t, TextHeight = h, Rotation = up(rot), Attachment = AttachmentPoint.MiddleCenter }; mt.Layer = "C-ANNO"; ms.AppendEntity(mt); Tx.AddNewlyCreatedDBObject(mt, true); }
// dimensions + bearings
N("60.07' (PER DEED)", 30, 3, 5, uA); N("60.07' (PER DEED)", 30, 167, 5, uA);
N("170.00' (PER DEED)", 3, 85, 5, vA); N("170.00' (PER DEED)", 57, 85, 5, vA);
N("N36°44'12\"E", 30, 6, 4, uA); N("N53°15'48\"W", 6, 85, 4, vA); N("N53°15'48\"W", 54, 85, 4, vA);
// setbacks
N("15' B/L", 30, 150, 4, uA); N("7' B/L", 10, 85, 4, vA); N("7' B/L", 50, 85, 4, vA);
// features
N("PROPOSED TWO\\PSTOREY HOUSE", 29, 90, 5, vA);
N("PORCH", 29, 44, 4, uA);
N("PROPOSED CONCRETE\\PDRIVEWAY", 6, 32, 4, vA);
N("SILT FENCE", 30, 158, 3, uA);
N("RAIN GARDEN\\P272 SQ FT", 30, 20, 3, uA);
N("MATERIAL\\PSTORAGE", 11, 12, 2.5, uA);
N("TEMPORARY\\PDUMPSTER", 10, 22, 2.5, uA);
N("TEMPORARY GRAVEL\\PCONSTRUCTION EXIT", 6, 4, 2.5, uA);
// road
N("SAINT JOHNS AVENUE", 30, -20, 6, uA);
N("5'-0\" CONCRETE SIDE WALK", 30, -5, 3, uA);
N("2'-0\" AMENITY SPACE", 30, -9, 3, uA);
// adjoiner + tables
N("N/F\\PWESLEY G KELLEY\\P362 SAINT JOHNS AVENUE\\PDB 29746, PG 407", 78, 85, 4, vA);
N("LOT AREA\\P0.234 ac / 10,212 SQ FT\\PF.A.R = 19.2%", 30, 185, 4, uA);
N("UNHEATED AREA\\PPORCH = 151 Sq.ft\\PGARAGE = 672 Sq.ft\\PTOTAL = 823 Sq.ft", 80, 45, 3, uA);
Log("All plat notes placed on C-ANNO.");
Result
Log
All plat notes placed on C-ANNO.
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.