Problem Overview
The Ignition Vision Pipe Segment and Pipe Joint components render cleanly inside the Ignition Designer at design time, but at runtime the segments drift apart, fail to terminate at the joint, or scale inconsistently between clients opened at different screen resolutions. The geometry looks correct on the designer's monitor, yet a client launched on a 1920×1080 display shows a 5–15 pixel gap between a horizontal pipe segment and its downstream joint, while a client on a 1366×768 panel shows a different overlap.
The root cause is layout mode interaction: the components are configured with a mix of Anchored and Relative positioning, which causes only the relative components to be rescaled when the client window is resized. Anchored components remain at their fixed pixel positions while their neighbors are scaled, breaking the geometric relationship that the pipe joints depend on.
Root Cause: Layout Mode Conflicts
Every Vision component carries a layoutMode property. According to the Vision Pipe Segment documentation, the pipe component is a quasi-3D rectangle with a round gradient, and like every container-resident Vision component it participates in the parent's layout system.
| Layout Mode | Behavior on Client Resize | Effect on Pipe Geometry |
|---|---|---|
| Anchored | Component position and size remain at fixed pixel coordinates relative to the parent. | Pipe endpoints stay where the designer placed them; joints do not follow. |
| Relative | Component position and size scale proportionally with parent dimensions. | Pipe segments stretch; their terminating joints (if anchored) do not move with them. |
| Absolute (legacy) | Treated like anchored in modern Vision clients. | Same scaling mismatch as Anchored. |
When two pipe segments share an endpoint, the shared coordinate is only preserved if both segments are rescaled by the same factor. Mixing one Anchored segment with one Relative segment guarantees the endpoint will diverge once the window is resized by any amount other than the design-time value.
Why Mixing Anchored and Relative Fails
The Vision client computes layout at every container resize event. Anchored components are positioned with integer-pixel offsets from the container anchor point (top-left, top-right, etc.); Relative components store their position and size as fractions of the container (0.0–1.0). When a 1280×1024 design is loaded into a 1920×1080 client:
- Relative pipe segment width
800px(62.5% of 1280) becomes1200px(62.5% of 1920). - Anchored joint at
x=800stays atx=800. - Visible gap between the right edge of the scaled segment and the anchored joint =
1200 − 800 = 400px.
The same geometry that lined up perfectly at design resolution can therefore be hundreds of pixels off at runtime. The misalignment scales with the difference between design resolution and runtime resolution, which is why the bug is invisible on the designer's monitor but obvious on every other client.
The Built-in Pipe Segment Component
The Pipe Segment component in the Vision component palette (under Misc) draws a single quasi-3D pipe section with fixed end caps. Pipe Joints are companion components that visually connect two segments. The component exposes the standard Vision properties plus a small set of styling properties for color and gradient. According to the Vision Pipe Segment reference page, the component has no exposed vertex manipulation, no multi-segment path support, and no per-end cap geometry control.
Limitations observed in production deployments:
- No multi-segment path — every direction change requires a separate segment plus a joint.
- Vertex manipulation is not exposed at runtime — segments must be manually realigned.
- End caps cannot be styled independently of the segment body.
- Component does not draw perpendicular vertices automatically when segments are joined.
For complex P&ID screens (more than three segments per process line), these limitations compound, and the layout-mode sensitivity makes the components unusable for any deployment where the client window size varies.
Solution 1: Replace Pipe Segments with Line Shapes
The most reliable fix is to stop using the Pipe Segment / Pipe Joint components entirely and substitute the built-in Line component found on the main Vision toolbar (the icon to the far right of the toolbar, not the Line entry under the Misc category). The Line component on the main toolbar exposes the strokeStyle and endCapStyle properties that the Misc "Line" component does not.
| Property | Value | Effect |
|---|---|---|
| strokeStyle | SOLID | Continuous pipe body. |
| strokeStyle | DASH, DOTS | Indicate phase or service class. |
| endCapStyle | SQUARE / ROUND / BUTT | Determines how line ends meet at junctions. |
| Recommended Pipe Thickness Values | ||
| Process header | stroke = 12 px | Dominant line weight. |
| Branch / instrument tap | stroke = 6 px | Secondary line weight. |
| Signal / pneumatic | stroke = 3 px, dashed | Low-emphasis line. |
Procedure to replace a pipe segment with a Line component:
- Select the Pipe Segment on the window and note its start
(x1, y1)and end(x2, y2)pixel coordinates. - Delete the Pipe Segment and the attached Pipe Joint.
- Drag the Line component from the far-right Vision toolbar onto the window.
- Configure
startPositionandendPositionto match the original coordinates, then setstroketo the desired pipe width. - Set
strokeStyletoSOLIDfor a continuous pipe; useDASHfor utility services. - Set
endCapStyleto the middle or right-hand option (BUTTorSQUARE) so that aligned lines meet flush at junctions. - Apply the same layout mode (Anchored or Relative) to every component on the screen — pick one, never both.
Solution 2: End Cap Style Configuration
Line-to-line junctions are the other source of visible gaps. The first end-cap option in the Vision Line property editor (typically labelled CAP_FLAT or default) leaves a half-stroke-length overhang that requires manual pixel nudging after alignment. The middle and right-hand end-cap styles terminate the line exactly at the configured end coordinate.
| End Cap Style | Junction Behavior | Recommendation |
|---|---|---|
| Default (far-left) | Half-stroke overhang past endPosition. |
Avoid for P&ID; causes visible step at junctions. |
| Butt (middle) | Terminates flush with endPosition. |
Use for orthogonal pipe runs meeting at corners. |
| Square (right) | Terminates flush; extends half stroke on perpendicular runs. | Use for T-junctions and instrument taps. |
With end caps set to Butt or Square, the Vision alignment tools (Align Left, Align Top, Distribute Horizontally) will produce flush junctions without post-alignment nudging. This is verified empirically on screens where designers were previously spending 5–15 minutes per junction hand-tuning pixel offsets.
Solution 3: Symbol Factory SVG Pipes
Symbol Factory ships an extensive P&ID and process graphics library that is licensed separately and integrated into Ignition Vision as a set of scalable vector components. Unlike the raster-prone Pipe Segment component, Symbol Factory pipes are SVG-based and scale cleanly at any client resolution.
Advantages reported in production environments from Ignition 7.9 through the current 8.1 branch:
- Vector graphics — no aliasing on 4K or HiDPI clients.
- Resolution-independent — the same symbol renders identically on 1280×1024 panels and 3840×2160 operation consoles.
- Includes valves, instruments, actuators, motors, and pumps — not just pipe sections.
- Compatible with Vision component theming.
The trade-off is licensing cost and a slightly larger component palette footprint. For sites already licensed for Symbol Factory, this is the lowest-risk replacement path because the symbols are designed for process-graphics use from the outset and do not exhibit the layout-mode coupling that breaks the native Pipe Segment component.
Integer Position and Size Discipline
Sub-pixel coordinates are a secondary cause of junction misalignment. The Vision renderer rounds component positions and sizes to integer pixels at draw time, so two components with x=100.4 and x=200.6 may render at x=100 and x=201, producing a one-pixel step at the junction.
Bulk fix procedure for any Vision window:
- Click an empty area of the window to deselect, then drag-select all components (Ctrl+A on the root container).
- Press Ctrl+P to open the Size and Position dialog.
- Press Enter to apply — every selected component is rounded to integer
x,y,width, andheightvalues. - Repeat on every nested container (templates, embedded frames) on the window.
Multi-Resolution Test Procedure
Before shipping any window that contains process graphics, validate the layout against the actual client resolutions used on the plant. The recommended acceptance procedure:
- Launch one Vision client at the design resolution (typically 1920×1080).
- Launch a second Vision client at the smallest panel resolution in use (commonly 1366×768).
- Launch a third client at the largest console resolution (commonly 3840×2160 or 2560×1440).
- On each client, walk every screen that contains P&ID graphics and verify that:
- Every pipe segment terminates flush against its downstream component.
- No visible gap, overlap, or stair-step at junctions.
- Components remain inside their parent container bounds.
- Resize each client window dynamically (grab the corner and drag) and re-verify while the window is resizing, not just at its final size.
The dynamic-resize check is critical because some layout-mode bugs only manifest during the resize transition, not at the final resting size. Designers typically verify only the resting size and miss transition-state artifacts that operators see every time they resize a floating window.
Layout Mode Selection Guide
Use the following decision tree to select a layout mode for a window containing process graphics:
| Deployment Profile | Recommended Layout Mode | Rationale |
|---|---|---|
| Single fixed-resolution panel (kiosk-style deployment) | Anchored | Window never resizes; pixel-perfect alignment is preserved. |
| Multi-resolution operation console with mixed monitor sizes | Relative | Components scale together; geometry is preserved across resolutions. |
| Mobile or tablet Vision client | Relative | Required to handle portrait/landscape rotation and DPI variation. |
| Window inside a multi-monitor operator station | Relative with anchored child dialogs | Main canvas scales; modal dialogs stay readable. |
Verification Checklist
Use this checklist before promoting any window containing P&ID graphics from development to production:
- [ ] All pipe segments are the same component type (all Line or all Symbol Factory) — no mixing of native Pipe Segment with Line.
- [ ] All components on the window use the same layout mode (Anchored OR Relative, not both).
- [ ] Every component has integer x, y, width, and height (verified with Ctrl+P / Enter on every container).
- [ ] End cap style on every Line component is
ButtorSquare. - [ ] Window has been opened at minimum and maximum deployment resolution with junctions visually verified.
- [ ] Window has been dynamically resized at runtime with junctions visually verified during the resize.
- [ ] Stroke widths are consistent across the same process service (e.g., all 12 px for process headers).
- [ ] Junctions align flush with the Vision alignment tools without post-alignment nudging.
When to Keep the Native Pipe Segment
The native Pipe Segment / Pipe Joint components are not deprecated, and there are deployment profiles where they remain acceptable:
- Single-screen kiosks locked to a fixed resolution where neither the window nor the client resolution changes.
- Quick prototype screens where geometric perfection is not required.
- Windows with one or two pipe segments and no more than one junction.
For any production deployment with more than one junction, more than one client resolution, or any window-resize interaction, the Line component or Symbol Factory is the safer path.
FAQ
Why do my Ignition Vision pipe segments look correct in the Designer but misalign at runtime?
Because the Pipe Segment and Pipe Joint components are placed with a mix of Anchored and Relative layout modes, and the Relative components rescale on the client while the Anchored ones stay at fixed pixel coordinates. Pick one layout mode for every component on the screen — never both — or replace the components with the Vision Line component or Symbol Factory SVG pipes.
Should I use the Line component under Misc or the Line component on the main Vision toolbar?
Use the Line component on the far-right main Vision toolbar. The Misc "Line" entry does not expose the strokeStyle or endCapStyle properties that you need to make pipe junctions meet flush. The main-toolbar Line component supports solid, dashed, and dotted strokes plus configurable end caps.
What end cap style do I need to make two aligned lines meet without a gap?
Use the middle (Butt) or right-hand (Square) end cap option in the Vision Line property editor. The default far-left cap leaves a half-stroke overhang that requires manual pixel nudging after alignment and produces visible steps at T-junctions.
How do I force every component on a window to integer pixel positions and sizes?
Drag-select all components on the window (or on the nested container you want to clean up), press Ctrl+P to open the Size and Position dialog, then press Enter. Vision rounds every selected component's x, y, width, and height to integer values. Repeat the procedure on every nested template and embedded frame.
Can I keep using the native Pipe Segment component on a fixed-resolution kiosk?
Yes — the native Pipe Segment is acceptable when the window never resizes and the client always runs at the design resolution. The component breaks down as soon as the window is moved to a different monitor, the client is launched at a different resolution, or the operator resizes the window. For any variable-resolution deployment, use the Line component or Symbol Factory SVG pipes instead.