← Inbox

C3D-HCWA-LAYERS · Create 71 HCWA CAD layers done

Creates every layer from the HCWA Digital As-built CAD Standards Rev 1.6 table, names exactly as specified, with discipline colours and a description carrying the standard's Type/Surveyed columns. Idempotent - existing layers are left as they are.

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

C# payload

// Create the 71 HCWA CAD layers from "Digital As-built CAD Standards for Consultants",
// Henry County Water Authority, Rev 1.6 (Nov 1 2023), Table of HCWA CAD Layers.
//
// Layer names appear EXACTLY as in the standard's table - the standard requires that, and warns
// against near-duplicates (WATER_LINE vs WATER_LINES, SEWER_LINE_TEXT vs SEWER_TEXT) coexisting.
// Colours follow the discipline convention already in use: water 5, sewer 3, easement 6,
// casing/misc 4, road 8, text/control/boundary 7, fire 1.
//
// EnsureLayer (DrawingContext.cs) creates the layer if missing and returns the existing id
// otherwise, so this is idempotent - re-running will not duplicate or overwrite anything.
// Layer DESCRIPTION carries the standard's Type + Surveyed columns for reference.
// Host owns Tx; host regens after commit.
var defs = new (string name, string type, short colour, string surveyed)[] {
    (@"ADDRESS_TEXT", @"Text", 7, @"No"),
    (@"CASING", @"Poly", 4, @"Yes"),
    (@"CASING_TEXT", @"Text", 4, @"No"),
    (@"FDC", @"Insert", 1, @"Yes"),
    (@"FIRE_HYDRANT", @"Insert", 1, @"Yes"),
    (@"FIRE_HYDRANT_TEXT", @"Text", 1, @"No"),
    (@"FIRE_HYDRANT_MANUFACTURER", @"Text", 1, @"No"),
    (@"FIRE_HYDRANT_MANUFACTURED_YEAR", @"Text", 1, @"No"),
    (@"FIRE_HYDRANT_EXISTING", @"Insert", 1, @"Yes"),
    (@"FIRE_HYDRANT_EXISTING_TEXT", @"Text", 1, @"No"),
    (@"FIRE_HYDRANT_VALVE", @"Insert", 1, @"Yes"),
    (@"FIRE_HYDRANT_VALVE_TEXT", @"Text", 1, @"No"),
    (@"FIRE_HYDRANT_VALVE_EXISTING", @"Insert", 1, @"Yes"),
    (@"FIRE_HYDRANT_VALVE_EXISTING_TEXT", @"Text", 1, @"No"),
    (@"HORIZONTAL_AND_VERTICAL_CONTROL_POINT", @"Line", 7, @"Yes"),
    (@"HORIZONTAL_AND_VERTICAL_CONTROL_TEXT", @"Text", 7, @"No"),
    (@"LAND_LOT_LINE", @"Line", 7, @"No"),
    (@"LAND_LOT_LINE_TEXT", @"Text", 7, @"No"),
    (@"LOT_NUMBER_TEXT", @"Text", 7, @"No"),
    (@"PROJECT_BOUNDARY", @"Poly", 7, @"Yes"),
    (@"PROJECT_BOUNDARY_TEXT", @"Text", 7, @"No"),
    (@"PROPERTY_LINE", @"Poly", 7, @"Yes"),
    (@"PUMP_STATION", @"Poly", 4, @"Yes"),
    (@"PUMP_STATION_TEXT", @"Text", 4, @"No"),
    (@"ROAD_EDGE_OF_PAVEMENT", @"Poly", 8, @"Yes"),
    (@"ROAD_RIGHT-OF-WAY", @"Poly", 8, @"Yes"),
    (@"ROAD_RIGHT-OF-WAY_TEXT", @"Text", 8, @"No"),
    (@"ROAD_TEXT", @"Text", 8, @"No"),
    (@"SEWER_EASEMENT", @"Poly", 3, @"Yes"),
    (@"SEWER_EASEMENT_TEXT", @"Text", 3, @"No"),
    (@"SEWER_END_OF_LINE", @"Insert", 3, @"Yes"),
    (@"SEWER_END_OF_LINE_TEXT", @"Text", 3, @"No"),
    (@"SEWER_FORCE_MAIN", @"Line", 3, @"Yes"),
    (@"SEWER_FORCE_MAIN_TEXT", @"Text", 3, @"No"),
    (@"SEWER_FORCE_MAIN_EXISTING", @"Line", 3, @"Yes"),
    (@"SEWER_FORCE_MAIN_EXISTING_TEXT", @"Text", 3, @"No"),
    (@"SEWER_LINE", @"Line", 3, @"Yes"),
    (@"SEWER_LINE_TEXT", @"Text", 3, @"No"),
    (@"SEWER_LINE_EXISTING", @"Line", 3, @"Yes"),
    (@"SEWER_LINE_EXISTING_TEXT", @"Text", 3, @"No"),
    (@"SEWER_MANHOLE", @"Insert", 3, @"Yes"),
    (@"SEWER_MANHOLE_TEXT", @"Text", 3, @"No"),
    (@"SEWER_MANHOLE_EXISTING", @"Insert", 3, @"Yes"),
    (@"SEWER_MANHOLE_EXISTING_TEXT", @"Text", 3, @"No"),
    (@"SEWER_TAP", @"Line", 3, @"Yes"),
    (@"SEWER_TAP_TEXT", @"Text", 3, @"No"),
    (@"UTILITY_EASEMENT", @"Poly", 6, @"Yes"),
    (@"UTILITY_EASEMENT_TEXT", @"Text", 6, @"No"),
    (@"UTILITY_EASEMENT_EXISTING", @"Poly", 6, @"Yes"),
    (@"UTILITY_EASEMENT_EXISTING_TEXT", @"Text", 6, @"No"),
    (@"WATER_EASEMENT", @"Poly", 5, @"Yes"),
    (@"WATER_EASEMENT_TEXT", @"Text", 5, @"No"),
    (@"WATER_END_CAP", @"Line", 5, @"Yes"),
    (@"WATER_END_CAP_TEXT", @"Text", 5, @"No"),
    (@"WATER_LINE", @"Line", 5, @"Yes"),
    (@"WATER_LINE_TEXT", @"Text", 5, @"No"),
    (@"WATER_LINE_EXISTING", @"Line", 5, @"Yes"),
    (@"WATER_LINE_EXISTING_TEXT", @"Text", 5, @"No"),
    (@"WATER_METER", @"Insert", 5, @"Yes"),
    (@"WATER_METER_TEXT", @"Text", 5, @"No"),
    (@"WATER_QUALITY_CRITICAL_AREA", @"Line", 4, @"Yes"),
    (@"WATER_SERVICE", @"Line", 5, @"No"),
    (@"WATER_SERVICE_TEXT", @"Text", 5, @"No"),
    (@"WATER_VALVE", @"Insert", 5, @"Yes"),
    (@"WATER_VALVE_TEXT", @"Text", 5, @"No"),
    (@"WATER_VALVE_EXISTING", @"Insert", 5, @"Yes"),
    (@"WATER_VALVE_EXISTING_TEXT", @"Text", 5, @"No"),
    (@"WATER_VAULT", @"Insert", 5, @"Yes"),
    (@"WATER_VAULT_TEXT", @"Text", 5, @"No"),
    (@"WETLAND_BOUNDARY", @"Line", 4, @"Yes")
};

var lt0 = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
var before = new List<string>();
foreach (ObjectId id in lt0) {
    var l = (LayerTableRecord)Tx.GetObject(id, OpenMode.ForRead);
    before.Add(l.Name);
}
Log("drawing had " + before.Count + " layers");

int made = 0, already = 0;
foreach (var d in defs)
{
    bool existed = before.Contains(d.name);
    var id = EnsureLayer(d.name, d.colour);
    var ltr = (LayerTableRecord)Tx.GetObject(id, OpenMode.ForWrite);
    ltr.Description = "HCWA " + d.type + (d.surveyed == "Yes" ? " / surveyed" : "");
    if (existed) { already++; }
    else { made++; Log("  + " + d.name + "  (" + d.type + ", colour " + d.colour + ")"); }
}

var lt1 = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
int total = 0, present = 0;
foreach (ObjectId id in lt1) total++;
foreach (var d in defs) if (lt1.Has(d.name)) present++;

Log("created " + made + ", already present " + already);
Log("all " + defs.Length + " HCWA layers present: " + (present == defs.Length ? "YES" : "NO (" + present + ")") +
    "; drawing now has " + total + " layers (verified)");

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\SS_BLOCK_22X17.dwg
Message
Executed C3D-HCWA-LAYERS (0 entities touched).
Entities
Duration
360 ms
Civil 3D
25.0.0.0

Log

drawing had 323 layers
  + ADDRESS_TEXT  (Text, colour 7)
  + CASING  (Poly, colour 4)
  + CASING_TEXT  (Text, colour 4)
  + FDC  (Insert, colour 1)
  + FIRE_HYDRANT  (Insert, colour 1)
  + FIRE_HYDRANT_TEXT  (Text, colour 1)
  + FIRE_HYDRANT_MANUFACTURER  (Text, colour 1)
  + FIRE_HYDRANT_MANUFACTURED_YEAR  (Text, colour 1)
  + FIRE_HYDRANT_EXISTING  (Insert, colour 1)
  + FIRE_HYDRANT_EXISTING_TEXT  (Text, colour 1)
  + FIRE_HYDRANT_VALVE  (Insert, colour 1)
  + FIRE_HYDRANT_VALVE_TEXT  (Text, colour 1)
  + FIRE_HYDRANT_VALVE_EXISTING  (Insert, colour 1)
  + FIRE_HYDRANT_VALVE_EXISTING_TEXT  (Text, colour 1)
  + HORIZONTAL_AND_VERTICAL_CONTROL_POINT  (Line, colour 7)
  + HORIZONTAL_AND_VERTICAL_CONTROL_TEXT  (Text, colour 7)
  + LAND_LOT_LINE  (Line, colour 7)
  + LAND_LOT_LINE_TEXT  (Text, colour 7)
  + LOT_NUMBER_TEXT  (Text, colour 7)
  + PROJECT_BOUNDARY  (Poly, colour 7)
  + PROJECT_BOUNDARY_TEXT  (Text, colour 7)
  + PROPERTY_LINE  (Poly, colour 7)
  + PUMP_STATION  (Poly, colour 4)
  + PUMP_STATION_TEXT  (Text, colour 4)
  + ROAD_EDGE_OF_PAVEMENT  (Poly, colour 8)
  + ROAD_RIGHT-OF-WAY  (Poly, colour 8)
  + ROAD_RIGHT-OF-WAY_TEXT  (Text, colour 8)
  + ROAD_TEXT  (Text, colour 8)
  + SEWER_EASEMENT_TEXT  (Text, colour 3)
  + SEWER_END_OF_LINE  (Insert, colour 3)
  + SEWER_END_OF_LINE_TEXT  (Text, colour 3)
  + SEWER_FORCE_MAIN  (Line, colour 3)
  + SEWER_FORCE_MAIN_TEXT  (Text, colour 3)
  + SEWER_FORCE_MAIN_EXISTING  (Line, colour 3)
  + SEWER_FORCE_MAIN_EXISTING_TEXT  (Text, colour 3)
  + SEWER_LINE_TEXT  (Text, colour 3)
  + SEWER_LINE_EXISTING  (Line, colour 3)
  + SEWER_LINE_EXISTING_TEXT  (Text, colour 3)
  + SEWER_MANHOLE  (Insert, colour 3)
  + SEWER_MANHOLE_TEXT  (Text, colour 3)
  + SEWER_MANHOLE_EXISTING  (Insert, colour 3)
  + SEWER_MANHOLE_EXISTING_TEXT  (Text, colour 3)
  + SEWER_TAP  (Line, colour 3)
  + SEWER_TAP_TEXT  (Text, colour 3)
  + UTILITY_EASEMENT  (Poly, colour 6)
  + UTILITY_EASEMENT_TEXT  (Text, colour 6)
  + UTILITY_EASEMENT_EXISTING  (Poly, colour 6)
  + UTILITY_EASEMENT_EXISTING_TEXT  (Text, colour 6)
  + WATER_EASEMENT  (Poly, colour 5)
  + WATER_EASEMENT_TEXT  (Text, colour 5)
  + WATER_END_CAP  (Line, colour 5)
  + WATER_END_CAP_TEXT  (Text, colour 5)
  + WATER_LINE_TEXT  (Text, colour 5)
  + WATER_LINE_EXISTING  (Line, colour 5)
  + WATER_LINE_EXISTING_TEXT  (Text, colour 5)
  + WATER_METER  (Insert, colour 5)
  + WATER_METER_TEXT  (Text, colour 5)
  + WATER_QUALITY_CRITICAL_AREA  (Line, colour 4)
  + WATER_SERVICE  (Line, colour 5)
  + WATER_SERVICE_TEXT  (Text, colour 5)
  + WATER_VALVE  (Insert, colour 5)
  + WATER_VALVE_TEXT  (Text, colour 5)
  + WATER_VALVE_EXISTING  (Insert, colour 5)
  + WATER_VALVE_EXISTING_TEXT  (Text, colour 5)
  + WATER_VAULT  (Insert, colour 5)
  + WATER_VAULT_TEXT  (Text, colour 5)
  + WETLAND_BOUNDARY  (Line, colour 4)
created 67, already present 3
all 70 HCWA layers present: YES; drawing now has 390 layers (verified)

Notes

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

No notes yet.