← Inbox

C3D-0405 · READ-ONLY: what is on each V-NODE layer + insert layers + target candidates [C3D-VNODEMAP] done

For each block whose inner geometry uses a V-NODE layer, reports which V-NODE layers and what layer the block's inserts sit on (the real feature layer). Lists any top-level entities directly on V-NODE layers, and all non-V-NODE/non-PDF layers as target candidates. Needed to map V-NODE guts to their respective layers.

Script file
C3D-0405.cs
Target
ACAD-260612-C-Store As-Built 60 H2O wPROFILE.dwg · model space
Author
claude
Approved
yes · auto-auth
Timeout
120s

C# payload

// What is actually on each V-NODE* layer, and which block inserts use those layers as guts, so
// we can map each to its real feature layer. Also list all non-V-NODE layers as candidate targets.
Log("drawing: " + Db.Filename);
var bt = (BlockTable)Tx.GetObject(Db.BlockTableId, OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);

// for each block def, which V-NODE layers do its inner entities use, and what layer are its
// inserts placed on (that is the "real" layer the guts should follow)
Log("=== blocks with V-NODE guts, and the layer their inserts sit on ===");
foreach (ObjectId bid in bt){
    var def=(BlockTableRecord)Tx.GetObject(bid,OpenMode.ForRead);
    if (def.IsLayout) continue;
    var innerVnode=new Dictionary<string,int>();
    foreach (ObjectId sid in def){ var e=Tx.GetObject(sid,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity; if(e==null)continue; if(e.Layer.StartsWith("V-NODE",StringComparison.OrdinalIgnoreCase)){ if(!innerVnode.ContainsKey(e.Layer))innerVnode[e.Layer]=0; innerVnode[e.Layer]++; } }
    if (innerVnode.Count==0) continue;
    // insert layers
    var insLayers=new Dictionary<string,int>();
    foreach (ObjectId rid in def.GetBlockReferenceIds(true,false)){ var br=Tx.GetObject(rid,OpenMode.ForRead) as BlockReference; if(br==null)continue; if(!insLayers.ContainsKey(br.Layer))insLayers[br.Layer]=0; insLayers[br.Layer]++; }
    var g=new System.Text.StringBuilder(); foreach(var kv in innerVnode) g.Append(kv.Key).Append(":").Append(kv.Value).Append(" ");
    var il=new System.Text.StringBuilder(); foreach(var kv in insLayers) il.Append(kv.Key).Append(":").Append(kv.Value).Append(" ");
    Log(string.Format("  block \"{0}\"  guts[{1}]  inserts-on[{2}]", def.Name, g.ToString().Trim(), il.ToString().Trim()));
}

// top-level entities directly on V-NODE layers (not guts)
Log("");
Log("=== TOP-LEVEL entities directly on V-NODE layers ===");
var ms=(BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db),OpenMode.ForRead);
int tl=0;
foreach (ObjectId id in ms){ var e=Tx.GetObject(id,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Entity; if(e==null)continue; if(!e.Layer.StartsWith("V-NODE",StringComparison.OrdinalIgnoreCase))continue; Log(string.Format("  [{0}] {1} on {2}", e.Handle, e.GetType().Name, e.Layer)); tl++; }
if(tl==0) Log("  (none - all V-NODE content is block guts)");

// candidate target layers (non V-NODE, non PDF)
Log("");
Log("=== candidate target layers ===");
var names=new List<string>(); foreach (ObjectId id in lt) names.Add(((LayerTableRecord)Tx.GetObject(id,OpenMode.ForRead)).Name); names.Sort(StringComparer.OrdinalIgnoreCase);
foreach (var n in names) if(!n.StartsWith("V-NODE",StringComparison.OrdinalIgnoreCase) && !n.StartsWith("PDF",StringComparison.OrdinalIgnoreCase)) Log("  " + n);

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612-C-Store As-Built 60 H2O wPROFILE.dwg
Message
Executed C3D-0405 (0 entities touched).
Entities
Duration
452 ms
Civil 3D
25.0.0.0

Log

drawing: C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\ACAD-260612-C-Store As-Built 60 H2O wPROFILE.dwg
=== blocks with V-NODE guts, and the layer their inserts sit on ===
  block "*U15"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U16"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U17"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U18"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U19"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U20"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U21"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U22"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U23"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[SEWER_GREASE_TRAP:1]
  block "*U24"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[SEWER_GREASE_TRAP:1]
  block "*U25"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U26"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U27"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[SEWER_GREASE_TRAP:1]
  block "*U28"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U29"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U30"  guts[V-NODE-WATR:1 V-NODE-TEXT:2]  inserts-on[HIDDEN:1]
  block "*U31"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U32"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U33"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U34"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U35"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U36"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U37"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U38"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U39"  guts[V-NODE-STRM:1]  inserts-on[HIDDEN:1]
  block "*U40"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U41"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U42"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT:1]
  block "*U43"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT_VALVE:1]
  block "*U44"  guts[V-NODE-POLE:1]  inserts-on[HIDDEN:1]
  block "*U45"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U46"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U47"  guts[V-NODE-POLE:1]  inserts-on[0:1]
  block "*U48"  guts[V-NODE-WATR:1]  inserts-on[WATER_VALVE:1]
  block "*U49"  guts[V-NODE-STRM:1]  inserts-on[SEWER_MANHOLE:1]
  block "*U50"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U51"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U52"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U53"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U54"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U55"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U56"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U57"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U58"  guts[V-NODE-WATR:1]  inserts-on[WATER_VALVE:1]
  block "*U59"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT:1]
  block "*U60"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U61"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U62"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U63"  guts[V-NODE-WATR:1]  inserts-on[WATER_VALVE:1]
  block "*U64"  guts[V-NODE-WATR:1]  inserts-on[WATER_VALVE:1]
  block "*U65"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U66"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U67"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U68"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U69"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U70"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U71"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U72"  guts[V-NODE-TREE:1 V-NODE-TEXT:3]  inserts-on[HIDDEN:1]
  block "*U73"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U74"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT:1]
  block "*U75"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U76"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT_VALVE:1]
  block "*U77"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U78"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U79"  guts[V-NODE-TREE:1 V-NODE-TEXT:3]  inserts-on[HIDDEN:1]
  block "*U80"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U81"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U82"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U83"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[SEWER_GREASE_TRAP:1]
  block "*U84"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT:1]
  block "*U85"  guts[V-NODE-WATR:1]  inserts-on[FIRE_HYDRANT_VALVE:1]
  block "*U86"  guts[V-NODE-WATR:1]  inserts-on[WATER_VALVE:1]
  block "*U87"  guts[V-NODE-TEXT:3]  inserts-on[]
  block "*U88"  guts[V-NODE-TEXT:3]  inserts-on[]
  block "*U89"  guts[V-NODE-WATR:1 V-NODE-TEXT:2]  inserts-on[SEWER_LINE_TEXT:1]
  block "*U90"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U91"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U92"  guts[V-NODE-TEXT:3]  inserts-on[WATER_LINE_PTS:1]
  block "*U93"  guts[V-NODE-TEXT:2]  inserts-on[WATER_LINE_PTS:1]
  block "*U94"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U95"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U96"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U97"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U98"  guts[V-NODE-BNDY:1 V-NODE-TEXT:1]  inserts-on[0:1]
  block "*U99"  guts[V-NODE-BORE:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]
  block "*U100"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U101"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U102"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U103"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U104"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U105"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U106"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U107"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U108"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U109"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[]
  block "*U110"  guts[V-NODE-WATR:1 V-NODE-TEXT:1]  inserts-on[HIDDEN:1]

=== TOP-LEVEL entities directly on V-NODE layers ===
  (none - all V-NODE content is block guts)

=== candidate target layers ===
  0
  BLOCK_CLOSURE
  BLOCK_LEGEND
  BLOCK_NORTH_ARROW
  BLOCK_SCALE
  BLOCK_TB2
  C-ANNO
  C-PROP-BNDY
  C-PROP-BRNG
  C-PROP-TEXT
  FIRE_HYDRANT
  FIRE_HYDRANT_TEXT
  FIRE_HYDRANT_VALVE
  HIDDEN
  LAND_LOT_LINE
  LAND_LOT_LINE_TEXT
  LOT_NUMBER_TEXT
  PROF-GRID
  PROF-GROUND
  PROF-MH
  PROF-PIPE
  PROF-TABLE
  PROF-TEXT
  PROJECT_BOUNDARY
  PROJECT_BOUNDARY_TEXT
  PROPERTY_LINE
  PUMP_STATION_TEXT
  ROAD_EDGE_OF_PAVEMENT
  ROAD_RIGHT-OF-WAY
  ROAD_RIGHT-OF-WAY_TEXT
  SEWER_EASEMENT
  SEWER_EASEMENT 1 ORNAGE
  SEWER_EASEMENT 1 YELLOW
  SEWER_EASEMENT E2
  SEWER_EASEMENT RED
  SEWER_EASEMENT_TEXT
  SEWER_FORCE_MAIN_EXISTING
  SEWER_GREASE_TRAP
  SEWER_GREASE_TRAP_TEXT
  SEWER_LINE
  SEWER_LINE_TEXT
  SEWER_MANHOLE
  SEWER_MANHOLE_TEXT
  SS-0-FRAME
  SS-ROAD-BUILDING
  SS-ROAD-CANOPY
  SS-ROAD-CL
  SS-ROAD-SIDEWALK
  SS-ROAD-STRIPE
  SS-ROAD-TBC
  WATER_LINE
  WATER_LINE_PTS
  WATER_LINE_TEXT
  WATER_VALVE
  WATER_VAULT

Notes

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

No notes yet.