← Inbox

C3D-0283 · 260714 Huckaby: layer filter "NOT C-" for every layer except C-* done

Creates a LayerGroup filter named "NOT C-" holding explicit ids for every layer whose name does not start with C-. Group filter, not a property filter, so it will not keep absorbing future layers. Idempotent - removes a previous run of the same group first. Assigns Db.LayerFilters back (it is a struct) and verifies by re-reading the filter from the database.

Script file
C3D-0283.cs
Target
260714 - 285 Huckaby Rd.dwg · model space
Author
claude
Approved
yes · auto-auth
Timeout
60s

C# payload

// Layer filter group holding every layer whose name does NOT start with "C-".
// Cookbook 16: a GROUP filter stores explicit layer ids (a property filter would store an
// expression and keep sweeping up new matches). LayerManager is not in ScriptRunner's imports,
// so it is fully qualified. Db.LayerFilters is a STRUCT - it must be assigned back or nothing
// persists.
const string GROUP = "NOT C-";

Log("drawing: " + Db.Filename);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);

var want = new List<ObjectId>();
var names = new List<string>();
int skipped = 0;
foreach (ObjectId id in lt) {
    var ltr = (LayerTableRecord)Tx.GetObject(id, OpenMode.ForRead);
    if (ltr.Name.StartsWith("C-", StringComparison.OrdinalIgnoreCase)) { skipped++; continue; }
    want.Add(id);
    names.Add(ltr.Name);
}
names.Sort();
Log(string.Format("layers total={0}   in filter={1}   excluded (C-*)={2}", (want.Count + skipped), want.Count, skipped));

var tree = Db.LayerFilters;
var root = tree.Root;

// idempotent: remove a previous run's group
Autodesk.AutoCAD.LayerManager.LayerFilter dup = null;
foreach (Autodesk.AutoCAD.LayerManager.LayerFilter f in root.NestedFilters)
    if (f.Name == GROUP) { dup = f; break; }
if (dup != null) { root.NestedFilters.Remove(dup); Log("removed existing \"" + GROUP + "\" filter"); }

var grp = new Autodesk.AutoCAD.LayerManager.LayerGroup();
grp.Name = GROUP;
foreach (var id in want) grp.LayerIds.Add(id);
root.NestedFilters.Add(grp);
Db.LayerFilters = tree;          // REQUIRED - struct

// verify by re-reading
var check = Db.LayerFilters;
int found = -1;
foreach (Autodesk.AutoCAD.LayerManager.LayerFilter f in check.Root.NestedFilters) {
    if (f.Name != GROUP) continue;
    var g = f as Autodesk.AutoCAD.LayerManager.LayerGroup;
    found = g != null ? g.LayerIds.Count : 0;
}
Log(string.Format("filter \"{0}\" re-read from the database: {1} layers (verified)", GROUP, found));
Log("");
Log("--- layers in the filter ---");
foreach (var n in names) Log("   " + n);

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260714 - 285 Huckaby Rd, Brooks, GA 30205, USA\260714 - 285 Huckaby Rd.dwg
Message
Executed C3D-0283 (0 entities touched).
Entities
Duration
356 ms
Civil 3D
25.0.0.0

Log

drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260714 - 285 Huckaby Rd, Brooks, GA 30205, USA\260714 - 285 Huckaby Rd.dwg
layers total=325   in filter=142   excluded (C-*)=183
filter "NOT C-" re-read from the database: 142 layers (verified)

--- layers in the filter ---
   0
   00_WORK
   2
   35
   A-BLDG
   A-BLDG-FPRT
   A-BLDG-SITE
   A-BLDG-UTIL
   A-PROP-LINE
   BLOCK_CLOSURE
   BLOCK_LEGEND
   BLOCK_NORTH_ARROW
   BLOCK_NOTES_FLOOD
   BLOCK_SCALE
   BLOCK_STAMP
   BLOCK_TB2
   BLOCK$0$CURVE_TABLE_BORDER
   BLOCK$0$SIGNATURE
   BOC_EXIST
   BORDER
   BOUNDARY PTS
   CLOSURE
   Defpoints
   FENCE
   FENCE-CHAIN
   G-NOTE
   G-TTLB-HALF
   G-TTLB-LIGH
   G-TTLB-THIN
   G-TTLB-TTF
   HATCH-OPL
   HATCH-SW
   HS-TEXT-20
   IR-TEXT
   IR-THROW
   LABELS
   LINES
   LINETXT
   LS-BOULDER
   LS-EX. TREE
   LS-GCOVER
   LS-GLINE
   LS-STIPLES
   LS-TEXT
   LS-TREE FENCE
   P-TREE
   PARCEL
   PDF_Geometry
   PDF_Solid Fills
   Placemark
   PROF-PIPE
   PROPERTY LINES
   ROAD_RIGHT-OF-WAY
   SAN-OUT
   SETBACKS
   SPDETAIL
   SPDIMENSION
   SPOVERVIEW
   SPPAINT
   SPPOINTER
   SPSHAPE_OUTLINE
   SPSYMBOLS
   SS-0-FRAME
   SS-BOUNDARY
   SS-BOUNDARY BLUE
   SS-BOUNDARY CYAN
   SS-BOUNDARY LAND LOT
   SS-BOUNDARY MAG
   SS-BOUNDARY RED
   SS-BOUNDARY_PTS
   SS-BUFFER LANDSCAPE
   SS-BUFFER SETBACK
   SS-CL OF CREEK
   SS-FGT
   SS-FLOW WELL
   SS-GAS
   SS-HEATED AREA
   SS-OUTSITEPROP
   SS-PROPOSED
   SS-PROPOSED-DRIVE
   SS-SEWER LINE
   SS-TREES
   SS-V-BLDG-OTLN
   SS-V-BRKL-TOP
   SS-V-ROAD-CNTR
   SS-V-ROAD-CURB
   SS-V-ROAD-EPVM
   SS-V-TRANSMISSION CENTER LINE
   SS-V-WALK
   SS-X-FENCE
   SS-X-FENCE WOOD
   SUPTBLS
   TB1
   TEXT
   TEXTS
   TREE-X
   TREES
   V-CTRL-BMRK
   V-CTRL-HCPT
   V-CTRL-LINE-DIRC
   V-CTRL-LINE-NETW
   V-CTRL-LINE-SHOT
   V-CTRL-NODE-KNOW
   V-CTRL-NODE-SHOT
   V-CTRL-NODE-UNKN
   V-CTRL-TRAV
   V-CTRL-TRAV-ERRO
   V-CTRL-VCPT
   V-NODE
   V-NODE-BNDY
   V-NODE-BORE
   V-NODE-NGAS
   V-NODE-POLE
   V-NODE-SIGN
   V-NODE-SSWR
   V-NODE-STRM
   V-NODE-TEXT
   V-NODE-TREE
   V-NODE-WATR
   V-SITE-FNCE
   V-SITE-RTWL
   V-SITE-SCAN
   V-SITE-VEGE
   V-STRC-WALL
   V-SURV-FIGR
   V-SURV-LABL
   V-SURV-LINE
   V-SURV-NTWK
   www.cadblocksfree.com
   X-ANNO-CALL
   X-DRIV
   X-DRIV-CONC
   X-DRIVEWAY
   X-ESMT-STRM
   X-PROP-CRNR
   X-ROAD
   X-ROAD-ASPH
   X-ROAD-CURB
   X-SSWR-MHOL
   X-STRM-STRC
   X-TOPO-MAJR
   X-TOPO-MINR

Notes

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

No notes yet.