@things-factory/figure-service 10.1.81 → 10.1.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist-server/service/figure/figure-format.js +4 -3
  2. package/dist-server/service/figure/figure-format.js.map +1 -1
  3. package/dist-server/service/figure/figure-mutation.d.ts +5 -3
  4. package/dist-server/service/figure/figure-mutation.js +43 -41
  5. package/dist-server/service/figure/figure-mutation.js.map +1 -1
  6. package/dist-server/service/figure/figure-proposal-record.d.ts +16 -0
  7. package/dist-server/service/figure/figure-proposal-record.js +51 -0
  8. package/dist-server/service/figure/figure-proposal-record.js.map +1 -0
  9. package/dist-server/service/figure/figure-proposal.d.ts +14 -0
  10. package/dist-server/service/figure/figure-proposal.js +39 -0
  11. package/dist-server/service/figure/figure-proposal.js.map +1 -0
  12. package/dist-server/service/figure/figure-propose-steps.js +12 -0
  13. package/dist-server/service/figure/figure-propose-steps.js.map +1 -1
  14. package/dist-server/service/figure/figure-query.d.ts +6 -1
  15. package/dist-server/service/figure/figure-query.js +33 -0
  16. package/dist-server/service/figure/figure-query.js.map +1 -1
  17. package/dist-server/service/figure/figure-rename.d.ts +2 -2
  18. package/dist-server/service/figure/figure-rename.js +8 -20
  19. package/dist-server/service/figure/figure-rename.js.map +1 -1
  20. package/dist-server/service/figure/figure-replaced-draft.d.ts +33 -0
  21. package/dist-server/service/figure/figure-replaced-draft.js +114 -0
  22. package/dist-server/service/figure/figure-replaced-draft.js.map +1 -0
  23. package/dist-server/service/figure/figure-revert.d.ts +36 -0
  24. package/dist-server/service/figure/figure-revert.js +155 -0
  25. package/dist-server/service/figure/figure-revert.js.map +1 -0
  26. package/dist-server/service/figure/figure-tools.js +7 -0
  27. package/dist-server/service/figure/figure-tools.js.map +1 -1
  28. package/dist-server/service/figure/figure-type.d.ts +14 -0
  29. package/dist-server/service/figure/figure-type.js +44 -1
  30. package/dist-server/service/figure/figure-type.js.map +1 -1
  31. package/dist-server/service/figure/figure-write.d.ts +7 -0
  32. package/dist-server/service/figure/figure-write.js +12 -2
  33. package/dist-server/service/figure/figure-write.js.map +1 -1
  34. package/dist-server/service/figure/index.d.ts +3 -1
  35. package/dist-server/service/figure/index.js +3 -1
  36. package/dist-server/service/figure/index.js.map +1 -1
  37. package/dist-server/service/index.d.ts +1 -1
  38. package/dist-server/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +3 -3
  40. package/recipes/air-cylinder/models/default.json +1 -1
  41. package/recipes/air-shower/models/default.json +1 -1
  42. package/recipes/barrier-gate/models/default.json +1 -1
  43. package/recipes/base-frame/models/default.json +1 -1
  44. package/recipes/belt-surface/models/default.json +1 -1
  45. package/recipes/bin-row/models/default.json +1 -1
  46. package/recipes/bollard-row/models/default.json +1 -1
  47. package/recipes/buzzer/models/default.json +1 -1
  48. package/recipes/cabinet-doors/models/default.json +1 -1
  49. package/recipes/cabinet-doors/models/doors=1.json +1 -1
  50. package/recipes/cabinet-doors/models/doors=2.json +1 -1
  51. package/recipes/cable-tray/models/default.json +1 -1
  52. package/recipes/camera-mount/models/default.json +1 -1
  53. package/recipes/canopy/models/default.json +1 -1
  54. package/recipes/cart/models/default.json +1 -1
  55. package/recipes/cart-handle/models/default.json +1 -1
  56. package/recipes/casters-four/models/default.json +1 -1
  57. package/recipes/ceiling-rail-carriage/models/default.json +1 -1
  58. package/recipes/chain-rails/models/default.json +1 -1
  59. package/recipes/charging-station/models/default.json +1 -1
  60. package/recipes/column-row/models/default.json +1 -1
  61. package/recipes/control-cabinet/models/default.json +1 -1
  62. package/recipes/conveyor-skirts/models/default.json +1 -1
  63. package/recipes/counter-display/models/default.json +1 -1
  64. package/recipes/dock-bumpers/models/default.json +1 -1
  65. package/recipes/dock-leveler/models/default.json +1 -1
  66. package/recipes/double-hinged-door/models/default.json +1 -1
  67. package/recipes/drawer-stack/models/default.json +1 -1
  68. package/recipes/drawer-stack/models/drawers=2.json +1 -1
  69. package/recipes/drawer-stack/models/drawers=3.json +1 -1
  70. package/recipes/drawer-stack/models/drawers=4.json +1 -1
  71. package/recipes/drip-tray/models/default.json +1 -1
  72. package/recipes/duct-fan/models/default.json +1 -1
  73. package/recipes/emergency-stop/models/default.json +1 -1
  74. package/recipes/end-covers/models/default.json +1 -1
  75. package/recipes/ffu-row/models/default.json +1 -1
  76. package/recipes/fire-extinguisher/models/default.json +1 -1
  77. package/recipes/first-aid-box/models/default.json +1 -1
  78. package/recipes/floor-zone/models/default.json +1 -1
  79. package/recipes/folding-door/models/default.json +1 -1
  80. package/recipes/fork/models/default.json +1 -1
  81. package/recipes/gantry-frame/models/default.json +1 -1
  82. package/recipes/gripper-2f/models/default.json +1 -1
  83. package/recipes/guard-cover/models/default.json +1 -1
  84. package/recipes/handrail/models/default.json +1 -1
  85. package/recipes/hatch/models/default.json +1 -1
  86. package/recipes/hinged-door/models/default.json +1 -1
  87. package/recipes/hinged-door/models/hinge=left.json +1 -1
  88. package/recipes/hinged-door/models/hinge=right.json +1 -1
  89. package/recipes/hmi-monitor/models/default.json +1 -1
  90. package/recipes/hopper/models/default.json +1 -1
  91. package/recipes/interlock-switch/models/default.json +1 -1
  92. package/recipes/junction-box/models/default.json +1 -1
  93. package/recipes/ladder/models/default.json +1 -1
  94. package/recipes/legs-four/models/default.json +1 -1
  95. package/recipes/leveling-feet/models/default.json +1 -1
  96. package/recipes/lift-updown/models/default.json +1 -1
  97. package/recipes/light-curtain/models/default.json +1 -1
  98. package/recipes/limit-switch/models/default.json +1 -1
  99. package/recipes/linear-guide/models/default.json +1 -1
  100. package/recipes/locker-row/models/default.json +1 -1
  101. package/recipes/motor-box/models/default.json +1 -1
  102. package/recipes/observation-window/models/default.json +1 -1
  103. package/recipes/operator-panel/models/buttons=2.json +1 -1
  104. package/recipes/operator-panel/models/buttons=3.json +1 -1
  105. package/recipes/operator-panel/models/buttons=4.json +1 -1
  106. package/recipes/operator-panel/models/buttons=5.json +1 -1
  107. package/recipes/operator-panel/models/default.json +1 -1
  108. package/recipes/pallet/models/default.json +1 -1
  109. package/recipes/partition-wall/models/default.json +1 -1
  110. package/recipes/pass-box/models/default.json +1 -1
  111. package/recipes/peg-board/models/default.json +1 -1
  112. package/recipes/photo-sensor-pair/models/default.json +1 -1
  113. package/recipes/pipe-run/models/default.json +1 -1
  114. package/recipes/platform/models/default.json +1 -1
  115. package/recipes/power-box/models/default.json +1 -1
  116. package/recipes/pressure-gauge/models/default.json +1 -1
  117. package/recipes/pull-cord/models/default.json +1 -1
  118. package/recipes/pump/models/default.json +1 -1
  119. package/recipes/pusher/models/default.json +1 -1
  120. package/recipes/robot-plinth/models/default.json +1 -1
  121. package/recipes/roll-up-shutter/models/default.json +1 -1
  122. package/recipes/roller-row/models/default.json +1 -1
  123. package/recipes/room-shell/models/default.json +1 -1
  124. package/recipes/rotating-beacon/models/default.json +1 -1
  125. package/recipes/safety-fence/models/default.json +1 -1
  126. package/recipes/safety-mat/models/default.json +1 -1
  127. package/recipes/safety-sign-stand/models/default.json +1 -1
  128. package/recipes/scanner-mount/models/default.json +1 -1
  129. package/recipes/selector-switch/models/default.json +1 -1
  130. package/recipes/shelf-tiers/models/default.json +1 -1
  131. package/recipes/shelf-tiers/models/tiers=2.json +1 -1
  132. package/recipes/shelf-tiers/models/tiers=3.json +1 -1
  133. package/recipes/shelf-tiers/models/tiers=4.json +1 -1
  134. package/recipes/shelf-tiers/models/tiers=5.json +1 -1
  135. package/recipes/side-guides/models/default.json +1 -1
  136. package/recipes/sign-board/models/default.json +1 -1
  137. package/recipes/signal-tower-3/models/default.json +1 -1
  138. package/recipes/sliding-door/models/default.json +1 -1
  139. package/recipes/sliding-door/models/leaves=1,lamp=false.json +1 -1
  140. package/recipes/sliding-door/models/leaves=1,lamp=true.json +1 -1
  141. package/recipes/sliding-door/models/leaves=2,lamp=false.json +1 -1
  142. package/recipes/sliding-door/models/leaves=2,lamp=true.json +1 -1
  143. package/recipes/stairs/models/default.json +1 -1
  144. package/recipes/status-lamp/models/default.json +1 -1
  145. package/recipes/stopper/models/default.json +1 -1
  146. package/recipes/suction-pads/models/default.json +1 -1
  147. package/recipes/tank/models/default.json +1 -1
  148. package/recipes/telescopic-arm/models/default.json +1 -1
  149. package/recipes/toe-board/models/default.json +1 -1
  150. package/recipes/tote/models/default.json +1 -1
  151. package/recipes/traffic-cones/models/default.json +1 -1
  152. package/recipes/transfer-belts/models/default.json +1 -1
  153. package/recipes/tray-stack/models/default.json +1 -1
  154. package/recipes/tray-stack/models/trays=3.json +1 -1
  155. package/recipes/tray-stack/models/trays=4.json +1 -1
  156. package/recipes/tray-stack/models/trays=5.json +1 -1
  157. package/recipes/trough/models/default.json +1 -1
  158. package/recipes/turntable/models/default.json +1 -1
  159. package/recipes/valve-handle/models/default.json +1 -1
  160. package/recipes/waste-bin/models/default.json +1 -1
  161. package/recipes/work-light/models/default.json +1 -1
  162. package/recipes/workbench-top/models/default.json +1 -1
  163. package/server/service/figure/figure-format.ts +4 -3
  164. package/server/service/figure/figure-mutation.ts +48 -42
  165. package/server/service/figure/figure-proposal-db.test.ts +108 -0
  166. package/server/service/figure/figure-proposal-record.ts +38 -0
  167. package/server/service/figure/figure-proposal.ts +39 -0
  168. package/server/service/figure/figure-propose-clips.test.ts +73 -0
  169. package/server/service/figure/figure-propose-steps.ts +12 -0
  170. package/server/service/figure/figure-query.ts +22 -1
  171. package/server/service/figure/figure-rename.test.ts +13 -2
  172. package/server/service/figure/figure-rename.ts +13 -1
  173. package/server/service/figure/figure-replaced-draft.ts +90 -0
  174. package/server/service/figure/figure-revert-db.test.ts +159 -0
  175. package/server/service/figure/figure-revert-race.pg.test.ts +168 -0
  176. package/server/service/figure/figure-revert.ts +181 -0
  177. package/server/service/figure/figure-tools.ts +7 -0
  178. package/server/service/figure/figure-type.ts +30 -0
  179. package/server/service/figure/figure-write.test.ts +15 -0
  180. package/server/service/figure/figure-write.ts +12 -2
  181. package/server/service/figure/index.ts +3 -1
  182. package/translations/en.json +3 -3
  183. package/translations/ko.json +3 -3
@@ -1 +1 @@
1
- {"version":"figure-asset-1","name":"TPL_TURNTABLE","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"disc.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"turn","unit":"deg","min":-180,"max":180,"role":"state"}],"constants":[{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"k.ratio.1","unit":"ratio","value":1},{"id":"k.ratio.0_45","unit":"ratio","value":0.45},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"k.ratio._0_5","unit":"ratio","value":-0.5}],"nodes":[{"id":"host.shape","op":"box-shape@1","args":["host.size.x","host.size.y","host.dimension.z.value"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"disc.shape","op":"cylinder-shape@1","args":["disc.dimension.x.value","disc.dimension.length"],"outputs":{"shape":"disc.shapeValue"},"params":{"frame":"disc.local"}},{"id":"disc.pose","op":"rigid@1","args":["d.mm.0","disc.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"disc.poseValue"},"params":{"from":"disc.local","to":"disc.seat"}},{"id":"disc","op":"place@1","args":["disc.shapeValue","disc.world.value"],"outputs":{"placed":"disc.placed"}},{"id":"disc.dimension.x","op":"mul@1","args":["disc.x.follows.times.value","k.ratio.1"],"outputs":{"value":"disc.dimension.x.value"}},{"id":"host.dimension.z","op":"mul@1","args":["host.size.z","k.ratio.1"],"outputs":{"value":"host.dimension.z.value"}},{"id":"disc.x.follows.times","op":"mul@1","args":["host.dimension.z.value","k.ratio.0_45"],"outputs":{"value":"disc.x.follows.times.value"}},{"id":"mark.shape","op":"box-shape@1","args":["mark.dimension.width","mark.dimension.height","mark.dimension.depth"],"outputs":{"shape":"mark.shapeValue"},"params":{"frame":"mark.local"}},{"id":"mark.pose","op":"rigid@1","args":["mark.on.disc.own-edge.x.0.times.value","mark.on.disc.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"mark.poseValue"},"params":{"from":"mark.local","to":"mark.seat"}},{"id":"mark","op":"place@1","args":["mark.shapeValue","mark.world.value"],"outputs":{"placed":"mark.placed"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"disc.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"disc.on.host.seat.y.0.times.value"}},{"id":"disc.on.host.along.y.0.times","op":"mul@1","args":["disc.dimension.length","k.ratio.0_5"],"outputs":{"value":"disc.on.host.along.y.0.times.value"}},{"id":"disc.on.host.along.y.1.sum","op":"add@1","args":["disc.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"disc.on.host.along.y.1.sum.value"}},{"id":"disc.seat.rigid","op":"rigid@1","args":["d.mm.0","disc.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"disc.seat.value"},"params":{"from":"disc.joint","to":"host.local"}},{"id":"disc.chain","op":"compose@1","args":["disc.seat.value","disc.turned.value"],"outputs":{"pose":"disc.chain.value"}},{"id":"disc.world","op":"compose@1","args":["host.chain.value","disc.chain.value"],"outputs":{"pose":"disc.world.value"}},{"id":"disc.motion","op":"axis-turn@1","args":["axis.ratio.0","k.ratio.1","axis.ratio.0","turn"],"outputs":{"pose":"disc.motion.value"},"params":{"from":"disc.seat","to":"disc.joint"}},{"id":"disc.turned","op":"compose@1","args":["disc.motion.value","disc.poseValue"],"outputs":{"pose":"disc.turned.value"}},{"id":"mark.on.disc.seat.y.0.times","op":"mul@1","args":["disc.dimension.length","k.ratio.0_5"],"outputs":{"value":"mark.on.disc.seat.y.0.times.value"}},{"id":"mark.on.disc.along.y.0.times","op":"mul@1","args":["mark.dimension.height","k.ratio.0_5"],"outputs":{"value":"mark.on.disc.along.y.0.times.value"}},{"id":"mark.on.disc.along.y.1.sum","op":"add@1","args":["mark.on.disc.along.y.0.times.value","d.mm.0"],"outputs":{"value":"mark.on.disc.along.y.1.sum.value"}},{"id":"mark.on.disc.own-edge.x.0.times","op":"mul@1","args":["mark.dimension.width","k.ratio._0_5"],"outputs":{"value":"mark.on.disc.own-edge.x.0.times.value"}},{"id":"mark.seat.rigid","op":"rigid@1","args":["disc.dimension.x.value","mark.on.disc.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"mark.seat.value"},"params":{"from":"mark.seat","to":"disc.local"}},{"id":"mark.chain","op":"compose@1","args":["mark.seat.value","mark.poseValue"],"outputs":{"pose":"mark.chain.value"}},{"id":"mark.world","op":"compose@1","args":["disc.world.value","mark.chain.value"],"outputs":{"pose":"mark.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1200,"host.size.y":700,"host.size.z":1200,"disc.dimension.length":40,"mark.dimension.width":400,"mark.dimension.height":10,"mark.dimension.depth":60},"stateDefaults":{"turn":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-6c8ea8":"#6c8ea8","palette.tpl-e0a800":"#e0a800"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"disc","material":{"token":"palette.tpl-6c8ea8"},"segments":12},{"target":"mark","material":{"token":"palette.tpl-e0a800"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"disc","type":"revolute","body0":{"part":"host","face":"top"},"body1":{"part":"disc","face":"bottom"},"origin":{},"axis":"Y","lowerLimit":-180,"upperLimit":180,"state":{"id":"turn"}},{"id":"mark","type":"fixed","body0":{"part":"disc","face":"top"},"body1":{"part":"mark","face":"bottom"},"origin":{"align":{"x":"max"}}}]}
1
+ {"version":"figure-asset-1","name":"TPL_TURNTABLE","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"disc.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"mark.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"turn","unit":"deg","min":-180,"max":180,"role":"state"}],"constants":[{"id":"host.k.centre","unit":"ratio","value":-0.5},{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"disc.k.centre","unit":"ratio","value":-0.5},{"id":"k.ratio.1","unit":"ratio","value":1},{"id":"k.ratio.0_45","unit":"ratio","value":0.45},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"mark.k.centre","unit":"ratio","value":-0.5}],"nodes":[{"id":"host.start","op":"mul@1","args":["host.size.y","host.k.centre"],"outputs":{"value":"host.start.value"}},{"id":"host.shape","op":"extrude@1","args":["host.start.value","host.size.y","host.size.x","host.dimension.z.value"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local","axis":"y","section":"rectangle"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"disc.shape","op":"extrude@1","args":["disc.start.value","disc.dimension.length","disc.dimension.x.value","disc.dimension.x.value"],"outputs":{"shape":"disc.shapeValue"},"params":{"frame":"disc.local","axis":"y","section":"ellipse"}},{"id":"disc.pose","op":"rigid@1","args":["d.mm.0","disc.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"disc.poseValue"},"params":{"from":"disc.local","to":"disc.seat"}},{"id":"disc","op":"place@1","args":["disc.shapeValue","disc.world.value"],"outputs":{"placed":"disc.placed"}},{"id":"disc.start","op":"mul@1","args":["disc.dimension.length","disc.k.centre"],"outputs":{"value":"disc.start.value"}},{"id":"disc.dimension.x","op":"mul@1","args":["disc.x.follows.times.value","k.ratio.1"],"outputs":{"value":"disc.dimension.x.value"}},{"id":"host.dimension.z","op":"mul@1","args":["host.size.z","k.ratio.1"],"outputs":{"value":"host.dimension.z.value"}},{"id":"disc.x.follows.times","op":"mul@1","args":["host.dimension.z.value","k.ratio.0_45"],"outputs":{"value":"disc.x.follows.times.value"}},{"id":"mark.shape","op":"extrude@1","args":["mark.start.value","mark.dimension.height","mark.dimension.width","mark.dimension.depth"],"outputs":{"shape":"mark.shapeValue"},"params":{"frame":"mark.local","axis":"y","section":"rectangle"}},{"id":"mark.pose","op":"rigid@1","args":["mark.on.disc.own-edge.x.0.times.value","mark.on.disc.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"mark.poseValue"},"params":{"from":"mark.local","to":"mark.seat"}},{"id":"mark","op":"place@1","args":["mark.shapeValue","mark.world.value"],"outputs":{"placed":"mark.placed"}},{"id":"mark.start","op":"mul@1","args":["mark.dimension.height","mark.k.centre"],"outputs":{"value":"mark.start.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"disc.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"disc.on.host.seat.y.0.times.value"}},{"id":"disc.on.host.along.y.0.times","op":"mul@1","args":["disc.dimension.length","k.ratio.0_5"],"outputs":{"value":"disc.on.host.along.y.0.times.value"}},{"id":"disc.on.host.along.y.1.sum","op":"add@1","args":["disc.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"disc.on.host.along.y.1.sum.value"}},{"id":"disc.seat.rigid","op":"rigid@1","args":["d.mm.0","disc.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"disc.seat.value"},"params":{"from":"disc.joint","to":"host.local"}},{"id":"disc.chain","op":"compose@1","args":["disc.seat.value","disc.turned.value"],"outputs":{"pose":"disc.chain.value"}},{"id":"disc.world","op":"compose@1","args":["host.chain.value","disc.chain.value"],"outputs":{"pose":"disc.world.value"}},{"id":"disc.motion","op":"axis-turn@1","args":["axis.ratio.0","k.ratio.1","axis.ratio.0","turn"],"outputs":{"pose":"disc.motion.value"},"params":{"from":"disc.seat","to":"disc.joint"}},{"id":"disc.turned","op":"compose@1","args":["disc.motion.value","disc.poseValue"],"outputs":{"pose":"disc.turned.value"}},{"id":"mark.on.disc.seat.y.0.times","op":"mul@1","args":["disc.dimension.length","k.ratio.0_5"],"outputs":{"value":"mark.on.disc.seat.y.0.times.value"}},{"id":"mark.on.disc.along.y.0.times","op":"mul@1","args":["mark.dimension.height","k.ratio.0_5"],"outputs":{"value":"mark.on.disc.along.y.0.times.value"}},{"id":"mark.on.disc.along.y.1.sum","op":"add@1","args":["mark.on.disc.along.y.0.times.value","d.mm.0"],"outputs":{"value":"mark.on.disc.along.y.1.sum.value"}},{"id":"mark.on.disc.own-edge.x.0.times","op":"mul@1","args":["mark.dimension.width","host.k.centre"],"outputs":{"value":"mark.on.disc.own-edge.x.0.times.value"}},{"id":"mark.seat.rigid","op":"rigid@1","args":["disc.dimension.x.value","mark.on.disc.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"mark.seat.value"},"params":{"from":"mark.seat","to":"disc.local"}},{"id":"mark.chain","op":"compose@1","args":["mark.seat.value","mark.poseValue"],"outputs":{"pose":"mark.chain.value"}},{"id":"mark.world","op":"compose@1","args":["disc.world.value","mark.chain.value"],"outputs":{"pose":"mark.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1200,"host.size.y":700,"host.size.z":1200,"disc.dimension.length":40,"mark.dimension.width":400,"mark.dimension.height":10,"mark.dimension.depth":60},"stateDefaults":{"turn":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-6c8ea8":"#6c8ea8","palette.tpl-e0a800":"#e0a800"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"disc","material":{"token":"palette.tpl-6c8ea8"},"segments":12},{"target":"mark","material":{"token":"palette.tpl-e0a800"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"disc","type":"revolute","body0":{"part":"host","face":"top"},"body1":{"part":"disc","face":"bottom"},"origin":{},"axis":"Y","lowerLimit":-180,"upperLimit":180,"state":{"id":"turn"}},{"id":"mark","type":"fixed","body0":{"part":"disc","face":"top"},"body1":{"part":"mark","face":"bottom"},"origin":{"align":{"x":"max"}}}]}
@@ -1 +1 @@
1
- {"version":"figure-asset-1","name":"TPL_VALVE_HANDLE","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"stem.dimension.radius","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"stem.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"wheel.dimension.radius","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"wheel.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"turn","unit":"deg","min":0,"max":360,"role":"state"}],"constants":[{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"axis.ratio.1","unit":"ratio","value":1}],"nodes":[{"id":"host.shape","op":"box-shape@1","args":["host.size.x","host.size.y","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"body.shape","op":"box-shape@1","args":["body.dimension.width","body.dimension.height","body.dimension.depth"],"outputs":{"shape":"body.shapeValue"},"params":{"frame":"body.local"}},{"id":"body.pose","op":"rigid@1","args":["d.mm.0","body.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"body.poseValue"},"params":{"from":"body.local","to":"body.seat"}},{"id":"body","op":"place@1","args":["body.shapeValue","body.world.value"],"outputs":{"placed":"body.placed"}},{"id":"stem.shape","op":"cylinder-shape@1","args":["stem.dimension.radius","stem.dimension.length"],"outputs":{"shape":"stem.shapeValue"},"params":{"frame":"stem.local"}},{"id":"stem.pose","op":"rigid@1","args":["d.mm.0","stem.on.body.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"stem.poseValue"},"params":{"from":"stem.local","to":"stem.seat"}},{"id":"stem","op":"place@1","args":["stem.shapeValue","stem.world.value"],"outputs":{"placed":"stem.placed"}},{"id":"wheel.shape","op":"cylinder-shape@1","args":["wheel.dimension.radius","wheel.dimension.length"],"outputs":{"shape":"wheel.shapeValue"},"params":{"frame":"wheel.local"}},{"id":"wheel.pose","op":"rigid@1","args":["d.mm.0","wheel.on.stem.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"wheel.poseValue"},"params":{"from":"wheel.local","to":"wheel.seat"}},{"id":"wheel","op":"place@1","args":["wheel.shapeValue","wheel.world.value"],"outputs":{"placed":"wheel.placed"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"body.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"body.on.host.seat.y.0.times.value"}},{"id":"body.on.host.along.y.0.times","op":"mul@1","args":["body.dimension.height","k.ratio.0_5"],"outputs":{"value":"body.on.host.along.y.0.times.value"}},{"id":"body.on.host.along.y.1.sum","op":"add@1","args":["body.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"body.on.host.along.y.1.sum.value"}},{"id":"body.seat.rigid","op":"rigid@1","args":["d.mm.0","body.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"body.seat.value"},"params":{"from":"body.seat","to":"host.local"}},{"id":"body.chain","op":"compose@1","args":["body.seat.value","body.poseValue"],"outputs":{"pose":"body.chain.value"}},{"id":"body.world","op":"compose@1","args":["host.chain.value","body.chain.value"],"outputs":{"pose":"body.world.value"}},{"id":"stem.on.body.seat.y.0.times","op":"mul@1","args":["body.dimension.height","k.ratio.0_5"],"outputs":{"value":"stem.on.body.seat.y.0.times.value"}},{"id":"stem.on.body.along.y.0.times","op":"mul@1","args":["stem.dimension.length","k.ratio.0_5"],"outputs":{"value":"stem.on.body.along.y.0.times.value"}},{"id":"stem.on.body.along.y.1.sum","op":"add@1","args":["stem.on.body.along.y.0.times.value","d.mm.0"],"outputs":{"value":"stem.on.body.along.y.1.sum.value"}},{"id":"stem.seat.rigid","op":"rigid@1","args":["d.mm.0","stem.on.body.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"stem.seat.value"},"params":{"from":"stem.seat","to":"body.local"}},{"id":"stem.chain","op":"compose@1","args":["stem.seat.value","stem.poseValue"],"outputs":{"pose":"stem.chain.value"}},{"id":"stem.world","op":"compose@1","args":["body.world.value","stem.chain.value"],"outputs":{"pose":"stem.world.value"}},{"id":"wheel.on.stem.seat.y.0.times","op":"mul@1","args":["stem.dimension.length","k.ratio.0_5"],"outputs":{"value":"wheel.on.stem.seat.y.0.times.value"}},{"id":"wheel.on.stem.along.y.0.times","op":"mul@1","args":["wheel.dimension.length","k.ratio.0_5"],"outputs":{"value":"wheel.on.stem.along.y.0.times.value"}},{"id":"wheel.on.stem.along.y.1.sum","op":"add@1","args":["wheel.on.stem.along.y.0.times.value","d.mm.0"],"outputs":{"value":"wheel.on.stem.along.y.1.sum.value"}},{"id":"wheel.seat.rigid","op":"rigid@1","args":["d.mm.0","wheel.on.stem.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"wheel.seat.value"},"params":{"from":"wheel.joint","to":"stem.local"}},{"id":"wheel.chain","op":"compose@1","args":["wheel.seat.value","wheel.turned.value"],"outputs":{"pose":"wheel.chain.value"}},{"id":"wheel.world","op":"compose@1","args":["stem.world.value","wheel.chain.value"],"outputs":{"pose":"wheel.world.value"}},{"id":"wheel.motion","op":"axis-turn@1","args":["axis.ratio.0","axis.ratio.1","axis.ratio.0","turn"],"outputs":{"pose":"wheel.motion.value"},"params":{"from":"wheel.seat","to":"wheel.joint"}},{"id":"wheel.turned","op":"compose@1","args":["wheel.motion.value","wheel.poseValue"],"outputs":{"pose":"wheel.turned.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":3000,"host.size.y":700,"host.size.z":800,"body.dimension.width":150,"body.dimension.height":150,"body.dimension.depth":150,"stem.dimension.radius":12,"stem.dimension.length":120,"wheel.dimension.radius":120,"wheel.dimension.length":20},"stateDefaults":{"turn":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-8e9aa6":"#8e9aa6","palette.tpl-d0d4d8":"#d0d4d8","palette.tpl-d62828":"#d62828"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"body","material":{"token":"palette.tpl-8e9aa6"}},{"target":"stem","material":{"token":"palette.tpl-d0d4d8"},"segments":12},{"target":"wheel","material":{"token":"palette.tpl-d62828"},"segments":12}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"body","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"body","face":"bottom"},"origin":{}},{"id":"stem","type":"fixed","body0":{"part":"body","face":"top"},"body1":{"part":"stem","face":"bottom"},"origin":{}},{"id":"wheel","type":"revolute","body0":{"part":"stem","face":"top"},"body1":{"part":"wheel","face":"bottom"},"origin":{},"axis":"Y","lowerLimit":0,"upperLimit":360,"state":{"id":"turn"}}]}
1
+ {"version":"figure-asset-1","name":"TPL_VALVE_HANDLE","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"body.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"stem.dimension.radius","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"stem.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"wheel.dimension.radius","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"wheel.dimension.length","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"turn","unit":"deg","min":0,"max":360,"role":"state"}],"constants":[{"id":"host.k.centre","unit":"ratio","value":-0.5},{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"body.k.centre","unit":"ratio","value":-0.5},{"id":"stem.k.centre","unit":"ratio","value":-0.5},{"id":"wheel.k.centre","unit":"ratio","value":-0.5},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"axis.ratio.1","unit":"ratio","value":1}],"nodes":[{"id":"host.start","op":"mul@1","args":["host.size.y","host.k.centre"],"outputs":{"value":"host.start.value"}},{"id":"host.shape","op":"extrude@1","args":["host.start.value","host.size.y","host.size.x","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local","axis":"y","section":"rectangle"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"body.shape","op":"extrude@1","args":["body.start.value","body.dimension.height","body.dimension.width","body.dimension.depth"],"outputs":{"shape":"body.shapeValue"},"params":{"frame":"body.local","axis":"y","section":"rectangle"}},{"id":"body.pose","op":"rigid@1","args":["d.mm.0","body.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"body.poseValue"},"params":{"from":"body.local","to":"body.seat"}},{"id":"body","op":"place@1","args":["body.shapeValue","body.world.value"],"outputs":{"placed":"body.placed"}},{"id":"body.start","op":"mul@1","args":["body.dimension.height","body.k.centre"],"outputs":{"value":"body.start.value"}},{"id":"stem.shape","op":"extrude@1","args":["stem.start.value","stem.dimension.length","stem.dimension.radius","stem.dimension.radius"],"outputs":{"shape":"stem.shapeValue"},"params":{"frame":"stem.local","axis":"y","section":"ellipse"}},{"id":"stem.pose","op":"rigid@1","args":["d.mm.0","stem.on.body.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"stem.poseValue"},"params":{"from":"stem.local","to":"stem.seat"}},{"id":"stem","op":"place@1","args":["stem.shapeValue","stem.world.value"],"outputs":{"placed":"stem.placed"}},{"id":"stem.start","op":"mul@1","args":["stem.dimension.length","stem.k.centre"],"outputs":{"value":"stem.start.value"}},{"id":"wheel.shape","op":"extrude@1","args":["wheel.start.value","wheel.dimension.length","wheel.dimension.radius","wheel.dimension.radius"],"outputs":{"shape":"wheel.shapeValue"},"params":{"frame":"wheel.local","axis":"y","section":"ellipse"}},{"id":"wheel.pose","op":"rigid@1","args":["d.mm.0","wheel.on.stem.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"wheel.poseValue"},"params":{"from":"wheel.local","to":"wheel.seat"}},{"id":"wheel","op":"place@1","args":["wheel.shapeValue","wheel.world.value"],"outputs":{"placed":"wheel.placed"}},{"id":"wheel.start","op":"mul@1","args":["wheel.dimension.length","wheel.k.centre"],"outputs":{"value":"wheel.start.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"body.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"body.on.host.seat.y.0.times.value"}},{"id":"body.on.host.along.y.0.times","op":"mul@1","args":["body.dimension.height","k.ratio.0_5"],"outputs":{"value":"body.on.host.along.y.0.times.value"}},{"id":"body.on.host.along.y.1.sum","op":"add@1","args":["body.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"body.on.host.along.y.1.sum.value"}},{"id":"body.seat.rigid","op":"rigid@1","args":["d.mm.0","body.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"body.seat.value"},"params":{"from":"body.seat","to":"host.local"}},{"id":"body.chain","op":"compose@1","args":["body.seat.value","body.poseValue"],"outputs":{"pose":"body.chain.value"}},{"id":"body.world","op":"compose@1","args":["host.chain.value","body.chain.value"],"outputs":{"pose":"body.world.value"}},{"id":"stem.on.body.seat.y.0.times","op":"mul@1","args":["body.dimension.height","k.ratio.0_5"],"outputs":{"value":"stem.on.body.seat.y.0.times.value"}},{"id":"stem.on.body.along.y.0.times","op":"mul@1","args":["stem.dimension.length","k.ratio.0_5"],"outputs":{"value":"stem.on.body.along.y.0.times.value"}},{"id":"stem.on.body.along.y.1.sum","op":"add@1","args":["stem.on.body.along.y.0.times.value","d.mm.0"],"outputs":{"value":"stem.on.body.along.y.1.sum.value"}},{"id":"stem.seat.rigid","op":"rigid@1","args":["d.mm.0","stem.on.body.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"stem.seat.value"},"params":{"from":"stem.seat","to":"body.local"}},{"id":"stem.chain","op":"compose@1","args":["stem.seat.value","stem.poseValue"],"outputs":{"pose":"stem.chain.value"}},{"id":"stem.world","op":"compose@1","args":["body.world.value","stem.chain.value"],"outputs":{"pose":"stem.world.value"}},{"id":"wheel.on.stem.seat.y.0.times","op":"mul@1","args":["stem.dimension.length","k.ratio.0_5"],"outputs":{"value":"wheel.on.stem.seat.y.0.times.value"}},{"id":"wheel.on.stem.along.y.0.times","op":"mul@1","args":["wheel.dimension.length","k.ratio.0_5"],"outputs":{"value":"wheel.on.stem.along.y.0.times.value"}},{"id":"wheel.on.stem.along.y.1.sum","op":"add@1","args":["wheel.on.stem.along.y.0.times.value","d.mm.0"],"outputs":{"value":"wheel.on.stem.along.y.1.sum.value"}},{"id":"wheel.seat.rigid","op":"rigid@1","args":["d.mm.0","wheel.on.stem.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"wheel.seat.value"},"params":{"from":"wheel.joint","to":"stem.local"}},{"id":"wheel.chain","op":"compose@1","args":["wheel.seat.value","wheel.turned.value"],"outputs":{"pose":"wheel.chain.value"}},{"id":"wheel.world","op":"compose@1","args":["stem.world.value","wheel.chain.value"],"outputs":{"pose":"wheel.world.value"}},{"id":"wheel.motion","op":"axis-turn@1","args":["axis.ratio.0","axis.ratio.1","axis.ratio.0","turn"],"outputs":{"pose":"wheel.motion.value"},"params":{"from":"wheel.seat","to":"wheel.joint"}},{"id":"wheel.turned","op":"compose@1","args":["wheel.motion.value","wheel.poseValue"],"outputs":{"pose":"wheel.turned.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":3000,"host.size.y":700,"host.size.z":800,"body.dimension.width":150,"body.dimension.height":150,"body.dimension.depth":150,"stem.dimension.radius":12,"stem.dimension.length":120,"wheel.dimension.radius":120,"wheel.dimension.length":20},"stateDefaults":{"turn":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-8e9aa6":"#8e9aa6","palette.tpl-d0d4d8":"#d0d4d8","palette.tpl-d62828":"#d62828"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"body","material":{"token":"palette.tpl-8e9aa6"}},{"target":"stem","material":{"token":"palette.tpl-d0d4d8"},"segments":12},{"target":"wheel","material":{"token":"palette.tpl-d62828"},"segments":12}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"body","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"body","face":"bottom"},"origin":{}},{"id":"stem","type":"fixed","body0":{"part":"body","face":"top"},"body1":{"part":"stem","face":"bottom"},"origin":{}},{"id":"wheel","type":"revolute","body0":{"part":"stem","face":"top"},"body1":{"part":"wheel","face":"bottom"},"origin":{},"axis":"Y","lowerLimit":0,"upperLimit":360,"state":{"id":"turn"}}]}
@@ -1 +1 @@
1
- {"version":"figure-asset-1","name":"TPL_WASTE_BIN","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.roundX","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.roundZ","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.wallX","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.wallZ","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.floor","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"}],"constants":[{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5}],"nodes":[{"id":"host.shape","op":"box-shape@1","args":["host.size.x","host.size.y","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"bin.shape","op":"hollow-box@2","args":["bin.dimension.width","bin.dimension.height","bin.dimension.depth","bin.dimension.roundX","bin.dimension.roundZ","bin.dimension.wallX","bin.dimension.wallZ","bin.dimension.floor"],"outputs":{"shape":"bin.shapeValue"},"params":{"frame":"bin.local"}},{"id":"bin.pose","op":"rigid@1","args":["d.mm.0","bin.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"bin.poseValue"},"params":{"from":"bin.local","to":"bin.seat"}},{"id":"bin","op":"place@1","args":["bin.shapeValue","bin.world.value"],"outputs":{"placed":"bin.placed"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"bin.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"bin.on.host.seat.y.0.times.value"}},{"id":"bin.on.host.along.y.0.times","op":"mul@1","args":["bin.dimension.height","k.ratio.0_5"],"outputs":{"value":"bin.on.host.along.y.0.times.value"}},{"id":"bin.on.host.along.y.1.sum","op":"add@1","args":["bin.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"bin.on.host.along.y.1.sum.value"}},{"id":"bin.seat.rigid","op":"rigid@1","args":["d.mm.0","bin.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"bin.seat.value"},"params":{"from":"bin.seat","to":"host.local"}},{"id":"bin.chain","op":"compose@1","args":["bin.seat.value","bin.poseValue"],"outputs":{"pose":"bin.chain.value"}},{"id":"bin.world","op":"compose@1","args":["host.chain.value","bin.chain.value"],"outputs":{"pose":"bin.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":6000,"host.size.y":50,"host.size.z":4000,"bin.dimension.width":600,"bin.dimension.height":800,"bin.dimension.depth":600,"bin.dimension.roundX":40,"bin.dimension.roundZ":40,"bin.dimension.wallX":15,"bin.dimension.wallZ":15,"bin.dimension.floor":20},"stateDefaults":{},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-27ae60":"#27ae60"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"bin","material":{"token":"palette.tpl-27ae60"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"bin","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"bin","face":"bottom"},"origin":{}}]}
1
+ {"version":"figure-asset-1","name":"TPL_WASTE_BIN","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.roundX","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.roundZ","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.wallX","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.wallZ","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"bin.dimension.floor","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"}],"constants":[{"id":"host.k.centre","unit":"ratio","value":-0.5},{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"bin.k.centre","unit":"ratio","value":-0.5}],"nodes":[{"id":"host.start","op":"mul@1","args":["host.size.y","host.k.centre"],"outputs":{"value":"host.start.value"}},{"id":"host.shape","op":"extrude@1","args":["host.start.value","host.size.y","host.size.x","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local","axis":"y","section":"rectangle"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"bin.shape","op":"extrude@1","args":["bin.start.value","bin.dimension.height","bin.dimension.width","bin.dimension.depth","bin.dimension.roundX","bin.dimension.roundZ","bin.dimension.wallX","bin.dimension.wallX","bin.dimension.wallZ","bin.dimension.wallZ","bin.dimension.floor"],"outputs":{"shape":"bin.shapeValue"},"params":{"frame":"bin.local","axis":"y","section":"rectangle","corner":"round","cavity":"inside","cavity-end":"open","cavity-start":"closed"}},{"id":"bin.pose","op":"rigid@1","args":["d.mm.0","bin.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"bin.poseValue"},"params":{"from":"bin.local","to":"bin.seat"}},{"id":"bin","op":"place@1","args":["bin.shapeValue","bin.world.value"],"outputs":{"placed":"bin.placed"}},{"id":"bin.start","op":"mul@1","args":["bin.dimension.height","bin.k.centre"],"outputs":{"value":"bin.start.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"bin.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"bin.on.host.seat.y.0.times.value"}},{"id":"bin.on.host.along.y.0.times","op":"mul@1","args":["bin.dimension.height","k.ratio.0_5"],"outputs":{"value":"bin.on.host.along.y.0.times.value"}},{"id":"bin.on.host.along.y.1.sum","op":"add@1","args":["bin.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"bin.on.host.along.y.1.sum.value"}},{"id":"bin.seat.rigid","op":"rigid@1","args":["d.mm.0","bin.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"bin.seat.value"},"params":{"from":"bin.seat","to":"host.local"}},{"id":"bin.chain","op":"compose@1","args":["bin.seat.value","bin.poseValue"],"outputs":{"pose":"bin.chain.value"}},{"id":"bin.world","op":"compose@1","args":["host.chain.value","bin.chain.value"],"outputs":{"pose":"bin.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":6000,"host.size.y":50,"host.size.z":4000,"bin.dimension.width":600,"bin.dimension.height":800,"bin.dimension.depth":600,"bin.dimension.roundX":40,"bin.dimension.roundZ":40,"bin.dimension.wallX":15,"bin.dimension.wallZ":15,"bin.dimension.floor":20},"stateDefaults":{},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-27ae60":"#27ae60"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"bin","material":{"token":"palette.tpl-27ae60"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"bin","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"bin","face":"bottom"},"origin":{}}]}
@@ -1 +1 @@
1
- {"version":"figure-asset-1","name":"TPL_WORK_LIGHT","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"on","unit":"mm","min":0,"max":0.001,"role":"state"}],"constants":[{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"k.ratio._0_5","unit":"ratio","value":-0.5},{"id":"k.ratio._1","unit":"ratio","value":-1},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"axis.ratio.1","unit":"ratio","value":1},{"id":"k.light.shown.at","unit":"mm","value":0.0005}],"nodes":[{"id":"host.shape","op":"box-shape@1","args":["host.size.x","host.size.y","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"arm.shape","op":"box-shape@1","args":["arm.dimension.width","arm.dimension.height","arm.dimension.depth"],"outputs":{"shape":"arm.shapeValue"},"params":{"frame":"arm.local"}},{"id":"arm.pose","op":"rigid@1","args":["d.mm.0","arm.on.host.along.y.1.sum.value","arm.on.host.own-edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"arm.poseValue"},"params":{"from":"arm.local","to":"arm.seat"}},{"id":"arm","op":"place@1","args":["arm.shapeValue","arm.world.value"],"outputs":{"placed":"arm.placed"}},{"id":"head.shape","op":"box-shape@1","args":["head.dimension.width","head.dimension.height","head.dimension.depth"],"outputs":{"shape":"head.shapeValue"},"params":{"frame":"head.local"}},{"id":"head.pose","op":"rigid@1","args":["d.mm.0","head.on.arm.along.y.1.sum.value","head.on.arm.own-edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"head.poseValue"},"params":{"from":"head.local","to":"head.seat"}},{"id":"head","op":"place@1","args":["head.shapeValue","head.world.value"],"outputs":{"placed":"head.placed"}},{"id":"light.shape","op":"box-shape@1","args":["light.dimension.width","light.dimension.height","light.dimension.depth"],"outputs":{"shape":"light.shapeValue"},"params":{"frame":"light.local"}},{"id":"light.pose","op":"rigid@1","args":["d.mm.0","light.on.head.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"light.poseValue"},"params":{"from":"light.local","to":"light.seat"}},{"id":"light","op":"place@1","args":["light.shapeValue","light.world.value"],"outputs":{"placed":"light.placed"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"arm.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"arm.on.host.seat.y.0.times.value"}},{"id":"arm.on.host.along.y.0.times","op":"mul@1","args":["arm.dimension.height","k.ratio.0_5"],"outputs":{"value":"arm.on.host.along.y.0.times.value"}},{"id":"arm.on.host.along.y.1.sum","op":"add@1","args":["arm.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"arm.on.host.along.y.1.sum.value"}},{"id":"arm.on.host.edge.z.0.times","op":"mul@1","args":["host.size.z","k.ratio._0_5"],"outputs":{"value":"arm.on.host.edge.z.0.times.value"}},{"id":"arm.on.host.own-edge.z.0.times","op":"mul@1","args":["arm.dimension.depth","k.ratio.0_5"],"outputs":{"value":"arm.on.host.own-edge.z.0.times.value"}},{"id":"arm.seat.rigid","op":"rigid@1","args":["d.mm.0","arm.on.host.seat.y.0.times.value","arm.on.host.edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"arm.seat.value"},"params":{"from":"arm.seat","to":"host.local"}},{"id":"arm.chain","op":"compose@1","args":["arm.seat.value","arm.poseValue"],"outputs":{"pose":"arm.chain.value"}},{"id":"arm.world","op":"compose@1","args":["host.chain.value","arm.chain.value"],"outputs":{"pose":"arm.world.value"}},{"id":"head.on.arm.seat.y.0.times","op":"mul@1","args":["arm.dimension.height","k.ratio.0_5"],"outputs":{"value":"head.on.arm.seat.y.0.times.value"}},{"id":"head.on.arm.along.y.0.times","op":"mul@1","args":["head.dimension.height","k.ratio.0_5"],"outputs":{"value":"head.on.arm.along.y.0.times.value"}},{"id":"head.on.arm.along.y.1.sum","op":"add@1","args":["head.on.arm.along.y.0.times.value","d.mm.0"],"outputs":{"value":"head.on.arm.along.y.1.sum.value"}},{"id":"head.on.arm.edge.z.0.times","op":"mul@1","args":["arm.dimension.depth","k.ratio._0_5"],"outputs":{"value":"head.on.arm.edge.z.0.times.value"}},{"id":"head.on.arm.own-edge.z.0.times","op":"mul@1","args":["head.dimension.depth","k.ratio.0_5"],"outputs":{"value":"head.on.arm.own-edge.z.0.times.value"}},{"id":"head.seat.rigid","op":"rigid@1","args":["d.mm.0","head.on.arm.seat.y.0.times.value","head.on.arm.edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"head.seat.value"},"params":{"from":"head.seat","to":"arm.local"}},{"id":"head.chain","op":"compose@1","args":["head.seat.value","head.poseValue"],"outputs":{"pose":"head.chain.value"}},{"id":"head.world","op":"compose@1","args":["arm.world.value","head.chain.value"],"outputs":{"pose":"head.world.value"}},{"id":"light.on.head.seat.y.0.times","op":"mul@1","args":["head.dimension.height","k.ratio._0_5"],"outputs":{"value":"light.on.head.seat.y.0.times.value"}},{"id":"light.on.head.along.y.0.times","op":"mul@1","args":["light.dimension.height","k.ratio._0_5"],"outputs":{"value":"light.on.head.along.y.0.times.value"}},{"id":"light.on.head.along.y.1.times","op":"mul@1","args":["d.mm.0","k.ratio._1"],"outputs":{"value":"light.on.head.along.y.1.times.value"}},{"id":"light.on.head.along.y.1.sum","op":"add@1","args":["light.on.head.along.y.0.times.value","light.on.head.along.y.1.times.value"],"outputs":{"value":"light.on.head.along.y.1.sum.value"}},{"id":"light.seat.rigid","op":"rigid@1","args":["d.mm.0","light.on.head.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"light.seat.value"},"params":{"from":"light.joint","to":"head.local"}},{"id":"light.chain","op":"compose@1","args":["light.seat.value","light.turned.value"],"outputs":{"pose":"light.chain.value"}},{"id":"light.world","op":"compose@1","args":["head.world.value","light.chain.value"],"outputs":{"pose":"light.world.value"}},{"id":"light.motion","op":"axis-slide@1","args":["axis.ratio.0","axis.ratio.1","axis.ratio.0","on"],"outputs":{"pose":"light.motion.value"},"params":{"from":"light.seat","to":"light.joint"}},{"id":"light.turned","op":"compose@1","args":["light.motion.value","light.poseValue"],"outputs":{"pose":"light.turned.value"}},{"id":"light.shown","op":"at-least@1","args":["on","k.light.shown.at"],"outputs":{"value":"light.shown.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1800,"host.size.y":900,"host.size.z":800,"arm.dimension.width":40,"arm.dimension.height":700,"arm.dimension.depth":40,"head.dimension.width":300,"head.dimension.height":40,"head.dimension.depth":120,"light.dimension.width":280,"light.dimension.height":10,"light.dimension.depth":100},"stateDefaults":{"on":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-7d8790":"#7d8790","palette.tpl-44505a":"#44505a","palette.tpl-fff4c2":"#fff4c2"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"arm","material":{"token":"palette.tpl-7d8790"}},{"target":"head","material":{"token":"palette.tpl-44505a"}},{"target":"light","material":{"token":"palette.tpl-fff4c2","emissive":{"on":true,"token":"palette.tpl-fff4c2","intensity":1}},"visibility":"light.shown.value"}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"arm","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"arm","face":"bottom"},"origin":{"align":{"z":"min"}}},{"id":"head","type":"fixed","body0":{"part":"arm","face":"top"},"body1":{"part":"head","face":"bottom"},"origin":{"align":{"z":"min"}}},{"id":"light","type":"prismatic","body0":{"part":"head","face":"bottom"},"body1":{"part":"light","face":"top"},"origin":{},"axis":"Y","lowerLimit":0,"upperLimit":0.001,"state":{"id":"on"}}]}
1
+ {"version":"figure-asset-1","name":"TPL_WORK_LIGHT","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"arm.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"head.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.width","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"light.dimension.depth","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"},{"id":"on","unit":"mm","min":0,"max":0.001,"role":"state"}],"constants":[{"id":"host.k.centre","unit":"ratio","value":-0.5},{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"arm.k.centre","unit":"ratio","value":-0.5},{"id":"head.k.centre","unit":"ratio","value":-0.5},{"id":"light.k.centre","unit":"ratio","value":-0.5},{"id":"k.ratio._1","unit":"ratio","value":-1},{"id":"axis.ratio.0","unit":"ratio","value":0},{"id":"axis.ratio.1","unit":"ratio","value":1},{"id":"k.light.shown.at","unit":"mm","value":0.0005}],"nodes":[{"id":"host.start","op":"mul@1","args":["host.size.y","host.k.centre"],"outputs":{"value":"host.start.value"}},{"id":"host.shape","op":"extrude@1","args":["host.start.value","host.size.y","host.size.x","host.size.z"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local","axis":"y","section":"rectangle"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"arm.shape","op":"extrude@1","args":["arm.start.value","arm.dimension.height","arm.dimension.width","arm.dimension.depth"],"outputs":{"shape":"arm.shapeValue"},"params":{"frame":"arm.local","axis":"y","section":"rectangle"}},{"id":"arm.pose","op":"rigid@1","args":["d.mm.0","arm.on.host.along.y.1.sum.value","arm.on.host.own-edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"arm.poseValue"},"params":{"from":"arm.local","to":"arm.seat"}},{"id":"arm","op":"place@1","args":["arm.shapeValue","arm.world.value"],"outputs":{"placed":"arm.placed"}},{"id":"arm.start","op":"mul@1","args":["arm.dimension.height","arm.k.centre"],"outputs":{"value":"arm.start.value"}},{"id":"head.shape","op":"extrude@1","args":["head.start.value","head.dimension.height","head.dimension.width","head.dimension.depth"],"outputs":{"shape":"head.shapeValue"},"params":{"frame":"head.local","axis":"y","section":"rectangle"}},{"id":"head.pose","op":"rigid@1","args":["d.mm.0","head.on.arm.along.y.1.sum.value","head.on.arm.own-edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"head.poseValue"},"params":{"from":"head.local","to":"head.seat"}},{"id":"head","op":"place@1","args":["head.shapeValue","head.world.value"],"outputs":{"placed":"head.placed"}},{"id":"head.start","op":"mul@1","args":["head.dimension.height","head.k.centre"],"outputs":{"value":"head.start.value"}},{"id":"light.shape","op":"extrude@1","args":["light.start.value","light.dimension.height","light.dimension.width","light.dimension.depth"],"outputs":{"shape":"light.shapeValue"},"params":{"frame":"light.local","axis":"y","section":"rectangle"}},{"id":"light.pose","op":"rigid@1","args":["d.mm.0","light.on.head.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"light.poseValue"},"params":{"from":"light.local","to":"light.seat"}},{"id":"light","op":"place@1","args":["light.shapeValue","light.world.value"],"outputs":{"placed":"light.placed"}},{"id":"light.start","op":"mul@1","args":["light.dimension.height","light.k.centre"],"outputs":{"value":"light.start.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"arm.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"arm.on.host.seat.y.0.times.value"}},{"id":"arm.on.host.along.y.0.times","op":"mul@1","args":["arm.dimension.height","k.ratio.0_5"],"outputs":{"value":"arm.on.host.along.y.0.times.value"}},{"id":"arm.on.host.along.y.1.sum","op":"add@1","args":["arm.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"arm.on.host.along.y.1.sum.value"}},{"id":"arm.on.host.edge.z.0.times","op":"mul@1","args":["host.size.z","host.k.centre"],"outputs":{"value":"arm.on.host.edge.z.0.times.value"}},{"id":"arm.on.host.own-edge.z.0.times","op":"mul@1","args":["arm.dimension.depth","k.ratio.0_5"],"outputs":{"value":"arm.on.host.own-edge.z.0.times.value"}},{"id":"arm.seat.rigid","op":"rigid@1","args":["d.mm.0","arm.on.host.seat.y.0.times.value","arm.on.host.edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"arm.seat.value"},"params":{"from":"arm.seat","to":"host.local"}},{"id":"arm.chain","op":"compose@1","args":["arm.seat.value","arm.poseValue"],"outputs":{"pose":"arm.chain.value"}},{"id":"arm.world","op":"compose@1","args":["host.chain.value","arm.chain.value"],"outputs":{"pose":"arm.world.value"}},{"id":"head.on.arm.seat.y.0.times","op":"mul@1","args":["arm.dimension.height","k.ratio.0_5"],"outputs":{"value":"head.on.arm.seat.y.0.times.value"}},{"id":"head.on.arm.along.y.0.times","op":"mul@1","args":["head.dimension.height","k.ratio.0_5"],"outputs":{"value":"head.on.arm.along.y.0.times.value"}},{"id":"head.on.arm.along.y.1.sum","op":"add@1","args":["head.on.arm.along.y.0.times.value","d.mm.0"],"outputs":{"value":"head.on.arm.along.y.1.sum.value"}},{"id":"head.on.arm.edge.z.0.times","op":"mul@1","args":["arm.dimension.depth","host.k.centre"],"outputs":{"value":"head.on.arm.edge.z.0.times.value"}},{"id":"head.on.arm.own-edge.z.0.times","op":"mul@1","args":["head.dimension.depth","k.ratio.0_5"],"outputs":{"value":"head.on.arm.own-edge.z.0.times.value"}},{"id":"head.seat.rigid","op":"rigid@1","args":["d.mm.0","head.on.arm.seat.y.0.times.value","head.on.arm.edge.z.0.times.value","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"head.seat.value"},"params":{"from":"head.seat","to":"arm.local"}},{"id":"head.chain","op":"compose@1","args":["head.seat.value","head.poseValue"],"outputs":{"pose":"head.chain.value"}},{"id":"head.world","op":"compose@1","args":["arm.world.value","head.chain.value"],"outputs":{"pose":"head.world.value"}},{"id":"light.on.head.seat.y.0.times","op":"mul@1","args":["head.dimension.height","host.k.centre"],"outputs":{"value":"light.on.head.seat.y.0.times.value"}},{"id":"light.on.head.along.y.0.times","op":"mul@1","args":["light.dimension.height","host.k.centre"],"outputs":{"value":"light.on.head.along.y.0.times.value"}},{"id":"light.on.head.along.y.1.times","op":"mul@1","args":["d.mm.0","k.ratio._1"],"outputs":{"value":"light.on.head.along.y.1.times.value"}},{"id":"light.on.head.along.y.1.sum","op":"add@1","args":["light.on.head.along.y.0.times.value","light.on.head.along.y.1.times.value"],"outputs":{"value":"light.on.head.along.y.1.sum.value"}},{"id":"light.seat.rigid","op":"rigid@1","args":["d.mm.0","light.on.head.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"light.seat.value"},"params":{"from":"light.joint","to":"head.local"}},{"id":"light.chain","op":"compose@1","args":["light.seat.value","light.turned.value"],"outputs":{"pose":"light.chain.value"}},{"id":"light.world","op":"compose@1","args":["head.world.value","light.chain.value"],"outputs":{"pose":"light.world.value"}},{"id":"light.motion","op":"axis-slide@1","args":["axis.ratio.0","axis.ratio.1","axis.ratio.0","on"],"outputs":{"pose":"light.motion.value"},"params":{"from":"light.seat","to":"light.joint"}},{"id":"light.turned","op":"compose@1","args":["light.motion.value","light.poseValue"],"outputs":{"pose":"light.turned.value"}},{"id":"light.shown","op":"at-least@1","args":["on","k.light.shown.at"],"outputs":{"value":"light.shown.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1800,"host.size.y":900,"host.size.z":800,"arm.dimension.width":40,"arm.dimension.height":700,"arm.dimension.depth":40,"head.dimension.width":300,"head.dimension.height":40,"head.dimension.depth":120,"light.dimension.width":280,"light.dimension.height":10,"light.dimension.depth":100},"stateDefaults":{"on":0},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-7d8790":"#7d8790","palette.tpl-44505a":"#44505a","palette.tpl-fff4c2":"#fff4c2"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"arm","material":{"token":"palette.tpl-7d8790"}},{"target":"head","material":{"token":"palette.tpl-44505a"}},{"target":"light","material":{"token":"palette.tpl-fff4c2","emissive":{"on":true,"token":"palette.tpl-fff4c2","intensity":1}},"visibility":"light.shown.value"}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"arm","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"arm","face":"bottom"},"origin":{"align":{"z":"min"}}},{"id":"head","type":"fixed","body0":{"part":"arm","face":"top"},"body1":{"part":"head","face":"bottom"},"origin":{"align":{"z":"min"}}},{"id":"light","type":"prismatic","body0":{"part":"head","face":"bottom"},"body1":{"part":"light","face":"top"},"origin":{},"axis":"Y","lowerLimit":0,"upperLimit":0.001,"state":{"id":"on"}}]}
@@ -1 +1 @@
1
- {"version":"figure-asset-1","name":"TPL_WORKBENCH_TOP","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"top.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"}],"constants":[{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"k.ratio.1","unit":"ratio","value":1}],"nodes":[{"id":"host.shape","op":"box-shape@1","args":["host.dimension.x.value","host.size.y","host.dimension.z.value"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"top.shape","op":"box-shape@1","args":["top.dimension.x.value","top.dimension.height","top.dimension.z.value"],"outputs":{"shape":"top.shapeValue"},"params":{"frame":"top.local"}},{"id":"top.pose","op":"rigid@1","args":["d.mm.0","top.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"top.poseValue"},"params":{"from":"top.local","to":"top.seat"}},{"id":"top","op":"place@1","args":["top.shapeValue","top.world.value"],"outputs":{"placed":"top.placed"}},{"id":"top.dimension.x","op":"mul@1","args":["host.dimension.x.value","k.ratio.1"],"outputs":{"value":"top.dimension.x.value"}},{"id":"host.dimension.x","op":"mul@1","args":["host.size.x","k.ratio.1"],"outputs":{"value":"host.dimension.x.value"}},{"id":"top.dimension.z","op":"mul@1","args":["host.dimension.z.value","k.ratio.1"],"outputs":{"value":"top.dimension.z.value"}},{"id":"host.dimension.z","op":"mul@1","args":["host.size.z","k.ratio.1"],"outputs":{"value":"host.dimension.z.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"top.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"top.on.host.seat.y.0.times.value"}},{"id":"top.on.host.along.y.0.times","op":"mul@1","args":["top.dimension.height","k.ratio.0_5"],"outputs":{"value":"top.on.host.along.y.0.times.value"}},{"id":"top.on.host.along.y.1.sum","op":"add@1","args":["top.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"top.on.host.along.y.1.sum.value"}},{"id":"top.seat.rigid","op":"rigid@1","args":["d.mm.0","top.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"top.seat.value"},"params":{"from":"top.seat","to":"host.local"}},{"id":"top.chain","op":"compose@1","args":["top.seat.value","top.poseValue"],"outputs":{"pose":"top.chain.value"}},{"id":"top.world","op":"compose@1","args":["host.chain.value","top.chain.value"],"outputs":{"pose":"top.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1800,"host.size.y":800,"host.size.z":800,"top.dimension.height":40},"stateDefaults":{},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-b08d57":"#b08d57"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"top","material":{"token":"palette.tpl-b08d57"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"top","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"top","face":"bottom"},"origin":{}}]}
1
+ {"version":"figure-asset-1","name":"TPL_WORKBENCH_TOP","document":{"version":"figure-prototype-1","model":{"version":"r3-spatial-1","inputs":[{"id":"host.size.x","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.y","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"host.size.z","unit":"mm","min":5e-324,"max":1.7976931348623157e+308,"role":"design"},{"id":"top.dimension.height","unit":"mm","min":0,"max":1.7976931348623157e+308,"role":"design"}],"constants":[{"id":"host.k.centre","unit":"ratio","value":-0.5},{"id":"d.mm.0","unit":"mm","value":0},{"id":"a.deg.0","unit":"deg","value":0},{"id":"k.ratio.0_5","unit":"ratio","value":0.5},{"id":"top.k.centre","unit":"ratio","value":-0.5},{"id":"k.ratio.1","unit":"ratio","value":1}],"nodes":[{"id":"host.start","op":"mul@1","args":["host.size.y","host.k.centre"],"outputs":{"value":"host.start.value"}},{"id":"host.shape","op":"extrude@1","args":["host.start.value","host.size.y","host.dimension.x.value","host.dimension.z.value"],"outputs":{"shape":"host.shapeValue"},"params":{"frame":"host.local","axis":"y","section":"rectangle"}},{"id":"host.pose","op":"rigid@1","args":["d.mm.0","host.on.plane.stand.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.poseValue"},"params":{"from":"host.local","to":"host.seat"}},{"id":"host","op":"place@1","args":["host.shapeValue","host.chain.value"],"outputs":{"placed":"host.placed"}},{"id":"top.shape","op":"extrude@1","args":["top.start.value","top.dimension.height","top.dimension.x.value","top.dimension.z.value"],"outputs":{"shape":"top.shapeValue"},"params":{"frame":"top.local","axis":"y","section":"rectangle"}},{"id":"top.pose","op":"rigid@1","args":["d.mm.0","top.on.host.along.y.1.sum.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"top.poseValue"},"params":{"from":"top.local","to":"top.seat"}},{"id":"top","op":"place@1","args":["top.shapeValue","top.world.value"],"outputs":{"placed":"top.placed"}},{"id":"top.start","op":"mul@1","args":["top.dimension.height","top.k.centre"],"outputs":{"value":"top.start.value"}},{"id":"top.dimension.x","op":"mul@1","args":["host.dimension.x.value","k.ratio.1"],"outputs":{"value":"top.dimension.x.value"}},{"id":"host.dimension.x","op":"mul@1","args":["host.size.x","k.ratio.1"],"outputs":{"value":"host.dimension.x.value"}},{"id":"top.dimension.z","op":"mul@1","args":["host.dimension.z.value","k.ratio.1"],"outputs":{"value":"top.dimension.z.value"}},{"id":"host.dimension.z","op":"mul@1","args":["host.size.z","k.ratio.1"],"outputs":{"value":"host.dimension.z.value"}},{"id":"host.on.plane.stand.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"host.on.plane.stand.y.0.times.value"}},{"id":"host.on.plane.stand.y.1.sum","op":"add@1","args":["host.on.plane.stand.y.0.times.value","d.mm.0"],"outputs":{"value":"host.on.plane.stand.y.1.sum.value"}},{"id":"host.seat.rigid","op":"rigid@1","args":["d.mm.0","d.mm.0","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"host.seat.value"},"params":{"from":"host.seat","to":"asset"}},{"id":"host.chain","op":"compose@1","args":["host.seat.value","host.poseValue"],"outputs":{"pose":"host.chain.value"}},{"id":"top.on.host.seat.y.0.times","op":"mul@1","args":["host.size.y","k.ratio.0_5"],"outputs":{"value":"top.on.host.seat.y.0.times.value"}},{"id":"top.on.host.along.y.0.times","op":"mul@1","args":["top.dimension.height","k.ratio.0_5"],"outputs":{"value":"top.on.host.along.y.0.times.value"}},{"id":"top.on.host.along.y.1.sum","op":"add@1","args":["top.on.host.along.y.0.times.value","d.mm.0"],"outputs":{"value":"top.on.host.along.y.1.sum.value"}},{"id":"top.seat.rigid","op":"rigid@1","args":["d.mm.0","top.on.host.seat.y.0.times.value","d.mm.0","a.deg.0","a.deg.0","a.deg.0"],"outputs":{"pose":"top.seat.value"},"params":{"from":"top.seat","to":"host.local"}},{"id":"top.chain","op":"compose@1","args":["top.seat.value","top.poseValue"],"outputs":{"pose":"top.chain.value"}},{"id":"top.world","op":"compose@1","args":["host.chain.value","top.chain.value"],"outputs":{"pose":"top.world.value"}}]},"capabilities":{"version":"r3-capability-3","assetFrame":"asset","bindings":[]}},"designInputs":{"host.size.x":1800,"host.size.y":800,"host.size.z":800,"top.dimension.height":40},"stateDefaults":{},"palette":{"palette.primary":"#477b9e","palette.host":"#d9dde2","palette.tpl-b08d57":"#b08d57"},"appearance":[{"target":"host","material":{"token":"palette.host"}},{"target":"top","material":{"token":"palette.tpl-b08d57"}}],"joints":[{"id":"host","type":"fixed","body0":{"plane":"mounting-plane"},"body1":{"part":"host","face":"bottom"},"origin":{}},{"id":"top","type":"fixed","body0":{"part":"host","face":"top"},"body1":{"part":"top","face":"bottom"},"origin":{}}]}
@@ -267,9 +267,10 @@ export function inspectSource(
267
267
  const states = inspection.coverage.states
268
268
  findings.push({
269
269
  code: 'state-range-sampled',
270
- message: say('figure.gate.state-range-sampled.message', { states }, `The whole range of motion could not be proven, so ${states} poses were checked.`),
271
- why: say('figure.gate.state-range-sampled.why', {}, 'Between the poses that were checked, a part may still go past the declared space.'),
272
- how: say('figure.gate.state-range-sampled.how', {}, 'Re-author the motion that could not be proven, and the whole range can be proven.'),
270
+ /* Sizes as well as motion: the instance size range is swept for every figure (figure-model, designer 2026-09-27). */
271
+ message: say('figure.gate.state-range-sampled.message', { states }, `The whole range of sizes and motion could not be proven, so ${states} combinations of size and pose were checked.`),
272
+ why: say('figure.gate.state-range-sampled.why', {}, 'Between the combinations that were checked, a part may still go past the declared space.'),
273
+ how: say('figure.gate.state-range-sampled.how', {}, 'To cover the whole range, re-author what could not be proven.'),
273
274
  /*
274
275
  Which motions stopped the proof, by the name a person gave them: the kernel reports each operation it could
275
276
  not prove (`j2-shoulder.chain: compose@1 turns …`), and the screen showed that English list as it was. The
@@ -6,7 +6,10 @@ import { getRepository } from '@things-factory/shell'
6
6
 
7
7
  import { Figure } from './figure.js'
8
8
  import { FigureHistory } from './figure-history.js'
9
- import { FigurePatch, FigureSaveResult, NewFigure } from './figure-type.js'
9
+ import { FigurePatch, FigureRevertResult, FigureSaveResult, NewFigure } from './figure-type.js'
10
+ import { FigureReplacedDraft } from './figure-replaced-draft.js'
11
+ import { revertKeepingDraft, undoRevert } from './figure-revert.js'
12
+ import { recordProposals } from './figure-proposal.js'
10
13
  import { FigureProposal, ProposeRequest } from './figure-propose-type.js'
11
14
  import { inspectSource } from './figure-format.js'
12
15
  import { renameDraftType, renameFacts } from './figure-rename.js'
@@ -27,6 +30,25 @@ export class FigureMutation {
27
30
  @Arg('creationId', { nullable: true }) creationId?: string,
28
31
  @Arg('thumbnail', { nullable: true }) thumbnail?: string,
29
32
  @Arg('type', { nullable: true, description: 'The type name a new figure is created under. Ignored for an existing one.' })
33
+ type?: string,
34
+ @Arg('proposalKeys', type => [String], {
35
+ nullable: true,
36
+ description: "Keys of the AI proposals whose steps this source holds: recorded with the save, in its transaction."
37
+ })
38
+ proposalKeys?: string[]
39
+ ): Promise<Figure> {
40
+ const saved = await this.writeSource(context, source, id, expectedSource, creationId, thumbnail, type)
41
+ await recordProposals(context.state.tx, context.state.domain, saved.id!, proposalKeys)
42
+ return saved
43
+ }
44
+
45
+ private async writeSource(
46
+ context: ResolverContext,
47
+ source: string,
48
+ id?: string,
49
+ expectedSource?: string,
50
+ creationId?: string,
51
+ thumbnail?: string,
30
52
  type?: string
31
53
  ): Promise<Figure> {
32
54
  const { domain, user, tx } = context.state
@@ -336,53 +358,37 @@ export class FigureMutation {
336
358
  */
337
359
  @Directive('@transaction')
338
360
  @Directive('@privilege(category: "figure", privilege: "mutation", domainOwnerGranted: true)')
339
- @Mutation(returns => FigureSaveResult, { description: 'Reverts a figure to one of its released versions. It comes back as a draft.' })
361
+ @Mutation(returns => FigureRevertResult, {
362
+ description:
363
+ 'Reverts a figure to one of its released versions, keeping the draft it writes over. It comes back as a draft. ' +
364
+ 'The same requestId again answers with the same revert.'
365
+ })
340
366
  async revertFigureVersion(
341
367
  @Arg('id') id: string,
342
368
  @Arg('version') version: number,
369
+ @Arg('requestId', { description: 'A UUID for this revert: a retry sends the same one.' }) requestId: string,
370
+ @Arg('expectedSource', { description: "The figure's source as the reverter saw it; the revert goes on only while it holds." }) expectedSource: string,
343
371
  @Ctx() context: ResolverContext
344
- ): Promise<FigureSaveResult> {
372
+ ): Promise<FigureRevertResult> {
373
+ /* Kept and written over in this transaction, or neither (ADR-0097 §5.6). */
345
374
  const { domain, user, tx } = context.state
346
- const repository = tx.getRepository(Figure)
347
- const historyRepository = tx.getRepository(FigureHistory)
348
-
349
- const figure = await repository.findOne({
350
- where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }
351
- })
352
- if (!figure) {
353
- throw new Error(`Figure ${id} 를 찾을 수 없다`)
354
- }
355
-
356
- const history = await historyRepository.findOne({
357
- where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, originalId: id, version }
358
- })
359
- if (!history) {
360
- throw new Error(`Figure '${figure.type}' 에 ${version} 판이 없다`)
361
- }
362
-
363
- /* 형식 검사도 다시 받는다 — 옛 판이 오늘의 형식을 어길 수 있고, 그것을 조용히 들이지 않는다. */
364
- const { source, derived, violations } = parseSource(history.source)
365
-
366
- const saved = await repository.save({
367
- /*
368
- `domain` 을 명시로 넣는다 — 읽어 온 엔티티에는 관계가 안 실려 있다.
369
-
370
- 판본 스냅샷은 넘겨받은 엔티티를 베끼므로, 여기서 빠지면 판본의 도메인이 비고 그 판은
371
- 도메인으로 거르는 조회에 **한 줄도 안 걸린다**(실제로 그랬다). board 의 저장들도 같은
372
- 자리에서 domain 을 함께 넣는다.
373
- */
374
- domain,
375
- ...figure,
376
- source,
377
- ...derived,
378
- properties: history.properties,
379
- thumbnail: history.thumbnail,
380
- thumbnailUpdatedAt: history.thumbnail === figure.thumbnail ? figure.thumbnailUpdatedAt : new Date(),
381
- state: 'draft',
382
- updater: user
383
- })
375
+ const { figure, violations, kept } = await revertKeepingDraft(tx, domain, user, { id, version, requestId, expectedSource })
376
+ return { figure, violations, kept }
377
+ }
384
378
 
385
- return { figure: saved, violations }
379
+ @Directive('@transaction')
380
+ @Directive('@privilege(category: "figure", privilege: "mutation", domainOwnerGranted: true)')
381
+ @Mutation(returns => FigureRevertResult, {
382
+ description: "Brings back a draft a revert kept -- only while the figure still holds what that revert wrote. The same requestId again answers with the same undo."
383
+ })
384
+ async undoFigureRevert(
385
+ @Arg('keptId') keptId: string,
386
+ @Arg('requestId', { description: 'A UUID for this undo: a retry sends the same one.' }) requestId: string,
387
+ @Ctx() context: ResolverContext
388
+ ): Promise<FigureRevertResult> {
389
+ const { domain, user, tx } = context.state
390
+ const { figure, kept } = await undoRevert(tx, domain, user, { keptId, requestId })
391
+ return { figure, violations: [], kept: kept as FigureReplacedDraft }
386
392
  }
387
393
 
388
394
  @Directive('@transaction')
@@ -0,0 +1,108 @@
1
+ /**
2
+ * What became of an AI proposal, on sqlite through the save door itself (ADR-0097 §5.6 item 5; AI lane, 2026-09-27).
3
+ * A save records the proposals its source holds, in its transaction; the same proposal taken twice never makes two
4
+ * figures, because a new figure made from it is created under its key.
5
+ */
6
+ import type { DataSource } from 'typeorm'
7
+
8
+ const { DataSource: TypeOrmDataSource } = require('typeorm')
9
+ const shell = require('@things-factory/shell')
10
+ const authBase = require('@things-factory/auth-base')
11
+ const { createFigureAsset, addFigureBox, serializeFigureAsset } = require('@hatiolab/figure-model')
12
+
13
+ let dataSource: DataSource | null = null
14
+ let Figure: any
15
+ let FigureHistory: any
16
+ let FigureProposalRecord: any
17
+ let FigureMutation: any
18
+ let FigureQuery: any
19
+
20
+ function loadCompiled(modulePath: string): any {
21
+ const { existsSync } = require('fs')
22
+ const { join } = require('path')
23
+ const resolved = join(__dirname, '..', '..', '..', 'dist-server', `${modulePath}.js`)
24
+ if (!existsSync(resolved))
25
+ throw new Error(`figure-service 산출물이 없다: ${resolved}\n먼저 빌드할 것:\n yarn workspace @things-factory/figure-service build:server`)
26
+ return require(resolved)
27
+ }
28
+
29
+ beforeAll(async () => {
30
+ Figure = loadCompiled('service/figure/figure').Figure
31
+ FigureHistory = loadCompiled('service/figure/figure-history').FigureHistory
32
+ FigureProposalRecord = loadCompiled('service/figure/figure-proposal-record').FigureProposalRecord
33
+ FigureMutation = loadCompiled('service/figure/figure-mutation').FigureMutation
34
+ FigureQuery = loadCompiled('service/figure/figure-query').FigureQuery
35
+ dataSource = new TypeOrmDataSource({
36
+ type: 'sqlite',
37
+ database: ':memory:',
38
+ synchronize: true,
39
+ dropSchema: true,
40
+ namingStrategy: new shell.NamingStrategy(),
41
+ entities: [...shell.entities, ...authBase.entities, Figure, FigureHistory, FigureProposalRecord],
42
+ logging: false
43
+ })
44
+ await dataSource.initialize()
45
+ })
46
+
47
+ afterAll(async () => {
48
+ await dataSource?.destroy()
49
+ dataSource = null
50
+ })
51
+
52
+ let DOMAIN: { id: string }
53
+ beforeEach(async () => {
54
+ await dataSource!.synchronize(true)
55
+ DOMAIN = { id: (await dataSource!.getRepository(shell.Domain).save({ name: 'proposal-probe', subdomain: 'proposal-probe' })).id }
56
+ })
57
+
58
+ const text = (name: string, height = 100) =>
59
+ serializeFigureAsset(addFigureBox(createFigureAsset(name), { id: 'body', size: { x: 100, y: height, z: 100 }, position: { x: 0, y: height / 2, z: 0 } }))
60
+ const uuid = () => require('crypto').randomUUID()
61
+ /* Through the door, in a transaction of its own as `@transaction` gives it. */
62
+ const save = (source: string, { id, expectedSource, creationId, proposalKeys }: { id?: string; expectedSource?: string; creationId?: string; proposalKeys?: string[] }) =>
63
+ dataSource!.transaction(tx =>
64
+ new FigureMutation().saveFigure(source, { state: { domain: DOMAIN, user: undefined, tx } }, id, expectedSource, creationId, undefined, undefined, proposalKeys)
65
+ )
66
+ const outcome = (proposalKey: string) => new FigureQuery().figureProposalOutcome(proposalKey, { state: { domain: DOMAIN, tx: dataSource!.manager } })
67
+ const records = () => dataSource!.getRepository(FigureProposalRecord).count()
68
+
69
+ describe('a save records the proposals its source holds', () => {
70
+ it('recorded with the save, once per figure however often it is saved again', async () => {
71
+ const key = uuid()
72
+ const first = await save(text('A'), { creationId: uuid(), proposalKeys: [key] })
73
+ await save(text('A', 200), { id: first.id, expectedSource: first.source, proposalKeys: [key] })
74
+ const found = await outcome(key)
75
+ expect(found.map((f: any) => f.figureId)).toEqual([first.id])
76
+ expect(found[0].name).toBe('A')
77
+ expect(await records()).toBe(1)
78
+ })
79
+
80
+ it('a save refused records nothing -- the record is in its transaction', async () => {
81
+ const figure = await save(text('A'), { creationId: uuid() })
82
+ const key = uuid()
83
+ await expect(save(text('B'), { id: figure.id, expectedSource: 'stale', proposalKeys: [key] })).rejects.toMatchObject({
84
+ extensions: { code: 'FIGURE_SOURCE_CONFLICT' }
85
+ })
86
+ expect(await outcome(key)).toEqual([])
87
+ })
88
+
89
+ it('a key not of the tool’s making is not recorded; a proposal never saved has no outcome', async () => {
90
+ await save(text('A'), { creationId: uuid(), proposalKeys: ['not-a-key'] })
91
+ expect(await records()).toBe(0)
92
+ expect(await outcome(uuid())).toEqual([])
93
+ })
94
+ })
95
+
96
+ describe('the same new-figure proposal taken twice makes one figure', () => {
97
+ it('created under the proposal key: the second take meets the first figure, never a second one', async () => {
98
+ const key = uuid()
99
+ const once = await save(text('From AI'), { creationId: key, proposalKeys: [key] })
100
+ /* Taken again after a reload, the same steps: the same row answers. */
101
+ const again = await save(text('From AI'), { creationId: key, proposalKeys: [key] })
102
+ expect(again.id).toBe(once.id)
103
+ /* Taken again and changed before saving: refused, not a second figure. */
104
+ await expect(save(text('From AI, changed', 300), { creationId: key, proposalKeys: [key] })).rejects.toThrow(/이미 다른 내용으로 저장되었습니다/)
105
+ expect(await dataSource!.getRepository(Figure).count()).toBe(1)
106
+ expect((await outcome(key)).map((f: any) => f.figureId)).toEqual([key])
107
+ })
108
+ })
@@ -0,0 +1,38 @@
1
+ import { CreateDateColumn, Column, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
2
+ import { Field, ID, ObjectType } from 'type-graphql'
3
+
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ /**
7
+ * An AI proposal saved into a figure (ADR-0097 §5.6 item 5; AI lane, 2026-09-27).
8
+ *
9
+ * Written by the save that holds the proposal's step, in the same transaction: a proposal applied and then undone, or
10
+ * never saved, has none. So "what became of it" is answered from the server -- after a reload too -- and never from
11
+ * the dock's memory. A proposal saved into the same figure again is one record.
12
+ */
13
+ @Entity()
14
+ @Index('ix_figure_proposal_record_0', (record: FigureProposalRecord) => [record.domain, record.proposalKey, record.figureId], { unique: true })
15
+ @ObjectType({ description: 'An AI proposal saved into a figure.' })
16
+ export class FigureProposalRecord {
17
+ @PrimaryGeneratedColumn('uuid')
18
+ @Field(type => ID, { description: 'Unique identifier of the record.' })
19
+ readonly id?: string
20
+
21
+ @ManyToOne(type => Domain)
22
+ domain?: Domain
23
+
24
+ @RelationId((record: FigureProposalRecord) => record.domain)
25
+ domainId?: string
26
+
27
+ @Column()
28
+ @Field({ description: 'The key the proposal was given when it was made.' })
29
+ proposalKey?: string
30
+
31
+ @Column()
32
+ @Field({ description: 'The figure it was saved into.' })
33
+ figureId?: string
34
+
35
+ @CreateDateColumn()
36
+ @Field({ nullable: true, description: 'When the save that held it was made.' })
37
+ recordedAt?: Date
38
+ }