← Inbox

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.

Script file
C3D-0414.cs
Target
812 Christmas Ave.dwg · paper space
Author
claude
Approved
yes · auto-auth
Timeout
120s

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

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260903 - 812 Christmas Ave, Bethlehem, GA 30620, USA\812 Christmas Ave.dwg
Message
Executed C3D-0414 (0 entities touched).
Entities
Duration
1818 ms
Civil 3D
25.0.0.0

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.