C3D-0278 · 260714 Huckaby: model extents and what is forcing the scale done
READ-ONLY. Total model extents with the scale needed to fit the 16.34x10.34 border, every entity more than 400 ft from the model centre, and all boundary/parcel geometry.
C# payload
// What is the real extent of the drawing, and what is furthest out?
var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);
double x0=1e30,y0=1e30,x1=-1e30,y1=-1e30;
var items = new List<string>();
foreach (ObjectId id in ms) {
var ent = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
double a,b,c,d;
try { var e = ent.GeometricExtents; a=e.MinPoint.X;b=e.MinPoint.Y;c=e.MaxPoint.X;d=e.MaxPoint.Y; } catch { continue; }
if (a<x0)x0=a; if (b<y0)y0=b; if (c>x1)x1=c; if (d>y1)y1=d;
}
Log(string.Format("MODEL EXTENTS ({0:F2},{1:F2})-({2:F2},{3:F2}) = {4:F1} x {5:F1} ft", x0,y0,x1,y1, x1-x0, y1-y0));
Log(string.Format("to fit 16.34 x 10.34 in: needs 1\"={0:F1}' (width) or 1\"={1:F1}' (height)",
(x1-x0)/16.34, (y1-y0)/10.34));
Log("");
// cluster: what is far from the bulk?
double cx=(x0+x1)/2, cy=(y0+y1)/2;
Log("--- entities more than 400 ft from the model centre ---");
int far=0;
foreach (ObjectId id in ms) {
var ent = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
double a,b,c,d;
try { var e = ent.GeometricExtents; a=e.MinPoint.X;b=e.MinPoint.Y;c=e.MaxPoint.X;d=e.MaxPoint.Y; } catch { continue; }
double mx=(a+c)/2, my=(b+d)/2;
double dist = Math.Sqrt((mx-cx)*(mx-cx)+(my-cy)*(my-cy));
if (dist < 400) continue;
far++;
string what = ent.GetType().Name;
var cp = ent as CogoPoint;
if (cp != null) what = "PT " + cp.PointNumber + " \"" + cp.RawDescription + "\"";
var mt = ent as MText; if (mt != null) what = "MTEXT \"" + mt.Contents.Replace("\n"," ").Substring(0,Math.Min(28,mt.Contents.Length)) + "\"";
var dt = ent as DBText; if (dt != null) what = "TEXT \"" + dt.TextString + "\"";
if (far <= 25) Log(string.Format(" {0:F0} ft {1,-34} layer={2} ({3:F1},{4:F1})", dist, what, ent.Layer, mx, my));
}
Log("far entities: " + far);
Log("");
// the boundary layers
Log("--- SS-BOUNDARY / PARCEL layers ---");
foreach (ObjectId id in ms) {
var ent = Tx.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
if (ent.Layer.ToUpper().IndexOf("BOUND") < 0 && ent.Layer.ToUpper().IndexOf("PARCEL") < 0) continue;
double a,b,c,d;
try { var e = ent.GeometricExtents; a=e.MinPoint.X;b=e.MinPoint.Y;c=e.MaxPoint.X;d=e.MaxPoint.Y; } catch { continue; }
var pl = ent as Polyline;
string extra = pl != null ? string.Format(" verts={0} len={1:F1} closed={2}", pl.NumberOfVertices, pl.Length, pl.Closed) : "";
Log(string.Format(" [{0}] {1,-12} layer={2,-24} ({3:F1},{4:F1})-({5:F1},{6:F1}){7}",
ent.Handle, ent.GetType().Name, ent.Layer, a,b,c,d, extra));
}
Result
Log
MODEL EXTENTS (0.00,0.00)-(2298534.11,1280399.85) = 2298534.1 x 1280399.9 ft to fit 16.34 x 10.34 in: needs 1"=140669.2' (width) or 1"=123829.8' (height) --- entities more than 400 ft from the model centre --- 1315550 ft Site layer=C-ANNO-TABL-TTBL (0.0,0.0) 1315550 ft Site layer=C-ANNO-TABL-TTBL (0.0,0.0) 1315550 ft Site layer=C-ANNO-TABL-TTBL (0.0,0.0) 1315550 ft Site layer=C-ANNO-TABL-TTBL (0.0,0.0) 1315550 ft Site layer=C-ANNO-TABL-TTBL (0.0,0.0) 1314095 ft PT 129 "R/W" layer=0 (2296951.4,1280252.2) 1313770 ft PT 193 "SIGN" layer=PROJECT_BOUNDARY_TEXT (2296585.7,1280239.9) 1313781 ft PT 248 "H CAP SIGN" layer=PROJECT_BOUNDARY_TEXT (2296648.4,1280151.0) 1313797 ft PT 255 "H CAP SIGN" layer=PROJECT_BOUNDARY_TEXT (2296666.1,1280150.9) 1313777 ft PT 344 "SSMH A9" layer=SEWER_MANHOLE E1 (2296714.1,1280025.3) 1313791 ft PT 345 "WATER LINE STUB" layer=WATER_LINE_PTS (2296723.0,1280036.2) 1313767 ft PT 352 "SSMH A10" layer=SEWER_MANHOLE E1 (2296691.0,1280045.9) 1313765 ft PT 353 "SSMH TEST MH" layer=SEWER_MANHOLE E1 (2296685.2,1280052.4) 1313785 ft PT 356 "TBC SW WATER TO BLDG" layer=WATER_LINE_PTS (2296693.4,1280077.6) 1313739 ft PT 358 "SSMH TEST MH" layer=SEWER_MANHOLE E1 (2296652.0,1280058.1) 1313707 ft PT 360 "CLEAN OUT" layer=PROJECT_BOUNDARY_TEXT (2296614.7,1280057.9) 1313700 ft PT 361 "CLEAN OUT" layer=PROJECT_BOUNDARY_TEXT (2296608.5,1280055.9) 1313728 ft PT 370 "CLEAN OUT" layer=PROJECT_BOUNDARY_TEXT (2296633.8,1280068.3) 1313713 ft PT 374 "CLEAN OUT" layer=PROJECT_BOUNDARY_TEXT (2296612.4,1280075.6) 1313692 ft PT 377 "SSMH A12" layer=SEWER_MANHOLE E1 (2296604.6,1280046.2) 1313911 ft PT 378 "SSMH A6" layer=SEWER_MANHOLE (2296827.2,1280096.0) 1313926 ft PT 379 "SSMH A5" layer=SEWER_MANHOLE (2296878.7,1280034.2) 1313955 ft PT 380 "SSMH A4" layer=SEWER_MANHOLE (2296980.5,1279912.3) 1314075 ft PT 381 "SSMH A3" layer=SEWER_MANHOLE (2297249.9,1279675.2) 1314054 ft PT 382 "SSMH A2" layer=SEWER_MANHOLE (2297269.0,1279597.7) far entities: 6444 --- SS-BOUNDARY / PARCEL layers --- [23712] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296577.5,1280236.9)-(2296594.0,1280242.9) [23749] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296645.3,1280133.9)-(2296651.6,1280168.1) [23750] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296663.1,1280133.8)-(2296669.1,1280168.0) [237B9] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296598.3,1280054.9)-(2296631.2,1280060.9) [237BA] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296592.1,1280052.9)-(2296625.0,1280058.9) [237C3] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296604.7,1280061.1)-(2296662.9,1280075.5) [237C7] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296596.0,1280072.6)-(2296628.9,1280078.6) [237DF] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296685.7,1280077.3)-(2296718.7,1280083.3) [237EB] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296520.2,1280007.7)-(2296544.2,1280017.3) [238E9] CogoPoint layer=PROJECT_BOUNDARY_TEXT (2296484.8,1280031.5)-(2296552.9,1280055.8) [2E1E9] Site layer=SS-BOUNDARY (2296319.1,1279728.4)-(2296945.9,1280257.8) [2F0C3] Polyline layer=SS-BOUNDARY (2296377.8,1279586.6)-(2297434.2,1280115.6) verts=27 len=2871.3 closed=True [2F0C7] Polyline layer=SS-BOUNDARY (2296377.8,1279586.6)-(2297434.2,1280115.6) verts=27 len=2871.3 closed=True [2F0DE] Site layer=SS-BOUNDARY (2296378.6,1279941.4)-(2296842.2,1280109.2) [2F0E0] Parcel layer=SS-BOUNDARY (2296378.6,1279941.4)-(2296842.2,1280109.2)
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.