C3D-0414 · READ-ONLY: title-block attributes (all layouts) + flood/FIRM text [C3D-TBREAD] done
Reads every title-block attribute tag and current value across all layouts, and any flood/FIRM/zone/panel text anywhere in the drawing, so the real fields are updated with surveydisco job 260903 data and stale template values are caught.
C# payload
// Read every title-block attribute (tag + current value) across all layouts and the block defs,
// plus any flood/FIRM/zone/panel text anywhere, so we update the real fields (stale template data
// is the #1 hazard).
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
// attributes on inserted title blocks, per space
var dict = (DBDictionary)Tx.GetObject(Db.LayoutDictionaryId, OpenMode.ForRead);
foreach (DBDictionaryEntry de in dict) {
var lay=(Layout)Tx.GetObject(de.Value,OpenMode.ForRead);
var btr=(BlockTableRecord)Tx.GetObject(lay.BlockTableRecordId,OpenMode.ForRead);
bool header=false;
foreach (ObjectId id in btr){
var br=Tx.GetObject(id,OpenMode.ForRead) as BlockReference;
if (br==null || br.AttributeCollection.Count==0) continue;
var def=(BlockTableRecord)Tx.GetObject(br.BlockTableRecord,OpenMode.ForRead);
if(!header){ Log(""); Log("=== LAYOUT \""+lay.LayoutName+"\" ==="); header=true; }
Log(" BLOCK "+def.Name+" ["+br.Handle+"]");
foreach (ObjectId aid in br.AttributeCollection){
var ar=Tx.GetObject(aid,OpenMode.ForRead) as AttributeReference;
if(ar==null) continue;
Log(string.Format(" {0,-22} = \"{1}\"", ar.Tag, ar.TextString.Replace("\n"," ")));
}
}
}
// any flood/FIRM/zone text (MText/DBText) across all spaces
Log("");
Log("=== flood / FIRM / zone / panel text anywhere ===");
foreach (ObjectId bid in bt){
var b=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead);
foreach (ObjectId id in b){
var o=Tx.GetObject(id,OpenMode.ForRead); var mt=o as MText; var dt=o as DBText;
string t=mt!=null?mt.Contents:(dt!=null?dt.TextString:"");
if(t.Length==0) continue;
string u=t.ToUpper();
if(u.Contains("FLOOD")||u.Contains("FIRM")||u.Contains("ZONE")||u.Contains("PANEL")){
var e=(Autodesk.AutoCAD.DatabaseServices.Entity)o;
string flat=t.Replace("\n"," "); if(flat.Length>110) flat=flat.Substring(0,110);
Log(string.Format(" [{0}] {1} in {2} \"{3}\"", e.Handle, o.GetType().Name, b.Name, flat));
}
}
}
Result
Log
drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260903 - 812 Christmas Ave, Bethlehem, GA 30620, USA\812 Christmas Ave.dwg
=== LAYOUT "11X17" ===
BLOCK SS_BLOCK_11X17 [20B53]
JOB_NO = "JOB NO.: 260714"
SITE_ADDRESS = "285 Huckaby Rd, Brooks, GA 30205, USA"
REF_DB_PG = "REF DB 5857 Page 692"
LAND_LOT = "LAND LOT: 124"
DISTRICT = "DISTRICT: 4th"
COUNTY = "COUNTY: Fayette"
DATE = "DATE: 08/13/26"
SUBDIVISION_NAME_LOT = ""
PREP_FOR = "JOY EWING"
SURVEY_TYPE = "Boundary Survey"
FIRM_PANEL = "13113C0155E,"
FIRM_DATE = "EFFECTIVE SEPTEMBER 26, 2008,"
FLOOD_ZONE = "AND LIES IN ZONE X."
=== LAYOUT "17X11" ===
BLOCK SS_BLOCK_17X11 [20E5D]
JOB_NO = "JOB NO.: 260714"
SITE_ADDRESS = "285 Huckaby Rd, Brooks, GA 30205, USA"
REF_DB_PG = "REF DB 5857 Page 692"
LAND_LOT = "LAND LOT: 124"
DISTRICT = "DISTRICT: 4th"
COUNTY = "COUNTY: Fayette"
DATE = "DATE: 09/01/26"
SUBDIVISION_NAME_LOT = ""
PREP_FOR = "THE JANELLE EWING STEELE REVOCABLE FAMILY LIVING TRUST"
SURVEY_TYPE = " Boundary Survey"
FIRM_PANEL = "13113C0155E,"
FIRM_DATE = "EFFECTIVE SEPTEMBER 26, 2008,"
FLOOD_ZONE = "AND LIES IN ZONE X."
=== flood / FIRM / zone / panel text anywhere ===
[14522] MText in A$C3840e5d8 "FLOOD NOTE:\PTHIS PROPERTY IS NOT IN AN AREA HAVING SPECIAL FLOOD\PHAZARDS AS PER COMMUNITY PANEL NO. 13121C00"
[14528] MText in A$C3840e5d8 "\pxqc;{\LSITE INFORMATION\P}\P\pq*;JURISDICTION: CITY OF JOHNS CREEK\PPARCEL ID NO.: 11 055002300102\PPROPOS"
[20B4A] MText in SS_BLOCK_11X17 "FLOOD NOTE:\PTHIS PROPERTY IS NOT LOCATED WITHIN A SPECIAL FLOOD HAZARD AREA (SFHA) AS SHOWN ON F.I.R.M. COMMU"
[1FEA7] AttributeDefinition in 11x17 COVER SHEET SS "FLOOD INSURANCE RATE MAP"
[1FEB6] MText in 11x17 COVER SHEET SS "THE MAJORITY SITE DOES NOT LIE WITHIN A 100 YEAR FLOOD HAZARD AREA AND IS LOCATED IN ZONE "X" , HOWEVER A SMA"
[2109E] MText in SS_BLOCK_17X11 "FLOOD NOTE:\PTHIS PROPERTY IS NOT LOCATED WITHIN A SPECIAL FLOOD HAZARD AREA (SFHA) AS SHOWN ON F.I.R.M. COMMU"
[1E7AB] MText in *Paper_Space176 "FLOOD NOTE:\PTHIS PROPERTY IS NOT IN AN AREA HAVING SPECIAL FLOOD AS PER COMMUNITY PANEL NO. 13089C0132J, DATE"Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.