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