C3D-FEMAFIND · Find existing FEMA note in paper space (read-only) done
Scan all layouts + model for flood/zone/FIRM/panel text so we update the real note instead of duplicating it
C# payload
// Read-only: find existing FEMA/flood note text across ALL paper space layouts (and model),
// so we update the real one instead of adding another.
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
foreach (ObjectId btrId in bt) {
var btr = (BlockTableRecord)Tx.GetObject(btrId, OpenMode.ForRead);
string where = btr.Name;
if (btr.IsLayout) {
var lay = (Layout)Tx.GetObject(btr.LayoutId, OpenMode.ForRead);
where = "LAYOUT '" + lay.LayoutName + "'";
}
foreach (ObjectId id in btr) {
var o = Tx.GetObject(id, OpenMode.ForRead);
string s = null; string kind = o.GetType().Name;
if (o is MText mt) s = mt.Contents;
else if (o is DBText t) s = t.TextString;
else if (o is BlockReference br && br.AttributeCollection != null) {
foreach (ObjectId aid in br.AttributeCollection) {
var ar = (AttributeReference)Tx.GetObject(aid, OpenMode.ForRead);
var av = ar.TextString ?? "";
if (av.ToUpperInvariant().Contains("FLOOD") || av.ToUpperInvariant().Contains("ZONE") || av.ToUpperInvariant().Contains("F.I.R.M") || av.ToUpperInvariant().Contains("FIRM") || av.ToUpperInvariant().Contains("PANEL")) {
var defb = (BlockTableRecord)Tx.GetObject(br.DynamicBlockTableRecord, OpenMode.ForRead);
Log($"[{where}] BLOCK '{defb.Name}' handle={br.Handle} ATTR TAG '{ar.Tag}' = \"{av}\"");
}
}
continue;
}
if (s == null) continue;
var u = s.ToUpperInvariant();
if (u.Contains("FLOOD") || u.Contains("ZONE") || u.Contains("F.I.R.M") || u.Contains("FIRM") || u.Contains("PANEL")) {
var e = o as Autodesk.AutoCAD.DatabaseServices.Entity;
Log($"[{where}] {kind} handle={e.Handle} layer={e.Layer} :: \"{s.Replace("\\P", " / ")}\"");
}
}
}
Log("FEMA/flood text scan complete.");
Result
Log
[LAYOUT 'Model'] MText handle=20B7E layer=C-ANNO :: "FLOOD NOTE / BY GRAPHIC PLOTTING ONLY, THIS PROPERTY LIES IN ZONE "X" / (AREA OF MINIMAL FLOOD HAZARD) AS SHOWN ON F.I.R.M. / COMMUNITY PANEL No. 13121C0359F, EFFECTIVE DATE 09/18/2013. / NO FIELD SURVEYING WAS PERFORMED TO DETERMINE THIS ZONE."
[LAYOUT '11X17'] MText handle=158D1 layer=BLOCK_NOTES_FLOOD :: "FLOOD NOTE: / THIS PROPERTY IS NOT LOCATED WITHIN A SPECIAL FLOOD HAZARD AREA (SFHA) AS SHOWN ON F.I.R.M. COMMUNITY PANEL NO. 13135C0016G, EFFECTIVE FEBRUARY 4, 2013, AND LIES IN ZONE X."
[A$C3840e5d8] MText handle=14522 layer=BLOCK_TB2 :: "FLOOD NOTE: / THIS PROPERTY IS NOT IN AN AREA HAVING SPECIAL FLOOD / HAZARDS AS PER COMMUNITY PANEL NO. 13121C0087 F, DATED / SEPTEMBER 18th 2013, ZONE "X"."
[A$C3840e5d8] MText handle=14528 layer=SS-BOUNDARY :: "\pxqc;{\LSITE INFORMATION / } / \pq*;JURISDICTION: CITY OF JOHNS CREEK / PARCEL ID NO.: 11 055002300102 / PROPOSED ZONING: R-4 SINGLE-FAMILY DWELLING / OVERLAY DISTRICT: N/A / FLOOD ZONE CLASSIFICATION: X / / \pqc;{\LSETBACK & BUFFERS / }BUILDING SETBACKS / / \pq*;FRONT: 35 FT / REAR: 25 FT / SIDE: 7 FT / LANDSCAPE STRIP: 40 FT (ALONG ABBOTTS BRIDGE ROAD) / / \pqc;{\LSITE AREA CALCULATIONS / } / \pq*;SITE: {\Fsimplex|c0;\C4;±}0.87 AC/{\Fsimplex|c0;\C4; }37,779.18 SF / BUILDABLE AREA: {\Fsimplex|c0;\C4;±}0.69 AC/ 29933.18 SF / UNBUILDABLE AREA: {\Fsimplex|c0;\C4;±}0.18 AC{\Fsimplex|c0;\C4;/ }7846.00 SF / MINIMUM LOT SIZE: 9000 SF / Subdivision\~Density: 2 LOTS/0.87\~AC ≈ 2.30\~lots\~per\~acre
/ \pqc;{\LBASE INFORMATION / } / \pq*;NO PORTION OF THIS PROPERTY IS LOCATED IN A SPECIAL FLOOD AREA AS PER F.I.R.M. MAP NO. {\Fsimplex|c0;13121C0087 F, DATED / SEPTEMBER 18th 2013, ZONE "X". / } / BASE CONDITIONS PROVIDED BY SAWHNEY ASSOCIATES, DATED 6/21/2024 / / \pqc;{\LPROPOSED VARIANCES / \pq*;} / 1. Variance to remove 10% open space requirement under section 12.E3 subsection A of the City of Johns Creek building ordinance"
[LAYOUT 'HOUSEDIM'] MText handle=1E7AB layer=BLOCK_TB2 :: "FLOOD NOTE: / THIS PROPERTY IS NOT IN AN AREA HAVING SPECIAL FLOOD AS PER COMMUNITY PANEL NO. 13089C0132J, DATED MAY 16th 2013."
[11x17 COVER SHEET SS] AttributeDefinition handle=1FEA7 layer=G-NOTE :: "FLOOD INSURANCE RATE MAP"
[11x17 COVER SHEET SS] MText handle=1FEB6 layer=C-0-GNRL-NOTE-INDX :: "THE MAJORITY SITE DOES NOT LIE WITHIN A 100 YEAR FLOOD HAZARD AREA AND IS LOCATED IN ZONE "X" , HOWEVER A SMALL PORTION LOCATED IN THE NORTH EAST CORNER DOES LIE IN ZONE A AS SHOWN ON THE ABOVE FEDERAL EMERGENCY MANAGEMENT AGENCY FLOOD INSURANCE RATE MAP NUMBER 13151CO276D WITH AN EFFECTIVE DATE OF OCTOBER 6, 2016."
FEMA/flood text scan complete.Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.