C3D-INSP2403A · Inspect layouts+parcels for hero (read-only) done
List paper tabs (09/10/R4), per-viewport freezes, every parcel area (sf/ac), and hero/boundary/parcel layers. For heroing 1.6 AC on paper 10.
C# payload
// READ-ONLY: inspect the ACTIVE drawing for hero planning.
// - list layouts (paper tabs) + their viewports' frozen-layer isolation hints
// - list every Parcel with area (sf + acres) and its Site
// - list parcel-ish layers and hero layers
using System;
using System.Linq;
using System.Collections.Generic;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
var db = Db;
Log($"ACTIVE: {System.IO.Path.GetFileName(Doc.Name)}");
// ---- layouts ----
using (var tr = db.TransactionManager.StartTransaction())
{
var ld = (DBDictionary)tr.GetObject(db.LayoutDictionaryId, OpenMode.ForRead);
Log("LAYOUTS (paper tabs):");
foreach (DBDictionaryEntry e in ld)
{
if (string.Equals(e.Key, "Model", StringComparison.OrdinalIgnoreCase)) continue;
var lay = (Layout)tr.GetObject(e.Value, OpenMode.ForRead);
int vpCount = 0, vpWithFreezes = 0;
var frozenSample = new List<string>();
foreach (ObjectId vid in lay.GetViewports())
{
var vp = tr.GetObject(vid, OpenMode.ForRead) as Viewport;
if (vp == null || vp.Number == 1) continue; // 1 = the paper itself
vpCount++;
var fl = vp.GetFrozenLayers();
if (fl != null && fl.Count > 0)
{
vpWithFreezes++;
if (frozenSample.Count == 0)
foreach (ObjectId lid in fl.Cast<ObjectId>().Take(6))
frozenSample.Add(((LayerTableRecord)tr.GetObject(lid, OpenMode.ForRead)).Name);
}
}
Log($" [{lay.LayoutName}] tabOrder={lay.TabOrder} viewports={vpCount} vpWithPerVPFreezes={vpWithFreezes}");
if (frozenSample.Count > 0) Log($" sampleFrozen: {string.Join(", ", frozenSample)}");
}
tr.Commit();
}
// ---- parcels ----
using (var tr = db.TransactionManager.StartTransaction())
{
var cdoc = CivilDocument.GetCivilDocument(db);
Log("PARCELS (by site):");
foreach (ObjectId sid in cdoc.GetSiteIds())
{
var site = (Site)tr.GetObject(sid, OpenMode.ForRead);
Log($" SITE: {site.Name}");
foreach (ObjectId pid in site.GetParcelIds())
{
var p = (Parcel)tr.GetObject(pid, OpenMode.ForRead);
double sf = p.Area;
Log($" #{p.Number} '{p.Name}' area={sf:0.0} sf ({sf/43560.0:0.000} ac) style='{p.StyleName}'");
}
}
tr.Commit();
}
// ---- layer scan for hero / boundary / parcel layers ----
using (var tr = db.TransactionManager.StartTransaction())
{
var lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
var hits = new List<string>();
foreach (ObjectId id in lt)
{
var l = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);
var n = l.Name;
if (n.IndexOf("HERO", StringComparison.OrdinalIgnoreCase) >= 0
|| n.IndexOf("BOUNDARY", StringComparison.OrdinalIgnoreCase) >= 0
|| n.IndexOf("SS-", StringComparison.OrdinalIgnoreCase) >= 0
|| n.IndexOf("PARCEL", StringComparison.OrdinalIgnoreCase) >= 0)
hits.Add($"{n}{(l.IsFrozen ? " [FROZEN]" : "")}{(l.IsOff ? " [OFF]" : "")}");
}
Log($"HERO/BOUNDARY/PARCEL LAYERS ({hits.Count}):");
foreach (var h in hits.OrderBy(x=>x)) Log($" {h}");
tr.Commit();
}
Result
Log
ACTIVE: 281 MARANTHA LOT 10.dwg
LAYOUTS (paper tabs):
[09] tabOrder=2 viewports=2 vpWithPerVPFreezes=1
sampleFrozen: Layer1
[10] tabOrder=1 viewports=2 vpWithPerVPFreezes=1
sampleFrozen: Layer1
[R4] tabOrder=3 viewports=2 vpWithPerVPFreezes=1
sampleFrozen: Layer1
PARCELS (by site):
SITE: {DBBA330E-324D-4F34-97479ABEBDCF917D}
#1 'Property : 1' area=122724.1 sf (2.817 ac) style='Property'
SITE: {DBBA330E-324D-4F34-97479ABEBDCF917D}|1
SITE: Site
#1 'Property : 1' area=53322.5 sf (1.224 ac) style='Property'
#2 'Property : 2' area=69381.6 sf (1.593 ac) style='Property'
HERO/BOUNDARY/PARCEL LAYERS (16):
BOUNDARY
BOUNDARY_FRAME
BOUNDARY_PTS
C-ROAD-MASS-LINE
C-ROAD-MASS-LINE-FREE
C-ROAD-MASS-LINE-N
C-ROAD-MASS-LINE-OVER
C-ROAD-MASS-VIEW
C-ROAD-MASS-VIEW-GRID-MAJR
C-ROAD-MASS-VIEW-GRID-MINR
C-ROAD-MASS-VIEW-TEXT
C-ROAD-MASS-VIEW-TITL
C-ROAD-MASS-VIEW-TTLB
SS-BOUNDARY_CYAN
SS-BOUNDARY_R3 [FROZEN]
SS-BOUNDARY_RED [FROZEN]Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.