C3D-0335 · 17X11: read the top-left corner exactly as it stands now [C3D-CORNER] done
Read-only. Dumps every line in SS_BLOCK_17X11 whose sheet coords fall in the top-left window (x<6, y>5) with handles, plus non-line block entities and everything sitting in the 17X11 layout in that same window. Needed before cleaning up the leftover box lines from C3D-0333.
C# payload
// State of the 17X11 top-left corner, in SHEET coords. Everything in the block within
// x 0..5, y 6..11 sheet, plus everything in the LAYOUT in that same window.
const string BLK = "SS_BLOCK_17X11";
const double IX = 16.670, IY = 0.330; // block insert -> sheet = block + (IX,IY)
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var bd = (BlockTableRecord)Tx.GetObject(bt[BLK], OpenMode.ForRead);
Log("--- BLOCK " + BLK + ": every line touching sheet x<6, y>5 ---");
int n = 0;
foreach (ObjectId eid in bd) {
var ln = Tx.GetObject(eid, OpenMode.ForRead) as Line;
if (ln == null) continue;
double sx = ln.StartPoint.X + IX, sy = ln.StartPoint.Y + IY;
double ex = ln.EndPoint.X + IX, ey = ln.EndPoint.Y + IY;
if (Math.Min(sx,ex) > 6.0) continue;
if (Math.Max(sy,ey) < 5.0) continue;
n++;
Log(string.Format(" [{0}] sheet ({1,7:F3},{2,7:F3})-({3,7:F3},{4,7:F3}) len={5,7:F4} layer={6}",
ln.Handle, sx, sy, ex, ey, ln.Length, ln.Layer));
}
Log(" lines in that window: " + n);
// anything else in the block up there - text, plines
Log("--- BLOCK: non-line entities in that window ---");
foreach (ObjectId eid in bd) {
var e = Tx.GetObject(eid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (e == null || e is Line) continue;
Autodesk.AutoCAD.DatabaseServices.Extents3d ex3;
try { ex3 = e.GeometricExtents; } catch { continue; }
double x0 = ex3.MinPoint.X + IX, y0 = ex3.MinPoint.Y + IY;
double x1 = ex3.MaxPoint.X + IX, y1 = ex3.MaxPoint.Y + IY;
if (x0 > 6.0 || y1 < 5.0) continue;
string what = e.GetType().Name;
string txt = "";
var m = e as MText; var d = e as DBText; var ad = e as AttributeDefinition;
if (m != null) txt = m.Contents; else if (d != null) txt = d.TextString;
else if (ad != null) txt = ad.Tag + "=" + ad.TextString;
if (txt.Length > 50) txt = txt.Substring(0,50);
Log(string.Format(" [{0}] {1,-20} sheet ({2:F3},{3:F3})-({4:F3},{5:F3}) layer={6} \"{7}\"",
e.Handle, what, x0, y0, x1, y1, e.Layer, txt.Replace("\n"," ")));
}
// the layout itself
Log("--- LAYOUT 17X11: everything with any part in x<6, y>5 ---");
var dict = (DBDictionary)Tx.GetObject(Db.LayoutDictionaryId, OpenMode.ForRead);
foreach (DBDictionaryEntry de in dict) {
var lay = (Layout)Tx.GetObject(de.Value, OpenMode.ForRead);
if (lay.LayoutName != "17X11") continue;
var btr = (BlockTableRecord)Tx.GetObject(lay.BlockTableRecordId, OpenMode.ForRead);
foreach (ObjectId eid in btr) {
var e = Tx.GetObject(eid, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
if (e == null) continue;
Autodesk.AutoCAD.DatabaseServices.Extents3d ex3;
try { ex3 = e.GeometricExtents; } catch { continue; }
if (ex3.MinPoint.X > 6.0 || ex3.MaxPoint.Y < 5.0) continue;
string what = e.GetType().Name;
string txt = "";
var m = e as MText; var d = e as DBText; var br = e as BlockReference;
if (m != null) txt = m.Contents; else if (d != null) txt = d.TextString;
else if (br != null) txt = "BLOCK " + ((BlockTableRecord)Tx.GetObject(br.BlockTableRecord, OpenMode.ForRead)).Name;
if (txt.Length > 60) txt = txt.Substring(0,60);
Log(string.Format(" [{0}] {1,-16} ({2,7:F3},{3,7:F3})-({4,7:F3},{5,7:F3}) layer={6,-20} \"{7}\"",
e.Handle, what, ex3.MinPoint.X, ex3.MinPoint.Y, ex3.MaxPoint.X, ex3.MaxPoint.Y,
e.Layer, txt.Replace("\n"," ")));
}
}
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260714 - 285 Huckaby Rd, Brooks, GA 30205, USA\260714 - 285 Huckaby Rd R3.dwg --- BLOCK SS_BLOCK_17X11: every line touching sheet x<6, y>5 --- [21077] sheet ( 3.000, 10.630)-( 16.628, 10.630) len=13.6284 layer=BLOCK_TB2 [21078] sheet ( 3.000, 10.670)-( 16.670, 10.670) len=13.6700 layer=BLOCK_TB2 [21086] sheet ( 0.371, 8.000)-( 0.373, 0.371) len= 7.6293 layer=BLOCK_TB2 [2108D] sheet ( 0.330, 8.000)-( 0.330, 0.330) len= 7.6700 layer=BLOCK_TB2 [21F21] sheet ( 3.000, 10.670)-( 3.000, 8.000) len= 2.6700 layer=BLOCK_TB2 [21F22] sheet ( 3.000, 8.000)-( 0.330, 8.000) len= 2.6700 layer=BLOCK_TB2 [21F23] sheet ( 3.000, 10.630)-( 3.000, 8.000) len= 2.6296 layer=BLOCK_TB2 [21F24] sheet ( 3.000, 8.000)-( 0.373, 8.000) len= 2.6267 layer=BLOCK_TB2 lines in that window: 8 --- BLOCK: non-line entities in that window --- --- LAYOUT 17X11: everything with any part in x<6, y>5 --- [20E5D] BlockReference ( 0.330, 0.330)-( 16.670, 10.670) layer=BLOCK_TB2 "BLOCK SS_BLOCK_17X11" [20E70] Viewport ( -8.931, -3.800)-( 39.438, 13.368) layer=0 "" [20E73] Viewport ( 0.373, 0.371)-( 16.628, 10.630) layer=BLOCK_TB2 "" [215E7] RasterImage ( 4.128, 3.127)-( 6.428, 5.427) layer=BLOCK_CLOSURE ""
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.