← Inbox

C3D-0060 · Move water points to FIRE_HYDRANT and WATER_LINE [MOVE-WATER-PTS] done

Per the numbered decisions: FH (4) to FIRE_HYDRANT; WATER LINE, its variants, 2 IN RPZ BFP COR, the stubs/MAIN VAVLE and TBC SW WATER TO BLDG (31) to WATER_LINE. WV, bollards, vaults and the WATER_VAULT polylines are left alone; pt 393 ELEC stays on 0 as no electrical layer exists. Matched by exact description, idempotent, reads back to verify.

Script file
C3D-0060.cs
Target
260612 · model space
Author
claude
Approved
yes · reviewer
Timeout
180s

C# payload

// Move water points to their correct layers, per the user's numbered decisions.
//
//   2)  FH                          -> FIRE_HYDRANT      (4 pts)
//   4)  WATER LINE                  -> WATER_LINE       (13 pts)
//   6)  WATER LINE variants         -> WATER_LINE       (10 pts)
//   7)  2 IN RPZ BFP COR            -> WATER_LINE        (4 pts)
//   9)  WATER STUB / WV STUB /
//       WATER V STUB / MAIN VAVLE   -> WATER_LINE        (4 pts)
//   10) TBC SW WATER TO BLDG        -> WATER_LINE        (1 pt)
//
// NOT moved (user: n/a): WV, 6 IN BOL, VAULT/VAULT COR, WATER VAULT, the WATER_VAULT polylines.
// NOT moved: pt 393 ELEC POWERBMETER - no electrical layer exists, stays on 0 per item 11.
//
// Points are matched by EXACT description, taken from the audit - not by substring, so
// "WATER VAULT" cannot be caught by a "WATER" rule and "WV STUB" cannot be caught by "WV".
// Both target layers already exist (verified C3D-0059). Idempotent: a point already on its
// target layer is skipped, so a re-run is a no-op. Reads back and verifies before finishing.

var FH   = new HashSet<string>(new string[] { "FH" });
var LINE = new HashSet<string>(new string[] {
    "WATER LINE",
    "WATER LINE STUB", "WATER LINE TO BLDG", "WATER LINE  AT CROSS WALK",
    "WATER LINE   AT CROSS WALK", "WATER LINE  MARK FOR NEW LINE TO BLDG",
    "1 IN BLUE WATER LINE STUB", "1 IN WATER LINE",
    "2 IN RPZ BFP  COR",
    "WATER STUB", "WV STUB", "WATER V STUB", "MAIN VAVLE",
    "TBC SW WATER TO BLDG",
});

var ms = (BlockTableRecord)Tx.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(Db), OpenMode.ForRead);
var lt = (LayerTable)Tx.GetObject(Db.LayerTableId, OpenMode.ForRead);
if (!lt.Has("FIRE_HYDRANT")) { Log("ABORT: FIRE_HYDRANT missing"); return; }
if (!lt.Has("WATER_LINE"))   { Log("ABORT: WATER_LINE missing");   return; }

int movedFh = 0, movedLine = 0, skipped = 0;
foreach (ObjectId id in ms) {
    var cp0 = Tx.GetObject(id, OpenMode.ForRead) as CogoPoint;
    if (cp0 == null) continue;
    string d = (cp0.RawDescription ?? "").Trim().ToUpper();

    string target = null;
    if (FH.Contains(d)) target = "FIRE_HYDRANT";
    else if (LINE.Contains(d)) target = "WATER_LINE";
    if (target == null) continue;

    if (cp0.Layer == target) { skipped++; continue; }     // idempotent

    var cp = (CogoPoint)Tx.GetObject(id, OpenMode.ForWrite);
    string was = cp.Layer;
    cp.Layer = target;
    if (target == "FIRE_HYDRANT") movedFh++; else movedLine++;
    Log(String.Format("  pt {0,-6} {1,-40} {2} -> {3}", cp.PointNumber, d, was, target));
}

Log("");
Log("moved to FIRE_HYDRANT: " + movedFh + "   moved to WATER_LINE: " + movedLine + "   already correct: " + skipped);

// verify by re-reading
int vf = 0, vl = 0;
foreach (ObjectId id in ms) {
    var cp = Tx.GetObject(id, OpenMode.ForRead) as CogoPoint;
    if (cp == null) continue;
    if (cp.Layer == "FIRE_HYDRANT") vf++;
    if (cp.Layer == "WATER_LINE") vl++;
}
Log("read back: FIRE_HYDRANT holds " + vf + " points, WATER_LINE holds " + vl + " points (verified)");
Ed.Regen();

Result

Status
success
Drawing file
C:\Users\sanja\OneDrive\_SurveyDisco\260613 - 5030 E Lake Pkwy, Stockbridge, GA 30281, USA\260612 - CSTORE WATER ABS 30.dwg
Message
Executed C3D-0060 (0 entities touched).
Entities
Duration
403 ms
Civil 3D
25.0.0.0

Log

  pt 345    WATER LINE STUB                          0 -> WATER_LINE
  pt 356    TBC SW WATER TO BLDG                     0 -> WATER_LINE
  pt 406    WATER STUB                               0 -> WATER_LINE
  pt 408    FH                                       WATER_VALVE -> FIRE_HYDRANT
  pt 432    WATER LINE STUB                          0 -> WATER_LINE
  pt 440    MAIN VAVLE                               0 -> WATER_LINE
  pt 477    WATER LINE                               0 -> WATER_LINE
  pt 481    WATER LINE                               0 -> WATER_LINE
  pt 484    WATER LINE                               0 -> WATER_LINE
  pt 487    WATER LINE                               0 -> WATER_LINE
  pt 490    WATER LINE                               0 -> WATER_LINE
  pt 493    WATER LINE                               0 -> WATER_LINE
  pt 496    WATER LINE                               0 -> WATER_LINE
  pt 499    WATER LINE                               0 -> WATER_LINE
  pt 502    FH                                       WATER_VALVE -> FIRE_HYDRANT
  pt 503    WATER LINE                               0 -> WATER_LINE
  pt 508    WV STUB                                  0 -> WATER_LINE
  pt 511    WATER LINE                               0 -> WATER_LINE
  pt 512    WATER LINE  AT CROSS WALK                0 -> WATER_LINE
  pt 518    WATER LINE                               0 -> WATER_LINE
  pt 528    WATER LINE                               0 -> WATER_LINE
  pt 531    WATER LINE                               0 -> WATER_LINE
  pt 533    WATER LINE   AT CROSS WALK               0 -> WATER_LINE
  pt 537    FH                                       WATER_VALVE -> FIRE_HYDRANT
  pt 538    WATER V STUB                             0 -> WATER_LINE
  pt 1115   FH                                       WATER_VALVE -> FIRE_HYDRANT
  pt 1122   2 IN RPZ BFP  COR                        0 -> WATER_LINE
  pt 1123   2 IN RPZ BFP  COR                        0 -> WATER_LINE
  pt 1124   2 IN RPZ BFP  COR                        0 -> WATER_LINE
  pt 1125   2 IN RPZ BFP  COR                        0 -> WATER_LINE
  pt 1134   1 IN BLUE WATER LINE STUB                0 -> WATER_LINE
  pt 1136   1 IN WATER LINE                          0 -> WATER_LINE
  pt 1137   WATER LINE TO BLDG                       0 -> WATER_LINE
  pt 1138   WATER LINE  MARK FOR NEW LINE TO BLDG    0 -> WATER_LINE

moved to FIRE_HYDRANT: 4   moved to WATER_LINE: 30   already correct: 0
read back: FIRE_HYDRANT holds 4 points, WATER_LINE holds 30 points (verified)

Notes

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

No notes yet.