# Feature reference

Generated from the package declarations. Values below are defaults, not live node values. Short names are the normal interface. Existing `physics...` styles and `physics ...` key aliases remain supported.

Use `\physicshelp{wedge}` inside a `tikzpicture` to display the same reference. Use `show keys` or `show anchors` on a node; a name is optional for the overlay.

All objects support ordinary TikZ styling; see the manual for transformation and sizing limitations. Percentage families accept integers 0 through 100.

Start with the [debug overlay guide](debug-overlays.md) for `show anchors`, `show keys`, and `\physicshelp` examples across nodes, paths, and pics. For boundary directions, see the [surface-anchor guide](surface-anchors.md), [wedge-anchor guide](wedge-anchors.md), and [ramp-anchor guide](ramp-anchors.md). Each has a rendered `show anchors` gallery.

## platform-left (node)

| Key | Default |
| --- | --- |
| `minimum width` | 5cm |
| `minimum height` | 2cm |
| `strip width` | 0.25cm |
| `wall angle` | -90 degrees |
| `wall inset` | 0cm |
| `wall drop` | 0cm |
| `pulley edge` | off; preset uses 0.5cm inset and drop |

Size aliases: platform width = minimum width; platform depth = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, surface, pulley-center, wall-root, floor-center, wall-center, text

**Families:** bottom-0..100, right-0..100, surface-0..100, left-0..100, transition-0..100, wall-surface-0..100, wall-back-0..100, wall-base-0..100, wall-tip-0..100

surface runs left to right across the floor; bottom, left, and right cover its other edges. wall-surface and wall-back run from root to tip; wall-base and wall-tip span the end caps. transition runs from pulley-center to wall-root. Upward walls require zero inset and drop. Use 50 for any edge midpoint.

Default hook: `every platform`.

## platform-right (node)

| Key | Default |
| --- | --- |
| `minimum width` | 5cm |
| `minimum height` | 2cm |
| `strip width` | 0.25cm |
| `wall angle` | -90 degrees |
| `wall inset` | 0cm |
| `wall drop` | 0cm |
| `pulley edge` | off; preset uses 0.5cm inset and drop |

Size aliases: platform width = minimum width; platform depth = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, surface, pulley-center, wall-root, floor-center, wall-center, text

**Families:** bottom-0..100, right-0..100, surface-0..100, left-0..100, transition-0..100, wall-surface-0..100, wall-back-0..100, wall-base-0..100, wall-tip-0..100

surface runs left to right across the floor; bottom, left, and right cover its other edges. wall-surface and wall-back run from root to tip; wall-base and wall-tip span the end caps. transition runs from pulley-center to wall-root. Upward walls require zero inset and drop. Use 50 for any edge midpoint.

Default hook: `every platform`.

## platform (node)

| Key | Default |
| --- | --- |
| `minimum width` | 5cm |
| `minimum height` | 2cm |
| `strip width` | 0.25cm |
| `wall angle` | -90 degrees |
| `left wall angle` | -90 degrees |
| `right wall angle` | -90 degrees |
| `wall inset` | 0cm |
| `left wall inset` | 0cm |
| `right wall inset` | 0cm |
| `wall drop` | 0cm |
| `left wall drop` | 0cm |
| `right wall drop` | 0cm |
| `pulley edge` | off; shared preset uses 0.5cm inset and drop |
| `left pulley edge` | off; left-side preset uses 0.5cm inset and drop |
| `right pulley edge` | off; right-side preset uses 0.5cm inset and drop |
| `pulley edges` | off; both-side alias of pulley edge |

Size aliases: platform width = minimum width; platform depth = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, surface, left-pulley-center, right-pulley-center, left-wall-root, right-wall-root, floor-center, left-wall-center, right-wall-center, text

**Families:** bottom-0..100, right-0..100, surface-0..100, left-0..100, left-transition-0..100, right-transition-0..100, left-wall-surface-0..100, left-wall-back-0..100, left-wall-base-0..100, left-wall-tip-0..100, right-wall-surface-0..100, right-wall-back-0..100, right-wall-base-0..100, right-wall-tip-0..100

surface runs left to right across the floor. Each wall has surface, back, base, and tip families with left-wall or right-wall prefixes; each transition runs from its pulley-center to wall-root. Upward walls require zero inset and drop. Use 50 for any edge midpoint.

Default hook: `every platform`.

## wedge (node)

| Key | Default |
| --- | --- |
| `minimum width` | 4cm |
| `wedge height` | derived |
| `wedge angle` | 30 degrees |
| `wedge right angle at` | br |
| `wedge top inset` | 0cm |
| `wedge top drop` | 0cm |
| `pulley edge` | off; preset uses 0.5cm inset and 1cm drop |
| `surface guide length` | 0.5cm |

Size aliases: wedge width = minimum width.

**Anchors:** surface-start, surface-end, center, north, south, east, west, north east, north west, south east, south west, bl, br, top, pulley-center, wall-root, transition-mid, base-mid, right-mid, slope-mid, slope-right-mid, centroid, mid, text

**Families:** base-0..100, right-0..100, slope-0..100, transition-0..100, surface-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100, right-surface-0..100, right-tangent-before-0..100, right-tangent-after-0..100, right-normal-0..100

base, right, and slope follow the outline counterclockwise from bl. surface runs left to right on the primary usable incline; in top mode right-surface selects the second incline. right-mid equals right-50; slope-mid equals surface-50. A pulley edge is supported in br and bl modes, and its centroid follows the filled four-point body. Directions and normals are local to the node.

Default hook: `every wedge`.

## ground (node)

| Key | Default |
| --- | --- |
| `minimum width` | 6cm |
| `minimum height` | 0.3cm |

Size aliases: ground width = minimum width; ground depth = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right, surface, text

**Families:** bottom-0..100, right-0..100, surface-0..100, left-0..100

surface runs left to right on the top contact face; bottom, left, and right cover the other edges. Use 50 for an edge midpoint.

Default hook: `every ground`.

## ceiling (node)

| Key | Default |
| --- | --- |
| `minimum width` | 2cm |
| `minimum height` | 0.3cm |

Size aliases: ceiling width = minimum width; ceiling depth = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right, surface, text

**Families:** surface-0..100, right-0..100, top-0..100, left-0..100

surface runs left to right on the underside; top, left, and right cover the other edges. Use 50 for an edge midpoint.

Default hook: `every ceiling`.

## wall-left (node)

| Key | Default |
| --- | --- |
| `minimum width` | 0.3cm |
| `minimum height` | 3cm |

Size aliases: wall thickness = minimum width; wall height = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right, surface, text

**Families:** bottom-0..100, surface-0..100, top-0..100, left-0..100

surface runs bottom to top on the right contact face; top, bottom, and left cover the other edges. Use 50 for an edge midpoint.

Default hook: `every wall-left`.

## wall-right (node)

| Key | Default |
| --- | --- |
| `minimum width` | 0.3cm |
| `minimum height` | 3cm |

Size aliases: wall thickness = minimum width; wall height = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right, surface, text

**Families:** bottom-0..100, right-0..100, top-0..100, surface-0..100

surface runs bottom to top on the left contact face; top, bottom, and right cover the other edges. Use 50 for an edge midpoint.

Default hook: `every wall-right`.

## ramp (node)

| Key | Default |
| --- | --- |
| `minimum width` | 8.6cm |
| `ramp run` | 2.6cm |
| `ramp rise` | derived |
| `ramp angle` | 30 |
| `ramp depth` | 0.25cm |
| `ramp wall height` | 1.5cm |
| `ramp wall width` | 0.25cm |
| `ramp direction` | right |
| `ramp guide length` | 0.5cm |

**Anchors:** center, surface-start, surface-mid, surface-end, floor-start, floor-mid, floor-end, ramp-foot, ramp-mid, ramp-top, wall-top, wall-mid, wall-bottom, base-start, base-end, angle-baseline, angle-label, angle-first, angle-second, text

**Families:** floor-0..100, incline-0..100, wall-surface-0..100, wall-back-0..100, wall-tip-0..100, base-0..100, end-0..100, surface-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100; legacy .0..100 shorthand also available

surface follows floor plus incline by distance; floor and incline select each component. wall-surface, wall-back, wall-tip, base, and end cover the remaining outline. At the sharp joint the tangent uses the incline side.

Default hook: `every ramp`.

## curved-ramp (node)

| Key | Default |
| --- | --- |
| `curved ramp floor length` | 3.75cm |
| `curved ramp radius` | 4cm |
| `curved ramp angle` | 90 |
| `curved ramp back extension` | 1cm |
| `ramp depth` | 0.25cm |
| `ramp direction` | right |
| `ramp guide length` | 0.5cm |

**Anchors:** center, surface-start, surface-mid, surface-end, curve-center, curve-start, curve-mid, curve-end, floor-start, floor-mid, floor-end, base-start, base-end, back-top, back-bottom, text

**Families:** floor-0..100, start-0..100, base-0..100, back-0..100, top-0..100, surface-0..100, curve-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100, curve-tangent-before-0..100, curve-tangent-after-0..100, curve-normal-0..100; legacy .0..100 shorthand also available

surface follows floor plus arc by distance; curve follows the arc only. floor, start, base, back, and top cover the remaining boundary.

Default hook: `every curved-ramp`.

## block (node)

| Key | Default |
| --- | --- |
| `minimum width` | 1cm |
| `minimum height` | 1cm |

Size aliases: block width = minimum width; block height = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, base, base east, base west, mid, mid east, mid west, text

**Families:** bottom-0..100, right-0..100, top-0..100, left-0..100; Bare numeric anchors remain angles in degrees, as in ordinary TikZ.

bottom, right, top, left follow the boundary counterclockwise. Use 0 for an edge start, 50 for its midpoint, 100 for its end.

Default hook: `every block`.

## pulley (node)

| Key | Default |
| --- | --- |
| `minimum size` | 1cm |
| `pulley axle radius` | 1.5pt |
| `pulley axle color` | black |

Size aliases: pulley diameter = minimum size.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, base, base east, base west, mid, mid east, mid west, text

**Families:** rim-0..100; Bare numeric anchors remain angles in degrees, as in ordinary TikZ.

rim starts at the rightmost point and runs counterclockwise around the circle. 25 is north, 50 west, 75 south, and 100 returns to the start.

Default hook: `every pulley`.

## particle (node)

| Key | Default |
| --- | --- |
| `minimum size` | 3mm |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, base, base east, base west, mid, mid east, mid west, text

**Families:** rim-0..100; Bare numeric anchors remain angles in degrees, as in ordinary TikZ.

rim starts at the rightmost point and runs counterclockwise around the circle. 25 is north, 50 west, 75 south, and 100 returns to the start.

Default hook: `every particle`.

## disk (node)

| Key | Default |
| --- | --- |
| `minimum size` | 15mm |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, base, base east, base west, mid, mid east, mid west, text

**Families:** rim-0..100; Bare numeric anchors remain angles in degrees, as in ordinary TikZ.

rim starts at the rightmost point and runs counterclockwise around the circle. 25 is north, 50 west, 75 south, and 100 returns to the start.

Default hook: `every disk`.

## ring (node)

| Key | Default |
| --- | --- |
| `minimum size` | 15mm |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, base, base east, base west, mid, mid east, mid west, text

**Families:** rim-0..100; Bare numeric anchors remain angles in degrees, as in ordinary TikZ.

rim starts at the rightmost point and runs counterclockwise around the circle. 25 is north, 50 west, 75 south, and 100 returns to the start.

Default hook: `every ring`.

## spring (node and path)

| Key | Default |
| --- | --- |
| `minimum width` | 3cm (node) |
| `minimum height` | 0pt (node) |
| `pre length` | 5pt |
| `post length` | 5pt |
| `amplitude` | 4.5pt |
| `segment length` | 4.5pt |
| `aspect` | 0.5 |

Size aliases: spring length = minimum width.

**Anchors:** center, start, end, coil-start, coil-end, north, south, east, west, north east, south west, north west, south east, text

**Families:** axis-0..100

Use draw[spring] (A)--(B) for a two-point connection, or node[spring] (S) {} for a positioned coil. Node length defaults to 3cm; spring length and minimum width set its length. start/end are exact axis attachments, coil-start/coil-end delimit the leads, and axis-0..100 samples the straight axis, not the coil wire. show anchors/show keys apply to nodes; physicshelp{spring} describes both forms. Lead lengths may be zero; their sum must be smaller than the node length. amplitude and segment length must be positive.

Default hook: `every spring`.

## rope (path)

| Key | Default |
| --- | --- |
| `line width` | 0.5pt |
| `over pulley` | required node name |
| `string route` | surface-right |
| `string start solution` | 2 |
| `string end solution` | 1 |
| `string wrap` | clockwise |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Use draw[rope] (A) to[over pulley=P] (B). Endpoints must lie outside a circular pulley. Labels on to sit on the final straight segment. shortest changes wrap only, not the tangent pair.

Default hook: `every rope`.

## force (path)

| Key | Default |
| --- | --- |
| `line width` | 0.7pt |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Default hook: `every force`.

## velocity (path)

| Key | Default |
| --- | --- |
| `line width` | 0.6pt |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Default hook: `every velocity`.

## acceleration (path)

| Key | Default |
| --- | --- |
| `line width` | 0.6pt |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Default hook: `every acceleration`.

## torque (path)

| Key | Default |
| --- | --- |
| `line width` | 0.7pt |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Default hook: `every torque`.

## rod (path)

| Key | Default |
| --- | --- |
| `line width` | 2pt |

**Anchors:** No private anchors; use path endpoints and nodes along the path.

**Families:** None

Default hook: `every rod`.

## pin-support (pic)

| Key | Default |
| --- | --- |
| `support size` | 6mm |

**Anchors:** pivot, base, left, right

**Families:** None

Use pic (S) {pin-support}; anchors are coordinates (S-pivot), (S-base), (S-left), (S-right).

Default hook: `every support`.

## roller-support (pic)

| Key | Default |
| --- | --- |
| `support size` | 6mm |

**Anchors:** pivot, base, left, right

**Families:** None

Use pic (S) {roller-support}; anchors are coordinates (S-pivot), (S-base), (S-left), (S-right).

Default hook: `every support`.

## pendulum (pic)

| Key | Default |
| --- | --- |
| `pendulum length` | 2cm |
| `pendulum angle` | 30 degrees |

**Anchors:** pivot, bob (node)

**Families:** None

Use pic (P) {pendulum}. Angle is measured from downward vertical; positive swings right. Length is pivot to bob centre. Use (P-pivot) and (P-bob.center).

Default hook: `every pendulum`.

## polar element (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 1.8cm |
| `element outer radius` | 2cm |
| `element radial thickness` | derived |
| `element start angle` | 30 degrees |
| `element delta angle` | 30 degrees |
| `element dimension offset` | 4mm |
| `element radius label` | r |
| `element radial label` | dr |
| `element angular label` | d theta |
| `element arc label` | r d theta |
| `show dimensions` | off |

**Anchors:** center, text, north, south, east, west, north east, north west, south east, south west, centroid, inner-start, inner-mid, inner-end, outer-start, outer-mid, outer-end, start-mid, end-mid

**Families:** inner-0..100, outer-0..100, start-0..100, end-0..100

An annular sector from inner-start to outer-end. Set inner radius to zero for a sector or delta angle to 360 degrees for a full ring.

Default hook: `every polar element`.

## differential sector (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 0cm |
| `element outer radius` | 2cm |
| `element radial thickness` | derived |
| `element start angle` | 30 degrees |
| `element delta angle` | 30 degrees |
| `element dimension offset` | 4mm |
| `element radius label` | r |
| `element angular label` | d theta |
| `element arc label` | r d theta |
| `show dimensions` | off |

**Anchors:** center, text, north, south, east, west, north east, north west, south east, south west, centroid, inner-start, inner-mid, inner-end, outer-start, outer-mid, outer-end, start-mid, end-mid

**Families:** inner-0..100, outer-0..100, start-0..100, end-0..100

A polar-element preset with zero inner radius. The outer arc represents r d theta and numeric families follow every boundary.

Default hook: `every differential sector`.

## differential ring (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 1.8cm |
| `element outer radius` | 2cm |
| `element radial thickness` | derived |
| `element delta angle` | 360 degrees |
| `element radius label` | r |
| `element radial label` | dr |
| `show dimensions` | off |

**Anchors:** center, text, north, south, east, west, north east, north west, south east, south west, centroid, inner-start, inner-mid, inner-end, outer-start, outer-mid, outer-end, start-mid, end-mid

**Families:** inner-0..100, outer-0..100, start-0..100, end-0..100

A polar-element preset with a 360-degree sweep. Use source element on an unwrapped ring to copy its radii.

Default hook: `every differential ring`.

## unwrapped ring (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 1.8cm |
| `element outer radius` | 2cm |
| `element radial thickness` | derived |
| `source element` | optional named element |
| `element circumference label` | 2 pi r |
| `element radial label` | dr |
| `show dimensions` | off |

**Anchors:** center, text, centroid, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right

**Families:** bottom-0..100, right-0..100, top-0..100, left-0..100

A differential approximation with width 2 pi times the inner reference radius and height equal to the radial thickness. source element copies both radii from a named polar element.

Default hook: `every unwrapped ring`.

## spherical shell (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 1cm |
| `element outer radius` | derived |
| `element radial thickness` | 1.5mm |
| `element delta angle` | 360 degrees |
| `element radius label` | r |
| `element radial label` | dr |
| `show dimensions` | off |

**Anchors:** center, text, north, south, east, west, north east, north west, south east, south west, centroid, inner-start, inner-mid, inner-end, outer-start, outer-mid, outer-end, start-mid, end-mid

**Families:** inner-0..100, outer-0..100, start-0..100, end-0..100

A concentric differential shell shown in section. Its full-sweep anchors and radial geometry match the spherical-shell construction.

Default hook: `every spherical shell`.

## hollow sphere (node)

| Key | Default |
| --- | --- |
| `element inner radius` | 1cm |
| `element outer radius` | 2cm |
| `element radial thickness` | derived |
| `element delta angle` | 360 degrees |
| `element cavity radius label` | a |
| `element body radius label` | R |
| `show dimensions` | off |

**Anchors:** center, text, north, south, east, west, north east, north west, south east, south west, centroid, inner-start, inner-mid, inner-end, outer-start, outer-mid, outer-end, start-mid, end-mid

**Families:** inner-0..100, outer-0..100, start-0..100, end-0..100

A finite spherical wall shown in section, with independent inner and outer radii.

Default hook: `every hollow sphere`.

## rectangular element (node)

| Key | Default |
| --- | --- |
| `element width` | 8mm |
| `element height` | 6mm |
| `element width label` | dx |
| `element height label` | dy |
| `show dimensions` | off |

**Anchors:** center, text, centroid, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right

**Families:** bottom-0..100, right-0..100, top-0..100, left-0..100

A Cartesian differential area with independent width and height, complete boundary anchors, and optional dimension labels.

Default hook: `every rectangular element`.

## rectangular strip (node)

| Key | Default |
| --- | --- |
| `element width` | 4cm |
| `element height` | 2mm |
| `element width label` | b |
| `element height label` | dx |
| `show dimensions` | off |

**Anchors:** center, text, centroid, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right

**Families:** bottom-0..100, right-0..100, top-0..100, left-0..100

A full-width strip preset. Change its width and differential thickness independently.

Default hook: `every rectangular strip`.

## rectangular sheet (node)

| Key | Default |
| --- | --- |
| `element width` | 5cm |
| `element height` | 3cm |

**Anchors:** center, text, centroid, north, south, east, west, north east, north west, south east, south west, top-left, top-right, bottom-left, bottom-right

**Families:** bottom-0..100, right-0..100, top-0..100, left-0..100

A finite unshaded sheet node used alone or as the body in a sheet element diagram.

Default hook: `every rectangular sheet`.

## differential ring diagram (pic)

| Key | Default |
| --- | --- |
| `element inner radius` | 1cm |
| `element outer radius` | 1.2cm |
| `element radial thickness` | derived |
| `element body radius` | 2cm |
| `element diagram gap` | 5mm |
| `element center dot radius` | 1.2pt |
| `show dimensions` | on for both parts |

**Anchors:** center, body-north, body-south, body-east, body-west, ring (node), strip (node)

**Families:** None

Use pic (D) {differential ring diagram={...}}. It keeps the body circle, ring, centre mark, and unwrapped strip together. Components are (D-ring) and (D-strip).

Default hook: `every differential ring diagram`.

## sphere shell diagram (pic)

| Key | Default |
| --- | --- |
| `element body radius` | 2cm |
| `element inner radius` | 1cm |
| `element radial thickness` | 1.5mm |
| `element formula label` | dV = 4 pi r squared dr |

**Anchors:** center, body (node), shell (node), formula-anchor

**Families:** None

A solid sphere with a highlighted spherical shell. Components are (S-body) and (S-shell); (S-center) marks the common centre.

Default hook: `every sphere shell diagram`.

## sphere slice diagram (pic)

| Key | Default |
| --- | --- |
| `element body radius` | 2cm |
| `element axial thickness` | 2mm |
| `element position` | 0.35 in (-1 |
| `element projection ratio` | 0.24 |
| `element axial label` | dx |
| `element formula label` | dV = pi y squared dx |

**Anchors:** center, body (node), slice (node), formula-anchor

**Families:** None

A solid sphere with a projected disk slice at a signed normalized axial position. Components are (S-body) and (S-slice).

Default hook: `every sphere slice diagram`.

## hollow sphere diagram (pic)

| Key | Default |
| --- | --- |
| `element inner radius` | 9mm |
| `element outer radius` | 2cm |
| `element cavity radius label` | a |
| `element body radius label` | R |
| `element formula label` | V = 4 pi over 3 times (R cubed - a cubed) |

**Anchors:** center, body-north, body-south, wall (node), formula-anchor

**Families:** None

A hollow sphere in section. Component (H-wall) exposes the inner and outer boundaries.

Default hook: `every hollow sphere diagram`.

## cylinder shell diagram (pic)

| Key | Default |
| --- | --- |
| `element body radius` | 1.6cm |
| `element body height` | 3.4cm |
| `element inner radius` | 9mm |
| `element radial thickness` | 1.5mm |
| `element projection ratio` | 0.25 |
| `element formula label` | dV = 2 pi r h dr |

**Anchors:** center, body (node), shell or slice (node), formula-anchor

**Families:** None

A projected cylinder with a radial cylindrical shell. Components are (C-body) and (C-shell).

Default hook: `every cylinder shell diagram`.

## cylinder slice diagram (pic)

| Key | Default |
| --- | --- |
| `element body radius` | 1.6cm |
| `element body height` | 3.4cm |
| `element axial thickness` | 2mm |
| `element position` | 0.55 |
| `element projection ratio` | 0.25 |
| `element axial label` | dz |
| `element formula label` | dV = pi R squared dz |

**Anchors:** center, body (node), shell or slice (node), formula-anchor

**Families:** None

A projected cylinder with an axial disk slice. Components are (C-body) and (C-slice).

Default hook: `every cylinder slice diagram`.

## cone slice diagram (pic)

| Key | Default |
| --- | --- |
| `element body radius` | 1.8cm |
| `element body height` | 4cm |
| `element axial thickness` | 2mm |
| `element position` | 0.58 from apex |
| `element projection ratio` | 0.24 |
| `element axial label` | dx |
| `element formula label` | dV = pi r(x) squared dx |

**Anchors:** center, apex, base, body (node), slice (node), formula-anchor

**Families:** None

A projected cone with a thin disk slice. element position is measured from apex to base. Components are (K-body) and (K-slice).

Default hook: `every cone slice diagram`.

## sheet element diagram (pic)

| Key | Default |
| --- | --- |
| `element body width` | 5cm |
| `element body height` | 3cm |
| `element width` | 8mm |
| `element height` | 6mm |
| `element position` | 0.58 |
| `element transverse position` | 0.58 |
| `element formula label` | dA = dx dy |

**Anchors:** center, body (node), element (node), formula-anchor

**Families:** None

A rectangular sheet with a named Cartesian element. Components are (A-body) and (A-element).

Default hook: `every sheet element diagram`.

## u tube diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 2cm |
| `fluid height` | 4cm |
| `fluid tube width` | .3cm |
| `fluid left level` | .75 |
| `fluid right level` | .55 |
| `fluid level` | .65 |

**Anchors:** origin, center, bottom, top, left, right, left-surface, right-surface, interface, upper-surface

**Families:** None

Two-liquid U tube. level adds a second liquid only above left level. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every u tube`.

## gas manometer (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 1.8cm |
| `fluid height` | 3.8cm |
| `fluid tube width` | .3cm |
| `fluid left level` | .45 |
| `fluid right level` | .8 |

**Anchors:** origin, center, bottom, top, left, right, left-surface, right-surface, gas

**Families:** None

Gas reservoir connected to a U tube. body label names the gas. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every gas manometer`.

## hydraulic press (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 4cm |
| `fluid height` | 3.5cm |
| `fluid tube width` | .3cm |
| `fluid left level` | .4 |
| `fluid right level` | .8 |

**Anchors:** origin, center, bottom, top, left, right, large-piston, small-piston

**Families:** None

Large piston width is 0.32 times width; tube width sets the small piston. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every hydraulic press`.

## fluid cylinder diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 1.6cm |
| `fluid height` | 3.2cm |
| `fluid level` | .65 |

**Anchors:** origin, center, bottom, top, left, right, surface

**Families:** None

Projected cylinder with an elliptical liquid surface. width is the diameter. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every fluid cylinder`.

## fluid tank diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 3cm |
| `fluid left level` | .7 |
| `fluid right level` | .7 |

**Anchors:** origin, center, bottom, top, left, right, left-surface, right-surface, surface

**Families:** None

Open vessel. Equal endpoint levels give a horizontal free surface. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every fluid tank`.

## pressure element diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 2cm |
| `fluid height` | .65cm |

**Anchors:** origin, center, bottom, top, left, right

**Families:** None

Projected horizontal fluid element with inward pressure forces. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every pressure element`.

## rotating tube (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 5cm |
| `fluid height` | .5cm |
| `fluid tube width` | .3cm |
| `fluid level` | .48 |

**Anchors:** origin, center, bottom, top, left, right, element-left, element-right

**Families:** None

Horizontal tube with a differential section. level locates its left face along width. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every rotating tube`.

## rotating fluid diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 3.5cm |
| `fluid level` | .5 |
| `fluid bend` | .35 |

**Anchors:** origin, center, bottom, top, left, right, vertex, rim-surface

**Families:** None

Parabolic surface. level is the vertex height; bend is the wall-to-vertex rise divided by height. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every rotating fluid`.

## buoyancy (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 3cm |
| `fluid left level` | .8 |
| `fluid right level` | .8 |

**Anchors:** origin, center, bottom, top, left, right, left-surface, right-surface, surface, body

**Families:** None

Immersed body with schematic inward pressure arrows. Arrow lengths do not encode pressure magnitude. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every buoyancy`.

## flow tube diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 5cm |
| `fluid height` | 1.3cm |
| `fluid bend` | .45 |

**Anchors:** origin, center, bottom, top, left, right, inlet, outlet

**Families:** None

Curved flow tube; outlet height is 0.55 times inlet height. bend controls vertical curvature. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every flow tube`.

## meniscus diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 1.2cm |
| `fluid height` | 2.7cm |
| `fluid level` | .7 |
| `fluid bend` | .2 |

**Anchors:** origin, center, bottom, top, left, right, contact-left, contact-right, surface

**Families:** None

Positive bend is concave; negative bend is convex. Contact angle is measured through the liquid. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every meniscus`.

## capillary (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 4cm |
| `fluid height` | 3cm |
| `fluid level` | .35 |
| `fluid left level` | .7 |
| `fluid bend` | .12 |

**Anchors:** origin, center, bottom, top, left, right, contact-left, contact-right, reservoir

**Families:** None

Capillary rise. level is the reservoir surface and left level is the contact-line height. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every capillary`.

## surface tension ring (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 1cm |

**Anchors:** origin, center, bottom, top, left, right

**Families:** None

Projected circular contact line. width and height are the ellipse diameters. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every surface tension ring`.

## liquid ring diagram (pic)

| Key | Default |
| --- | --- |
| `fluid width` | 3.5cm |
| `fluid tube width` | .4cm |
| `fluid angle` | 225 |
| `fluid sweep` | 70 |

**Anchors:** origin, center, bottom, top, left, right, liquid-start, liquid-end

**Families:** None

Annular liquid sector. width is outer diameter, tube width is radial thickness. Angles use degrees counterclockwise from right. Use (F-origin), (F-center), and the listed (F-...) coordinates; these are pic coordinates, not node anchors.

Default hook: `every liquid ring`.

## fluid tank (node)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 3cm |
| `fluid left level` | .7 |
| `fluid right level` | .7 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, left-surface, right-surface, surface, text, base, base east, base west, mid, mid east, mid west

**Families:** surface-0..100, bottom-0..100, right-0..100, left-0..100, bottom-left-0..100, bottom-right-0..100

surface runs left to right. bottom, right, left and the two rounded bottom corners follow the drawn outline counterclockwise.

Default hook: `every fluid tank`.

## meniscus (node)

| Key | Default |
| --- | --- |
| `fluid width` | 1.2cm |
| `fluid height` | 2.7cm |
| `fluid level` | .7 |
| `fluid bend` | .2 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, left-surface, right-surface, surface, text, base, base east, base west, mid, mid east, mid west

**Families:** surface-0..100, bottom-0..100, right-0..100, left-0..100

surface follows the cubic liquid boundary from left to right. bottom, right and left follow the vessel boundary counterclockwise.

Default hook: `every meniscus`.

## rotating fluid (node)

| Key | Default |
| --- | --- |
| `fluid width` | 3cm |
| `fluid height` | 3.5cm |
| `fluid level` | .5 |
| `fluid bend` | .35 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, left-surface, right-surface, surface, text, base, base east, base west, mid, mid east, mid west

**Families:** surface-0..100, bottom-0..100, right-0..100, left-0..100

surface follows the parabola from left to right. bottom, right and left follow the vessel boundary counterclockwise.

Default hook: `every rotating fluid`.

## fluid cylinder (node)

| Key | Default |
| --- | --- |
| `fluid width` | 1.6cm |
| `fluid height` | 3.2cm |
| `fluid level` | .65 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, left-surface, right-surface, surface, text, base, base east, base west, mid, mid east, mid west

**Families:** surface-0..100, surface-rim-0..100, top-0..100, bottom-0..100, right-0..100, left-0..100

surface is the left-to-right diameter of the liquid ellipse; surface-rim, top and bottom are full ellipse boundaries, starting at the rightmost point and running counterclockwise. left and right cover the straight walls.

Default hook: `every fluid cylinder`.

## pressure element (node)

| Key | Default |
| --- | --- |
| `fluid width` | 2cm |
| `fluid height` | .65cm |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, inlet, outlet, text, base, base east, base west, mid, mid east, mid west

**Families:** inlet-0..100, outlet-0..100, inlet-rim-0..100, outlet-rim-0..100, axis-0..100, top-0..100, bottom-0..100

inlet and outlet run bottom to top across their projected faces. inlet-rim and outlet-rim run counterclockwise from the rightmost point. axis joins their centres left to right; top and bottom cover the straight outline.

Default hook: `every pressure element`.

## flow tube (node)

| Key | Default |
| --- | --- |
| `fluid width` | 5cm |
| `fluid height` | 1.3cm |
| `fluid bend` | .45 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, inlet, outlet, text, base, base east, base west, mid, mid east, mid west

**Families:** inlet-0..100, outlet-0..100, axis-0..100, bottom-0..100, top-0..100

inlet and outlet run bottom to top; axis follows their curved midline left to right. bottom runs left to right, top right to left on the actual cubic outline. Curve percentages use the cubic parameter.

Default hook: `every flow tube`.

## liquid ring (node)

| Key | Default |
| --- | --- |
| `fluid width` | 3.5cm |
| `fluid tube width` | .4cm |
| `fluid angle` | 225 |
| `fluid sweep` | 70 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, liquid-start, liquid-end, text, base, base east, base west, mid, mid east, mid west

**Families:** outer-0..100, inner-0..100, liquid-0..100, start-0..100, end-0..100

outer and inner run counterclockwise from the rightmost point. liquid follows the filled sector centreline from liquid-start to liquid-end; start and end run radially from inner to outer boundary.

Default hook: `every liquid ring`.

## u tube (node)

| Key | Default |
| --- | --- |
| `fluid width` | 2cm |
| `fluid height` | 4cm |
| `fluid tube width` | .3cm |
| `fluid left level` | .75 |
| `fluid right level` | .55 |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, left-surface, right-surface, surface, text, base, base east, base west, mid, mid east, mid west

**Families:** surface-0..100, left-surface-0..100, right-surface-0..100, outer-0..100, inner-0..100

left-surface and right-surface independently run left to right across the liquid in each arm. surface selects the left arm, never the empty gap. outer and inner follow the U outline by distance from the left lip down through the bend to the right lip.

Default hook: `every u tube`.

## concave-mirror (node)

| Key | Default |
| --- | --- |
| `mirror radius` | 5cm |
| `mirror thickness` | 0.25cm |
| `mirror aperture angle` | 30 degrees |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, vertex, arc-mid, surface-mid, front-mid, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, top, bottom, text

**Families:** surface-0..100, front-0..100, back-0..100; legacy .0..100 shorthand also available

Default hook: `every concave-mirror`.

## convex-mirror (node)

| Key | Default |
| --- | --- |
| `mirror radius` | 5cm |
| `mirror thickness` | 0.25cm |
| `mirror aperture angle` | 30 degrees |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, vertex, arc-mid, surface-mid, front-mid, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, top, bottom, text

**Families:** surface-0..100, front-0..100, back-0..100; legacy .0..100 shorthand also available

Default hook: `every convex-mirror`.

## convex-lens (node)

| Key | Default |
| --- | --- |
| `convex lens radius` | 5cm |
| `convex lens thickness` | 0.2cm |
| `convex lens aperture angle` | 25 degrees |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, front-mid, back-mid, front-top, front-bottom, back-top, back-bottom, top, bottom, text

**Families:** front-0..100, back-0..100; legacy .0..100 shorthand also available

Default hook: `every convex-lens`.

## concave-lens (node)

| Key | Default |
| --- | --- |
| `concave lens radius` | 5cm |
| `concave lens thickness` | 0.2cm |
| `concave lens aperture angle` | 25 degrees |

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, front-mid, back-mid, front-top, front-bottom, back-top, back-bottom, top, bottom, text

**Families:** front-0..100, back-0..100; legacy .0..100 shorthand also available

Default hook: `every concave-lens`.

## slab (node)

| Key | Default |
| --- | --- |
| `minimum width` | 1.2cm |
| `minimum height` | 3cm |

Size aliases: slab width = minimum width; slab height = minimum height.

**Anchors:** center, north, south, east, west, north east, north west, south east, south west, front, back, front-top, front-bottom, back-top, back-bottom, top, bottom, text

**Families:** front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available

Default hook: `every slab`.

## prism (node)

| Key | Default |
| --- | --- |
| `minimum width` | 3cm |
| `minimum height` | 2.6cm |
| `prism apex angle` | derived |

Size aliases: prism width = minimum width; prism height = minimum height.

**Anchors:** center, centroid, north, south, east, west, north east, north west, south east, south west, apex, base-left, base-right, base-mid, left-mid, right-mid, entry-mid, exit-mid, text

**Families:** base-0..100, right-0..100, left-0..100; legacy .0..100 shorthand also available

Default hook: `every prism`.
