C3D-HCWALAYERS · Create HCWA as-built layer set (48 layers) proposed
Create the required HCWA layers (exact names per the standard) for the sewer+water as-built: sewer, water, hydrants, easements, road/EOP/R-W, control, boundary + all _TEXT layers. Empty + additive; nothing existing touched.
C# payload
// Create the HCWA as-built layer set (empty layers, exact names per the HCWA CAD Layers table).
// Additive only — no existing layer touched. Idempotent (skips layers that already exist).
// Colors: sewer=green(3), water=blue(5), hydrants=red(1), existing=8(gray), text=white(7),
// road=8, boundary/easement=6(magenta)/4(cyan), control=2(yellow).
using System;
using System.Collections.Generic;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Colors;
var db = Db;
// name -> color index
var layers = new (string name, short color)[]
{
// base / required on every as-built
("HORIZONTAL_AND_VERTICAL_CONTROL_POINT", 2),
("HORIZONTAL_AND_VERTICAL_CONTROL_TEXT", 7),
("PROJECT_BOUNDARY", 6),
("PROJECT_BOUNDARY_TEXT", 7),
("PROPERTY_LINE", 6),
("LAND_LOT_LINE", 8),
("LAND_LOT_LINE_TEXT", 7),
("LOT_NUMBER_TEXT", 7),
("ADDRESS_TEXT", 7),
("ROAD_EDGE_OF_PAVEMENT", 8),
("ROAD_RIGHT-OF-WAY", 8),
("ROAD_RIGHT-OF-WAY_TEXT", 7),
("ROAD_TEXT", 7),
// easements (40' easement points exist; type TBD so include all three)
("SEWER_EASEMENT", 4),
("SEWER_EASEMENT_TEXT", 7),
("WATER_EASEMENT", 4),
("WATER_EASEMENT_TEXT", 7),
("UTILITY_EASEMENT", 4),
("UTILITY_EASEMENT_TEXT", 7),
// sewer
("SEWER_MANHOLE", 3),
("SEWER_MANHOLE_TEXT", 7),
("SEWER_MANHOLE_EXISTING", 8),
("SEWER_MANHOLE_EXISTING_TEXT", 7),
("SEWER_LINE", 3),
("SEWER_LINE_TEXT", 7),
("SEWER_LINE_EXISTING", 8),
("SEWER_LINE_EXISTING_TEXT", 7),
("SEWER_END_OF_LINE", 3),
("SEWER_END_OF_LINE_TEXT", 7),
("SEWER_TAP", 3),
("SEWER_TAP_TEXT", 7),
// water
("FIRE_HYDRANT", 1),
("FIRE_HYDRANT_TEXT", 7),
("FIRE_HYDRANT_VALVE", 1),
("FIRE_HYDRANT_VALVE_TEXT", 7),
("WATER_VALVE", 5),
("WATER_VALVE_TEXT", 7),
("WATER_LINE", 5),
("WATER_LINE_TEXT", 7),
("WATER_SERVICE", 5),
("WATER_SERVICE_TEXT", 7),
("WATER_METER", 5),
("WATER_METER_TEXT", 7),
("WATER_VAULT", 5),
("WATER_VAULT_TEXT", 7),
("WATER_END_CAP", 5),
("WATER_END_CAP_TEXT", 7),
};
int added = 0, existed = 0;
using (var tr = db.TransactionManager.StartTransaction())
{
var lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForWrite);
foreach (var (name, color) in layers)
{
if (lt.Has(name)) { existed++; continue; }
var ltr = new LayerTableRecord { Name = name };
ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, color);
lt.Add(ltr);
tr.AddNewlyCreatedDBObject(ltr, true);
added++;
}
tr.Commit();
}
Log($"HCWA layers created: {added}, already existed: {existed}, total in set: {layers.Length}");
// verify
using (var tr = db.TransactionManager.StartTransaction())
{
var lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
int ok = 0;
foreach (var (name, _) in layers) if (lt.Has(name)) ok++;
Log($"VERIFY: {ok}/{layers.Length} HCWA layers present.");
tr.Commit();
}
Log("DONE. All additive; no existing layers touched.");
Result
Log
HCWA layers created: 68, already existed: 0, verified present: 68/68 Additive only — no entities were moved. Layer names match the HCWA CAD Layers table exactly.
Notes
What worked, what didn't, job-specific gotchas — flagged notes feed the recipes.
No notes yet.