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.
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
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.