175 lines
7.4 KiB
JSON
175 lines
7.4 KiB
JSON
{
|
|
"createdWith": "Open Stage Control",
|
|
"version": "1.30.3",
|
|
"type": "session",
|
|
"content": {
|
|
"type": "root",
|
|
"lock": false,
|
|
"id": "root",
|
|
"visible": true,
|
|
"interaction": true,
|
|
"comments": "",
|
|
"width": "auto",
|
|
"height": "auto",
|
|
"colorText": "auto",
|
|
"colorWidget": "auto",
|
|
"alphaFillOn": "auto",
|
|
"borderRadius": "auto",
|
|
"padding": "auto",
|
|
"html": "",
|
|
"css": "",
|
|
"colorBg": "auto",
|
|
"layout": "default",
|
|
"justify": "start",
|
|
"gridTemplate": "",
|
|
"contain": true,
|
|
"scroll": true,
|
|
"innerPadding": true,
|
|
"tabsPosition": "top",
|
|
"hideMenu": false,
|
|
"variables": "@{parent.variables}",
|
|
"traversing": false,
|
|
"value": "",
|
|
"default": "",
|
|
"linkId": "",
|
|
"address": "auto",
|
|
"preArgs": "",
|
|
"typeTags": "",
|
|
"decimals": 2,
|
|
"target": "192.168.1.46:9000",
|
|
"ignoreDefaults": false,
|
|
"bypass": false,
|
|
"onCreate": "",
|
|
"onValue": "",
|
|
"onTouch": "",
|
|
"onPreload": "",
|
|
"widgets": [
|
|
{
|
|
"type": "xy",
|
|
"top": 120,
|
|
"left": 120,
|
|
"lock": false,
|
|
"id": "fisheye_pan_tilt",
|
|
"visible": true,
|
|
"interaction": true,
|
|
"comments": "XY control for Fisheye Reproject pan and tilt.",
|
|
"width": 460,
|
|
"height": 250,
|
|
"expand": false,
|
|
"colorText": "auto",
|
|
"colorWidget": "auto",
|
|
"colorStroke": "auto",
|
|
"colorFill": "auto",
|
|
"alphaStroke": "auto",
|
|
"alphaFillOff": "auto",
|
|
"alphaFillOn": "auto",
|
|
"lineWidth": "auto",
|
|
"borderRadius": "auto",
|
|
"padding": "auto",
|
|
"html": "",
|
|
"css": "",
|
|
"pips": true,
|
|
"snap": false,
|
|
"spring": true,
|
|
"rangeX": {
|
|
"min": -1,
|
|
"max": 1
|
|
},
|
|
"rangeY": {
|
|
"min": 1,
|
|
"max": -1
|
|
},
|
|
"logScaleX": false,
|
|
"logScaleY": false,
|
|
"sensitivity": 1,
|
|
"value": [
|
|
0,
|
|
0
|
|
],
|
|
"default": [
|
|
0,
|
|
0
|
|
],
|
|
"linkId": "",
|
|
"address": "/VideoShaderToys/fisheye-reproject/xy",
|
|
"preArgs": "",
|
|
"typeTags": "",
|
|
"decimals": "3f",
|
|
"target": "192.168.1.46:9000",
|
|
"ignoreDefaults": false,
|
|
"bypass": true,
|
|
"onCreate": "var state = globalThis.__fisheyePanTiltStick = globalThis.__fisheyePanTiltStick || {};\nstate.target = '192.168.1.46:9000';\nstate.panAddress = '/VideoShaderToys/fisheye-reproject/panDegrees';\nstate.tiltAddress = '/VideoShaderToys/fisheye-reproject/tiltDegrees';\nstate.minPan = -60;\nstate.maxPan = 60;\nstate.minTilt = -45;\nstate.maxTilt = 45;\nstate.pan = 0;\nstate.tilt = 0;\nstate.stickX = 0;\nstate.stickY = 0;\nstate.tickMs = 16;\nstate.stepPan = 0.75;\nstate.stepTilt = 0.75;\nstate.deadzone = 0.14;\nstate.applyCurve = function(input) {\n var amount = Math.abs(input);\n if (amount <= state.deadzone) {\n return 0;\n }\n var normalized = (amount - state.deadzone) / (1 - state.deadzone);\n var softened = normalized * normalized * (3 - (2 * normalized));\n return (input < 0 ? -1 : 1) * softened;\n};\nif (state.timer) {\n clearInterval(state.timer);\n state.timer = null;\n}",
|
|
"onValue": "var state = globalThis.__fisheyePanTiltStick = globalThis.__fisheyePanTiltStick || {};\nvar stickX = Array.isArray(value) ? Number(value[0]) : 0;\nvar stickY = Array.isArray(value) ? Number(value[1]) : 0;\nstate.stickX = isFinite(stickX) ? state.applyCurve(stickX) : 0;\nstate.stickY = isFinite(stickY) ? state.applyCurve(stickY) : 0;",
|
|
"onTouch": "var state = globalThis.__fisheyePanTiltStick = globalThis.__fisheyePanTiltStick || {};\nif (value) {\n if (!state.timer) {\n state.timer = setInterval(function() {\n if (!state.stickX && !state.stickY) {\n return;\n }\n state.pan = Math.max(state.minPan, Math.min(state.maxPan, state.pan + (state.stickX * state.stepPan)));\n state.tilt = Math.max(state.minTilt, Math.min(state.maxTilt, state.tilt + (state.stickY * state.stepTilt)));\n send(state.target, state.panAddress, {type: 'f', value: state.pan});\n send(state.target, state.tiltAddress, {type: 'f', value: state.tilt});\n }, state.tickMs);\n }\n} else {\n state.stickX = 0;\n state.stickY = 0;\n if (state.timer) {\n clearInterval(state.timer);\n state.timer = null;\n }\n}",
|
|
"pointSize": 20,
|
|
"ephemeral": false,
|
|
"label": "",
|
|
"stepsX": false,
|
|
"stepsY": false,
|
|
"clipX": "",
|
|
"clipY": "",
|
|
"axisLock": "",
|
|
"doubleTap": false
|
|
},
|
|
{
|
|
"type": "fader",
|
|
"top": 120,
|
|
"left": 570,
|
|
"lock": false,
|
|
"id": "fader_1",
|
|
"visible": true,
|
|
"interaction": true,
|
|
"comments": "",
|
|
"width": 90,
|
|
"height": 250,
|
|
"expand": false,
|
|
"colorText": "auto",
|
|
"colorWidget": "auto",
|
|
"colorStroke": "auto",
|
|
"colorFill": "auto",
|
|
"alphaStroke": "auto",
|
|
"alphaFillOff": "auto",
|
|
"alphaFillOn": "auto",
|
|
"lineWidth": "auto",
|
|
"borderRadius": "auto",
|
|
"padding": "auto",
|
|
"html": "",
|
|
"css": "",
|
|
"design": "default",
|
|
"knobSize": "auto",
|
|
"colorKnob": "auto",
|
|
"horizontal": false,
|
|
"pips": false,
|
|
"dashed": false,
|
|
"gradient": [],
|
|
"snap": false,
|
|
"touchZone": "all",
|
|
"spring": true,
|
|
"doubleTap": false,
|
|
"range": {
|
|
"min": -1,
|
|
"max": 1
|
|
},
|
|
"logScale": false,
|
|
"sensitivity": 1,
|
|
"steps": "",
|
|
"origin": "auto",
|
|
"value": 0,
|
|
"default": 0,
|
|
"linkId": "",
|
|
"address": "/VideoShaderToys/fisheye-reproject/virtualFovDegrees",
|
|
"preArgs": "",
|
|
"typeTags": "",
|
|
"decimals": "3f",
|
|
"target": "192.168.1.46:9000",
|
|
"ignoreDefaults": false,
|
|
"bypass": true,
|
|
"onCreate": "var state = globalThis.__fisheyeFovStick = globalThis.__fisheyeFovStick || {};\nstate.target = '192.168.1.46:9000';\nstate.address = '/VideoShaderToys/fisheye-reproject/virtualFovDegrees';\nstate.minFov = 10;\nstate.maxFov = 100;\nstate.fov = 90;\nstate.stick = 0;\nstate.tickMs = 16;\nstate.stepFov = 0.6;\nstate.deadzone = 0.14;\nstate.applyCurve = function(input) {\n var amount = Math.abs(input);\n if (amount <= state.deadzone) {\n return 0;\n }\n var normalized = (amount - state.deadzone) / (1 - state.deadzone);\n var softened = normalized * normalized * (3 - (2 * normalized));\n return (input < 0 ? -1 : 1) * softened;\n};\nif (state.timer) {\n clearInterval(state.timer);\n state.timer = null;\n}",
|
|
"onValue": "var state = globalThis.__fisheyeFovStick = globalThis.__fisheyeFovStick || {};\nvar stick = Number(value);\nstate.stick = isFinite(stick) ? state.applyCurve(stick) : 0;",
|
|
"onTouch": "var state = globalThis.__fisheyeFovStick = globalThis.__fisheyeFovStick || {};\nif (value) {\n if (!state.timer) {\n state.timer = setInterval(function() {\n if (!state.stick) {\n return;\n }\n state.fov = Math.max(state.minFov, Math.min(state.maxFov, state.fov - (state.stick * state.stepFov)));\n send(state.target, state.address, {type: 'f', value: state.fov});\n }, state.tickMs);\n }\n} else {\n state.stick = 0;\n if (state.timer) {\n clearInterval(state.timer);\n state.timer = null;\n }\n}"
|
|
}
|
|
],
|
|
"tabs": []
|
|
}
|
|
}
|