Files
isokit/examples/factory/scene.json
T
grabowski f49798583e
Deploy web Studio / deploy (push) Successful in 1m3s
Robot arms pass goods from belt to belt; native beam primitive
- Robot arm (category Industry): picks goods off the end of the nearest conveyor within its reach
  and puts them on the start of another conveyor within reach, or on a pallet a quarter turn on
  (pick / put: auto or a side). One move per item coming in (cycle 0) or a set cycle; waits while
  the line before it stands. The belt it feeds carries its goods at its pace and starts its loop
  when they land (feeds carry a time offset `ph`), so arm and belts stay in step.
- Drawn as a 16-pose flipbook: two-link inverse kinematics per pose, each pose shown for a
  sixteenth of the cycle by a stepped CSS animation (iso-flip; pose 0 alone when unanimated).
  Poses pointing away from the viewer are drawn before the base, the others after it.
- New sprite method beam(a, b, n, w, mat): a square bar between two 3D points, six faces culled
  and shaded like face(). Native, so the factory demo renders in 4.7 ms instead of 18.8 ms.
- Factory demo: a palletiser at the end of the carton line, a loading robot passing drums from the
  incline onto the loading belt into the truck. MCP instructions on robot arms.

Checks: 70 Rust tests (arms and belts in step, waiting arm, beam faces from every side),
Studio 109/109, web 90/90.
2026-10-24 22:05:46 +07:00

33 lines
3.1 KiB
JSON

{
"version": 1,
"objects": [
{"id": "site", "type": "site", "x": 0, "y": 1, "props": {"w": 46, "d": 32, "mat": "g-grass"}, "name": "Yard", "locked": true},
{"id": "road", "type": "road", "x": 0, "y": -12.5, "props": {"w": 46, "d": 5}, "name": "Access road"},
{"id": "floor", "type": "area", "x": 0, "y": 1.5, "props": {"w": 36, "d": 19, "mat": "g-conc"}, "name": "Production floor", "locked": true},
{"id": "press-a", "type": "producer", "x": -14, "y": -4, "props": {"rate": 20, "product": "carton", "colour": "mach1"}, "name": "Carton press", "tag": "Cartons 20/min"},
{"id": "belt-a1", "type": "conveyor", "x": -8.4, "y": -4, "rot": 0, "props": {"w": 8}, "name": "Carton belt 1"},
{"id": "belt-a2", "type": "conveyor", "x": -4.4, "y": -1, "rot": 90, "props": {"w": 6}, "name": "Carton belt 2"},
{"id": "belt-a3", "type": "conveyor", "x": -1.4, "y": 2, "rot": 0, "props": {"w": 6, "speed": 0.8}, "name": "Carton belt 3"},
{"id": "robot-a", "type": "robot_arm", "x": 3.2, "y": 2, "name": "Palletiser", "tag": "Palletiser"},
{"id": "press-b", "type": "producer", "x": 14, "y": -4, "rot": 180, "props": {"rate": 10, "product": "drum", "colour": "mach2", "d": 2.6}, "name": "Drum filler", "tag": "Drums 10/min"},
{"id": "belt-b1", "type": "conveyor", "x": 9.4, "y": -4, "rot": 180, "props": {"w": 6, "d": 1.0, "speed": 0.4}, "name": "Drum belt"},
{"id": "belt-b2", "type": "conveyor", "x": 6.4, "y": -1, "rot": 90, "props": {"w": 6, "d": 1.0, "speed": 0.4, "rise": 0.8}, "name": "Drum incline"},
{"id": "robot-b", "type": "robot_arm", "x": 6.4, "y": 3.8, "props": {"reach": 2.4, "colour": "mach2"}, "name": "Loading robot"},
{"id": "belt-load", "type": "conveyor", "x": 11.5, "y": 5.2, "rot": 0, "props": {"w": 7, "d": 1.0, "speed": 0.6, "rise": 1.0}, "name": "Loading belt"},
{"id": "truck", "type": "truck", "x": 16.6, "y": 5.2, "rot": 90, "props": {"len": 9}, "name": "Truck at the dock"},
{"id": "press-c", "type": "producer", "x": -14, "y": 6, "props": {"rate": 6, "product": "part", "colour": "mach4", "running": false}, "name": "Parts press", "tag": "Stopped", "info": "Waiting for a tool change"},
{"id": "belt-c1", "type": "conveyor", "x": -9.9, "y": 6, "rot": 0, "props": {"w": 5}, "name": "Parts belt"},
{"id": "office", "type": "shed", "x": -5.5, "y": 9.2, "props": {"w": 6, "d": 3.5, "h": 3}, "name": "Shift office"},
{"id": "cont-1", "type": "container", "x": 12.5, "y": 9.8, "rot": 0, "props": {"size": "20ft", "stack": 2}, "name": "Empty drums"},
{"id": "cont-2", "type": "container", "x": -16.6, "y": 1.5, "rot": 90, "props": {"size": "20ft", "colour": "truckbox"}, "name": "Carton blanks"},
{"id": "op-a", "type": "person", "x": -14.2, "y": -6.2},
{"id": "op-c", "type": "person", "x": -11.8, "y": 7.8, "props": {"cls": "hivis"}},
{"id": "op-load", "type": "person", "x": 10.0, "y": 7.2},
{"id": "tree-1", "type": "tree", "x": -20, "y": 13},
{"id": "tree-2", "type": "tree", "x": -15, "y": 14},
{"id": "tree-3", "type": "tree", "x": 19, "y": 14},
{"id": "lamp-1", "type": "lamp", "x": -10, "y": -9.6},
{"id": "lamp-2", "type": "lamp", "x": 10, "y": -9.6}
]
}