# 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`. ## track (node) | Key | Default | | --- | --- | | `track length` | 4cm | | `track rise` | 1cm | | `track rough start` | 0 | | `track rough end` | 0 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, joint-left, joint-right, text **Families:** surface-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100 surface is distance along the three joined straight segments, left to right. At joints tangent uses the outgoing section. Connect another node with anchor=start at the preceding end. Tangent and inward/left-normal guide points are 0.2 cm from contact. Optional rough interval is a percentage range marked with hatching. Default hook: `every track`. ## circular bowl (node) | Key | Default | | --- | --- | | `circular bowl radius` | 1.4cm | | `circular bowl rough start` | 0 | | `circular bowl rough end` | 0 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** surface-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100 surface follows the lower semicircle left to right. Tangent and inward/left-normal guide points are 0.2 cm from contact. Optional rough interval is a percentage range marked with hatching. Default hook: `every circular bowl`. ## loop track (node) | Key | Default | | --- | --- | | `loop track radius` | 1.4cm | | `loop track rough start` | 0 | | `loop track rough end` | 0 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** surface-0..100, tangent-before-0..100, tangent-after-0..100, normal-0..100 surface starts at the bottom and runs counterclockwise around the full loop. Tangent and inward/left-normal guide points are 0.2 cm from contact. Optional rough interval is a percentage range marked with hatching. Default hook: `every loop track`. ## 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` | inherited | | `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` | inherited | **Anchors:** No private anchors; use path endpoints and nodes along the path. **Families:** None Default hook: `every force`. ## velocity (path) | Key | Default | | --- | --- | | `line width` | inherited | **Anchors:** No private anchors; use path endpoints and nodes along the path. **Families:** None Default hook: `every velocity`. ## acceleration (path) | Key | Default | | --- | --- | | `line width` | inherited | **Anchors:** No private anchors; use path endpoints and nodes along the path. **Families:** None Default hook: `every acceleration`. ## torque (path) | Key | Default | | --- | --- | | `line width` | inherited | **Anchors:** No private anchors; use path endpoints and nodes along the path. **Families:** None Default hook: `every torque`. ## rod (path) | Key | Default | | --- | --- | | `line width` | inherited | **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`. ## beam (node) | Key | Default | | --- | --- | | `beam length` | 3cm | | `beam thickness` | .25cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, pivot, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, axis-0..100 axis runs left to right; boundary families run counterclockwise. rod node preserves the existing rod path style. Default hook: `every beam`. ## damper (node) | Key | Default | | --- | --- | | `damper length` | 3cm | | `damper width` | .7cm | | `damper position` | .5 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, piston, text **Families:** axis-0..100, piston-0..100, top-0..100, bottom-0..100 piston runs bottom to top; position is a visual stroke fraction, not a force law. Default hook: `every damper`. ## compound pulley (node) | Key | Default | | --- | --- | | `compound pulley radius` | 1cm | | `compound pulley inner radius` | .55cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, axle, text **Families:** rim-0..100, inner-rim-0..100 Two concentric drums share one axle. Both rims start at the rightmost point and run counterclockwise. This is a stepped pulley, not an automatically routed tackle. Default hook: `every compound pulley`. ## physical pendulum (node) | Key | Default | | --- | --- | | `physical pendulum length` | 3cm | | `physical pendulum width` | .45cm | | `physical pendulum pivot` | .1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, pivot, mass-center, tip, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, axis-0..100 Uniform rigid bar. axis runs top to bottom; pivot is a fraction from the top. Use anchor=pivot and rotate to suspend it. Default hook: `every physical 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:** disk-rim-0..100 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:** body-rim-0..100, shell-outer-rim-0..100, shell-inner-rim-0..100, height-0..100 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:** body-rim-0..100, slice-top-rim-0..100, slice-bottom-rim-0..100, height-0..100 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:** body-rim-0..100, slice-top-rim-0..100, slice-bottom-rim-0..100, height-0..100 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`. ## solid cylinder (node) | Key | Default | | --- | --- | | `solid cylinder radius` | 1cm | | `solid cylinder height` | 2.5cm | | `solid cylinder depth` | .25 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, top-center, text **Families:** axis-0..100, bottom-rim-0..100, top-rim-0..100, generator-0..100 Projected wireframe: rims start at the right and run counterclockwise; axis and right generator run bottom to top. Depth is ellipse compression, not a 3D camera. Default hook: `every solid cylinder`. ## solid cone (node) | Key | Default | | --- | --- | | `solid cone radius` | 1cm | | `solid cone height` | 2.5cm | | `solid cone depth` | .25 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, top-center, apex, text **Families:** axis-0..100, bottom-rim-0..100, top-rim-0..100, generator-0..100 Projected wireframe: rims start at the right and run counterclockwise; axis and right generator run bottom to top. Depth is ellipse compression, not a 3D camera. Default hook: `every solid cone`. ## solid frustum (node) | Key | Default | | --- | --- | | `solid frustum radius` | 1cm | | `solid frustum height` | 2.5cm | | `solid frustum depth` | .25 | | `solid frustum top ratio` | .5 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, top-center, text **Families:** axis-0..100, bottom-rim-0..100, top-rim-0..100, generator-0..100 Projected wireframe: rims start at the right and run counterclockwise; axis and right generator run bottom to top. Depth is ellipse compression, not a 3D camera. Default hook: `every solid frustum`. ## cylindrical shell (node) | Key | Default | | --- | --- | | `cylindrical shell radius` | 1cm | | `cylindrical shell height` | 2.5cm | | `cylindrical shell depth` | .25 | | `cylindrical shell thickness` | .2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, top-center, text **Families:** axis-0..100, bottom-rim-0..100, top-rim-0..100, generator-0..100, inner-bottom-rim-0..100, inner-top-rim-0..100 Projected wireframe: rims start at the right and run counterclockwise; axis and right generator run bottom to top. Depth is ellipse compression, not a 3D camera. Default hook: `every cylindrical shell`. ## conical shell (node) | Key | Default | | --- | --- | | `conical shell radius` | 1cm | | `conical shell height` | 2.5cm | | `conical shell depth` | .25 | | `conical shell top ratio` | .5 | | `conical shell thickness` | .2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, top-center, text **Families:** axis-0..100, bottom-rim-0..100, top-rim-0..100, generator-0..100, inner-bottom-rim-0..100, inner-top-rim-0..100 Projected wireframe: rims start at the right and run counterclockwise; axis and right generator run bottom to top. Depth is ellipse compression, not a 3D camera. Conical shell is a hollow frustum; thickness is radial at the base and scales with top ratio. Default hook: `every conical shell`. ## hemisphere (node) | Key | Default | | --- | --- | | `hemisphere radius` | 1.2cm | | `hemisphere depth` | .25 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, base-center, apex, text **Families:** rim-0..100, meridian-0..100, axis-0..100 Upper hemisphere in wireframe projection; meridian runs left to right over the dome, rim counterclockwise, axis from base centre to apex. Default hook: `every hemisphere`. ## 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`. ## piston cylinder (node) | Key | Default | | --- | --- | | `piston cylinder width` | 1.8cm | | `piston cylinder height` | 3cm | | `piston position` | .65 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, piston, rod-end, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, piston-0..100, axis-0..100, wall-left-0..100, wall-right-0..100 Piston family is the lower gas-contact face, left to right; position is measured from the bottom. Cylinder top is open. Default hook: `every piston cylinder`. ## capillary tube (node) | Key | Default | | --- | --- | | `capillary width` | .5cm | | `capillary height` | 3cm | | `capillary level` | .6 | | `capillary sag` | .12cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, surface, text **Families:** surface-0..100, wall-left-0..100, wall-right-0..100, axis-0..100 surface runs left to right by horizontal position. Positive sag gives a concave meniscus; negative sag a convex meniscus. Heights are illustrative, not computed from surface tension. Default hook: `every capillary tube`. ## nozzle (node) | Key | Default | | --- | --- | | `nozzle length` | 4cm | | `nozzle diameter` | 1.4cm | | `nozzle throat diameter` | .55cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, inlet, outlet, throat, text **Families:** axis-0..100, top-0..100, bottom-0..100, inlet-0..100, outlet-0..100, throat-0..100 Wall families run inlet to outlet by axial position. Cross-sections run bottom to top. Cosine profiles join smoothly; flow is not solved. Default hook: `every nozzle`. ## venturi (node) | Key | Default | | --- | --- | | `venturi length` | 4cm | | `venturi diameter` | 1.4cm | | `venturi throat diameter` | .55cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, inlet, outlet, throat, text **Families:** axis-0..100, top-0..100, bottom-0..100, inlet-0..100, outlet-0..100, throat-0..100 Wall families run inlet to outlet by axial position. Cross-sections run bottom to top. Cosine profiles join smoothly; flow is not solved. Default hook: `every venturi`. ## layered tank (node) | Key | Default | | --- | --- | | `layered tank width` | 3cm | | `layered tank height` | 2.5cm | | `layered tank interface` | .35 | | `layered tank level` | .75 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, lower-center, upper-center, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, interface-0..100, surface-0..100 Two liquid layers; interface and surface run left to right. Separate centre anchors support density labels without color. Default hook: `every layered tank`. ## 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, top-0..100, bottom-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, top-0..100, bottom-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, surface-0..100, top-0..100, bottom-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, surface-0..100, top-0..100, bottom-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, surface-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, surface-0..100, entry-0..100, exit-0..100; legacy .0..100 shorthand also available Default hook: `every prism`. ## plane-mirror (node) | Key | Default | | --- | --- | | `mirror height` | 3cm | | `mirror thickness` | 0.25cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, top, bottom, front-mid, surface-mid, vertex, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, text **Families:** surface-0..100, front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available Default hook: `every plane-mirror`. ## plano-convex-lens (node) | Key | Default | | --- | --- | | `lens height` | 3cm | | `lens thickness` | 0.2cm | | `lens front radius` | 5cm | | `lens back radius` | 5cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, top, bottom, front-mid, surface-mid, vertex, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, text **Families:** surface-0..100, front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available Default hook: `every plano-convex-lens`. ## plano-concave-lens (node) | Key | Default | | --- | --- | | `lens height` | 3cm | | `lens thickness` | 0.2cm | | `lens front radius` | 5cm | | `lens back radius` | 5cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, top, bottom, front-mid, surface-mid, vertex, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, text **Families:** surface-0..100, front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available Default hook: `every plano-concave-lens`. ## positive-meniscus-lens (node) | Key | Default | | --- | --- | | `lens height` | 3cm | | `lens thickness` | 0.2cm | | `lens front radius` | 4cm | | `lens back radius` | 6cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, top, bottom, front-mid, surface-mid, vertex, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, text **Families:** surface-0..100, front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available Default hook: `every positive-meniscus-lens`. ## negative-meniscus-lens (node) | Key | Default | | --- | --- | | `lens height` | 3cm | | `lens thickness` | 0.2cm | | `lens front radius` | 6cm | | `lens back radius` | 4cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, top, bottom, front-mid, surface-mid, vertex, back-mid, front-top, front-bottom, surface-top, surface-bottom, back-top, back-bottom, text **Families:** surface-0..100, front-0..100, back-0..100, top-0..100, bottom-0..100; legacy .0..100 shorthand also available Default hook: `every negative-meniscus-lens`. ## transverse wave (node) | Key | Default | | --- | --- | | `wave length` | 4cm | | `wave amplitude` | .4cm | | `wave cycles` | 2 | | `wave phase` | 0 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** axis-0..100, curve-0..100 Axis runs left to right; curve is a snapshot, not a time simulation. Default hook: `every transverse wave`. ## standing wave (node) | Key | Default | | --- | --- | | `wave length` | 4cm | | `wave amplitude` | .4cm | | `standing wave lobes` | 3 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** axis-0..100, curve-0..100 Axis runs left to right; curve is a snapshot, not a time simulation. Fixed endpoints. lobes controls half-wavelengths; node-N indexes 0..lobes and antinode-N indexes 0..lobes-1 on the axis. Default hook: `every standing wave`. ## longitudinal wave (node) | Key | Default | | --- | --- | | `wave length` | 4cm | | `wave amplitude` | .4cm | | `wave cycles` | 2 | | `wave coils` | 16 | | `wave compression` | .65 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** axis-0..100, curve-0..100 Axis runs left to right; curve is a snapshot, not a time simulation. curve follows a schematic variable-spacing spring; compression below 1 prevents reversal of the longitudinal coordinate. Default hook: `every longitudinal wave`. ## open pipe (node) | Key | Default | | --- | --- | | `pipe length` | 4cm | | `pipe width` | .8cm | | `pipe mode` | 1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** axis-0..100, curve-0..100, top-0..100, bottom-0..100 Displacement pattern: open ends are antinodes, the closed left end is a node. mode selects harmonics; closed-pipe harmonics are odd. node-N and antinode-N are zero-based ordinal locations on the axis, not percentages. Default hook: `every open pipe`. ## closed pipe (node) | Key | Default | | --- | --- | | `pipe length` | 4cm | | `pipe width` | .8cm | | `pipe mode` | 1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, text **Families:** axis-0..100, curve-0..100, top-0..100, bottom-0..100 Displacement pattern: open ends are antinodes, the closed left end is a node. mode selects harmonics; closed-pipe harmonics are odd. node-N and antinode-N are zero-based ordinal locations on the axis, not percentages. Default hook: `every closed pipe`. ## thermal reservoir (node) | Key | Default | | --- | --- | | `reservoir width` | 3cm | | `reservoir height` | .8cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-left, heat-right, heat-top, heat-bottom, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100 Physical boundaries run counterclockwise from bottom-left. Heat ports lie at face midpoints. Geometry is schematic; text and temperatures are supplied by the author. Default hook: `every thermal reservoir`. ## gas chamber (node) | Key | Default | | --- | --- | | `chamber width` | 2.4cm | | `chamber height` | 1.8cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-left, heat-right, heat-top, heat-bottom, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100 Physical boundaries run counterclockwise from bottom-left. Heat ports lie at face midpoints. Geometry is schematic; text and temperatures are supplied by the author. Default hook: `every gas chamber`. ## thermal wall (node) | Key | Default | | --- | --- | | `thermal wall width` | .3cm | | `thermal wall height` | 2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-left, heat-right, heat-top, heat-bottom, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100 Physical boundaries run counterclockwise from bottom-left. Heat ports lie at face midpoints. Geometry is schematic; text and temperatures are supplied by the author. Default hook: `every thermal wall`. ## heat engine (node) | Key | Default | | --- | --- | | `thermal device size` | 1.2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, hot, cold, work, heat-in, heat-out, text **Families:** rim-0..100 hot is the upper port, cold the lower port, work the right port. heat-in and heat-out follow the device role. Arrow directions are supplied by the named diagram pic or by the author. Default hook: `every heat engine`. ## refrigerator (node) | Key | Default | | --- | --- | | `thermal device size` | 1.2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, hot, cold, work, heat-in, heat-out, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100 hot is the upper port, cold the lower port, work the right port. heat-in and heat-out follow the device role. Arrow directions are supplied by the named diagram pic or by the author. Default hook: `every refrigerator`. ## isothermal process (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `pv start pressure` | 3 | | `pv end volume` | 3 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, start-volume, end-volume, start-pressure, end-pressure, origin, volume-end, pressure-end, text **Families:** process-0..100, volume-axis-0..100, pressure-axis-0..100 process advances linearly in volume from the start to end state; compression is supported. PV values are unitless numbers in consistent author-chosen units. Axis maxima must contain both endpoints. No heat or work integral is computed. Default hook: `every isothermal process`. ## isobaric process (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `pv start pressure` | 3 | | `pv end volume` | 3 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, start-volume, end-volume, start-pressure, end-pressure, origin, volume-end, pressure-end, text **Families:** process-0..100, volume-axis-0..100, pressure-axis-0..100 process advances linearly in volume from the start to end state; compression is supported. PV values are unitless numbers in consistent author-chosen units. Axis maxima must contain both endpoints. No heat or work integral is computed. Default hook: `every isobaric process`. ## isochoric process (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `pv start pressure` | 3 | | `pv end pressure` | 1.5 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, start-volume, end-volume, start-pressure, end-pressure, origin, volume-end, pressure-end, text **Families:** process-0..100, volume-axis-0..100, pressure-axis-0..100 process advances linearly in pressure at fixed volume. PV values are unitless numbers in consistent author-chosen units. Axis maxima must contain both endpoints. No heat or work integral is computed. Default hook: `every isochoric process`. ## adiabatic process (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `pv start pressure` | 3 | | `pv end volume` | 3 | | `pv gamma` | 1.4 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, start-volume, end-volume, start-pressure, end-pressure, origin, volume-end, pressure-end, text **Families:** process-0..100, volume-axis-0..100, pressure-axis-0..100 process advances linearly in volume from the start to end state; compression is supported. PV values are unitless numbers in consistent author-chosen units. Axis maxima must contain both endpoints. No heat or work integral is computed. This is the reversible ideal-gas relation pressure times volume to the gamma power is constant with gamma > 1. Default hook: `every adiabatic process`. ## polytropic process (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `pv start pressure` | 3 | | `pv end volume` | 3 | | `pv exponent` | 1.2 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, start, end, start-volume, end-volume, start-pressure, end-pressure, origin, volume-end, pressure-end, text **Families:** process-0..100, volume-axis-0..100, pressure-axis-0..100 process advances linearly in volume from the start to end state; compression is supported. PV values are unitless numbers in consistent author-chosen units. Axis maxima must contain both endpoints. No heat or work integral is computed. Default hook: `every polytropic process`. ## rectangular cycle (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv low volume` | 1 | | `pv high volume` | 3 | | `pv low pressure` | 1 | | `pv high pressure` | 3 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, state-A, state-B, state-C, state-D, state-A-volume, state-A-pressure, state-B-volume, state-B-pressure, state-C-volume, state-C-pressure, state-D-volume, state-D-pressure, origin, volume-end, pressure-end, text **Families:** AB-0..100, BC-0..100, CD-0..100, DA-0..100, volume-axis-0..100, pressure-axis-0..100 Clockwise A-B-C-D cycle. Branch percentages are linear in the changing coordinate. A is low-volume low-pressure; B high-pressure; C high-volume high-pressure; D low-pressure. Default hook: `every rectangular cycle`. ## carnot cycle (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv start volume` | 1 | | `carnot hot constant` | 3 | | `carnot temperature ratio` | .75 | | `carnot expansion ratio` | 1.5 | | `pv gamma` | 1.4 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, state-A, state-B, state-C, state-D, state-A-volume, state-A-pressure, state-B-volume, state-B-pressure, state-C-volume, state-C-pressure, state-D-volume, state-D-pressure, origin, volume-end, pressure-end, text **Families:** hot-0..100, expansion-0..100, cold-0..100, compression-0..100, volume-axis-0..100, pressure-axis-0..100 Reversible ideal-gas Carnot cycle: hot A-B isotherm, B-C adiabatic expansion, cold C-D isotherm, D-A adiabatic compression. Cold/hot is an absolute-temperature ratio; hot constant is P_A V_A. Branch percentages interpolate volume, not arc length. States are derived to close exactly. Default hook: `every carnot cycle`. ## pv diagram (node) | Key | Default | | --- | --- | | `pv width` | 4cm | | `pv height` | 3cm | | `pv max volume` | 4 | | `pv max pressure` | 4 | | `pv show axes` | true | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, origin, volume-end, pressure-end, text **Families:** volume-axis-0..100, pressure-axis-0..100 Empty PV axes frame. Overlay process nodes at the same center with matching axis keys and pv show axes=false; the axes and projection anchors remain available. Default hook: `every pv diagram`. ## heat engine diagram (pic) | Key | Default | | --- | --- | | `thermo diagram separation` | 2cm | | `thermo diagram work length` | 1.5cm | | `reservoir width` | 3cm | | `reservoir height` | .8cm | | `thermal device size` | 1.2cm | **Anchors:** origin, hot (node), cold (node), device (node), work **Families:** heat-hot-0..100, heat-cold-0..100, work-0..100 Heat enters from the hot reservoir, part leaves as work, and the remainder reaches the cold reservoir. Named child nodes use the pic prefix. Flow coordinate families heat-hot, heat-cold and work run from arrow tail to head; use the pic prefix and integer percentages. Default hook: `every heat engine diagram`. ## refrigerator diagram (pic) | Key | Default | | --- | --- | | `thermo diagram separation` | 2cm | | `thermo diagram work length` | 1.5cm | | `reservoir width` | 3cm | | `reservoir height` | .8cm | | `thermal device size` | 1.2cm | **Anchors:** origin, hot (node), cold (node), device (node), work **Families:** heat-hot-0..100, heat-cold-0..100, work-0..100 Work enters the device, heat is absorbed from the cold reservoir, and heat is rejected to the hot reservoir. Labels are magnitudes supplied by the author. Default hook: `every refrigerator diagram`. ## conduction slab (node) | Key | Default | | --- | --- | | `conduction width` | 3cm | | `conduction height` | 2cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-left, heat-right, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, axis-0..100 Boundary families run counterclockwise; axis runs left to right. Heat flux and temperatures are author annotations; no conductivity law is solved. Default hook: `every conduction slab`. ## composite wall (node) | Key | Default | | --- | --- | | `composite width` | 3cm | | `composite height` | 2cm | | `composite split` | .45 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-left, heat-right, layer-1-center, layer-2-center, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, axis-0..100, interface-0..100 Boundary families run counterclockwise; axis runs left to right. Heat flux and temperatures are author annotations; no conductivity law is solved. Default hook: `every composite wall`. ## convection surface (node) | Key | Default | | --- | --- | | `thermal plate width` | 3.6cm | | `thermal plate thickness` | .25cm | | `thermal fluid height` | 1.2cm | | `thermal flow direction` | 1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, plate-center, fluid-center, heat-start, heat-end, text **Families:** surface-0..100, bottom-0..100, right-0..100, left-0..100, flow-0..100 surface runs left to right on the plate-fluid interface. flow follows the central schematic heat-transfer arrow, outward for +1 and inward for -1. Arrow lengths do not encode h or heat flux. Default hook: `every convection surface`. ## cooling fin (node) | Key | Default | | --- | --- | | `fin length` | 3cm | | `fin base height` | 1cm | | `fin base thickness` | .25cm | | `fin thickness` | .18cm | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, root, tip, heat-left, text **Families:** base-0..100, axis-0..100, fin-bottom-0..100, fin-tip-0..100, fin-top-0..100 One extended fin attached to a base. axis runs root to tip; fin boundary follows bottom, tip and top counterclockwise. Fin length includes base thickness. Temperatures and distributed convection are author annotations. Default hook: `every cooling fin`. ## radiating body (node) | Key | Default | | --- | --- | | `radiation radius` | .65cm | | `radiation ray length` | .8cm | | `thermal flow direction` | 1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, heat-start, heat-end, text **Families:** rim-0..100, ray-0..100 rim runs counterclockwise from the rightmost point. ray follows the rightward emission arrow or the inward absorption arrow. Rays are schematic and do not solve a Stefan-Boltzmann balance. Default hook: `every radiating body`. ## thermometer (node) | Key | Default | | --- | --- | | `thermometer height` | 3.2cm | | `thermometer bulb radius` | .32cm | | `thermometer stem width` | .18cm | | `thermometer level` | .6 | | `thermal liquid color` | black | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, bulb-center, liquid-top, scale-start, scale-end, text **Families:** scale-0..100, column-0..100, bulb-0..100, stem-right-0..100, cap-0..100, stem-left-0..100 level is a geometric stem fraction, not a calibrated temperature. scale runs from bulb top toward stem cap; column runs from bulb centre to liquid-top. bulb follows the exposed outline counterclockwise from the left stem join through the bottom to the right stem join. Stem sides and cap expose the remaining boundary. Default hook: `every thermometer`. ## calorimeter (node) | Key | Default | | --- | --- | | `calorimeter width` | 3cm | | `calorimeter height` | 2.6cm | | `calorimeter insulation` | .25cm | | `calorimeter level` | .55 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, liquid-center, headspace-center, liquid-left, liquid-right, text **Families:** bottom-0..100, right-0..100, top-0..100, left-0..100, lid-0..100, surface-0..100, inner-bottom-0..100 Double-wall calorimeter with schematic insulation spacing and a liquid surface. Boundary families run counterclockwise; lid and surface run left to right. No heat capacity or mixing temperature is computed. Default hook: `every calorimeter`. ## expansion rod (node) | Key | Default | | --- | --- | | `expansion rod length` | 3cm | | `expansion rod thickness` | .16cm | | `expansion separation` | .65cm | | `thermal expansion ratio` | 1.1 | **Anchors:** center, north, south, east, west, north east, north west, south east, south west, original-start, original-end, expanded-start, expanded-end, text **Families:** original-0..100, expanded-0..100 Original rod is below; changed rod above. Both families run left to right along their axes with a shared left reference. Ratio sets changed/original length; values below one show contraction. Strain is supplied by the author. Default hook: `every expansion rod`.