OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
VirtualJunctionOps.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright 2026 Caleb Buahin
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
37
38#ifndef OPENSWMM_ENGINE_VIRTUAL_JUNCTION_OPS_HPP
39#define OPENSWMM_ENGINE_VIRTUAL_JUNCTION_OPS_HPP
40
42#include <string>
43
44namespace openswmm::edit {
45
62int vj_rule_violation(const SimulationContext& ctx, int node_idx);
63
70void vj_apply_derived_geometry(SimulationContext& ctx, int node_idx);
71
83void vj_clear_virtual(SimulationContext& ctx, int node_idx);
84
97int vj_set_virtual(SimulationContext& ctx, int node_idx, bool make_virtual);
98
101 int new_node_idx = -1;
102 int new_link_idx = -1;
103 int err = 0;
104};
105
119SplitResult vj_split_conduit(SimulationContext& ctx, int link_idx, double t,
120 const std::string& new_node_name,
121 const std::string& new_link_name,
122 bool make_virtual);
123
139int vj_fuse(SimulationContext& ctx, int node_idx, int* surviving_link_out);
140
141// ---------------------------------------------------------------------------
142// Inlet junctions — a virtual junction that also carries a street inlet
143// (plans/INLET_JUNCTION_IMPLEMENTATION_PLAN_2026-09-05.md §2.6).
144// ---------------------------------------------------------------------------
145
154int ij_rule_violation(const SimulationContext& ctx, int node_idx, bool for_drop_inlet);
155
164int ij_host_conduit(const SimulationContext& ctx, int host_kind, int host_idx);
165
171bool ij_usage_shape_ok(const SimulationContext& ctx, int design_idx, int link_idx);
172
186int ij_set_inlet(SimulationContext& ctx, int node_idx, bool make_inlet);
187
197SplitResult ij_split_conduit(SimulationContext& ctx, int link_idx, double t,
198 const std::string& new_node_name,
199 const std::string& new_link_name,
200 int design_idx, int capture_node_idx);
201
210int ij_fuse(SimulationContext& ctx, int node_idx, int* surviving_link_out);
211
212} // namespace openswmm::edit
213
214#endif /* OPENSWMM_ENGINE_VIRTUAL_JUNCTION_OPS_HPP */
The central, reentrant simulation context for the new engine.
Definition ObjectDeleter.cpp:37
int ij_host_conduit(const SimulationContext &ctx, int host_kind, int host_idx)
The conduit whose cross-section governs an inlet usage row.
Definition VirtualJunctionOps.cpp:577
int ij_set_inlet(SimulationContext &ctx, int node_idx, bool make_inlet)
Promote a node to an inlet junction or demote it.
Definition VirtualJunctionOps.cpp:613
void vj_clear_virtual(SimulationContext &ctx, int node_idx)
Clear a node's virtual flag, promoting its rendering rim depth (if any) back to the real full depth.
Definition VirtualJunctionOps.cpp:174
bool ij_usage_shape_ok(const SimulationContext &ctx, int design_idx, int link_idx)
Legacy inlet_validate shape rule (inlet.c:498-505): CUSTOM designs fit any shape, DROP_* need RECT_OP...
Definition VirtualJunctionOps.cpp:591
int ij_fuse(SimulationContext &ctx, int node_idx, int *surviving_link_out)
Inverse of ij_split_conduit: re-fuse an inlet junction's conduit pair. The node deletion inside vj_fu...
Definition VirtualJunctionOps.cpp:685
SplitResult ij_split_conduit(SimulationContext &ctx, int link_idx, double t, const std::string &new_node_name, const std::string &new_link_name, int design_idx, int capture_node_idx)
Split a conduit and make the inserted node an inlet junction with the given design and capture node.
Definition VirtualJunctionOps.cpp:644
int vj_rule_violation(const SimulationContext &ctx, int node_idx)
Check the virtual-junction usage rules for a node.
Definition VirtualJunctionOps.cpp:84
SplitResult vj_split_conduit(SimulationContext &ctx, int link_idx, double t, const std::string &new_node_name, const std::string &new_link_name, bool make_virtual)
Split a conduit at normalized position t along its vertex-aware polyline, inserting a new node (virtu...
Definition VirtualJunctionOps.cpp:232
int vj_set_virtual(SimulationContext &ctx, int node_idx, bool make_virtual)
Set or clear a node's virtual flag.
Definition VirtualJunctionOps.cpp:197
void vj_apply_derived_geometry(SimulationContext &ctx, int node_idx)
Apply the derived-geometry contract to a validated virtual junction: full depth = pipe crown (xsect y...
Definition VirtualJunctionOps.cpp:158
int vj_fuse(SimulationContext &ctx, int node_idx, int *surviving_link_out)
Re-fuse the two conduits of a virtual junction into one, deleting the node (inverse of a virtual spli...
Definition VirtualJunctionOps.cpp:442
int ij_rule_violation(const SimulationContext &ctx, int node_idx, bool for_drop_inlet)
Check the inlet-junction usage rules for a node: every virtual-junction rule, then rule 623 — both at...
Definition VirtualJunctionOps.cpp:599
Central, reentrant simulation context.
Definition SimulationContext.hpp:353
Result of vj_split_conduit.
Definition VirtualJunctionOps.hpp:100
int new_link_idx
Definition VirtualJunctionOps.hpp:102
int err
0 ok; ERR_VJ_* or -1 (bad param / duplicate name)
Definition VirtualJunctionOps.hpp:103
int new_node_idx
Definition VirtualJunctionOps.hpp:101