← Inbox

C3D-0003 · Layer filter: PDF_* layers [PDF-FILTER] done

Creates a layer filter group "PDF Import" containing every layer whose name starts with PDF_. Replaces an existing group of the same name; verified by reading the filter tree back off the database.

Script file
C3D-0003.cs
Target
SS_BLOCK_22X17 · model space
Author
claude
Approved
yes · reviewer
Timeout
180s

C# payload

// Layer filter holding every PDF_* layer (the ones an Import PDF creates).
// LayerGroup stores explicit layer ids; Db.LayerFilters is a STRUCT so the edited tree must be
// assigned back or nothing persists (cookbook 16). Autodesk.AutoCAD.LayerManager is not in the
// host's imports - fully qualified. Replaces an existing group of the same name.
// Host owns Tx; host regens after commit.
const string GROUP = "PDF Import";

var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);

var keep = new List<ObjectId>();
var names = new List<string>();
foreach (ObjectId id in lt)
{
    var l = (LayerTableRecord)Tx.GetObject(id, OpenMode.ForRead);
    if (!l.Name.StartsWith("PDF_", System.StringComparison.OrdinalIgnoreCase)) continue;
    keep.Add(id); names.Add(l.Name);
}
names.Sort();
Log(keep.Count + " PDF_* layers:");
foreach (var n in names) Log("  " + n);
if (keep.Count == 0) { Log("nothing to filter"); return; }

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

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 + "'"); }

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

int found = -1;
foreach (Autodesk.AutoCAD.LayerManager.LayerFilter f in Db.LayerFilters.Root.NestedFilters)
    if (f.Name == GROUP) {
        var g2 = f as Autodesk.AutoCAD.LayerManager.LayerGroup;
        found = (g2 == null) ? -2 : g2.LayerIds.Count;
    }
Log("filter '" + GROUP + "' read back: " + (found >= 0 ? found + " layer(s) (verified)" : "NOT FOUND"));

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612 - CSTORE WATER ABS.dwg
Message
Executed C3D-0003 (0 entities touched).
Entities
Duration
1510 ms
Civil 3D
25.0.0.0

Log

2 PDF_* layers:
  PDF_Geometry
  PDF_Solid Fills
filter 'PDF Import' read back: 2 layer(s) (verified)

Notes

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

No notes yet.