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
67int vj_rule_violation(const SimulationContext& ctx, int node_idx);
68
80void vj_apply_derived_geometry(SimulationContext& ctx, int node_idx);
81
98void vj_clear_virtual(SimulationContext& ctx, int node_idx);
99
118int vj_set_virtual(SimulationContext& ctx, int node_idx, bool make_virtual);
119
122 int new_node_idx = -1;
123 int new_link_idx = -1;
124 int err = 0;
125};
126
149SplitResult vj_split_conduit(SimulationContext& ctx, int link_idx, double t,
150 const std::string& new_node_name, const std::string& new_link_name,
151 bool make_virtual);
152
172int vj_fuse(SimulationContext& ctx, int node_idx, int* surviving_link_out);
173
174// ---------------------------------------------------------------------------
175// Inlet junctions — a virtual junction that also carries a street inlet
176// (plans/INLET_JUNCTION_IMPLEMENTATION_PLAN_2026-09-05.md §2.6).
177// ---------------------------------------------------------------------------
178
193int ij_rule_violation(const SimulationContext& ctx, int node_idx, bool for_drop_inlet);
194
206int ij_host_conduit(const SimulationContext& ctx, int host_kind, int host_idx);
207
219bool ij_usage_shape_ok(const SimulationContext& ctx, int design_idx, int link_idx);
220
240int ij_set_inlet(SimulationContext& ctx, int node_idx, bool make_inlet);
241
261SplitResult ij_split_conduit(SimulationContext& ctx, int link_idx, double t,
262 const std::string& new_node_name, const std::string& new_link_name,
263 int design_idx, int capture_node_idx);
264
279int ij_fuse(SimulationContext& ctx, int node_idx, int* surviving_link_out);
280
281} // namespace openswmm::edit
282
283#endif /* OPENSWMM_ENGINE_VIRTUAL_JUNCTION_OPS_HPP */
The central, reentrant simulation context for the new engine.
Definition ObjectDeleter.cpp:38
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:663
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:707
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:214
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:682
int ij_fuse(SimulationContext &ctx, int node_idx, int *surviving_link_out)
Inverse of ij_split_conduit (re-fusion): re-fuse an inlet junction's conduit pair....
Definition VirtualJunctionOps.cpp:786
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:744
int vj_rule_violation(const SimulationContext &ctx, int node_idx)
Check the virtual-junction usage rules for a node.
Definition VirtualJunctionOps.cpp:119
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:278
int vj_set_virtual(SimulationContext &ctx, int node_idx, bool make_virtual)
Set or clear a node's virtual flag.
Definition VirtualJunctionOps.cpp:240
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:196
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:508
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:693
Central, reentrant simulation context.
Definition SimulationContext.hpp:390
Result of vj_split_conduit.
Definition VirtualJunctionOps.hpp:121
int new_link_idx
Definition VirtualJunctionOps.hpp:123
int err
0 ok; ERR_VJ_* or -1 (bad param / duplicate name)
Definition VirtualJunctionOps.hpp:124
int new_node_idx
Definition VirtualJunctionOps.hpp:122