C3D-0107 · READ-ONLY: pre-delivery sanity check [SANITY-CHECK] done
Lists every layer still holding entities split by model, paper and block definition, and flags zero-length geometry, text under 0.5 height, and anything sitting more than 5000 feet outside the sewer extent. No changes.
C# payload
// READ-ONLY. Pre-delivery sanity check. Nothing is modified.
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
Log("drawing: " + Db.Filename);
var model = new Dictionary<string,int>();
var paper = new Dictionary<string,int>();
var blockd = new Dictionary<string,int>();
var types = new Dictionary<string,int>();
int zeroLen = 0, tinyText = 0, offSite = 0;
double minX = 1e18, maxX = -1e18, minY = 1e18, maxY = -1e18;
// site extent from the sewer lines, to spot strays
foreach (ObjectId id in (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead)) {
var ln = Tx.GetObject(id, OpenMode.ForRead) as Line;
if (ln == null) continue;
try { if (ln.Layer != "SEWER_LINE") continue; } catch { continue; }
foreach (var p in new Point3d[] { ln.StartPoint, ln.EndPoint }) {
if (p.X < minX) minX = p.X; if (p.X > maxX) maxX = p.X;
if (p.Y < minY) minY = p.Y; if (p.Y > maxY) maxY = p.Y;
}
}
Log(String.Format("sewer extent: X {0:F0}..{1:F0} Y {2:F0}..{3:F0}", minX, maxX, minY, maxY));
foreach (ObjectId btrId in bt) {
var btr = (BlockTableRecord)Tx.GetObject(btrId, OpenMode.ForRead);
bool isModel = btr.Name.ToUpper() == "*MODEL_SPACE";
foreach (ObjectId id in btr) {
Autodesk.AutoCAD.DatabaseServices.DBObject o;
try { o = Tx.GetObject(id, OpenMode.ForRead); } catch { continue; }
var ent = o as Autodesk.AutoCAD.DatabaseServices.Entity;
if (ent == null) continue;
string lay; try { lay = ent.Layer; } catch { continue; }
var tgt = isModel ? model : (btr.IsLayout ? paper : blockd);
if (!tgt.ContainsKey(lay)) tgt[lay] = 0;
tgt[lay]++;
string tn = o.GetType().Name;
if (!types.ContainsKey(tn)) types[tn] = 0;
types[tn]++;
if (!isModel) continue;
var pl = o as Polyline;
if (pl != null && pl.Length < 0.01) zeroLen++;
var ln2 = o as Line;
if (ln2 != null && ln2.Length < 0.01) zeroLen++;
var mt = o as MText;
if (mt != null && mt.TextHeight < 0.5) tinyText++;
// anything wildly outside the site
try {
var e = ent.GeometricExtents;
if (e.MinPoint.X < minX - 5000 || e.MaxPoint.X > maxX + 5000 ||
e.MinPoint.Y < minY - 5000 || e.MaxPoint.Y > maxY + 5000) {
offSite++;
if (offSite <= 10)
Log(String.Format(" OFF-SITE [{0}] {1} on {2} at {3:F0},{4:F0}",
o.Handle, tn, lay, e.MinPoint.X, e.MinPoint.Y));
}
} catch { }
}
}
Log("");
Log("=== layers holding anything ===");
var all = new List<string>();
foreach (ObjectId lid in lt) {
var l = (LayerTableRecord)Tx.GetObject(lid, OpenMode.ForRead);
all.Add(l.Name);
}
all.Sort();
int empty = 0;
foreach (var nm in all) {
int m = model.ContainsKey(nm) ? model[nm] : 0;
int p = paper.ContainsKey(nm) ? paper[nm] : 0;
int b = blockd.ContainsKey(nm) ? blockd[nm] : 0;
if (m + p + b == 0) { empty++; continue; }
var l = (LayerTableRecord)Tx.GetObject(lt[nm], OpenMode.ForRead);
Log(String.Format(" {0,-38} model={1,-5} paper={2,-4} blockdef={3,-4} {4}{5}",
nm, m, p, b, l.IsOff ? "OFF " : "", l.IsFrozen ? "FROZEN " : ""));
}
Log(" (empty layers: " + empty + ")");
Log("");
Log("=== flags ===");
Log(" zero-length lines/polylines in model: " + zeroLen);
Log(" MText under 0.5 height in model: " + tinyText);
Log(" entities >5000ft outside the site: " + offSite);
Log(" total layers: " + all.Count);
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612 - CSTORE WATER ABS 30.dwg sewer extent: X 2296380..2297425 Y 1279598..1280096 === layers holding anything === 0 model=64 paper=3 blockdef=195 BLOCK_CERT model=0 paper=3 blockdef=0 BLOCK_CLOSURE model=0 paper=35 blockdef=0 BLOCK_LEGEND model=0 paper=1 blockdef=23 BLOCK_NORTH_ARROW model=0 paper=101 blockdef=0 BLOCK_SCALE model=0 paper=0 blockdef=37 BLOCK_TB2 model=0 paper=0 blockdef=46 C-ANNO model=5 paper=0 blockdef=0 C-ANNO-TABL model=35 paper=0 blockdef=0 C-ANNO-TABL-TEXT model=87 paper=0 blockdef=0 C-ANNO-TABL-TITL model=8 paper=0 blockdef=0 C-ANNO-TABL-TTBL model=8 paper=0 blockdef=0 C-PROP-BRNG model=16 paper=0 blockdef=0 C-PROP-TEXT model=1 paper=0 blockdef=0 FIRE_HYDRANT model=4 paper=0 blockdef=0 FIRE_HYDRANT_VALVE model=3 paper=0 blockdef=0 HORIZONTAL_AND_VERTICAL_CONTROL_POINT model=1 paper=0 blockdef=0 HORIZONTAL_AND_VERTICAL_CONTROL_TEXT model=4 paper=0 blockdef=0 PROPERTY_LINE model=1 paper=0 blockdef=0 ROAD_CL model=4 paper=0 blockdef=0 ROAD_CURB model=75 paper=0 blockdef=0 ROAD_EDGE_OF_PAVEMENT model=22 paper=0 blockdef=0 ROAD_RIGHT-OF-WAY model=4 paper=1 blockdef=0 SEWER_EASEMENT model=3 paper=0 blockdef=0 SEWER_EASEMENT_TEXT model=38 paper=0 blockdef=0 SEWER_LINE model=14 paper=0 blockdef=0 SEWER_LINE_TEXT model=28 paper=0 blockdef=0 SEWER_MANHOLE model=13 paper=0 blockdef=0 SEWER_MANHOLE_EXISTING model=1 paper=0 blockdef=0 SEWER_MANHOLE_TEXT model=26 paper=0 blockdef=0 V-NODE-BNDY model=0 paper=0 blockdef=8 V-NODE-BORE model=0 paper=0 blockdef=1 V-NODE-POLE model=0 paper=0 blockdef=2 V-NODE-STRM model=0 paper=0 blockdef=14 V-NODE-TEXT model=0 paper=0 blockdef=94 V-NODE-TREE model=0 paper=0 blockdef=2 V-NODE-WATR model=0 paper=0 blockdef=26 WATER_LINE model=2 paper=0 blockdef=0 WATER_LINE_TEXT model=6 paper=0 blockdef=0 WATER_VALVE model=4 paper=0 blockdef=0 WATER_VAULT model=4 paper=0 blockdef=0 (empty layers: 1) === flags === zero-length lines/polylines in model: 0 MText under 0.5 height in model: 0 entities >5000ft outside the site: 0 total layers: 42
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.