← VentLib Guides · Workspace

LIVING GUIDE · v0.82.111

Solver and Automatic Pipe Routing Guide

Plan & Fit Route

For a gap between separate Chains, select its two open endpoint parts and use Use 2 Selected Open Ends; the active object becomes Start. Choose Top, Front or Side projection, the visual angle, the stock policy and symmetry. Movable part may be an upstream part such as the TVU; its one permitted World axis translates the connected Start side while End remains fixed. Preview Projected Route is non-destructive and respects the resulting endpoints plus registered obstacles.

The preview creates movable ROUTE_POINT_* controls. Move a point, select it, choose Lock Preview Point, then preview again. Locked points become hard waypoints while the remaining spans replan. For the TVU example, use the open BU and wall-entry SR as Start and End, keep the SR fixed, choose the upstream TVU as Movable part with World X, use Top (XY) with 45 degrees and register the crossing extract duct as an obstacle.

For an existing tracked linear Chain, Preview Existing Chain retains the earlier collision-free workflow. It inflates obstacles by pipe radius plus installation clearance, treats enabled World-axis locks as hard partial constraints, and reports required 45°/90° bends and Missing Parts before assembly changes are allowed.

An unsupported terminal transition is reported as an adapter requirement. VentLib does not silently distort a catalog bend or violate a lock to hide that requirement.

This page grows with the VentLib Solver. It documents the behavior that is available now, the test workflow, known boundaries and later routing stages.

Current milestone

v0.82.111 completes the single productive Solver Engine. The visible Chain Order remains the sole operational order, while Full/Active/Span, Live Solve, Guide Fit, obstacle clearance and A/B/C route planning now share the same host-independent topology, connector and constraint contracts. Blender scene mutation occurs only through the transactional adapter; a rejected result restores the affected objects and relationships.

How to read the controls

Full / Active / Span choose what part of the tracked Chain may change. A / B / C choose how an automatic route candidate is calculated. M stores the manually aligned state. Guide Influence shows the Guide-derived diagnostic shape and is never applied directly. Apply always commits the currently displayed usable A/B/C/M result.

One Solver flow

  1. The adapter snapshots visible Chain Order, bidirectional connector mappings, locks, length freedoms, Guide samples, obstacles and clearance.
  2. The Engine calculates a host-free result and detailed diagnostics without touching Blender objects.
  3. Recent A/B/C/M previews remain available for comparison. Update recalculates only when relevant inputs changed.
  4. Apply commits one usable result atomically. Clearance warnings remain visible in red and name the obstacle, affected part and deficit; Apply is disabled only when no usable geometry exists.

1. Prepare a tracked chain

  1. Select the component that should move.
  2. Shift-select the target component so it becomes active.
  3. Choose the required connector mapping, such as A → B.
  4. Repeat from one end toward the other until the chain is complete.
  5. Select any component and expand Chain; advanced constraints remain under Solver immediately below it.

Append metadata defines the VentLib chain. Blender parenting is optional transport behavior and can be removed without deleting the tracked relationship.

2. Read the chain status

Linear chain readyThe topology and every tracked connector validate within tolerance.
Chain is looseAt least one connection, connector, parent relationship or topology check failed.
Maximum errorThe largest positional separation across all tracked connector pairs, displayed in millimetres.
EndpointsComponents with one tracked neighbour. A linear chain normally has exactly two.
BranchesComponents with more than two tracked neighbours. v0.10.0 does not solve branched networks.

Expand Chain Order and click any entry to exclusively select and activate exactly that object in the 3D View. Each row begins with its ordered connector toward the previous and following member, for example [A > B]; a terminal one-port part shows — on its open side. Whole-chain selection is a separate explicit action. Invert Chain reverses positions 1…N and connector direction without moving the parts, including chains with one-port terminals. It remains available for one unambiguous linear path even when staged connector positions show Chain is loose; solve or reconnect afterwards.

Use a part row's up/down controls to rewire it one position in the tracked sequence. Existing world poses and locks are retained so a manually staged assembly does not jump; run Solve afterward to align the new sequence. Obstacles stay automatically interleaved by their spatial influence and are not part of the editable component order.

To join two existing chains, select one endpoint and Shift-select the destination endpoint as active. Under Chain, choose Join + Move for a complete direct joint or Join in Place to preserve both assemblies' world poses while recording the combined logical order. VentLib reverses either Chain Order when necessary and chooses the nearest open pair on a one-part Chain. In-place joins retain missing coupling, adapter and pose work as status diagnostics. A failed topology validation restores both chains completely.

3. Chain Order operations

The visible Chain Order is authoritative even when an older scene stored an Append edge in the opposite parent/child direction. Every operation resolves the actual connector pair between adjacent rows rather than inferring workflow direction from storage provenance.

Solve From Active

The previous row stays fixed. VentLib translates the active row onto it, then closes every later seam through translation-only suffix moves. Existing rotations and the modeled Chain shape remain unchanged. A seam whose connector axes require rotation is named and rejected before mutation. Translated Solver Locks capture their resulting targets. Viewport Transform Orientation is irrelevant. Existing Chain Parenting is suspended during the World-space transaction and reconstructed at the final poses; no new parenting is created.

Cut Chain

The exact edge after the active row is removed. Both resulting chains keep every world pose; the removed connector mapping remains dormant as Append memory for a later controlled reconnection.

Invert Chain

Positions and path-side connector directions reverse without moving geometry. One-port terminals and the used path sides of multi-port fittings are supported.

Duplicate Chain

Duplicate offsets every copied occurrence by 250 mm on X, Y and Z so overlapping assemblies remain visible. Duplicate in Place deliberately keeps the original world poses. Both rebuild an independent copy of tracked Appends, order, name, Parenting state and Missing Part records.

4. Choose the anchor

VentLib Lock constrains only Solver operations; it does not block Blender G/R transforms. Location and Rotation are independent world channels. For SRSS, Size X / Length independently prevents generated-length adjustment. Enabling any channel activates the VentLib lock and captures the current target.

No locked components

The active component becomes the anchor. Its world transform stays fixed and the rest of the chain is rebuilt outward from it.

One locked component

The locked component becomes the fixed anchor, regardless of which chain component is active.

Several locked components

All locks must describe one compatible chain solution. Conflicting locks cancel the operation without moving anything.

5. Parent and Append state

ParentedBlue while the active object has a Blender parent. Clicking preserves its world transform and changes the action to Re-parent.
AppendedBlue while tracked VentLib topology is active. Clicking stores the target and port pair and changes the action to Re-append.

A new Append mapping replaces the remembered previous mapping. De-parenting does not remove Append topology. De-appending removes the tracked relationship and also releases Blender parenting while retaining a reversible last state.

6. Solve between locks

  1. Start from Linear chain ready.
  2. Lock two or more crucial components. Every enabled channel participates in one combined solve; a Z-only intermediate lock does not become a rigid six-axis anchor.
  3. Move or rotate a locked component to a reachable target pose.
  4. Click Solve Between Locks.
  5. Confirm both endpoint transforms remain fixed and the intermediate chain returns to Linear chain ready.
  6. If the fixed lengths and circular-joint rotations cannot reach the target, the operation cancels without moving any component.

If the fixed targets are incompatible, the persistent diagnostic names the outer locked span, reports the remaining error and links to this section. Solve Between Locks does not guess which locked side the user intended to move. To make that choice explicitly, select the first row of the side that should move and use Solve From Active; it translates that incoming seam and each later seam in order without changing rotation, while moved Solver Locks capture their new World targets.

Worked Solve From Active sequence

Assume a 20-part Chain is complete except for a 0.392 mm seam. Chain Order places INST_BFUI_45_250_50__OUTDOOR_AIR.001 at position 18, followed by CUT_SRI_250_50_L233 and INST_BFUI_90_250_50__OUTDOOR_AIR. Everything through position 17 must remain fixed; positions 18–20 may translate.

  1. Click position 18 so the BFUI alone is active. Its previous row becomes the fixed boundary for this operation.
  2. Check the preflight message. Translate active + 2 following part(s) means exactly positions 18, 19 and 20 will be processed. A named moved Solver Lock will retain its channels and capture the resulting World pose.
  3. Click Solve From Active. The solver closes the incoming seam, then walks forward through the suffix and closes each later seam with World translations.
  4. Verify Linear chain ready. The BFUI, 233 mm CUT and terminal BFUI may have new locations. Their rotations are unchanged, and the CUT remains 233 mm.

What it does not do: it does not resize CUTs, use unrelated selected objects, rotate fittings, or depend on Global/Local Transform Orientation. A disabled preflight that names an axis mismatch means the relevant part must first be rotated or reconnected. Choose Fit Inbetween for a length-changing CUT operation. Choose Solve Between Locks when two or more captured targets should govern the available location, rotation and eligible straight-length freedoms.

VentLib Location and Rotation locks constrain the individually enabled channels of the captured World-space transform; they are not Local- or Parent-space locks. Blender G/R remains available. Appending an already locked component does not override its constrained pose; a connector mismatch is reported as Chain is loose.

7. Live Solve and proportional length

  1. Lock the two intended endpoints.
  2. Enable Live Solve.
  3. Move or rotate a middle component; it becomes the temporary pivot.
  4. Confirm both sides solve independently and untouched endpoint targets remain fixed.
  5. All SRSS without Size X/Length lock remain eligible. With Proportional, they share one factor from their previous lengths; without it, their lengths solve independently.
  6. Click A/B/C on the active component to choose the only permitted break connector.
  7. If the opposite side is unreachable, movement is limited and the full chain returns to its last valid pose. Only the selected connector may separate.

8. Fit Inbetween: initial Cut and re-fit

  1. Place both neighbouring parts at their final project positions with compatible connectors on one axis.
  2. Select the internal fresh stock Instance or baked SRI, SR or SRSS CUT_ occurrence.
  3. Confirm that the selected length part is unlocked. Neighbour locks are not required because neither neighbour moves.
  4. Open Cut Length directly below Append and click Fit Inbetween.
  5. Confirm the new L… value, unit Scale and Linear chain ready status.

Chain Order defines direction, regardless of the stored Append-edge direction in an older scene. VentLib uses the two stationary neighbour connector frames, preserves their World transforms, aligns only the active length part and resolves the axial station to 0.001 mm. It then creates the first baked Cut or regenerates the existing Cut from its stock Source. An existing Cut deliberately keeps its Blender Object; a fresh Instance is replaced only after final closure validates.

The operation refuses endpoints, branches, cycles, reused connectors, off-axis or non-opposed neighbour connectors, non-unit scale, missing stock Sources, selected-length-part locks and lengths outside the available stock. Any failure restores geometry, metadata, names, references, transforms, prior lock targets and the pinned Chain state without leaving a staged object. Use Cut Entered Length only as the manual fallback when a fresh piece is not yet between two Chain members.

9. Fit a chain to a Curve guide

  1. Create or select a Bezier or Poly curve that represents the desired centerline.
  2. Keep both chain endpoints locked. Additional internal locks are supported and divide the chain into consecutive guide spans.
  3. Select any VentLib component in the chain and expand Solver.
  4. Choose the curve in Guide Fit (Prototype) → Guide curve.
  5. Choose whether Proportional may change eligible SRSS lengths.
  6. Click Fit Chain to Guide.
  7. Read the reported guide RMS distance and confirm the chain remains Linear chain ready.

The guide is a soft routing target: component geometry, every enabled lock channel, endpoint poses and SRSS limits remain authoritative. VentLib evaluates connector joints, their tangents and sampled circular BUSS/BUSS90 centerline arcs; the solver uses joint roll and unlocked SRSS length to reduce those residuals. This follows the standard engineering separation of route centerline, catalog fitting geometry and constrained numerical refinement. A short or rigid catalog sequence may still lack the degrees of freedom needed to represent an arbitrary curve. The operation cancels without applying transforms if locks, connector closure or obstacle validation fail.

With Obstacles enabled, the selected guide first biases a hard collision-free centerline plan. VentLib compares required catalog turn capacity with the ordered bends before any object moves. A proposed result is committed only when connector closure, locked channels, obstacle clearance, monotone OCL order, no-worsening and the 40 mm physical-centerline RMS acceptance threshold all pass; rejection restores poses and SRSS lengths transactionally.

RSA route planning and preview

Plan & Fit Route treats a curve as a three-dimensional centerline thread. The curve expresses design intent; it is not interpreted as a demand for one fitting at every curve point. VentLib searches catalog-valid straight and bend sequences, accounts for each bend's real construction length, checks finite round-duct clearance and shows the resulting physical assembly before any installed part changes.

LayerMeaning in VentLib
1. Endpoint contractNamed start/end objects and connector IDs define the two immutable connection frames.
2. TopologyThe replaceable span must be one ordered, unbranched chain; branches remain explicit separate chains.
3. Design guideA 3D curve or drawing-plane projection supplies the preferred centerline and visual direction.
4. Degrees of freedomFixed endpoints, one named length part, a permitted World axis and optional branch roll state exactly what the solver may move.
5. Obstacle spaceRound ducts use finite axis capsules with both radii and installation clearance; other geometry uses conservative bounds.
6. Route familiesSymmetric offsets, spatial doglegs and guide-waypoint multibends are solved analytically before grid fallback.
7. Catalog synthesisTurn angles select published BU parts; tangent setbacks determine the remaining real SR cut lengths.
8. Ranking and variantsA/B/C/G compare optimal, existing-stock, conservative and literal-guide policies by length, movement, symmetry and guide error.
9. RequirementsConnectivity, catalog validity, clearance and 3D-guide mode are evaluated now. Condensate, acoustics, suspension, fire and smoke have explicit inactive or unresolved records until configured.
10. TransactionPreview is read-only. Apply stages every part, changes an allowed length freedom, validates seams and clearance, then commits; any failure restores geometry, transforms, links and parenting.

The preview lists the actual SR cuts, BU angles, required NPU terminal adapters, the nominated freedom movement, branch roll and every requirement status. Enable Allow branch roll when a branch connector such as TVU C may rotate around the unchanged main A-B axis. VentLib searches the full revolution in 15-degree steps, then accepts only routes whose bends and cut lengths can be assembled from catalog parts.

Obstacle distance sets the mandatory free surface gap in millimetres. Preview reports both this target and the measured minimum clearance. The measurement is refreshed with the route preview rather than during panel redraw. Solver Rotation locks are hard RSA constraints: if any rotation channel on the Start fitting is locked, branch-roll search is disabled and Apply rejects a stale rolled preview. A Guide curve stays in the scene as editable design intent; it is never consumed by Preview or Apply.

With a nominated upstream length Cut, Apply may shorten or lengthen that stock and move the route start side. A route End inside the span remains a fixed world-space boundary; the old intermediate span is replaced only after the staged route closes. PASS is evaluated, FAIL rejects the route, UNRESOLVED blocks a hard requirement without an evaluator, and INACTIVE records a future or span-inapplicable discipline without pretending it was checked.

If no route exists, add or release a real degree of freedom, change the allowed part family, or revise the guide. VentLib does not cross an obstacle or distort a fitting merely to produce a result.

10. Repair a disturbed chain

  1. Save the blend file before exploratory testing.
  2. Move or rotate an unlocked component away from its connector.
  3. Confirm that the status changes to Chain is loose and Maximum error increases.
  4. Select the component that should remain fixed, or lock the intended anchor.
  5. Click Straighten Chain.
  6. Confirm Linear chain ready and Maximum error near 0.000 mm.
  7. Use Blender Undo if the chosen anchor produced an unwanted placement.

11. Safety boundaries

Current limitations

12. Development sequence

  1. v0.9: chain discovery, diagnostics and locks.
  2. v0.10: deterministic one-anchor linear-chain repair.
  3. v0.11: reachable two-locked-endpoint solve through circular-joint rotations.
  4. v0.12: transform-constraint UI, captured targets and constraint-aware Append.
  5. v0.13: parent-safe locked goals during parametric length rebuilds and robust unit-scale tolerance.
  6. v0.14: proportional SRSS length solving, manufacturer limits and guarded Live Solve.
  7. v0.15: parent-independent Append topology, reversible Parent/Append state and optional proportional distribution.
  8. v0.16: multi-lock spans, independent SRSS capacity, parent-safe locks and active Ordered components highlighting.
  9. v0.17: selectable Ordered components and exact failing-span/SRSS-reserve diagnostics.
  10. v0.18: transactional two-endpoint Curve Guide Fit prototype and guide RMS diagnostics.
  11. v0.18 refinement: multi-channel locks, independent Size/Length constraints, proportional SRSS grouping, OCL multiselect and guarded A/B/C Live break pivots.
  12. v0.19–v0.21: Missing Parts, obstacle registration, collision-free centerline routing and transactional catalog assembly.
  13. v0.22: staged-pose OCL Order Edit, active-part quick values and bend-centerline-aware Guide Fit.
  14. v0.22.1: hard lock/obstacle/catalog/physical-RMS gates and collision-free route preflight for Guide Fit and Solve.
  15. v0.52.3: transactional in-place Re-fit Cut with a fixed previous member, regenerated unit-scale detail and per-channel constrained downstream Chain re-append.
  16. v0.54.0: one transactional Fit Inbetween action for an initial exact Cut and in-place re-fit, with World-lock-aware downstream re-append and full rollback.
  17. v0.55.0: authoritative visible Chain Order, read-only panel preflight, exclusive row selection, one-port-safe inversion, rigid-tail Solve From Active and pose-preserving Cut Chain.
  18. v0.53.0: transactional complete-chain concatenation with automatic endpoint/order orientation, rigid selected-chain motion and lock-aware rollback.
  19. Next: evaluate v0.22 against the development scene and extend catalog-demand diagnostics where the existing part sequence cannot represent the guide.
  20. Later: inventory and Restock integration.

Related pages

VentLib workspace · Parts Web Docu · Development log · Source