# No. 248 (Brown 1868): "Union coupling. A is a pipe with a small flange abutting against the pipe, C, with a screwed end; B a nut which holds them together."
#
# Model (cm, gravity on, the nut drawn cut away at the front): the pipe C stands fixed with a right-hand thread of pitch 1.6 on its end (3.5 turns,
# No. 102's ridge laid in 24 convex segments a turn). The nut B turns on C (the one driven joint, 15 turns a minute, clockwise from above)
# and is free to run along it; its thread fills C's groove (0.04 cm clear each flank), 2 turns of it. The pipe A, on its own guide, is held 1.2 cm
# off C's end by the spring of the pipe line; its flange lies inside the nut, under the nut's lip. Turning the nut screws it down C: the lip takes the
# flange and draws A down until the flange abuts against C's end, and the nut, tight, stops (the hand's torque is limited to 0.6 N m). Thread on
# thread, lip on flange and flange on C's end are all real contact. Generator: opencode-runs/batch11/gen248.py.
number: 248
slug: union-coupling
name: Union coupling
brown: "Union coupling. A is a pipe with a small flange abutting against the pipe, C, with a screwed end; B a nut which holds them together."
units: cm
sim:
  timestep: 0.0002
  integrator: implicitfast
  iterations: 100
  solver: CG
  multiccd: true
  duration_s: 7.5
  floor: false
bodies:
  - id: pipe_c
    shape: part
    pos: [0, 0, 0]
    fixed: true
    friction: 0.1
    color: "#e4d9bf"
    pieces:
      - {kind: rod, from: [0, 0, -9], to: [0, 0, 5.8], radius: 3.0, collide: 0}   # the pipe C, its screwed end
      - {kind: rod, from: [0, 0, -9], to: [0, 0, -2], radius: 3.4, collide: 0}   # its body below
      - {kind: poly, points: [[-5.2, -2.6], [5.2, -2.6], [5.2, -1.6], [-5.2, -1.6]], y: [-4.5, 4.5], collide: 0}   # its collar
      - {kind: loft, a: [[3.0, 0.0, 5.8], [2.8978, 0.7765, 5.8], [2.5981, 1.5, 5.8], [2.1213, 2.1213, 5.8], [1.5, 2.5981, 5.8], [0.7765, 2.8978, 5.8], [0.0, 3.0, 5.8], [-0.7765, 2.8978, 5.8], [-1.5, 2.5981, 5.8], [-2.1213, 2.1213, 5.8], [-2.5981, 1.5, 5.8], [-2.8978, 0.7765, 5.8], [-3.0, 0.0, 5.8], [-2.8978, -0.7765, 5.8], [-2.5981, -1.5, 5.8], [-2.1213, -2.1213, 5.8], [-1.5, -2.5981, 5.8], [-0.7765, -2.8978, 5.8], [-0.0, -3.0, 5.8], [0.7765, -2.8978, 5.8], [1.5, -2.5981, 5.8], [2.1213, -2.1213, 5.8], [2.5981, -1.5, 5.8], [2.8978, -0.7765, 5.8]], b: [[3.0, 0.0, 6.2], [2.8978, 0.7765, 6.2], [2.5981, 1.5, 6.2], [2.1213, 2.1213, 6.2], [1.5, 2.5981, 6.2], [0.7765, 2.8978, 6.2], [0.0, 3.0, 6.2], [-0.7765, 2.8978, 6.2], [-1.5, 2.5981, 6.2], [-2.1213, 2.1213, 6.2], [-2.5981, 1.5, 6.2], [-2.8978, 0.7765, 6.2], [-3.0, 0.0, 6.2], [-2.8978, -0.7765, 6.2], [-2.5981, -1.5, 6.2], [-2.1213, -2.1213, 6.2], [-1.5, -2.5981, 6.2], [-0.7765, -2.8978, 6.2], [-0.0, -3.0, 6.2], [0.7765, -2.8978, 6.2], [1.5, -2.5981, 6.2], [2.1213, -2.1213, 6.2], [2.5981, -1.5, 6.2], [2.8978, -0.7765, 6.2]], collide: 2}
      - {kind: loft, a: [[2.95, 0.0, -0.475], [2.95, 0.0, 0.475], [3.6, 0.0, 0.15], [3.6, 0.0, -0.15]], b: [[2.8495, 0.7635, -0.4083], [2.8495, 0.7635, 0.5417], [3.4773, 0.9317, 0.2167], [3.4773, 0.9317, -0.0833]], collide: 1}
      - {kind: loft, a: [[2.8495, 0.7635, -0.4083], [2.8495, 0.7635, 0.5417], [3.4773, 0.9317, 0.2167], [3.4773, 0.9317, -0.0833]], b: [[2.5548, 1.475, -0.3417], [2.5548, 1.475, 0.6083], [3.1177, 1.8, 0.2833], [3.1177, 1.8, -0.0167]], collide: 1}
      - {kind: loft, a: [[2.5548, 1.475, -0.3417], [2.5548, 1.475, 0.6083], [3.1177, 1.8, 0.2833], [3.1177, 1.8, -0.0167]], b: [[2.086, 2.086, -0.275], [2.086, 2.086, 0.675], [2.5456, 2.5456, 0.35], [2.5456, 2.5456, 0.05]], collide: 1}
      - {kind: loft, a: [[2.086, 2.086, -0.275], [2.086, 2.086, 0.675], [2.5456, 2.5456, 0.35], [2.5456, 2.5456, 0.05]], b: [[1.475, 2.5548, -0.2083], [1.475, 2.5548, 0.7417], [1.8, 3.1177, 0.4167], [1.8, 3.1177, 0.1167]], collide: 1}
      - {kind: loft, a: [[1.475, 2.5548, -0.2083], [1.475, 2.5548, 0.7417], [1.8, 3.1177, 0.4167], [1.8, 3.1177, 0.1167]], b: [[0.7635, 2.8495, -0.1417], [0.7635, 2.8495, 0.8083], [0.9317, 3.4773, 0.4833], [0.9317, 3.4773, 0.1833]], collide: 1}
      - {kind: loft, a: [[0.7635, 2.8495, -0.1417], [0.7635, 2.8495, 0.8083], [0.9317, 3.4773, 0.4833], [0.9317, 3.4773, 0.1833]], b: [[0.0, 2.95, -0.075], [0.0, 2.95, 0.875], [0.0, 3.6, 0.55], [0.0, 3.6, 0.25]], collide: 1}
      - {kind: loft, a: [[0.0, 2.95, -0.075], [0.0, 2.95, 0.875], [0.0, 3.6, 0.55], [0.0, 3.6, 0.25]], b: [[-0.7635, 2.8495, -0.0083], [-0.7635, 2.8495, 0.9417], [-0.9317, 3.4773, 0.6167], [-0.9317, 3.4773, 0.3167]], collide: 1}
      - {kind: loft, a: [[-0.7635, 2.8495, -0.0083], [-0.7635, 2.8495, 0.9417], [-0.9317, 3.4773, 0.6167], [-0.9317, 3.4773, 0.3167]], b: [[-1.475, 2.5548, 0.0583], [-1.475, 2.5548, 1.0083], [-1.8, 3.1177, 0.6833], [-1.8, 3.1177, 0.3833]], collide: 1}
      - {kind: loft, a: [[-1.475, 2.5548, 0.0583], [-1.475, 2.5548, 1.0083], [-1.8, 3.1177, 0.6833], [-1.8, 3.1177, 0.3833]], b: [[-2.086, 2.086, 0.125], [-2.086, 2.086, 1.075], [-2.5456, 2.5456, 0.75], [-2.5456, 2.5456, 0.45]], collide: 1}
      - {kind: loft, a: [[-2.086, 2.086, 0.125], [-2.086, 2.086, 1.075], [-2.5456, 2.5456, 0.75], [-2.5456, 2.5456, 0.45]], b: [[-2.5548, 1.475, 0.1917], [-2.5548, 1.475, 1.1417], [-3.1177, 1.8, 0.8167], [-3.1177, 1.8, 0.5167]], collide: 1}
      - {kind: loft, a: [[-2.5548, 1.475, 0.1917], [-2.5548, 1.475, 1.1417], [-3.1177, 1.8, 0.8167], [-3.1177, 1.8, 0.5167]], b: [[-2.8495, 0.7635, 0.2583], [-2.8495, 0.7635, 1.2083], [-3.4773, 0.9317, 0.8833], [-3.4773, 0.9317, 0.5833]], collide: 1}
      - {kind: loft, a: [[-2.8495, 0.7635, 0.2583], [-2.8495, 0.7635, 1.2083], [-3.4773, 0.9317, 0.8833], [-3.4773, 0.9317, 0.5833]], b: [[-2.95, 0.0, 0.325], [-2.95, 0.0, 1.275], [-3.6, 0.0, 0.95], [-3.6, 0.0, 0.65]], collide: 1}
      - {kind: loft, a: [[-2.95, 0.0, 0.325], [-2.95, 0.0, 1.275], [-3.6, 0.0, 0.95], [-3.6, 0.0, 0.65]], b: [[-2.8495, -0.7635, 0.3917], [-2.8495, -0.7635, 1.3417], [-3.4773, -0.9317, 1.0167], [-3.4773, -0.9317, 0.7167]], collide: 1}
      - {kind: loft, a: [[-2.8495, -0.7635, 0.3917], [-2.8495, -0.7635, 1.3417], [-3.4773, -0.9317, 1.0167], [-3.4773, -0.9317, 0.7167]], b: [[-2.5548, -1.475, 0.4583], [-2.5548, -1.475, 1.4083], [-3.1177, -1.8, 1.0833], [-3.1177, -1.8, 0.7833]], collide: 1}
      - {kind: loft, a: [[-2.5548, -1.475, 0.4583], [-2.5548, -1.475, 1.4083], [-3.1177, -1.8, 1.0833], [-3.1177, -1.8, 0.7833]], b: [[-2.086, -2.086, 0.525], [-2.086, -2.086, 1.475], [-2.5456, -2.5456, 1.15], [-2.5456, -2.5456, 0.85]], collide: 1}
      - {kind: loft, a: [[-2.086, -2.086, 0.525], [-2.086, -2.086, 1.475], [-2.5456, -2.5456, 1.15], [-2.5456, -2.5456, 0.85]], b: [[-1.475, -2.5548, 0.5917], [-1.475, -2.5548, 1.5417], [-1.8, -3.1177, 1.2167], [-1.8, -3.1177, 0.9167]], collide: 1}
      - {kind: loft, a: [[-1.475, -2.5548, 0.5917], [-1.475, -2.5548, 1.5417], [-1.8, -3.1177, 1.2167], [-1.8, -3.1177, 0.9167]], b: [[-0.7635, -2.8495, 0.6583], [-0.7635, -2.8495, 1.6083], [-0.9317, -3.4773, 1.2833], [-0.9317, -3.4773, 0.9833]], collide: 1}
      - {kind: loft, a: [[-0.7635, -2.8495, 0.6583], [-0.7635, -2.8495, 1.6083], [-0.9317, -3.4773, 1.2833], [-0.9317, -3.4773, 0.9833]], b: [[-0.0, -2.95, 0.725], [-0.0, -2.95, 1.675], [-0.0, -3.6, 1.35], [-0.0, -3.6, 1.05]], collide: 1}
      - {kind: loft, a: [[-0.0, -2.95, 0.725], [-0.0, -2.95, 1.675], [-0.0, -3.6, 1.35], [-0.0, -3.6, 1.05]], b: [[0.7635, -2.8495, 0.7917], [0.7635, -2.8495, 1.7417], [0.9317, -3.4773, 1.4167], [0.9317, -3.4773, 1.1167]], collide: 1}
      - {kind: loft, a: [[0.7635, -2.8495, 0.7917], [0.7635, -2.8495, 1.7417], [0.9317, -3.4773, 1.4167], [0.9317, -3.4773, 1.1167]], b: [[1.475, -2.5548, 0.8583], [1.475, -2.5548, 1.8083], [1.8, -3.1177, 1.4833], [1.8, -3.1177, 1.1833]], collide: 1}
      - {kind: loft, a: [[1.475, -2.5548, 0.8583], [1.475, -2.5548, 1.8083], [1.8, -3.1177, 1.4833], [1.8, -3.1177, 1.1833]], b: [[2.086, -2.086, 0.925], [2.086, -2.086, 1.875], [2.5456, -2.5456, 1.55], [2.5456, -2.5456, 1.25]], collide: 1}
      - {kind: loft, a: [[2.086, -2.086, 0.925], [2.086, -2.086, 1.875], [2.5456, -2.5456, 1.55], [2.5456, -2.5456, 1.25]], b: [[2.5548, -1.475, 0.9917], [2.5548, -1.475, 1.9417], [3.1177, -1.8, 1.6167], [3.1177, -1.8, 1.3167]], collide: 1}
      - {kind: loft, a: [[2.5548, -1.475, 0.9917], [2.5548, -1.475, 1.9417], [3.1177, -1.8, 1.6167], [3.1177, -1.8, 1.3167]], b: [[2.8495, -0.7635, 1.0583], [2.8495, -0.7635, 2.0083], [3.4773, -0.9317, 1.6833], [3.4773, -0.9317, 1.3833]], collide: 1}
      - {kind: loft, a: [[2.8495, -0.7635, 1.0583], [2.8495, -0.7635, 2.0083], [3.4773, -0.9317, 1.6833], [3.4773, -0.9317, 1.3833]], b: [[2.95, -0.0, 1.125], [2.95, -0.0, 2.075], [3.6, -0.0, 1.75], [3.6, -0.0, 1.45]], collide: 1}
      - {kind: loft, a: [[2.95, -0.0, 1.125], [2.95, -0.0, 2.075], [3.6, -0.0, 1.75], [3.6, -0.0, 1.45]], b: [[2.8495, 0.7635, 1.1917], [2.8495, 0.7635, 2.1417], [3.4773, 0.9317, 1.8167], [3.4773, 0.9317, 1.5167]], collide: 1}
      - {kind: loft, a: [[2.8495, 0.7635, 1.1917], [2.8495, 0.7635, 2.1417], [3.4773, 0.9317, 1.8167], [3.4773, 0.9317, 1.5167]], b: [[2.5548, 1.475, 1.2583], [2.5548, 1.475, 2.2083], [3.1177, 1.8, 1.8833], [3.1177, 1.8, 1.5833]], collide: 1}
      - {kind: loft, a: [[2.5548, 1.475, 1.2583], [2.5548, 1.475, 2.2083], [3.1177, 1.8, 1.8833], [3.1177, 1.8, 1.5833]], b: [[2.086, 2.086, 1.325], [2.086, 2.086, 2.275], [2.5456, 2.5456, 1.95], [2.5456, 2.5456, 1.65]], collide: 1}
      - {kind: loft, a: [[2.086, 2.086, 1.325], [2.086, 2.086, 2.275], [2.5456, 2.5456, 1.95], [2.5456, 2.5456, 1.65]], b: [[1.475, 2.5548, 1.3917], [1.475, 2.5548, 2.3417], [1.8, 3.1177, 2.0167], [1.8, 3.1177, 1.7167]], collide: 1}
      - {kind: loft, a: [[1.475, 2.5548, 1.3917], [1.475, 2.5548, 2.3417], [1.8, 3.1177, 2.0167], [1.8, 3.1177, 1.7167]], b: [[0.7635, 2.8495, 1.4583], [0.7635, 2.8495, 2.4083], [0.9317, 3.4773, 2.0833], [0.9317, 3.4773, 1.7833]], collide: 1}
      - {kind: loft, a: [[0.7635, 2.8495, 1.4583], [0.7635, 2.8495, 2.4083], [0.9317, 3.4773, 2.0833], [0.9317, 3.4773, 1.7833]], b: [[0.0, 2.95, 1.525], [0.0, 2.95, 2.475], [0.0, 3.6, 2.15], [0.0, 3.6, 1.85]], collide: 1}
      - {kind: loft, a: [[0.0, 2.95, 1.525], [0.0, 2.95, 2.475], [0.0, 3.6, 2.15], [0.0, 3.6, 1.85]], b: [[-0.7635, 2.8495, 1.5917], [-0.7635, 2.8495, 2.5417], [-0.9317, 3.4773, 2.2167], [-0.9317, 3.4773, 1.9167]], collide: 1}
      - {kind: loft, a: [[-0.7635, 2.8495, 1.5917], [-0.7635, 2.8495, 2.5417], [-0.9317, 3.4773, 2.2167], [-0.9317, 3.4773, 1.9167]], b: [[-1.475, 2.5548, 1.6583], [-1.475, 2.5548, 2.6083], [-1.8, 3.1177, 2.2833], [-1.8, 3.1177, 1.9833]], collide: 1}
      - {kind: loft, a: [[-1.475, 2.5548, 1.6583], [-1.475, 2.5548, 2.6083], [-1.8, 3.1177, 2.2833], [-1.8, 3.1177, 1.9833]], b: [[-2.086, 2.086, 1.725], [-2.086, 2.086, 2.675], [-2.5456, 2.5456, 2.35], [-2.5456, 2.5456, 2.05]], collide: 1}
      - {kind: loft, a: [[-2.086, 2.086, 1.725], [-2.086, 2.086, 2.675], [-2.5456, 2.5456, 2.35], [-2.5456, 2.5456, 2.05]], b: [[-2.5548, 1.475, 1.7917], [-2.5548, 1.475, 2.7417], [-3.1177, 1.8, 2.4167], [-3.1177, 1.8, 2.1167]], collide: 1}
      - {kind: loft, a: [[-2.5548, 1.475, 1.7917], [-2.5548, 1.475, 2.7417], [-3.1177, 1.8, 2.4167], [-3.1177, 1.8, 2.1167]], b: [[-2.8495, 0.7635, 1.8583], [-2.8495, 0.7635, 2.8083], [-3.4773, 0.9317, 2.4833], [-3.4773, 0.9317, 2.1833]], collide: 1}
      - {kind: loft, a: [[-2.8495, 0.7635, 1.8583], [-2.8495, 0.7635, 2.8083], [-3.4773, 0.9317, 2.4833], [-3.4773, 0.9317, 2.1833]], b: [[-2.95, 0.0, 1.925], [-2.95, 0.0, 2.875], [-3.6, 0.0, 2.55], [-3.6, 0.0, 2.25]], collide: 1}
      - {kind: loft, a: [[-2.95, 0.0, 1.925], [-2.95, 0.0, 2.875], [-3.6, 0.0, 2.55], [-3.6, 0.0, 2.25]], b: [[-2.8495, -0.7635, 1.9917], [-2.8495, -0.7635, 2.9417], [-3.4773, -0.9317, 2.6167], [-3.4773, -0.9317, 2.3167]], collide: 1}
      - {kind: loft, a: [[-2.8495, -0.7635, 1.9917], [-2.8495, -0.7635, 2.9417], [-3.4773, -0.9317, 2.6167], [-3.4773, -0.9317, 2.3167]], b: [[-2.5548, -1.475, 2.0583], [-2.5548, -1.475, 3.0083], [-3.1177, -1.8, 2.6833], [-3.1177, -1.8, 2.3833]], collide: 1}
      - {kind: loft, a: [[-2.5548, -1.475, 2.0583], [-2.5548, -1.475, 3.0083], [-3.1177, -1.8, 2.6833], [-3.1177, -1.8, 2.3833]], b: [[-2.086, -2.086, 2.125], [-2.086, -2.086, 3.075], [-2.5456, -2.5456, 2.75], [-2.5456, -2.5456, 2.45]], collide: 1}
      - {kind: loft, a: [[-2.086, -2.086, 2.125], [-2.086, -2.086, 3.075], [-2.5456, -2.5456, 2.75], [-2.5456, -2.5456, 2.45]], b: [[-1.475, -2.5548, 2.1917], [-1.475, -2.5548, 3.1417], [-1.8, -3.1177, 2.8167], [-1.8, -3.1177, 2.5167]], collide: 1}
      - {kind: loft, a: [[-1.475, -2.5548, 2.1917], [-1.475, -2.5548, 3.1417], [-1.8, -3.1177, 2.8167], [-1.8, -3.1177, 2.5167]], b: [[-0.7635, -2.8495, 2.2583], [-0.7635, -2.8495, 3.2083], [-0.9317, -3.4773, 2.8833], [-0.9317, -3.4773, 2.5833]], collide: 1}
      - {kind: loft, a: [[-0.7635, -2.8495, 2.2583], [-0.7635, -2.8495, 3.2083], [-0.9317, -3.4773, 2.8833], [-0.9317, -3.4773, 2.5833]], b: [[-0.0, -2.95, 2.325], [-0.0, -2.95, 3.275], [-0.0, -3.6, 2.95], [-0.0, -3.6, 2.65]], collide: 1}
      - {kind: loft, a: [[-0.0, -2.95, 2.325], [-0.0, -2.95, 3.275], [-0.0, -3.6, 2.95], [-0.0, -3.6, 2.65]], b: [[0.7635, -2.8495, 2.3917], [0.7635, -2.8495, 3.3417], [0.9317, -3.4773, 3.0167], [0.9317, -3.4773, 2.7167]], collide: 1}
      - {kind: loft, a: [[0.7635, -2.8495, 2.3917], [0.7635, -2.8495, 3.3417], [0.9317, -3.4773, 3.0167], [0.9317, -3.4773, 2.7167]], b: [[1.475, -2.5548, 2.4583], [1.475, -2.5548, 3.4083], [1.8, -3.1177, 3.0833], [1.8, -3.1177, 2.7833]], collide: 1}
      - {kind: loft, a: [[1.475, -2.5548, 2.4583], [1.475, -2.5548, 3.4083], [1.8, -3.1177, 3.0833], [1.8, -3.1177, 2.7833]], b: [[2.086, -2.086, 2.525], [2.086, -2.086, 3.475], [2.5456, -2.5456, 3.15], [2.5456, -2.5456, 2.85]], collide: 1}
      - {kind: loft, a: [[2.086, -2.086, 2.525], [2.086, -2.086, 3.475], [2.5456, -2.5456, 3.15], [2.5456, -2.5456, 2.85]], b: [[2.5548, -1.475, 2.5917], [2.5548, -1.475, 3.5417], [3.1177, -1.8, 3.2167], [3.1177, -1.8, 2.9167]], collide: 1}
      - {kind: loft, a: [[2.5548, -1.475, 2.5917], [2.5548, -1.475, 3.5417], [3.1177, -1.8, 3.2167], [3.1177, -1.8, 2.9167]], b: [[2.8495, -0.7635, 2.6583], [2.8495, -0.7635, 3.6083], [3.4773, -0.9317, 3.2833], [3.4773, -0.9317, 2.9833]], collide: 1}
      - {kind: loft, a: [[2.8495, -0.7635, 2.6583], [2.8495, -0.7635, 3.6083], [3.4773, -0.9317, 3.2833], [3.4773, -0.9317, 2.9833]], b: [[2.95, -0.0, 2.725], [2.95, -0.0, 3.675], [3.6, -0.0, 3.35], [3.6, -0.0, 3.05]], collide: 1}
      - {kind: loft, a: [[2.95, -0.0, 2.725], [2.95, -0.0, 3.675], [3.6, -0.0, 3.35], [3.6, -0.0, 3.05]], b: [[2.8495, 0.7635, 2.7917], [2.8495, 0.7635, 3.7417], [3.4773, 0.9317, 3.4167], [3.4773, 0.9317, 3.1167]], collide: 1}
      - {kind: loft, a: [[2.8495, 0.7635, 2.7917], [2.8495, 0.7635, 3.7417], [3.4773, 0.9317, 3.4167], [3.4773, 0.9317, 3.1167]], b: [[2.5548, 1.475, 2.8583], [2.5548, 1.475, 3.8083], [3.1177, 1.8, 3.4833], [3.1177, 1.8, 3.1833]], collide: 1}
      - {kind: loft, a: [[2.5548, 1.475, 2.8583], [2.5548, 1.475, 3.8083], [3.1177, 1.8, 3.4833], [3.1177, 1.8, 3.1833]], b: [[2.086, 2.086, 2.925], [2.086, 2.086, 3.875], [2.5456, 2.5456, 3.55], [2.5456, 2.5456, 3.25]], collide: 1}
      - {kind: loft, a: [[2.086, 2.086, 2.925], [2.086, 2.086, 3.875], [2.5456, 2.5456, 3.55], [2.5456, 2.5456, 3.25]], b: [[1.475, 2.5548, 2.9917], [1.475, 2.5548, 3.9417], [1.8, 3.1177, 3.6167], [1.8, 3.1177, 3.3167]], collide: 1}
      - {kind: loft, a: [[1.475, 2.5548, 2.9917], [1.475, 2.5548, 3.9417], [1.8, 3.1177, 3.6167], [1.8, 3.1177, 3.3167]], b: [[0.7635, 2.8495, 3.0583], [0.7635, 2.8495, 4.0083], [0.9317, 3.4773, 3.6833], [0.9317, 3.4773, 3.3833]], collide: 1}
      - {kind: loft, a: [[0.7635, 2.8495, 3.0583], [0.7635, 2.8495, 4.0083], [0.9317, 3.4773, 3.6833], [0.9317, 3.4773, 3.3833]], b: [[0.0, 2.95, 3.125], [0.0, 2.95, 4.075], [0.0, 3.6, 3.75], [0.0, 3.6, 3.45]], collide: 1}
      - {kind: loft, a: [[0.0, 2.95, 3.125], [0.0, 2.95, 4.075], [0.0, 3.6, 3.75], [0.0, 3.6, 3.45]], b: [[-0.7635, 2.8495, 3.1917], [-0.7635, 2.8495, 4.1417], [-0.9317, 3.4773, 3.8167], [-0.9317, 3.4773, 3.5167]], collide: 1}
      - {kind: loft, a: [[-0.7635, 2.8495, 3.1917], [-0.7635, 2.8495, 4.1417], [-0.9317, 3.4773, 3.8167], [-0.9317, 3.4773, 3.5167]], b: [[-1.475, 2.5548, 3.2583], [-1.475, 2.5548, 4.2083], [-1.8, 3.1177, 3.8833], [-1.8, 3.1177, 3.5833]], collide: 1}
      - {kind: loft, a: [[-1.475, 2.5548, 3.2583], [-1.475, 2.5548, 4.2083], [-1.8, 3.1177, 3.8833], [-1.8, 3.1177, 3.5833]], b: [[-2.086, 2.086, 3.325], [-2.086, 2.086, 4.275], [-2.5456, 2.5456, 3.95], [-2.5456, 2.5456, 3.65]], collide: 1}
      - {kind: loft, a: [[-2.086, 2.086, 3.325], [-2.086, 2.086, 4.275], [-2.5456, 2.5456, 3.95], [-2.5456, 2.5456, 3.65]], b: [[-2.5548, 1.475, 3.3917], [-2.5548, 1.475, 4.3417], [-3.1177, 1.8, 4.0167], [-3.1177, 1.8, 3.7167]], collide: 1}
      - {kind: loft, a: [[-2.5548, 1.475, 3.3917], [-2.5548, 1.475, 4.3417], [-3.1177, 1.8, 4.0167], [-3.1177, 1.8, 3.7167]], b: [[-2.8495, 0.7635, 3.4583], [-2.8495, 0.7635, 4.4083], [-3.4773, 0.9317, 4.0833], [-3.4773, 0.9317, 3.7833]], collide: 1}
      - {kind: loft, a: [[-2.8495, 0.7635, 3.4583], [-2.8495, 0.7635, 4.4083], [-3.4773, 0.9317, 4.0833], [-3.4773, 0.9317, 3.7833]], b: [[-2.95, 0.0, 3.525], [-2.95, 0.0, 4.475], [-3.6, 0.0, 4.15], [-3.6, 0.0, 3.85]], collide: 1}
      - {kind: loft, a: [[-2.95, 0.0, 3.525], [-2.95, 0.0, 4.475], [-3.6, 0.0, 4.15], [-3.6, 0.0, 3.85]], b: [[-2.8495, -0.7635, 3.5917], [-2.8495, -0.7635, 4.5417], [-3.4773, -0.9317, 4.2167], [-3.4773, -0.9317, 3.9167]], collide: 1}
      - {kind: loft, a: [[-2.8495, -0.7635, 3.5917], [-2.8495, -0.7635, 4.5417], [-3.4773, -0.9317, 4.2167], [-3.4773, -0.9317, 3.9167]], b: [[-2.5548, -1.475, 3.6583], [-2.5548, -1.475, 4.6083], [-3.1177, -1.8, 4.2833], [-3.1177, -1.8, 3.9833]], collide: 1}
      - {kind: loft, a: [[-2.5548, -1.475, 3.6583], [-2.5548, -1.475, 4.6083], [-3.1177, -1.8, 4.2833], [-3.1177, -1.8, 3.9833]], b: [[-2.086, -2.086, 3.725], [-2.086, -2.086, 4.675], [-2.5456, -2.5456, 4.35], [-2.5456, -2.5456, 4.05]], collide: 1}
      - {kind: loft, a: [[-2.086, -2.086, 3.725], [-2.086, -2.086, 4.675], [-2.5456, -2.5456, 4.35], [-2.5456, -2.5456, 4.05]], b: [[-1.475, -2.5548, 3.7917], [-1.475, -2.5548, 4.7417], [-1.8, -3.1177, 4.4167], [-1.8, -3.1177, 4.1167]], collide: 1}
      - {kind: loft, a: [[-1.475, -2.5548, 3.7917], [-1.475, -2.5548, 4.7417], [-1.8, -3.1177, 4.4167], [-1.8, -3.1177, 4.1167]], b: [[-0.7635, -2.8495, 3.8583], [-0.7635, -2.8495, 4.8083], [-0.9317, -3.4773, 4.4833], [-0.9317, -3.4773, 4.1833]], collide: 1}
      - {kind: loft, a: [[-0.7635, -2.8495, 3.8583], [-0.7635, -2.8495, 4.8083], [-0.9317, -3.4773, 4.4833], [-0.9317, -3.4773, 4.1833]], b: [[0.0, -2.95, 3.925], [0.0, -2.95, 4.875], [0.0, -3.6, 4.55], [0.0, -3.6, 4.25]], collide: 1}
      - {kind: loft, a: [[0.0, -2.95, 3.925], [0.0, -2.95, 4.875], [0.0, -3.6, 4.55], [0.0, -3.6, 4.25]], b: [[0.7635, -2.8495, 3.9917], [0.7635, -2.8495, 4.9417], [0.9317, -3.4773, 4.6167], [0.9317, -3.4773, 4.3167]], collide: 1}
      - {kind: loft, a: [[0.7635, -2.8495, 3.9917], [0.7635, -2.8495, 4.9417], [0.9317, -3.4773, 4.6167], [0.9317, -3.4773, 4.3167]], b: [[1.475, -2.5548, 4.0583], [1.475, -2.5548, 5.0083], [1.8, -3.1177, 4.6833], [1.8, -3.1177, 4.3833]], collide: 1}
      - {kind: loft, a: [[1.475, -2.5548, 4.0583], [1.475, -2.5548, 5.0083], [1.8, -3.1177, 4.6833], [1.8, -3.1177, 4.3833]], b: [[2.086, -2.086, 4.125], [2.086, -2.086, 5.075], [2.5456, -2.5456, 4.75], [2.5456, -2.5456, 4.45]], collide: 1}
      - {kind: loft, a: [[2.086, -2.086, 4.125], [2.086, -2.086, 5.075], [2.5456, -2.5456, 4.75], [2.5456, -2.5456, 4.45]], b: [[2.5548, -1.475, 4.1917], [2.5548, -1.475, 5.1417], [3.1177, -1.8, 4.8167], [3.1177, -1.8, 4.5167]], collide: 1}
      - {kind: loft, a: [[2.5548, -1.475, 4.1917], [2.5548, -1.475, 5.1417], [3.1177, -1.8, 4.8167], [3.1177, -1.8, 4.5167]], b: [[2.8495, -0.7635, 4.2583], [2.8495, -0.7635, 5.2083], [3.4773, -0.9317, 4.8833], [3.4773, -0.9317, 4.5833]], collide: 1}
      - {kind: loft, a: [[2.8495, -0.7635, 4.2583], [2.8495, -0.7635, 5.2083], [3.4773, -0.9317, 4.8833], [3.4773, -0.9317, 4.5833]], b: [[2.95, -0.0, 4.325], [2.95, -0.0, 5.275], [3.6, -0.0, 4.95], [3.6, -0.0, 4.65]], collide: 1}
      - {kind: loft, a: [[2.95, -0.0, 4.325], [2.95, -0.0, 5.275], [3.6, -0.0, 4.95], [3.6, -0.0, 4.65]], b: [[2.8495, 0.7635, 4.3917], [2.8495, 0.7635, 5.3417], [3.4773, 0.9317, 5.0167], [3.4773, 0.9317, 4.7167]], collide: 1}
      - {kind: loft, a: [[2.8495, 0.7635, 4.3917], [2.8495, 0.7635, 5.3417], [3.4773, 0.9317, 5.0167], [3.4773, 0.9317, 4.7167]], b: [[2.5548, 1.475, 4.4583], [2.5548, 1.475, 5.4083], [3.1177, 1.8, 5.0833], [3.1177, 1.8, 4.7833]], collide: 1}
      - {kind: loft, a: [[2.5548, 1.475, 4.4583], [2.5548, 1.475, 5.4083], [3.1177, 1.8, 5.0833], [3.1177, 1.8, 4.7833]], b: [[2.086, 2.086, 4.525], [2.086, 2.086, 5.475], [2.5456, 2.5456, 5.15], [2.5456, 2.5456, 4.85]], collide: 1}
      - {kind: loft, a: [[2.086, 2.086, 4.525], [2.086, 2.086, 5.475], [2.5456, 2.5456, 5.15], [2.5456, 2.5456, 4.85]], b: [[1.475, 2.5548, 4.5917], [1.475, 2.5548, 5.5417], [1.8, 3.1177, 5.2167], [1.8, 3.1177, 4.9167]], collide: 1}
      - {kind: loft, a: [[1.475, 2.5548, 4.5917], [1.475, 2.5548, 5.5417], [1.8, 3.1177, 5.2167], [1.8, 3.1177, 4.9167]], b: [[0.7635, 2.8495, 4.6583], [0.7635, 2.8495, 5.6083], [0.9317, 3.4773, 5.2833], [0.9317, 3.4773, 4.9833]], collide: 1}
      - {kind: loft, a: [[0.7635, 2.8495, 4.6583], [0.7635, 2.8495, 5.6083], [0.9317, 3.4773, 5.2833], [0.9317, 3.4773, 4.9833]], b: [[-0.0, 2.95, 4.725], [-0.0, 2.95, 5.675], [-0.0, 3.6, 5.35], [-0.0, 3.6, 5.05]], collide: 1}
      - {kind: loft, a: [[-0.0, 2.95, 4.725], [-0.0, 2.95, 5.675], [-0.0, 3.6, 5.35], [-0.0, 3.6, 5.05]], b: [[-0.7635, 2.8495, 4.7917], [-0.7635, 2.8495, 5.7417], [-0.9317, 3.4773, 5.4167], [-0.9317, 3.4773, 5.1167]], collide: 1}
      - {kind: loft, a: [[-0.7635, 2.8495, 4.7917], [-0.7635, 2.8495, 5.7417], [-0.9317, 3.4773, 5.4167], [-0.9317, 3.4773, 5.1167]], b: [[-1.475, 2.5548, 4.8583], [-1.475, 2.5548, 5.8083], [-1.8, 3.1177, 5.4833], [-1.8, 3.1177, 5.1833]], collide: 1}
      - {kind: loft, a: [[-1.475, 2.5548, 4.8583], [-1.475, 2.5548, 5.8083], [-1.8, 3.1177, 5.4833], [-1.8, 3.1177, 5.1833]], b: [[-2.086, 2.086, 4.925], [-2.086, 2.086, 5.875], [-2.5456, 2.5456, 5.55], [-2.5456, 2.5456, 5.25]], collide: 1}
      - {kind: loft, a: [[-2.086, 2.086, 4.925], [-2.086, 2.086, 5.875], [-2.5456, 2.5456, 5.55], [-2.5456, 2.5456, 5.25]], b: [[-2.5548, 1.475, 4.9917], [-2.5548, 1.475, 5.9417], [-3.1177, 1.8, 5.6167], [-3.1177, 1.8, 5.3167]], collide: 1}
      - {kind: loft, a: [[-2.5548, 1.475, 4.9917], [-2.5548, 1.475, 5.9417], [-3.1177, 1.8, 5.6167], [-3.1177, 1.8, 5.3167]], b: [[-2.8495, 0.7635, 5.0583], [-2.8495, 0.7635, 6.0083], [-3.4773, 0.9317, 5.6833], [-3.4773, 0.9317, 5.3833]], collide: 1}
      - {kind: loft, a: [[-2.8495, 0.7635, 5.0583], [-2.8495, 0.7635, 6.0083], [-3.4773, 0.9317, 5.6833], [-3.4773, 0.9317, 5.3833]], b: [[-2.95, 0.0, 5.125], [-2.95, 0.0, 6.075], [-3.6, 0.0, 5.75], [-3.6, 0.0, 5.45]], collide: 1}
  - id: nut_way
    shape: part
    pos: [0, 0, 0]
    mass: 0.01
    color: "#b8ad97"
    pieces:
      - {kind: poly, points: [[3.8, 1.39], [5.0, 1.39], [5.0, 8.7], [3.8, 8.7]], y: [-1.2, 1.2], collide: 0}   # the nut's right side (drawn on its way, so the cut-away stays at the front)
      - {kind: poly, points: [[-5.0, 1.39], [-3.8, 1.39], [-3.8, 8.7], [-5.0, 8.7]], y: [-1.2, 1.2], collide: 0}   # its left side
      - {kind: poly, points: [[-5.0, 1.39], [5.0, 1.39], [5.0, 8.7], [-5.0, 8.7]], y: [3.9, 4.6], collide: 0}   # its back, cut away at the front
  - id: nut
    shape: part
    pos: [0, 0, 0]
    mount: nut_way
    density: 2700
    friction: 0.1
    color: "#b8ad97"
    pieces:
      - {kind: poly, points: [[2.8, 8.7], [4.5, 8.7], [4.5, 8.82], [2.8, 8.82]], y: [-0.3, 0.3], color: "#5a554c", collide: 0}   # a mark on the nut, to see it turn
      - {kind: loft, a: [[2.6, 0.0, 8.0], [4.6, 0.0, 8.0], [4.4433, 1.1906, 8.0], [2.5114, 0.6729, 8.0]], b: [[2.6, 0.0, 8.7], [4.6, 0.0, 8.7], [4.4433, 1.1906, 8.7], [2.5114, 0.6729, 8.7]], collide: 2}
      - {kind: loft, a: [[2.5114, 0.6729, 8.0], [4.4433, 1.1906, 8.0], [3.9837, 2.3, 8.0], [2.2517, 1.3, 8.0]], b: [[2.5114, 0.6729, 8.7], [4.4433, 1.1906, 8.7], [3.9837, 2.3, 8.7], [2.2517, 1.3, 8.7]], collide: 2}
      - {kind: loft, a: [[2.2517, 1.3, 8.0], [3.9837, 2.3, 8.0], [3.2527, 3.2527, 8.0], [1.8385, 1.8385, 8.0]], b: [[2.2517, 1.3, 8.7], [3.9837, 2.3, 8.7], [3.2527, 3.2527, 8.7], [1.8385, 1.8385, 8.7]], collide: 2}
      - {kind: loft, a: [[1.8385, 1.8385, 8.0], [3.2527, 3.2527, 8.0], [2.3, 3.9837, 8.0], [1.3, 2.2517, 8.0]], b: [[1.8385, 1.8385, 8.7], [3.2527, 3.2527, 8.7], [2.3, 3.9837, 8.7], [1.3, 2.2517, 8.7]], collide: 2}
      - {kind: loft, a: [[1.3, 2.2517, 8.0], [2.3, 3.9837, 8.0], [1.1906, 4.4433, 8.0], [0.6729, 2.5114, 8.0]], b: [[1.3, 2.2517, 8.7], [2.3, 3.9837, 8.7], [1.1906, 4.4433, 8.7], [0.6729, 2.5114, 8.7]], collide: 2}
      - {kind: loft, a: [[0.6729, 2.5114, 8.0], [1.1906, 4.4433, 8.0], [0.0, 4.6, 8.0], [0.0, 2.6, 8.0]], b: [[0.6729, 2.5114, 8.7], [1.1906, 4.4433, 8.7], [0.0, 4.6, 8.7], [0.0, 2.6, 8.7]], collide: 2}
      - {kind: loft, a: [[0.0, 2.6, 8.0], [0.0, 4.6, 8.0], [-1.1906, 4.4433, 8.0], [-0.6729, 2.5114, 8.0]], b: [[0.0, 2.6, 8.7], [0.0, 4.6, 8.7], [-1.1906, 4.4433, 8.7], [-0.6729, 2.5114, 8.7]], collide: 2}
      - {kind: loft, a: [[-0.6729, 2.5114, 8.0], [-1.1906, 4.4433, 8.0], [-2.3, 3.9837, 8.0], [-1.3, 2.2517, 8.0]], b: [[-0.6729, 2.5114, 8.7], [-1.1906, 4.4433, 8.7], [-2.3, 3.9837, 8.7], [-1.3, 2.2517, 8.7]], collide: 2}
      - {kind: loft, a: [[-1.3, 2.2517, 8.0], [-2.3, 3.9837, 8.0], [-3.2527, 3.2527, 8.0], [-1.8385, 1.8385, 8.0]], b: [[-1.3, 2.2517, 8.7], [-2.3, 3.9837, 8.7], [-3.2527, 3.2527, 8.7], [-1.8385, 1.8385, 8.7]], collide: 2}
      - {kind: loft, a: [[-1.8385, 1.8385, 8.0], [-3.2527, 3.2527, 8.0], [-3.9837, 2.3, 8.0], [-2.2517, 1.3, 8.0]], b: [[-1.8385, 1.8385, 8.7], [-3.2527, 3.2527, 8.7], [-3.9837, 2.3, 8.7], [-2.2517, 1.3, 8.7]], collide: 2}
      - {kind: loft, a: [[-2.2517, 1.3, 8.0], [-3.9837, 2.3, 8.0], [-4.4433, 1.1906, 8.0], [-2.5114, 0.6729, 8.0]], b: [[-2.2517, 1.3, 8.7], [-3.9837, 2.3, 8.7], [-4.4433, 1.1906, 8.7], [-2.5114, 0.6729, 8.7]], collide: 2}
      - {kind: loft, a: [[-2.5114, 0.6729, 8.0], [-4.4433, 1.1906, 8.0], [-4.6, 0.0, 8.0], [-2.6, 0.0, 8.0]], b: [[-2.5114, 0.6729, 8.7], [-4.4433, 1.1906, 8.7], [-4.6, 0.0, 8.7], [-2.6, 0.0, 8.7]], collide: 2}
      - {kind: loft, a: [[-2.6, 0.0, 8.0], [-4.6, 0.0, 8.0], [-4.4433, -1.1906, 8.0], [-2.5114, -0.6729, 8.0]], b: [[-2.6, 0.0, 8.7], [-4.6, 0.0, 8.7], [-4.4433, -1.1906, 8.7], [-2.5114, -0.6729, 8.7]], collide: 2}
      - {kind: loft, a: [[-2.5114, -0.6729, 8.0], [-4.4433, -1.1906, 8.0], [-3.9837, -2.3, 8.0], [-2.2517, -1.3, 8.0]], b: [[-2.5114, -0.6729, 8.7], [-4.4433, -1.1906, 8.7], [-3.9837, -2.3, 8.7], [-2.2517, -1.3, 8.7]], collide: 2}
      - {kind: loft, a: [[-2.2517, -1.3, 8.0], [-3.9837, -2.3, 8.0], [-3.2527, -3.2527, 8.0], [-1.8385, -1.8385, 8.0]], b: [[-2.2517, -1.3, 8.7], [-3.9837, -2.3, 8.7], [-3.2527, -3.2527, 8.7], [-1.8385, -1.8385, 8.7]], collide: 2}
      - {kind: loft, a: [[-1.8385, -1.8385, 8.0], [-3.2527, -3.2527, 8.0], [-2.3, -3.9837, 8.0], [-1.3, -2.2517, 8.0]], b: [[-1.8385, -1.8385, 8.7], [-3.2527, -3.2527, 8.7], [-2.3, -3.9837, 8.7], [-1.3, -2.2517, 8.7]], collide: 2}
      - {kind: loft, a: [[-1.3, -2.2517, 8.0], [-2.3, -3.9837, 8.0], [-1.1906, -4.4433, 8.0], [-0.6729, -2.5114, 8.0]], b: [[-1.3, -2.2517, 8.7], [-2.3, -3.9837, 8.7], [-1.1906, -4.4433, 8.7], [-0.6729, -2.5114, 8.7]], collide: 2}
      - {kind: loft, a: [[-0.6729, -2.5114, 8.0], [-1.1906, -4.4433, 8.0], [-0.0, -4.6, 8.0], [-0.0, -2.6, 8.0]], b: [[-0.6729, -2.5114, 8.7], [-1.1906, -4.4433, 8.7], [-0.0, -4.6, 8.7], [-0.0, -2.6, 8.7]], collide: 2}
      - {kind: loft, a: [[-0.0, -2.6, 8.0], [-0.0, -4.6, 8.0], [1.1906, -4.4433, 8.0], [0.6729, -2.5114, 8.0]], b: [[-0.0, -2.6, 8.7], [-0.0, -4.6, 8.7], [1.1906, -4.4433, 8.7], [0.6729, -2.5114, 8.7]], collide: 2}
      - {kind: loft, a: [[0.6729, -2.5114, 8.0], [1.1906, -4.4433, 8.0], [2.3, -3.9837, 8.0], [1.3, -2.2517, 8.0]], b: [[0.6729, -2.5114, 8.7], [1.1906, -4.4433, 8.7], [2.3, -3.9837, 8.7], [1.3, -2.2517, 8.7]], collide: 2}
      - {kind: loft, a: [[1.3, -2.2517, 8.0], [2.3, -3.9837, 8.0], [3.2527, -3.2527, 8.0], [1.8385, -1.8385, 8.0]], b: [[1.3, -2.2517, 8.7], [2.3, -3.9837, 8.7], [3.2527, -3.2527, 8.7], [1.8385, -1.8385, 8.7]], collide: 2}
      - {kind: loft, a: [[1.8385, -1.8385, 8.0], [3.2527, -3.2527, 8.0], [3.9837, -2.3, 8.0], [2.2517, -1.3, 8.0]], b: [[1.8385, -1.8385, 8.7], [3.2527, -3.2527, 8.7], [3.9837, -2.3, 8.7], [2.2517, -1.3, 8.7]], collide: 2}
      - {kind: loft, a: [[2.2517, -1.3, 8.0], [3.9837, -2.3, 8.0], [4.4433, -1.1906, 8.0], [2.5114, -0.6729, 8.0]], b: [[2.2517, -1.3, 8.7], [3.9837, -2.3, 8.7], [4.4433, -1.1906, 8.7], [2.5114, -0.6729, 8.7]], collide: 2}
      - {kind: loft, a: [[2.5114, -0.6729, 8.0], [4.4433, -1.1906, 8.0], [4.6, -0.0, 8.0], [2.6, -0.0, 8.0]], b: [[2.5114, -0.6729, 8.7], [4.4433, -1.1906, 8.7], [4.6, -0.0, 8.7], [2.6, -0.0, 8.7]], collide: 2}
      - {kind: loft, a: [[3.8, -0.0, 1.69], [3.8, -0.0, 3.11], [3.05, -0.0, 2.735], [3.05, -0.0, 2.065]], b: [[3.6705, 0.9835, 1.7567], [3.6705, 0.9835, 3.1767], [2.9461, 0.7894, 2.8017], [2.9461, 0.7894, 2.1317]], collide: 2}
      - {kind: loft, a: [[3.6705, 0.9835, 1.7567], [3.6705, 0.9835, 3.1767], [2.9461, 0.7894, 2.8017], [2.9461, 0.7894, 2.1317]], b: [[3.2909, 1.9, 1.8233], [3.2909, 1.9, 3.2433], [2.6414, 1.525, 2.8683], [2.6414, 1.525, 2.1983]], collide: 2}
      - {kind: loft, a: [[3.2909, 1.9, 1.8233], [3.2909, 1.9, 3.2433], [2.6414, 1.525, 2.8683], [2.6414, 1.525, 2.1983]], b: [[2.687, 2.687, 1.89], [2.687, 2.687, 3.31], [2.1567, 2.1567, 2.935], [2.1567, 2.1567, 2.265]], collide: 2}
      - {kind: loft, a: [[2.687, 2.687, 1.89], [2.687, 2.687, 3.31], [2.1567, 2.1567, 2.935], [2.1567, 2.1567, 2.265]], b: [[1.9, 3.2909, 1.9567], [1.9, 3.2909, 3.3767], [1.525, 2.6414, 3.0017], [1.525, 2.6414, 2.3317]], collide: 2}
      - {kind: loft, a: [[1.9, 3.2909, 1.9567], [1.9, 3.2909, 3.3767], [1.525, 2.6414, 3.0017], [1.525, 2.6414, 2.3317]], b: [[0.9835, 3.6705, 2.0233], [0.9835, 3.6705, 3.4433], [0.7894, 2.9461, 3.0683], [0.7894, 2.9461, 2.3983]], collide: 2}
      - {kind: loft, a: [[0.9835, 3.6705, 2.0233], [0.9835, 3.6705, 3.4433], [0.7894, 2.9461, 3.0683], [0.7894, 2.9461, 2.3983]], b: [[0.0, 3.8, 2.09], [0.0, 3.8, 3.51], [0.0, 3.05, 3.135], [0.0, 3.05, 2.465]], collide: 2}
      - {kind: loft, a: [[0.0, 3.8, 2.09], [0.0, 3.8, 3.51], [0.0, 3.05, 3.135], [0.0, 3.05, 2.465]], b: [[-0.9835, 3.6705, 2.1567], [-0.9835, 3.6705, 3.5767], [-0.7894, 2.9461, 3.2017], [-0.7894, 2.9461, 2.5317]], collide: 2}
      - {kind: loft, a: [[-0.9835, 3.6705, 2.1567], [-0.9835, 3.6705, 3.5767], [-0.7894, 2.9461, 3.2017], [-0.7894, 2.9461, 2.5317]], b: [[-1.9, 3.2909, 2.2233], [-1.9, 3.2909, 3.6433], [-1.525, 2.6414, 3.2683], [-1.525, 2.6414, 2.5983]], collide: 2}
      - {kind: loft, a: [[-1.9, 3.2909, 2.2233], [-1.9, 3.2909, 3.6433], [-1.525, 2.6414, 3.2683], [-1.525, 2.6414, 2.5983]], b: [[-2.687, 2.687, 2.29], [-2.687, 2.687, 3.71], [-2.1567, 2.1567, 3.335], [-2.1567, 2.1567, 2.665]], collide: 2}
      - {kind: loft, a: [[-2.687, 2.687, 2.29], [-2.687, 2.687, 3.71], [-2.1567, 2.1567, 3.335], [-2.1567, 2.1567, 2.665]], b: [[-3.2909, 1.9, 2.3567], [-3.2909, 1.9, 3.7767], [-2.6414, 1.525, 3.4017], [-2.6414, 1.525, 2.7317]], collide: 2}
      - {kind: loft, a: [[-3.2909, 1.9, 2.3567], [-3.2909, 1.9, 3.7767], [-2.6414, 1.525, 3.4017], [-2.6414, 1.525, 2.7317]], b: [[-3.6705, 0.9835, 2.4233], [-3.6705, 0.9835, 3.8433], [-2.9461, 0.7894, 3.4683], [-2.9461, 0.7894, 2.7983]], collide: 2}
      - {kind: loft, a: [[-3.6705, 0.9835, 2.4233], [-3.6705, 0.9835, 3.8433], [-2.9461, 0.7894, 3.4683], [-2.9461, 0.7894, 2.7983]], b: [[-3.8, 0.0, 2.49], [-3.8, 0.0, 3.91], [-3.05, 0.0, 3.535], [-3.05, 0.0, 2.865]], collide: 2}
      - {kind: loft, a: [[-3.8, 0.0, 2.49], [-3.8, 0.0, 3.91], [-3.05, 0.0, 3.535], [-3.05, 0.0, 2.865]], b: [[-3.6705, -0.9835, 2.5567], [-3.6705, -0.9835, 3.9767], [-2.9461, -0.7894, 3.6017], [-2.9461, -0.7894, 2.9317]], collide: 2}
      - {kind: loft, a: [[-3.6705, -0.9835, 2.5567], [-3.6705, -0.9835, 3.9767], [-2.9461, -0.7894, 3.6017], [-2.9461, -0.7894, 2.9317]], b: [[-3.2909, -1.9, 2.6233], [-3.2909, -1.9, 4.0433], [-2.6414, -1.525, 3.6683], [-2.6414, -1.525, 2.9983]], collide: 2}
      - {kind: loft, a: [[-3.2909, -1.9, 2.6233], [-3.2909, -1.9, 4.0433], [-2.6414, -1.525, 3.6683], [-2.6414, -1.525, 2.9983]], b: [[-2.687, -2.687, 2.69], [-2.687, -2.687, 4.11], [-2.1567, -2.1567, 3.735], [-2.1567, -2.1567, 3.065]], collide: 2}
      - {kind: loft, a: [[-2.687, -2.687, 2.69], [-2.687, -2.687, 4.11], [-2.1567, -2.1567, 3.735], [-2.1567, -2.1567, 3.065]], b: [[-1.9, -3.2909, 2.7567], [-1.9, -3.2909, 4.1767], [-1.525, -2.6414, 3.8017], [-1.525, -2.6414, 3.1317]], collide: 2}
      - {kind: loft, a: [[-1.9, -3.2909, 2.7567], [-1.9, -3.2909, 4.1767], [-1.525, -2.6414, 3.8017], [-1.525, -2.6414, 3.1317]], b: [[-0.9835, -3.6705, 2.8233], [-0.9835, -3.6705, 4.2433], [-0.7894, -2.9461, 3.8683], [-0.7894, -2.9461, 3.1983]], collide: 2}
      - {kind: loft, a: [[-0.9835, -3.6705, 2.8233], [-0.9835, -3.6705, 4.2433], [-0.7894, -2.9461, 3.8683], [-0.7894, -2.9461, 3.1983]], b: [[-0.0, -3.8, 2.89], [-0.0, -3.8, 4.31], [-0.0, -3.05, 3.935], [-0.0, -3.05, 3.265]], collide: 2}
      - {kind: loft, a: [[-0.0, -3.8, 2.89], [-0.0, -3.8, 4.31], [-0.0, -3.05, 3.935], [-0.0, -3.05, 3.265]], b: [[0.9835, -3.6705, 2.9567], [0.9835, -3.6705, 4.3767], [0.7894, -2.9461, 4.0017], [0.7894, -2.9461, 3.3317]], collide: 2}
      - {kind: loft, a: [[0.9835, -3.6705, 2.9567], [0.9835, -3.6705, 4.3767], [0.7894, -2.9461, 4.0017], [0.7894, -2.9461, 3.3317]], b: [[1.9, -3.2909, 3.0233], [1.9, -3.2909, 4.4433], [1.525, -2.6414, 4.0683], [1.525, -2.6414, 3.3983]], collide: 2}
      - {kind: loft, a: [[1.9, -3.2909, 3.0233], [1.9, -3.2909, 4.4433], [1.525, -2.6414, 4.0683], [1.525, -2.6414, 3.3983]], b: [[2.687, -2.687, 3.09], [2.687, -2.687, 4.51], [2.1567, -2.1567, 4.135], [2.1567, -2.1567, 3.465]], collide: 2}
      - {kind: loft, a: [[2.687, -2.687, 3.09], [2.687, -2.687, 4.51], [2.1567, -2.1567, 4.135], [2.1567, -2.1567, 3.465]], b: [[3.2909, -1.9, 3.1567], [3.2909, -1.9, 4.5767], [2.6414, -1.525, 4.2017], [2.6414, -1.525, 3.5317]], collide: 2}
      - {kind: loft, a: [[3.2909, -1.9, 3.1567], [3.2909, -1.9, 4.5767], [2.6414, -1.525, 4.2017], [2.6414, -1.525, 3.5317]], b: [[3.6705, -0.9835, 3.2233], [3.6705, -0.9835, 4.6433], [2.9461, -0.7894, 4.2683], [2.9461, -0.7894, 3.5983]], collide: 2}
      - {kind: loft, a: [[3.6705, -0.9835, 3.2233], [3.6705, -0.9835, 4.6433], [2.9461, -0.7894, 4.2683], [2.9461, -0.7894, 3.5983]], b: [[3.8, -0.0, 3.29], [3.8, -0.0, 4.71], [3.05, -0.0, 4.335], [3.05, -0.0, 3.665]], collide: 2}
      - {kind: loft, a: [[3.8, -0.0, 3.29], [3.8, -0.0, 4.71], [3.05, -0.0, 4.335], [3.05, -0.0, 3.665]], b: [[3.6705, 0.9835, 3.3567], [3.6705, 0.9835, 4.7767], [2.9461, 0.7894, 4.4017], [2.9461, 0.7894, 3.7317]], collide: 2}
      - {kind: loft, a: [[3.6705, 0.9835, 3.3567], [3.6705, 0.9835, 4.7767], [2.9461, 0.7894, 4.4017], [2.9461, 0.7894, 3.7317]], b: [[3.2909, 1.9, 3.4233], [3.2909, 1.9, 4.8433], [2.6414, 1.525, 4.4683], [2.6414, 1.525, 3.7983]], collide: 2}
      - {kind: loft, a: [[3.2909, 1.9, 3.4233], [3.2909, 1.9, 4.8433], [2.6414, 1.525, 4.4683], [2.6414, 1.525, 3.7983]], b: [[2.687, 2.687, 3.49], [2.687, 2.687, 4.91], [2.1567, 2.1567, 4.535], [2.1567, 2.1567, 3.865]], collide: 2}
      - {kind: loft, a: [[2.687, 2.687, 3.49], [2.687, 2.687, 4.91], [2.1567, 2.1567, 4.535], [2.1567, 2.1567, 3.865]], b: [[1.9, 3.2909, 3.5567], [1.9, 3.2909, 4.9767], [1.525, 2.6414, 4.6017], [1.525, 2.6414, 3.9317]], collide: 2}
      - {kind: loft, a: [[1.9, 3.2909, 3.5567], [1.9, 3.2909, 4.9767], [1.525, 2.6414, 4.6017], [1.525, 2.6414, 3.9317]], b: [[0.9835, 3.6705, 3.6233], [0.9835, 3.6705, 5.0433], [0.7894, 2.9461, 4.6683], [0.7894, 2.9461, 3.9983]], collide: 2}
      - {kind: loft, a: [[0.9835, 3.6705, 3.6233], [0.9835, 3.6705, 5.0433], [0.7894, 2.9461, 4.6683], [0.7894, 2.9461, 3.9983]], b: [[0.0, 3.8, 3.69], [0.0, 3.8, 5.11], [0.0, 3.05, 4.735], [0.0, 3.05, 4.065]], collide: 2}
      - {kind: loft, a: [[0.0, 3.8, 3.69], [0.0, 3.8, 5.11], [0.0, 3.05, 4.735], [0.0, 3.05, 4.065]], b: [[-0.9835, 3.6705, 3.7567], [-0.9835, 3.6705, 5.1767], [-0.7894, 2.9461, 4.8017], [-0.7894, 2.9461, 4.1317]], collide: 2}
      - {kind: loft, a: [[-0.9835, 3.6705, 3.7567], [-0.9835, 3.6705, 5.1767], [-0.7894, 2.9461, 4.8017], [-0.7894, 2.9461, 4.1317]], b: [[-1.9, 3.2909, 3.8233], [-1.9, 3.2909, 5.2433], [-1.525, 2.6414, 4.8683], [-1.525, 2.6414, 4.1983]], collide: 2}
      - {kind: loft, a: [[-1.9, 3.2909, 3.8233], [-1.9, 3.2909, 5.2433], [-1.525, 2.6414, 4.8683], [-1.525, 2.6414, 4.1983]], b: [[-2.687, 2.687, 3.89], [-2.687, 2.687, 5.31], [-2.1567, 2.1567, 4.935], [-2.1567, 2.1567, 4.265]], collide: 2}
      - {kind: loft, a: [[-2.687, 2.687, 3.89], [-2.687, 2.687, 5.31], [-2.1567, 2.1567, 4.935], [-2.1567, 2.1567, 4.265]], b: [[-3.2909, 1.9, 3.9567], [-3.2909, 1.9, 5.3767], [-2.6414, 1.525, 5.0017], [-2.6414, 1.525, 4.3317]], collide: 2}
      - {kind: loft, a: [[-3.2909, 1.9, 3.9567], [-3.2909, 1.9, 5.3767], [-2.6414, 1.525, 5.0017], [-2.6414, 1.525, 4.3317]], b: [[-3.6705, 0.9835, 4.0233], [-3.6705, 0.9835, 5.4433], [-2.9461, 0.7894, 5.0683], [-2.9461, 0.7894, 4.3983]], collide: 2}
      - {kind: loft, a: [[-3.6705, 0.9835, 4.0233], [-3.6705, 0.9835, 5.4433], [-2.9461, 0.7894, 5.0683], [-2.9461, 0.7894, 4.3983]], b: [[-3.8, 0.0, 4.09], [-3.8, 0.0, 5.51], [-3.05, 0.0, 5.135], [-3.05, 0.0, 4.465]], collide: 2}
      - {kind: loft, a: [[-3.8, 0.0, 4.09], [-3.8, 0.0, 5.51], [-3.05, 0.0, 5.135], [-3.05, 0.0, 4.465]], b: [[-3.6705, -0.9835, 4.1567], [-3.6705, -0.9835, 5.5767], [-2.9461, -0.7894, 5.2017], [-2.9461, -0.7894, 4.5317]], collide: 2}
      - {kind: loft, a: [[-3.6705, -0.9835, 4.1567], [-3.6705, -0.9835, 5.5767], [-2.9461, -0.7894, 5.2017], [-2.9461, -0.7894, 4.5317]], b: [[-3.2909, -1.9, 4.2233], [-3.2909, -1.9, 5.6433], [-2.6414, -1.525, 5.2683], [-2.6414, -1.525, 4.5983]], collide: 2}
      - {kind: loft, a: [[-3.2909, -1.9, 4.2233], [-3.2909, -1.9, 5.6433], [-2.6414, -1.525, 5.2683], [-2.6414, -1.525, 4.5983]], b: [[-2.687, -2.687, 4.29], [-2.687, -2.687, 5.71], [-2.1567, -2.1567, 5.335], [-2.1567, -2.1567, 4.665]], collide: 2}
      - {kind: loft, a: [[-2.687, -2.687, 4.29], [-2.687, -2.687, 5.71], [-2.1567, -2.1567, 5.335], [-2.1567, -2.1567, 4.665]], b: [[-1.9, -3.2909, 4.3567], [-1.9, -3.2909, 5.7767], [-1.525, -2.6414, 5.4017], [-1.525, -2.6414, 4.7317]], collide: 2}
      - {kind: loft, a: [[-1.9, -3.2909, 4.3567], [-1.9, -3.2909, 5.7767], [-1.525, -2.6414, 5.4017], [-1.525, -2.6414, 4.7317]], b: [[-0.9835, -3.6705, 4.4233], [-0.9835, -3.6705, 5.8433], [-0.7894, -2.9461, 5.4683], [-0.7894, -2.9461, 4.7983]], collide: 2}
      - {kind: loft, a: [[-0.9835, -3.6705, 4.4233], [-0.9835, -3.6705, 5.8433], [-0.7894, -2.9461, 5.4683], [-0.7894, -2.9461, 4.7983]], b: [[-0.0, -3.8, 4.49], [-0.0, -3.8, 5.91], [-0.0, -3.05, 5.535], [-0.0, -3.05, 4.865]], collide: 2}
      - {kind: loft, a: [[-0.0, -3.8, 4.49], [-0.0, -3.8, 5.91], [-0.0, -3.05, 5.535], [-0.0, -3.05, 4.865]], b: [[0.9835, -3.6705, 4.5567], [0.9835, -3.6705, 5.9767], [0.7894, -2.9461, 5.6017], [0.7894, -2.9461, 4.9317]], collide: 2}
      - {kind: loft, a: [[0.9835, -3.6705, 4.5567], [0.9835, -3.6705, 5.9767], [0.7894, -2.9461, 5.6017], [0.7894, -2.9461, 4.9317]], b: [[1.9, -3.2909, 4.6233], [1.9, -3.2909, 6.0433], [1.525, -2.6414, 5.6683], [1.525, -2.6414, 4.9983]], collide: 2}
      - {kind: loft, a: [[1.9, -3.2909, 4.6233], [1.9, -3.2909, 6.0433], [1.525, -2.6414, 5.6683], [1.525, -2.6414, 4.9983]], b: [[2.687, -2.687, 4.69], [2.687, -2.687, 6.11], [2.1567, -2.1567, 5.735], [2.1567, -2.1567, 5.065]], collide: 2}
      - {kind: loft, a: [[2.687, -2.687, 4.69], [2.687, -2.687, 6.11], [2.1567, -2.1567, 5.735], [2.1567, -2.1567, 5.065]], b: [[3.2909, -1.9, 4.7567], [3.2909, -1.9, 6.1767], [2.6414, -1.525, 5.8017], [2.6414, -1.525, 5.1317]], collide: 2}
      - {kind: loft, a: [[3.2909, -1.9, 4.7567], [3.2909, -1.9, 6.1767], [2.6414, -1.525, 5.8017], [2.6414, -1.525, 5.1317]], b: [[3.6705, -0.9835, 4.8233], [3.6705, -0.9835, 6.2433], [2.9461, -0.7894, 5.8683], [2.9461, -0.7894, 5.1983]], collide: 2}
      - {kind: loft, a: [[3.6705, -0.9835, 4.8233], [3.6705, -0.9835, 6.2433], [2.9461, -0.7894, 5.8683], [2.9461, -0.7894, 5.1983]], b: [[3.8, -0.0, 4.89], [3.8, -0.0, 6.31], [3.05, -0.0, 5.935], [3.05, -0.0, 5.265]], collide: 2}
  - id: pipe_a
    shape: part
    pos: [0, 0, 7.4]
    mass: 0.5
    friction: 0.1
    color: "#d9cfba"
    pieces:
      - {kind: rod, from: [0, 0, 7.4], to: [0, 0, 23.4], radius: 2.4, collide: 0}   # the pipe A
      - {kind: loft, a: [[3.4, 0.0, 7.4], [3.2841, 0.88, 7.4], [2.9445, 1.7, 7.4], [2.4042, 2.4042, 7.4], [1.7, 2.9445, 7.4], [0.88, 3.2841, 7.4], [0.0, 3.4, 7.4], [-0.88, 3.2841, 7.4], [-1.7, 2.9445, 7.4], [-2.4042, 2.4042, 7.4], [-2.9445, 1.7, 7.4], [-3.2841, 0.88, 7.4], [-3.4, 0.0, 7.4], [-3.2841, -0.88, 7.4], [-2.9445, -1.7, 7.4], [-2.4042, -2.4042, 7.4], [-1.7, -2.9445, 7.4], [-0.88, -3.2841, 7.4], [-0.0, -3.4, 7.4], [0.88, -3.2841, 7.4], [1.7, -2.9445, 7.4], [2.4042, -2.4042, 7.4], [2.9445, -1.7, 7.4], [3.2841, -0.88, 7.4]], b: [[3.4, 0.0, 7.8], [3.2841, 0.88, 7.8], [2.9445, 1.7, 7.8], [2.4042, 2.4042, 7.8], [1.7, 2.9445, 7.8], [0.88, 3.2841, 7.8], [0.0, 3.4, 7.8], [-0.88, 3.2841, 7.8], [-1.7, 2.9445, 7.8], [-2.4042, 2.4042, 7.8], [-2.9445, 1.7, 7.8], [-3.2841, 0.88, 7.8], [-3.4, 0.0, 7.8], [-3.2841, -0.88, 7.8], [-2.9445, -1.7, 7.8], [-2.4042, -2.4042, 7.8], [-1.7, -2.9445, 7.8], [-0.88, -3.2841, 7.8], [-0.0, -3.4, 7.8], [0.88, -3.2841, 7.8], [1.7, -2.9445, 7.8], [2.4042, -2.4042, 7.8], [2.9445, -1.7, 7.8], [3.2841, -0.88, 7.8]], collide: 1}
joints:
  - {id: j_ns, type: slide, body: nut_way, axis: [0, 0, 1], damping: 0.05}   # the nut running along C (+: up)
  - {id: j_nut, type: hinge, body: nut, axis: [0, 0, 1], damping: 0.002}   # the one driven joint: the nut turned by the hand (+: counter-clockwise from above)
  - {id: j_a, type: slide, body: pipe_a, axis: [0, 0, -1], range: [0, 1.3], stiffness: 2000, springref: -0.5, damping: 2}   # the pipe A on its guide (+: drawn down); the pipe line's spring holds it off
driver: {joint: j_nut, kind: velocity, rpm: -15, kv: 0.3, max_torque: 0.6}
checks:
  - {type: follow, out: j_ns, in: j_nut, expect: 0.002546, tol: 7.6e-05, min_r2: 0.999, settle_s: 1.0, window_s: 2.5}   # the nut runs down one pitch a turn
  - {type: position, joint: j_a, min: 1.17, max: 1.22, settle_s: 5.6, window_s: 1.8}   # A drawn down: its flange abuts against C's end
  - {type: still, joint: j_nut, max: 0.1, settle_s: 5.6, window_s: 1.8}   # the nut tight
  - {type: penetration, max: 0.002, settle_s: 0.3}
camera: {target: [0, 0, 2], position: [0, -70, 8], fov: 34}
display:
  output: j_a
  labels: {j_nut: "Nut B turned by hand (driver)", j_a: "Pipe A drawn to C", j_ns: "Nut along C"}

