← Inbox

C3D-SIDEDB · Read CONTRACT.dwg via side database (read-only) done

Open the unopened DWG as a side database and dump units/extents/layers/text without the user opening it

Script file
C3D-SIDEDB.cs
Target
active document · model space
Author
claude
Approved
yes · claude (read-only inspection)
Timeout
60s

C# payload

// Read a DWG that is NOT open in Civil 3D by loading it as a side database (read-only).
// Dumps units, extents, layer count, all text, and block-attribute values so we can inspect
// CONTRACT.dwg without the user opening it.
string path = @"C:\Users\sanja\OneDrive\_SurveyDisco\_DRAFTS\CONTRACT.dwg";
if (!System.IO.File.Exists(path)) { Log("file not found: " + path); return; }

using (var sdb = new Database(false, true)) {
    sdb.ReadDwgFile(path, System.IO.FileShare.Read, true, null);
    Log($"opened side db: {path}");
    Log($"INSUNITS={sdb.Insunits}");

    using (var t = sdb.TransactionManager.StartTransaction()) {
        var bt = (BlockTable)t.GetObject(sdb.BlockTableId, OpenMode.ForRead);
        var lt = (LayerTable)t.GetObject(sdb.LayerTableId, OpenMode.ForRead);
        int layers = 0; foreach (ObjectId id in lt) layers++;
        Log($"layers: {layers}");

        // extents from model space
        double minx=double.MaxValue,miny=double.MaxValue,maxx=double.MinValue,maxy=double.MinValue;
        int ents=0;
        var ms = (BlockTableRecord)t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
        foreach (ObjectId id in ms) {
            var e = t.GetObject(id, OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity;
            if (e == null) continue; ents++;
            try { var ex = e.GeometricExtents;
                if (ex.MinPoint.X>1000 && ex.MinPoint.X<minx) minx=ex.MinPoint.X;
                if (ex.MinPoint.Y>1000 && ex.MinPoint.Y<miny) miny=ex.MinPoint.Y;
                if (ex.MaxPoint.X>maxx) maxx=ex.MaxPoint.X; if (ex.MaxPoint.Y>maxy) maxy=ex.MaxPoint.Y;
            } catch { }
        }
        Log($"model entities: {ents}, extents ({minx:F1},{miny:F1})-({maxx:F1},{maxy:F1})");

        // all text + attributes across model, layouts, block defs
        Log("--- text ---");
        int shown = 0;
        foreach (ObjectId btrId in bt) {
            var btr = (BlockTableRecord)t.GetObject(btrId, OpenMode.ForRead);
            string where = btr.Name;
            if (btr.IsLayout) { var lay = (Layout)t.GetObject(btr.LayoutId, OpenMode.ForRead); where = "LAYOUT:" + lay.LayoutName; }
            foreach (ObjectId id in btr) {
                var o = t.GetObject(id, OpenMode.ForRead);
                string s = null;
                if (o is MText mt) s = (mt.Contents ?? "").Replace("\\P"," / ");
                else if (o is DBText tx) s = tx.TextString;
                else if (o is BlockReference br && br.AttributeCollection != null) {
                    foreach (ObjectId aid in br.AttributeCollection) {
                        var ar = (AttributeReference)t.GetObject(aid, OpenMode.ForRead);
                        var v = (ar.TextString ?? "").Trim();
                        if (v.Length > 1 && shown++ < 250) Log($"  [{where}] ATTR {ar.Tag}=\"{v}\"");
                    }
                    continue;
                }
                if (string.IsNullOrWhiteSpace(s) || s.Trim().Length < 3) continue;
                if (shown++ < 250) Log($"  [{where}] \"{s.Trim()}\"");
            }
        }
        Log($"text items: {shown}");
        t.Commit();
    }
}
Log("side-db read complete (nothing in the live drawing was touched).");

Result

Status
success
Drawing file
C:\Users\sanja\Downloads\GUS.dwg
Message
Executed C3D-SIDEDB (0 entities touched).
Entities
Duration
406 ms
Civil 3D
25.0.0.0

Log

opened side db: C:\Users\sanja\OneDrive\_SurveyDisco\_DRAFTS\CONTRACT.dwg
INSUNITS=Feet
layers: 229
model entities: 1856, extents (2297515.7,1490746.7)-(2299949.0,1492660.3)
--- text ---
  [LAYOUT:Model] "LOT-1"
  [LAYOUT:Model] "LOT-2"
  [LAYOUT:Model] "LOT-3"
  [LAYOUT:Model] "EX. R/W"
  [LAYOUT:Model] "28,861 S.F."
  [LAYOUT:Model] "30,758 S.F."
  [LAYOUT:Model] "28,954 S.F."
  [LAYOUT:Model] "30' B/L"
  [LAYOUT:Model] "25' B/L"
  [LAYOUT:Model] "15' B/L"
  [LAYOUT:Model] "15' B/L"
  [LAYOUT:Model] "15' B/L"
  [LAYOUT:Model] "FFE=1124.5"
  [LAYOUT:Model] "FBE=1112.5"
  [LAYOUT:Model] "FFE=1124.5"
  [LAYOUT:Model] "GE=1123.0"
  [LAYOUT:Model] "FFE=1129.0"
  [LAYOUT:Model] "FBE=1118.5"
  [LAYOUT:Model] "GE=1127.5"
  [LAYOUT:Model] "TW=1128.5 / BW=1128"
  [LAYOUT:Model] "TW=1128.5 / BW=1118.0"
  [LAYOUT:Model] "1126"
  [LAYOUT:Model] "1128"
  [LAYOUT:Model] "1142"
  [LAYOUT:Model] "1140"
  [LAYOUT:Model] "1140"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] "1128"
  [LAYOUT:Model] "1128"
  [LAYOUT:Model] "1122"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1110"
  [LAYOUT:Model] "1100"
  [LAYOUT:Model] "1092"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1116"
  [LAYOUT:Model] "1106"
  [LAYOUT:Model] "1100"
  [LAYOUT:Model] "1090"
  [LAYOUT:Model] "1128"
  [LAYOUT:Model] "1132"
  [LAYOUT:Model] "1132"
  [LAYOUT:Model] "1128"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1110"
  [LAYOUT:Model] "1138"
  [LAYOUT:Model] "1134"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] "1116"
  [LAYOUT:Model] "1118"
  [LAYOUT:Model] "SOIL DELINEATION LINE"
  [LAYOUT:Model] "SOIL DELINEATION LINE"
  [LAYOUT:Model] "EX. CONCRETE SIDEWALK"
  [LAYOUT:Model] "EX. 24" Curb & Gutter (high-back)"
  [LAYOUT:Model] "EX. 24" Curb & Gutter (mountable)"
  [LAYOUT:Model] "GRASSED ISLAND"
  [LAYOUT:Model] "MATHIS AIRPORT PARKWAY - R/W VARIES"
  [LAYOUT:Model] "LAKE LAUREL DRIVE"
  [LAYOUT:Model] "EX. 6' WOOD FENCE"
  [LAYOUT:Model] "GW(5)"
  [LAYOUT:Model] "SIGN"
  [LAYOUT:Model] "INTX"
  [LAYOUT:Model] "SWCB"
  [LAYOUT:Model] "SWCB"
  [LAYOUT:Model] "SWCB"
  [LAYOUT:Model] "SWCB"
  [LAYOUT:Model] "1/4"OPEN TOP"
  [LAYOUT:Model] "PIPE FOUND"
  [LAYOUT:Model] "RBF"
  [LAYOUT:Model] "RBF"
  [LAYOUT:Model] "RBF ON P.L."
  [LAYOUT:Model] "RBF"
  [LAYOUT:Model] "RBF"
  [LAYOUT:Model] "18""
  [LAYOUT:Model] "CMP"
  [LAYOUT:Model] "EX. CONCRETE SW"
  [LAYOUT:Model] "24" C & G"
  [LAYOUT:Model] "(highback)"
  [LAYOUT:Model] "50' R/W"
  [LAYOUT:Model] "SIGN"
  [LAYOUT:Model] "25 MPH"
  [LAYOUT:Model] "ETB"
  [LAYOUT:Model] "SSMH"
  [LAYOUT:Model] "CMF-R/W"
  [LAYOUT:Model] "CMF-R/W"
  [LAYOUT:Model] "CMF-R/W"
  [LAYOUT:Model] "3/4"CRIMPED TOP"
  [LAYOUT:Model] "PIPE FOUND"
  [LAYOUT:Model] "AXLE"
  [LAYOUT:Model] "FOUND"
  [LAYOUT:Model] "1/2" REBAR FOUND"
  [LAYOUT:Model] "FROM CORNER"
  [LAYOUT:Model] "DISTURBED = 0.5' SE"
  [LAYOUT:Model] "RBS"
  [LAYOUT:Model] "S58°14'40"E"
  [LAYOUT:Model] "262.06'"
  [LAYOUT:Model] "S16°43'02"W"
  [LAYOUT:Model] "43.76'"
  [LAYOUT:Model] "S71°31'21"E"
  [LAYOUT:Model] "123.24'"
  [LAYOUT:Model] "S34°05'26"W"
  [LAYOUT:Model] "97.77'"
  [LAYOUT:Model] "N56°07'14"W"
  [LAYOUT:Model] "19.85'"
  [LAYOUT:Model] "S34°07'15"W"
  [LAYOUT:Model] "45.02'"
  [LAYOUT:Model] "S56°58'22"E"
  [LAYOUT:Model] "19.88'"
  [LAYOUT:Model] "S34°05'26"W"
  [LAYOUT:Model] "71.10'"
  [LAYOUT:Model] "N61°03'33"W"
  [LAYOUT:Model] "298.74'"
  [LAYOUT:Model] "RBS"
  [LAYOUT:Model] "N31°38'04"E"
  [LAYOUT:Model] "74.30'"
  [LAYOUT:Model] "N21°07'32"E / 72.81'"
  [LAYOUT:Model] "N16°06'53"E"
  [LAYOUT:Model] "79.30'"
  [LAYOUT:Model] "EX. 6' WOOD FENCE"
  [LAYOUT:Model] "N31°27'50"E"
  [LAYOUT:Model] "13.10'"
  [LAYOUT:Model] "R/W"
  [LAYOUT:Model] "N19°46'11"E"
  [LAYOUT:Model] "4.25'"
  [LAYOUT:Model] "RBS"
  [LAYOUT:Model] "50' R/W P.B. 187, PGS. 1-12"
  [LAYOUT:Model] "ARC=76.65'"
  [LAYOUT:Model] "RAD=152.98"
  [LAYOUT:Model] "BRG=N05%%D29'19"E"
  [LAYOUT:Model] "CHD=75.85'"
  [LAYOUT:Model] "TAX PARCEL 137 483"
  [LAYOUT:Model] "BEING 2.37 ACRES"
  [LAYOUT:Model] "103,378 S.F."
  [LAYOUT:Model] "R/W"
  [LAYOUT:Model] "R/W"
  [LAYOUT:Model] "R/W"
  [LAYOUT:Model] "N61°02'17"W"
  [LAYOUT:Model] "16.14'"
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "R=1067.02 / L=64.68 /  /"
  [LAYOUT:Model] "C=64.67 / CB=N 32°21'15" E"
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "SSMH"
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "EX. R/W"
  [LAYOUT:Model] "EX. CONCRETE SIDEWALK"
  [LAYOUT:Model] "EX. R/W"
  [LAYOUT:Model] "15' B/L"
  [LAYOUT:Model] "25' B/L"
  [LAYOUT:Model] "RBF- / DISTURBED"
  [LAYOUT:Model] "EX. 6' WOOD FENCE"
  [LAYOUT:Model] "MAIL KIOSK"
  [LAYOUT:Model] "COMMON AREA"
  [LAYOUT:Model] "264.62'"
  [LAYOUT:Model] "27'"
  [LAYOUT:Model] "235'"
  [LAYOUT:Model] "101.25'"
  [LAYOUT:Model] "30' B/L"
  [LAYOUT:Model] "30' B/L"
  [LAYOUT:Model] "NIKKI COURT / 50' R/W"
  [LAYOUT:Model] "PUBLIC RD."
  [LAYOUT:Model] "PROP. GATE"
  [LAYOUT:Model] "BC/BC"
  [LAYOUT:Model] "R/W"
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "1+00"
  [LAYOUT:Model] "2+00"
  [LAYOUT:Model] "2+66.14"
  [LAYOUT:Model] "PC = 1+59.40"
  [LAYOUT:Model] "PT = 2+08.60"
  [LAYOUT:Model] "15'"
  [LAYOUT:Model] "1110"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] ATTR DATUM="1105.00"
  [LAYOUT:Model] "1+00"
  [LAYOUT:Model] "1+50"
  [LAYOUT:Model] "2+00"
  [LAYOUT:Model] "2+50"
  [LAYOUT:Model] "1120.6"
  [LAYOUT:Model] "1120.7"
  [LAYOUT:Model] "1120.4"
  [LAYOUT:Model] "1123.7"
  [LAYOUT:Model] "1129.2"
  [LAYOUT:Model] "1133.6"
  [LAYOUT:Model] "1133.9"
  [LAYOUT:Model] "1131.5"
  [LAYOUT:Model] "59.40'"
  [LAYOUT:Model] "S 88°11' 31" E"
  [LAYOUT:Model] "R=150.00 / L=49.21 /  /"
  [LAYOUT:Model] "C=48.98 / CB=N 78°47'40" W"
  [LAYOUT:Model] "57.54'"
  [LAYOUT:Model] "S 69°23'49" E"
  [LAYOUT:Model] "EX."
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1124"
  [LAYOUT:Model] "1124"
  [LAYOUT:Model] "1126"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] "GE=1123.0"
  [LAYOUT:Model] "FBE=1112.5"
  [LAYOUT:Model] "EX. SSMH / TOP=1121.46 / IE. IN=1113.26 / IE. OUT=1113.21"
  [LAYOUT:Model] "EX. SSMH / TOP=1128.99 / IE. IN=1120.49 / IE. OUT=1120.37"
  [LAYOUT:Model] "EX. SSMH / TOP=??? / IE. IN=-9.05 / IE. OUT=-9.10"
  [LAYOUT:Model] "EX. SWCB / TOP=1125.30 / IE. OUT=1112.76"
  [LAYOUT:Model] "EX. SWCB / TOP=1124.24 / IE. IN=1118.94 / IE. IN=1111.64 / IE. OUT=1111.59"
  [LAYOUT:Model] "EX. DI / TOP=1113.09 / IE. IN=1102.59 / IE. OUT=1102.59"
  [LAYOUT:Model] "EX. YI / TOP=1076.60 / IE. OUT=1073.35"
  [LAYOUT:Model] "EX. JB / TOP=1079.10 / IE. IN=1072.90 / IE. OUT=1072.80"
  [LAYOUT:Model] "EX. 18" RCP"
  [LAYOUT:Model] "EX. 18" RCP"
  [LAYOUT:Model] "EX. SWCB / TOP=??? / IE. OUT=-4.58"
  [LAYOUT:Model] "EX. SWCB / TOP=1078.99 / IE. IN=1072.64 / IE. OUT=1072.37"
  [LAYOUT:Model] "EX. JB / TOP=1082.73 / IE. IN=1074.38 / IE. OUT=1073.91"
  [LAYOUT:Model] "EX. SWCB / TOP=1077.76 / IE. IN=1073.76 / IE. OUT=1073.76"
  [LAYOUT:Model] "15' B/L"
  [LAYOUT:Model] "1090"
  [LAYOUT:Model] "1094"
  [LAYOUT:Model] "1088"
  [LAYOUT:Model] "1080"
  [LAYOUT:Model] "1094"
  [LAYOUT:Model] "1096"
  [LAYOUT:Model] "1082"
  [LAYOUT:Model] "1116"
  [LAYOUT:Model] "1092"
  [LAYOUT:Model] "1080"
  [LAYOUT:Model] "1078"
  [LAYOUT:Model] "SSMH"
  [LAYOUT:Model] "A-2"
  [LAYOUT:Model] "A-1"
  [LAYOUT:Model] "20' D.E."
  [LAYOUT:Model] "1110"
  [LAYOUT:Model] "1120"
  [LAYOUT:Model] "1130"
  [LAYOUT:Model] ATTR DATUM="1105.00"
  [LAYOUT:Model] "0+00"
  [LAYOUT:Model] "0+50"
  [LAYOUT:Model] "1+00"
  [LAYOUT:Model] "1121.5"
text items: 888
side-db read complete (nothing in the live drawing was touched).

Notes

What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.

No notes yet.