From b66570333fa40bfa4847eea635172347fd65b88a Mon Sep 17 00:00:00 2001 From: Flo Edelmann Date: Mon, 14 Jan 2019 22:34:12 +0100 Subject: [PATCH] Support color / gobo / effect wheels (#659) * Support wheels in schema - Remove old wheel capability types - Add new wheel capability types - Add fixture wheel - Add wheel slot types - Bump schema version to 11.0.0 * Migrate all fixtures * Support wheels in model - Add Wheel and WheelSlot classes, update all the rest * Update fixture test - Update capability types, check wheel references - Check that slot numbers are used correctly in capabilities - Fixture test: Check that AnimationGoboStart/End slots are adjacent - Fixture test: Warn about unused wheels / wheel slots - Fixture test: Warn if wheel name does not contain "wheel" or "disk" - Fixture test: Warn if a capability selects a slot range greater than 1 * Display wheels in fixture page * Update import plugins * Update Millumin and QLC+ 4.12.0 export plugins * Update fixture editor - Pass channel to capability components - Update capability type components - Add components for each wheel slot type - Suggest wheel capabilities - Save wheels in backend * Add wheel fixture features * Make test fixtures * Update documentation --- docs/capability-types.md | 154 ++- docs/fixture-format.md | 48 +- docs/model-api.md | 252 ++++- fixtures/5star-systems/spica-250m.json | 224 +++-- fixtures/abstract/twister-4.json | 125 ++- fixtures/adb/warp-m.json | 2 +- fixtures/american-dj/auto-spot-150.json | 341 ++++--- fixtures/american-dj/boom-box-fx2.json | 8 +- fixtures/american-dj/inno-pocket-fusion.json | 136 +-- fixtures/american-dj/vizi-spot-led-pro.json | 219 +++-- fixtures/big-dipper/ls90.json | 280 ++++-- fixtures/boomtonedj/crazy-spot-30.json | 198 ++-- fixtures/cameo/gobo-scanner-80.json | 235 +++-- fixtures/cameo/nanospot-120.json | 148 ++- fixtures/clay-paky/alpha-spot-qwo-800.json | 453 +++++---- fixtures/clay-paky/sharpy.json | 503 +++++----- fixtures/clay-paky/spheriscan.json | 380 ++++---- fixtures/coemar/prospot-250-lx.json | 266 ++++-- fixtures/dts/xr1200-wash.json | 147 +-- fixtures/elation/platinum-hfx.json | 430 ++++++--- fixtures/elation/platinum-spot-15r-pro.json | 353 ++++--- fixtures/eurolite/led-tmh-x12.json | 290 +++--- .../futurelight/dmh-75-i-led-moving-head.json | 539 +++++++---- fixtures/futurelight/sc-250-scanner.json | 273 ++++-- fixtures/glp/impression-spot-one.json | 338 ++++--- fixtures/hong-yi/hy-g60.json | 238 +++-- fixtures/jb-lighting/varyscan-p7.json | 329 ++++--- fixtures/kam/gobotracer.json | 213 +++-- fixtures/lightmaxx/dj-scan-led.json | 148 +-- .../lixada/mini-gobo-moving-head-light.json | 107 ++- fixtures/martin/mac-600.json | 75 +- fixtures/martin/mac-700-wash.json | 206 ++-- fixtures/martin/mac-axiom-hybrid.json | 879 ++++++++++-------- fixtures/martin/mac-viper-airfx.json | 474 ++++++---- fixtures/martin/mac-viper-performance.json | 400 ++++---- fixtures/martin/mac-viper-wash.json | 166 ++-- fixtures/martin/roboscan-812.json | 588 ++++++------ fixtures/martin/rush-mh-3-beam.json | 495 +++++----- fixtures/martin/rush-mh-7-hybrid.json | 873 ++++++++--------- fixtures/nicols/pat-252.json | 253 +++-- fixtures/prolights/v700spot.json | 295 ++++-- fixtures/qtx/lux-ld30w.json | 163 ++-- fixtures/robe/colorspot-2500e-at.json | 597 ++++++------ fixtures/robe/dj-scan-250-xt.json | 273 ++++-- fixtures/robe/robin-600e-spot.json | 701 +++++++------- fixtures/robe/robin-viva-cmy.json | 571 ++++++------ fixtures/showtec/kanjo-spot-60.json | 93 +- fixtures/showtec/phantom-140-led-spot.json | 471 ++++++---- fixtures/showtec/phantom-50-led-spot.json | 312 ++++--- fixtures/stairville/mh-x25.json | 355 ++++--- lib/fixture-features/wheels.js | 58 ++ lib/model.js | 4 + lib/model/Capability.mjs | 267 +++--- lib/model/CoarseChannel.mjs | 18 +- lib/model/Fixture.mjs | 30 + lib/model/Wheel.mjs | 117 +++ lib/model/WheelSlot.mjs | 250 +++++ lib/schema-properties.js | 9 + plugins/ecue/import.js | 22 +- plugins/gdtf/gdtf-attributes.js | 147 +-- plugins/gdtf/import.js | 64 +- plugins/millumin/export.js | 11 +- plugins/qlcplus_4.11.2/import.js | 166 +++- plugins/qlcplus_4.12.0/export.js | 37 +- .../exportTests/fixture-tool-validation.js | 1 + schemas/capability.json | 438 +++++---- schemas/definitions.json | 2 +- schemas/fixture-redirect.json | 2 +- schemas/fixture.json | 23 +- schemas/manufacturers.json | 2 +- schemas/wheel-slot.json | 159 ++++ tests/fixture-valid.js | 161 +++- tests/test-fixtures.json | 218 +++-- tests/test-fixtures.md | 299 +++--- ui/ajax/submit-editor.js | 67 ++ ui/assets/scripts/editor-utils.mjs | 16 + .../editor-capabilities/ColorPreset.vue | 2 +- .../editor-capabilities/ColorWheelIndex.vue | 151 --- .../editor-capabilities/GoboIndex.vue | 109 --- ...oStencilRotation.vue => WheelRotation.vue} | 13 +- .../{GoboShake.vue => WheelShake.vue} | 27 +- .../{GoboWheelRotation.vue => WheelSlot.vue} | 61 +- ...heelRotation.vue => WheelSlotRotation.vue} | 26 + ui/components/editor-capability-type-data.vue | 25 +- ui/components/editor-capability-wizard.vue | 11 +- ui/components/editor-capability.vue | 8 +- ui/components/editor-channel-dialog.vue | 10 +- ...-proportional-capability-data-switcher.vue | 30 +- ui/components/editor-wheel-slot.vue | 173 ++++ ui/components/editor-wheel-slots.vue | 69 ++ ui/components/fixture-wheel.vue | 284 ++++++ ui/components/labeled-input.vue | 2 + ui/components/svg.vue | 46 +- .../wheel-slots/AnimationGoboEnd.vue | 24 + .../wheel-slots/AnimationGoboStart.vue | 49 + ui/components/wheel-slots/Closed.vue | 24 + ui/components/wheel-slots/Color.vue | 97 ++ ui/components/wheel-slots/Frost.vue | 49 + ui/components/wheel-slots/Gobo.vue | 49 + ui/components/wheel-slots/Iris.vue | 49 + ui/components/wheel-slots/Open.vue | 24 + ui/components/wheel-slots/Prism.vue | 63 ++ ui/pages/_manufacturerKey/_fixtureKey.vue | 15 + 103 files changed, 12177 insertions(+), 7518 deletions(-) create mode 100644 lib/fixture-features/wheels.js create mode 100644 lib/model/Wheel.mjs create mode 100644 lib/model/WheelSlot.mjs create mode 100644 schemas/wheel-slot.json delete mode 100644 ui/components/editor-capabilities/ColorWheelIndex.vue delete mode 100644 ui/components/editor-capabilities/GoboIndex.vue rename ui/components/editor-capabilities/{GoboStencilRotation.vue => WheelRotation.vue} (89%) rename ui/components/editor-capabilities/{GoboShake.vue => WheelShake.vue} (69%) rename ui/components/editor-capabilities/{GoboWheelRotation.vue => WheelSlot.vue} (52%) rename ui/components/editor-capabilities/{ColorWheelRotation.vue => WheelSlotRotation.vue} (75%) create mode 100644 ui/components/editor-wheel-slot.vue create mode 100644 ui/components/editor-wheel-slots.vue create mode 100644 ui/components/fixture-wheel.vue create mode 100644 ui/components/wheel-slots/AnimationGoboEnd.vue create mode 100644 ui/components/wheel-slots/AnimationGoboStart.vue create mode 100644 ui/components/wheel-slots/Closed.vue create mode 100644 ui/components/wheel-slots/Color.vue create mode 100644 ui/components/wheel-slots/Frost.vue create mode 100644 ui/components/wheel-slots/Gobo.vue create mode 100644 ui/components/wheel-slots/Iris.vue create mode 100644 ui/components/wheel-slots/Open.vue create mode 100644 ui/components/wheel-slots/Prism.vue diff --git a/docs/capability-types.md b/docs/capability-types.md index 8b5db24417..f354259b52 100644 --- a/docs/capability-types.md +++ b/docs/capability-types.md @@ -20,7 +20,7 @@ To make common percentage values more readable, one can use specific keywords to | BeamAngle | `deg`, `%` | – | – | closed | narrow | wide | SwingAngle | `deg`, `%` | – | – | off | narrow | wide | Parameter | (no unit), `%` | – | – | off / instant | low / slow / small / short | high / fast / big / long -| Index | (no unit) | – | – | – | – | – +| SlotNumber | (no unit) | – | – | – | – | – | Percent | `%` | – | – | off | low | high | Insertion | `%` | – | – | out | – | in | IrisPercent | `%` | – | – | closed | – | open @@ -35,14 +35,13 @@ To make common percentage values more readable, one can use specific keywords to * [Intensity](#intensity) * [ColorIntensity](#colorintensity) * [ColorPreset](#colorpreset) -* [ColorWheelIndex](#colorwheelindex) / [ColorWheelRotation](#colorwheelrotation) * [ColorTemperature](#colortemperature) * [Pan](#pan) / [PanContinuous](#pancontinuous) * [Tilt](#tilt) / [TiltContinuous](#tiltcontinuous) * [PanTiltSpeed](#pantiltspeed) +* [WheelSlot](#wheelslot) / [WheelShake](#wheelshake) / [WheelSlotRotation](#wheelslotrotation) / [WheelRotation](#wheelrotation) * [Effect](#effect) / [EffectSpeed](#effectspeed) / [EffectDuration](#effectduration) / [EffectParameter](#effectparameter) * [SoundSensitivity](#soundsensitivity) -* [GoboIndex](#goboindex) / [GoboShake](#goboshake) / [GoboStencilRotation](#gobostencilrotation) / [GoboWheelRotation](#gobowheelrotation) * [Focus](#focus) * [Zoom](#zoom) * [Iris](#iris) / [IrisEffect](#iriseffect) @@ -135,31 +134,6 @@ To make common percentage values more readable, one can use specific keywords to Entity ColorTemperature - - ColorWheelIndex - index
:star2: required - Entity Index - see footnote index - - colors
:grey_question: optional - array of individual color beams as hex code - see footnote colors - - - colorTemperature
:grey_question: optional - Entity ColorTemperature - - - - ColorWheelRotation - speed
:vs: required - Entity RotationSpeed - either speed or angle is allowed - - - angle
:vs: required - Entity RotationAngle - ColorTemperature colorTemperature
:star2: required @@ -200,6 +174,73 @@ To make common percentage values more readable, one can use specific keywords to duration
:vs: required Entity Duration + + WheelSlot + wheel
:grey_question: optional + Wheel name + Defaults to channel name + + + slotNumber
:star2: required + Entity SlotNumber + see footnote slotNumber + + + WheelShake + wheel
:grey_question: optional + Wheel name or array of wheel names + Defaults to channel name. Array not allowed when slotNumber is set. + + + slotNumber
:grey_question: optional + Entity Slot + see footnote slotNumber + + + shakeSpeed
:grey_question: optional + Entity Speed + + + + shakeAngle
:grey_question: optional + Entity SwingAngle + + + + WheelSlotRotation + wheel
:grey_question: optional + Wheel name or array of wheel names + Defaults to channel name. Array not allowed when slotNumber is set. + + + slotNumber
:grey_question: optional + Entity Slot + see footnote slotNumber + + + speed
:vs: required + Entity RotationSpeed + either speed or angle is allowed + + + angle
:vs: required + Entity RotationAngle + + + WheelRotation + wheel
:grey_question: optional + Wheel name or array of wheel names + Defaults to channel name. + + + speed
:vs: required + Entity RotationSpeed + either speed or angle is allowed + + + angle
:vs: required + Entity RotationAngle + Effect effectName
:vs: required
:feet: must be stepped @@ -259,53 +300,6 @@ To make common percentage values more readable, one can use specific keywords to Entity Percent - - GoboIndex - index
:star2: required - Entity Index - see footnote index - - - shakeSpeed
:grey_question: optional - Entity Speed - - - - shakeAngle
:grey_question: optional - Entity SwingAngle - - - - GoboShake - shakeSpeed
:grey_question: optional - Entity Speed - - - - shakeAngle
:grey_question: optional - Entity SwingAngle - - - - GoboStencilRotation - speed
:vs: required - Entity RotationSpeed - either speed or angle is allowed - - - angle
:vs: required - Entity RotationAngle - - - GoboWheelRotation - speed
:vs: required - Entity RotationSpeed - either speed or angle is allowed - - - angle
:vs: required - Entity RotationAngle - Focus distance
:star2: required @@ -480,15 +474,15 @@ Properties that must be stepped (they have a :feet: footsteps icon next to them) "Individual color beams" means that one beam is visually distinguishable from the others, i.e.: * A Red/Green/Blue/White/Amber LED produces a single color beam, as all these color components are mixed together. For a color preset "Red+Blue", `colors` should be set to `["#ff00ff"]`. - * A laser device has seperate light beams that don't mix. If red and green lasers are active, `colors` should be set to `["#ff0000", "#00ff00"]`. + * A laser device has separate light beams that don't mix. If red and green lasers are active, `colors` should be set to `["#ff0000", "#00ff00"]`. * UV is always counted as a separate color as the ultraviolet light doesn't really mix with normal RGB colors. For a color preset "Red+Green+UV", `colors` should be set to `["#ffff00", "UV"]`. -#### Property *index* +#### Property *slotNumber* -Use zero-based numbering (e.g. `0` for open, `1` for *Color/Gobo 1*). If the capability shows a split color/gobo, use the value halfway between them (e.g. `1.5` for *Split Color/Gobo 1/2*). If all steps in between can be selected by the proportional capability, use `indexStart` and `indexEnd` (e.g. from *Color/Gobo 1* to *Color/Gobo 2*). +Use one-based numbering (e.g. `1` for *Open*, `2` for *Color/Gobo 1*). If the capability shows a split slot, use the value halfway between them (e.g. `2.5` for *Split Color/Gobo 1/2*). If all steps in between can be selected by the proportional capability, use `slotNumberStart` and `slotNumberEnd` (e.g. from *Color/Gobo 1* to *Color/Gobo 2*). -**Note:** If there are e.g. 8 gobo slots, and a capability allows gradually selecting anything between the last slot (Gobo 7) and the first (Gobo 0) in this direction, use `"indexStart": 7, "indexEnd": 8`. If you chose `"indexEnd": 0` instead, that would indicate a rotation in the other direction. +**Note:** If there are e.g. 8 slots, and a capability allows gradually selecting anything between the last slot (*Color/Gobo 7*) and the first (*Open*) in this direction, use `"slotNumberStart": 8, "slotNumberEnd": 9`. If you chose `"slotNumberEnd": 1` instead, that would indicate a rotation in the other direction (i.e. over all other Gobos). Likewise, `"slotNumberStart": 0, "slotNumberEnd": 1` is also allowed. ### How to add new capability types / type-specific properties @@ -501,4 +495,4 @@ Use zero-based numbering (e.g. `0` for open, `1` for *Color/Gobo 1*). If the cap * Add new types to channel type generation (in `CoarseChannel.mjs`) * Update editor: * Create new component in `ui/components/editor-capabilities`. Make sure it has a `defaultData` object as component data. - * Import the new component in the [capability component](../ui/components/editor-capability.vue) and register it in its `components` section. + * Import the new component in the [capability component](../ui/components/editor-capability-type-data.vue) and register it in its `components` section. diff --git a/docs/fixture-format.md b/docs/fixture-format.md index 4acbb81eab..82fcb2e548 100644 --- a/docs/fixture-format.md +++ b/docs/fixture-format.md @@ -18,6 +18,8 @@ This document gives a high-level overview of the concepts used in the JSON forma - [Matrices](#matrices) - [Matrix structure](#matrix-structure) - [Template channels](#template-channels) + - [Wheels](#wheels) + - [Using wheels in capabilities](#using-wheels-in-capabilities) - [RDM (Remote Device Management) data](#rdm-remote-device-management-data) - [Fixture redirects](#fixture-redirects) @@ -81,7 +83,7 @@ If `constant` is `true`, the channel should be set to a static value in the oper #### Capabilities -A channel can do different things depending on which range its DMX value currently is in. Those ranges, that can be triggered manually in many programs, are called capabilities. Choose a `type` to declare which property of the fixture is changed by this capability, e.g. `ShutterOpen`, `Intensity` or `Pan`. Depending on the type, there exist more properties that further describe the capability, like the pan angle, the strobe rate or the gobo wheel index. Most of these are physical entities that require to be entered using specific units (like `"10.5Hz"` or `"100%"`). Some entities offer keywords to replace specific percentage values, e.g. Distance: `"near"` = `"1%"`, `"far"` = `"100%"`. See the [full list of units, entities and capability types with their properties](capability-types.md). Example: +A channel can do different things depending on which range its DMX value currently is in. Those ranges that can be triggered manually in many programs are called capabilities. Choose a `type` to declare which property of the fixture is changed by this capability, e.g. `ShutterOpen`, `Intensity` or `Pan`. Depending on the type, there exist more properties that further describe the capability, like the pan angle, the strobe rate or the wheel slot number. Most of these are physical entities that require to be entered using specific units (like `"10.5Hz"` or `"100%"`). Some entities offer keywords to replace specific percentage values, e.g. Distance: `"near"` = `"1%"`, `"far"` = `"100%"`. See the [full list of units, entities and capability types with their properties](capability-types.md). Example: ```js "availableChannels": { @@ -212,7 +214,7 @@ The information how these pixels are arranged is stored in the fixture's `matrix `null` refers to a "hole", i.e. there's no light beam, which allows for non-cubic frames. The above example represents 5 heads arranged like a "+". -Pixels can also be grouped if a fixture allows control in different fine grades, like fourths or halfs of a light bar: +Pixels can also be grouped if a fixture allows control in different fine grades, like fourths or halves of a light bar: ```js "matrix": { @@ -266,7 +268,7 @@ To reuse similar channels for each pixel or pixel group (like "Red 1", Red& } ``` -Template channels can also introduce fine and switching channels. Specific resolved matrix channels can be overriden by available channels (e.g. if "Speed 1" has different capabilities than "Speed 2" until "Speed 25"). See the [cameo Hydrabeam 300 RGBW](../fixtures/cameo/hydrambeam-300-rgbw.json) that uses these features. +Template channels can also introduce fine and switching channels. Specific resolved matrix channels can be overridden by available channels (e.g. if "Speed 1" has different capabilities than "Speed 2" until "Speed 25"). See the [cameo Hydrabeam 300 RGBW](../fixtures/cameo/hydrambeam-300-rgbw.json) that uses these features. Then, either use the resolved channel keys directly in a mode's channel list, or use a matrix channel insert block that repeats a list of template channels for a list of pixels: @@ -301,6 +303,46 @@ Then, either use the resolved channel keys directly in a mode's channel list, or - For the above [matrix structure](#matrix-structure) example, this results in `["Inner ring", "Middle ring", "Outer ring"]`. +### Wheels + +Fixtures (usually moving heads) can have internal wheels, where you can select the active slot via DMX. In our fixture format, wheels are defined in the fixture's `wheels` object, where the key defines the wheel's name. + +The slots in a wheel have types, similar to [capability types](capability-types.md). Depending on the type, different properties can be set on the slot. + +* `Open` / `Closed` +* `Color` + - `name` (string) + - `colors` (array of hex strings) + - `colorTemperature` ([Entity](capability-types.md#possible-entities-and-keywords) *ColorTemperature*) +* `Gobo` + - `name` (string) +* `Prism` + - `name` (string) + - `facets` (integer) +* `Iris` + - `openPercent` ([Entity](capability-types.md#possible-entities-and-keywords) *IrisPercent*) +* `Frost` + - `frostIntensity` ([Entity](capability-types.md#possible-entities-and-keywords) *Percent*) +* `AnimationGoboStart` + - `name` (string) +* `AnimationGoboEnd` + +Animation Gobo slots are wider than normal gobos (sometimes they fill the whole wheel); rotating the wheel over these slots creates an animation. To model the wider slots, an `AnimationGoboEnd` slot must be used directly after an `AnimationGoboStart` slot. + +#### Using wheels in capabilities + +In wheel-related capabilities, the `wheel` property references the wheel by its name. If the `wheel` property is not set, the channel name is used as wheel name. + +`WheelSlot` capabilities select a slot from the wheel. If the capability selects the place in between two slots, the `slotNumber` property can be set to a fractional value (or be proportional as `slotNumberStart` / `slotNumberEnd`). See also [footnote *slotNumber* in the capability types documentation](capability-types.md#property-slotnumber). + +`WheelShake` capabilities set the shaking (i.e. continuously rotating back and forth) of the whole wheel around the currently selected slot. A slot can also be activated directly by setting the `slotNumber` property like in `WheelSlot` capabilities. +By setting the property `isShaking` to `slot`, one can specify that only the currently selected slot rotates back and forth around its center (sometimes called *Gobo bounce effect*) instead of the whole wheel. + +`WheelSlotRotation` capabilities control the rotation of the currently selected slot (i.e. Gobo, Prism, etc.). A slot can also be activated directly by setting the `slotNumber` property like in `WheelSlot` capabilities. + +`WheelRotation` capabilities rotate the whole wheel, i.e. over all slots. + + ### RDM (Remote Device Management) data We link to [Open Lighting's RDM database](http://rdm.openlighting.org) if possible. Thus, we need to specify the RDM manufacturer ID per manufacturer and the RDM model ID per fixture. Additionally, each mode is mapped to the respective RDM personality via the `rdmPersonalityIndex` property. To ensure compatibility, we also track, for which RDM fixture software (firmware) version the mode indices are specified. diff --git a/docs/model-api.md b/docs/model-api.md index 2524ba9c41..6d5262efa5 100644 --- a/docs/model-api.md +++ b/docs/model-api.md @@ -50,6 +50,19 @@ The different behaviors are implemented as different Co

Represents a blueprint channel of which several similar channels can be generated. Currently used to create matrix channels.

+
Wheel
+

Information about a fixture's wheel.

+
+
WheelSlot
+

Information about a single wheel slot (or a split slot).

+
+ + +## Functions + +
+
getSlotCapabilityName(cap)string
+
## Typedefs @@ -159,11 +172,12 @@ A capability represents a range of a channel. * [.shutterEffect](#Capability+shutterEffect) ⇒ string \| null * [.color](#Capability+color) ⇒ 'Red' \| 'Green' \| 'Blue' \| 'Cyan' \| 'Magenta' \| 'Yellow' \| 'Amber' \| 'White' \| 'UV' \| 'Lime' \| 'Indigo' \| null * [.colors](#Capability+colors) ⇒ object \| null + * [.wheels](#Capability+wheels) ⇒ [array.<Wheel>](#Wheel) + * [.isShaking](#Capability+isShaking) ⇒ 'slot' \| 'wheel' * [.effectName](#Capability+effectName) ⇒ string \| null * [.effectPreset](#Capability+effectPreset) ⇒ string \| null * [.isSoundControlled](#Capability+isSoundControlled) ⇒ boolean \| null * [.randomTiming](#Capability+randomTiming) ⇒ boolean \| null - * [.isShaking](#Capability+isShaking) ⇒ boolean * [.blade](#Capability+blade) ⇒ 'Top' \| 'Right' \| 'Bottom' \| 'Left' \| number \| null * [.fogType](#Capability+fogType) ⇒ 'Fog' \| 'Haze' \| null * [.hold](#Capability+hold) ⇒ [Entity](#Entity) \| null @@ -171,7 +185,8 @@ A capability represents a range of a channel. * [.duration](#Capability+duration) ⇒ [array.<Entity>](#Entity) \| null * [.time](#Capability+time) ⇒ [array.<Entity>](#Entity) \| null * [.brightness](#Capability+brightness) ⇒ [array.<Entity>](#Entity) \| null - * [.index](#Capability+index) ⇒ [array.<Entity>](#Entity) \| null + * [.slotNumber](#Capability+slotNumber) ⇒ [array.<Entity>](#Entity) \| null + * [.wheelSlot](#Capability+wheelSlot) ⇒ [array.<WheelSlot>](#WheelSlot) \| null * [.angle](#Capability+angle) ⇒ [array.<Entity>](#Entity) \| null * [.colorTemperature](#Capability+colorTemperature) ⇒ [array.<Entity>](#Entity) \| null * [.soundSensitivity](#Capability+soundSensitivity) ⇒ [array.<Entity>](#Entity) \| null @@ -185,6 +200,7 @@ A capability represents a range of a channel. * [.parameter](#Capability+parameter) ⇒ [array.<Entity>](#Entity) \| null * [.getDmxRangeWithResolution(desiredResolution)](#Capability+getDmxRangeWithResolution) ⇒ [Range](#Range) * [.canCrossfadeTo(nextCapability)](#Capability+canCrossfadeTo) ⇒ boolean + * [.isSlotType(slotType)](#Capability+isSlotType) ⇒ boolean * [._getStartEndArray(prop)](#Capability+_getStartEndArray) ⇒ array \| null ℗ * _static_ * [.START_END_ENTITIES](#Capability.START_END_ENTITIES) ⇒ array.<string> @@ -295,6 +311,18 @@ Create a new Capability instance. ### capability.colors ⇒ object \| null **Kind**: instance property of [Capability](#Capability) **Returns**: object \| null - The color hex codes for each visually distinguishable light beam. Defaults to null. + + +### capability.wheels ⇒ [array.<Wheel>](#Wheel) +**Kind**: instance property of [Capability](#Capability) +**Returns**: [array.<Wheel>](#Wheel) - The wheels this capability refers to. The array has one or more elements in wheel-related capabilities, zero otherwise. + + +### capability.isShaking ⇒ 'slot' \| 'wheel' +Use only in `WheelShake` capabilities! + +**Kind**: instance property of [Capability](#Capability) +**Returns**: 'slot' \| 'wheel' - The fixture component that is shaking. ### capability.effectName ⇒ string \| null @@ -315,11 +343,6 @@ Create a new Capability instance. ### capability.randomTiming ⇒ boolean \| null **Kind**: instance property of [Capability](#Capability) **Returns**: boolean \| null - Whether this capability's speed / duration varies by a random offset. Defaults to false. - - -### capability.isShaking ⇒ boolean -**Kind**: instance property of [Capability](#Capability) -**Returns**: boolean - True if this is a capability that activates Gobo shaking, false otherwise. ### capability.blade ⇒ 'Top' \| 'Right' \| 'Bottom' \| 'Left' \| number \| null @@ -355,11 +378,16 @@ Create a new Capability instance. ### capability.brightness ⇒ [array.<Entity>](#Entity) \| null **Kind**: instance property of [Capability](#Capability) **Returns**: [array.<Entity>](#Entity) \| null - Start and end brightness values. Defaults to null. - + + +### capability.slotNumber ⇒ [array.<Entity>](#Entity) \| null +**Kind**: instance property of [Capability](#Capability) +**Returns**: [array.<Entity>](#Entity) \| null - Start and end slot numbers. Defaults to null. + -### capability.index ⇒ [array.<Entity>](#Entity) \| null +### capability.wheelSlot ⇒ [array.<WheelSlot>](#WheelSlot) \| null **Kind**: instance property of [Capability](#Capability) -**Returns**: [array.<Entity>](#Entity) \| null - Start and end index values. Defaults to null. +**Returns**: [array.<WheelSlot>](#WheelSlot) \| null - Start and end wheel slot objects this capability is referencing. Defaults to null. ### capability.angle ⇒ [array.<Entity>](#Entity) \| null @@ -435,6 +463,16 @@ Create a new Capability instance. | --- | --- | --- | | nextCapability | [Capability](#Capability) | The next capability after this one. | + + +### capability.isSlotType(slotType) ⇒ boolean +**Kind**: instance method of [Capability](#Capability) +**Returns**: boolean - True if the capability references a slot (or range of slots) of the given type, false otherwise. + +| Param | Type | Description | +| --- | --- | --- | +| slotType | string \| RegExp | The type of the slot to check. Can be a regular expression to be checked against the type. | + ### capability._getStartEndArray(prop) ⇒ array \| null ℗ @@ -949,6 +987,7 @@ A physical DMX device. * [.rdm](#Fixture+rdm) ⇒ object \| null * [.physical](#Fixture+physical) ⇒ [Physical](#Physical) \| null * [.matrix](#Fixture+matrix) ⇒ [Matrix](#Matrix) \| null + * [.wheels](#Fixture+wheels) ⇒ [array.<Wheel>](#Wheel) * [.uniqueChannelNames](#Fixture+uniqueChannelNames) ⇒ object.<string, string> * [.availableChannelKeys](#Fixture+availableChannelKeys) ⇒ array.<string> * [.availableChannels](#Fixture+availableChannels) ⇒ [array.<CoarseChannel>](#CoarseChannel) @@ -970,6 +1009,7 @@ A physical DMX device. * [.capabilities](#Fixture+capabilities) ⇒ [array.<Capability>](#Capability) * [.modes](#Fixture+modes) ⇒ [array.<Mode>](#Mode) * [.getLinksOfType(type)](#Fixture+getLinksOfType) ⇒ array.<string> + * [.getWheelByName(wheelName)](#Fixture+getWheelByName) ⇒ [Wheel](#Wheel) \| null * [.getTemplateChannelByKey(chKey)](#Fixture+getTemplateChannelByKey) ⇒ [TemplateChannel](#TemplateChannel) \| null * [.getChannelByKey(key)](#Fixture+getChannelByKey) ⇒ [AbstractChannel](#AbstractChannel) \| null @@ -1104,6 +1144,11 @@ Create a new Fixture instance. ### fixture.matrix ⇒ [Matrix](#Matrix) \| null **Kind**: instance property of [Fixture](#Fixture) **Returns**: [Matrix](#Matrix) \| null - The matrix information for this fixture. + + +### fixture.wheels ⇒ [array.<Wheel>](#Wheel) +**Kind**: instance property of [Fixture](#Fixture) +**Returns**: [array.<Wheel>](#Wheel) - The fixture's wheels as [Wheel](#Wheel) instances. ### fixture.uniqueChannelNames ⇒ object.<string, string> @@ -1218,6 +1263,16 @@ Template channels are used to automatically generate channels. | --- | --- | --- | | type | string | The type of the links that should be returned. | + + +### fixture.getWheelByName(wheelName) ⇒ [Wheel](#Wheel) \| null +**Kind**: instance method of [Fixture](#Fixture) +**Returns**: [Wheel](#Wheel) \| null - The wheel with the given name, or null if no wheel with the given name exists. + +| Param | Type | Description | +| --- | --- | --- | +| wheelName | string | The name of the wheel. | + ### fixture.getTemplateChannelByKey(chKey) ⇒ [TemplateChannel](#TemplateChannel) \| null @@ -2368,6 +2423,183 @@ Replaces the specified variables in the specified string. | str | string | The string which has to be modified. | | variables | object.<string, string> | Each variable (without $) pointing to its value. | + + +## Wheel +Information about a fixture's wheel. + +**Kind**: global class + +* [Wheel](#Wheel) + * [new Wheel(wheelName, jsonObject)](#new_Wheel_new) + * [.name](#Wheel+name) ⇒ string + * [.direction](#Wheel+direction) ⇒ 'CW' \| 'CCW' + * [.type](#Wheel+type) ⇒ string + * [.slots](#Wheel+slots) ⇒ array.<object> + * [.getSlot(slotNumber)](#Wheel+getSlot) ⇒ object + * [.getAbsoluteSlotIndex(slotNumber)](#Wheel+getAbsoluteSlotIndex) ⇒ number + * [.getSlotsOfType(type)](#Wheel+getSlotsOfType) ⇒ [array.<WheelSlot>](#WheelSlot) + + + +### new Wheel(wheelName, jsonObject) +Creates a new Wheel instance. + + +| Param | Type | Description | +| --- | --- | --- | +| wheelName | string | The wheel's name, like specified in the JSON. | +| jsonObject | object | A wheel object from the fixture's JSON data. | + + + +### wheel.name ⇒ string +**Kind**: instance property of [Wheel](#Wheel) +**Returns**: string - The wheel's name. + + +### wheel.direction ⇒ 'CW' \| 'CCW' +**Kind**: instance property of [Wheel](#Wheel) +**Returns**: 'CW' \| 'CCW' - The direction the wheel's slots are arranged in. Defaults to clockwise. + + +### wheel.type ⇒ string +**Kind**: instance property of [Wheel](#Wheel) +**Returns**: string - The type of the Wheel, i.e. the most frequent slot type (except for animation gobo wheels; the wheel type is AnimationGobo there). + + +### wheel.slots ⇒ array.<object> +**Kind**: instance property of [Wheel](#Wheel) +**Returns**: array.<object> - Array of wheel slots. + + +### wheel.getSlot(slotNumber) ⇒ object +**Kind**: instance method of [Wheel](#Wheel) +**Returns**: object - The slot object. Can be a split slot object, if a non-integer index is specified. + +| Param | Type | Description | +| --- | --- | --- | +| slotNumber | number | The one-based slot number. | + + + +### wheel.getAbsoluteSlotIndex(slotNumber) ⇒ number +**Kind**: instance method of [Wheel](#Wheel) +**Returns**: number - The zero-based slot index, bounded by the number of slots. + +| Param | Type | Description | +| --- | --- | --- | +| slotNumber | number | The one-based slot number, can be smaller than 1 and greater than the number of slots. | + + + +### wheel.getSlotsOfType(type) ⇒ [array.<WheelSlot>](#WheelSlot) +**Kind**: instance method of [Wheel](#Wheel) +**Returns**: [array.<WheelSlot>](#WheelSlot) - All slots with the given type. + +| Param | Type | Description | +| --- | --- | --- | +| type | string | The wheel slot type to search for. | + + + +## WheelSlot +Information about a single wheel slot (or a split slot). + +**Kind**: global class + +* [WheelSlot](#WheelSlot) + * [new WheelSlot(jsonObject, wheel, floorSlot, ceilSlot)](#new_WheelSlot_new) + * [.isSplitSlot](#WheelSlot+isSplitSlot) ⇒ boolean + * [.type](#WheelSlot+type) ⇒ string + * [.nthOfType](#WheelSlot+nthOfType) ⇒ number + * [.name](#WheelSlot+name) ⇒ string + * [.colors](#WheelSlot+colors) ⇒ array.<string> \| null + * [.colorTemperature](#WheelSlot+colorTemperature) ⇒ [Entity](#Entity) \| null + * [.facets](#WheelSlot+facets) ⇒ number \| null + * [.openPercent](#WheelSlot+openPercent) ⇒ [Entity](#Entity) \| null + * [.frostIntensity](#WheelSlot+frostIntensity) ⇒ [Entity](#Entity) \| null + * [.floorSlot](#WheelSlot+floorSlot) ⇒ [WheelSlot](#WheelSlot) \| null + * [.ceilSlot](#WheelSlot+ceilSlot) ⇒ [WheelSlot](#WheelSlot) \| null + + + +### new WheelSlot(jsonObject, wheel, floorSlot, ceilSlot) +Creates a new WheelSlot instance. + + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| jsonObject | object \| null | | A wheel slot object from the fixture's JSON data. If null, this WheelSlot is a split slot. | +| wheel | [Wheel](#Wheel) | | The wheel that this slot belongs to. | +| floorSlot | [WheelSlot](#WheelSlot) \| null | | For split slots, the WheelSlot instance at the start. | +| ceilSlot | [WheelSlot](#WheelSlot) \| null | | For split slots, the WheelSlot instance at the end. | + + + +### wheelSlot.isSplitSlot ⇒ boolean +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: boolean - True if this WheelSlot instance represents a split slot. + + +### wheelSlot.type ⇒ string +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: string - The slot's type. + + +### wheelSlot.nthOfType ⇒ number +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: number - The zero-based index of this slot amongst all slots with the same type in this wheel. + + +### wheelSlot.name ⇒ string +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: string - The wheel slot's name. + + +### wheelSlot.colors ⇒ array.<string> \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: array.<string> \| null - The colors of this wheel slot, or null if this slot has no colors. + + +### wheelSlot.colorTemperature ⇒ [Entity](#Entity) \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: [Entity](#Entity) \| null - For Color slots, the slot's color temperature. Null if this slot has no color temperature. + + +### wheelSlot.facets ⇒ number \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: number \| null - For Prism slots, the number of prism facets. Null if number of facets is not defined. + + +### wheelSlot.openPercent ⇒ [Entity](#Entity) \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: [Entity](#Entity) \| null - For Iris slots, the slot's openPercent value. Null if this slot has no openPercent value. + + +### wheelSlot.frostIntensity ⇒ [Entity](#Entity) \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: [Entity](#Entity) \| null - For Frost slots, the slot's frost intensity. Null if this slot has no frost intensity. + + +### wheelSlot.floorSlot ⇒ [WheelSlot](#WheelSlot) \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: [WheelSlot](#WheelSlot) \| null - For split slots, the floor (start) slot. Null for non-split slots. + + +### wheelSlot.ceilSlot ⇒ [WheelSlot](#WheelSlot) \| null +**Kind**: instance property of [WheelSlot](#WheelSlot) +**Returns**: [WheelSlot](#WheelSlot) \| null - For split slots, the ceil (end) slot. Null for non-split slots. + + +## getSlotCapabilityName(cap) ⇒ string +**Kind**: global function +**Returns**: string - The name for the capability, without the comment appended (if any). + +| Param | Type | Description | +| --- | --- | --- | +| cap | object | The capability (with a set slot property) to generate a name for. | + ## Resolution : number diff --git a/fixtures/5star-systems/spica-250m.json b/fixtures/5star-systems/spica-250m.json index 1f0bcd93de..2f754b4d33 100644 --- a/fixtures/5star-systems/spica-250m.json +++ b/fixtures/5star-systems/spica-250m.json @@ -36,6 +36,77 @@ "tiltMax": 280 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffc0cb"] + }, + { + "type": "Color", + "name": "Turquoise", + "colors": ["#40e0d0"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#9800ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -115,144 +186,108 @@ "capabilities": [ { "dmxRange": [0, 6], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [7, 13], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#ffff00"], - "comment": "Split Open / Yellow" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [14, 20], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [21, 27], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ffff00", "#ff7f00"], - "comment": "Split Yellow / Orange" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [28, 34], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [35, 41], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#ff7f00", "#ff0000"], - "comment": "Split Orange / Red" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [42, 48], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [49, 55], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#ff0000", "#0000ff"], - "comment": "Split Red / Blue" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [56, 62], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [63, 69], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#0000ff", "#00ff00"], - "comment": "Split Blue / Green" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [70, 76], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [77, 83], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#00ff00", "#ffc0cb"], - "comment": "Split Green / Pink" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [84, 90], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 97], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#ffc0cb", "#40e0d0"], - "comment": "Split Pink / Turquoise" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [98, 104], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#40e0d0"], - "comment": "Turquoise" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [105, 111], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#40e0d0", "#9800ff"], - "comment": "Split Turquoise / Purple" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [112, 118], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#9800ff"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [119, 127], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#9800ff", "#ffffff"], - "comment": "Split Purple / Open" + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -360,38 +395,37 @@ "capabilities": [ { "dmxRange": [0, 31], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [32, 63], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [64, 95], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [96, 127], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [128, 159], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [160, 223], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -401,24 +435,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0%", "angleEnd": "100%" }, { "dmxRange": [128, 190], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [191, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/abstract/twister-4.json b/fixtures/abstract/twister-4.json index b7bed44d02..c06c33166a 100644 --- a/fixtures/abstract/twister-4.json +++ b/fixtures/abstract/twister-4.json @@ -31,6 +31,54 @@ "type": "Fixed" } }, + "wheels": { + "Color / Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red [Dot Tunnel]", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Blue [Slash]", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Green [Segment]", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Yellow [Triangle]", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Cyan [Tunnel]", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Orange [Bubbles]", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "Pink [Stars]", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Multicolor [Quadrant]" + } + ] + } + }, "availableChannels": { "Rotation": { "capabilities": [ @@ -81,93 +129,68 @@ }, { "dmxRange": [10, 25], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [26, 42], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red [Dot Tunnel]" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [43, 58], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue [Slash]" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [59, 74], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green [Segment]" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [75, 90], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ffff00"], - "comment": "Yellow [Triangle]" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [91, 107], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#00ffff"], - "comment": "Cyan [Tunnel]" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [108, 123], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ff7f00"], - "comment": "Orange [Bubbles]" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [124, 139], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ff00ff"], - "comment": "Pink [Stars]" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [140, 155], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Multicolor [Quadrant]" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [156, 172], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ff7f00"], - "comment": "Orange [Bubbles]" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [173, 188], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#00ffff"], - "comment": "Cyan [Tunnel]" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [189, 220], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ffff00"], - "comment": "Yellow [Triangle]" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [221, 237], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue [Slash]" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [238, 253], diff --git a/fixtures/adb/warp-m.json b/fixtures/adb/warp-m.json index 0c2f9894e6..bd32cf4caa 100644 --- a/fixtures/adb/warp-m.json +++ b/fixtures/adb/warp-m.json @@ -377,7 +377,7 @@ "fineChannelAliases": ["Gobo 1 rotation fine"], "defaultValue": 32767, "capability": { - "type": "GoboStencilRotation", + "type": "Rotation", "angleStart": "0deg", "angleEnd": "360deg" } diff --git a/fixtures/american-dj/auto-spot-150.json b/fixtures/american-dj/auto-spot-150.json index 5f4ace9503..f24d4325af 100644 --- a/fixtures/american-dj/auto-spot-150.json +++ b/fixtures/american-dj/auto-spot-150.json @@ -28,6 +28,88 @@ "tiltMax": 270 } }, + "wheels": { + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#aaddff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffaaaa"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#aaffaa"] + } + ] + } + }, "availableChannels": { "Pan": { "defaultValue": "50%", @@ -50,48 +132,47 @@ "capabilities": [ { "dmxRange": [0, 15], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [16, 31], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [32, 47], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [48, 63], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [64, 79], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [80, 95], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [96, 111], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [112, 127], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [128, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -102,29 +183,34 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [10, 120], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [121, 134], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [135, 245], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [246, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" } ] @@ -134,140 +220,122 @@ "capabilities": [ { "dmxRange": [0, 6], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [7, 13], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#0000ff"], - "comment": "Split Open / Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1.5 }, { "dmxRange": [14, 20], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [21, 26], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#0000ff", "#ffff00"], - "comment": "Split Blue / Yellow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2.5 }, { "dmxRange": [27, 33], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [34, 40], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#ffff00", "#00ff00"], - "comment": "Split Yellow / Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3.5 }, { "dmxRange": [41, 46], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [47, 53], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#00ff00", "#aaddff"], - "comment": "Split Green / Light Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4.5 }, { "dmxRange": [54, 60], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#aaddff"], - "comment": "Light Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [61, 66], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#aaddff", "#ff7f00"], - "comment": "Split Light Blue / Orange" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5.5 }, { "dmxRange": [67, 73], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [74, 80], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#ff7f00", "#ffaaaa"], - "comment": "Split Orange / Pink" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6.5 }, { "dmxRange": [81, 87], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffaaaa"], - "comment": "Pink" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [88, 93], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#ffaaaa", "#ff00ff"], - "comment": "Split Pink / Magenta" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7.5 }, { "dmxRange": [94, 100], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [101, 107], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#ff00ff", "#ffbf00"], - "comment": "Split Magenta / Amber" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8.5 }, { "dmxRange": [108, 113], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9 }, { "dmxRange": [114, 120], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#ffbf00", "#aaffaa"], - "comment": "Split Amber / Light Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9.5 }, { "dmxRange": [121, 127], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#aaffaa"], - "comment": "Light Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 10 }, { "dmxRange": [128, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -306,77 +374,68 @@ "capabilities": [ { "dmxRange": [0, 12], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [13, 25], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [26, 38], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [39, 51], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [52, 63], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#aaddff"], - "comment": "Light Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [64, 76], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [77, 89], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffaaaa"], - "comment": "Pink" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [90, 102], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [103, 115], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9 }, { "dmxRange": [116, 127], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#aaffaa"], - "comment": "Light Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 10 }, { "dmxRange": [128, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/american-dj/boom-box-fx2.json b/fixtures/american-dj/boom-box-fx2.json index 2223b4662e..fa50f5c957 100644 --- a/fixtures/american-dj/boom-box-fx2.json +++ b/fixtures/american-dj/boom-box-fx2.json @@ -336,25 +336,25 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "Rotation", "comment": "indexing", "angleStart": "0%", "angleEnd": "100%" }, { "dmxRange": [128, 189], - "type": "GoboStencilRotation", + "type": "Rotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [190, 193], - "type": "GoboStencilRotation", + "type": "Rotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboStencilRotation", + "type": "Rotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" } diff --git a/fixtures/american-dj/inno-pocket-fusion.json b/fixtures/american-dj/inno-pocket-fusion.json index 4a080e41ef..e0aabe354c 100644 --- a/fixtures/american-dj/inno-pocket-fusion.json +++ b/fixtures/american-dj/inno-pocket-fusion.json @@ -35,6 +35,50 @@ "tiltMax": "infinite" } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#77ccff"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ff00ff"] + } + ] + } + }, "availableChannels": { "Pan": { "defaultValue": "50%", @@ -79,112 +123,82 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Red", - "colors": ["#ff0000"] + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Orange", - "colors": ["#ffaa00"] + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Yellow", - "colors": ["#ffff00"] + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Green", - "colors": ["#00ff00"] + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Blue", - "colors": ["#0000ff"] + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Light Blue", - "colors": ["#77ccff"] + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Pink", - "colors": ["#ff00ff"] + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "ColorWheelIndex", - "index": 0.5, - "comment": "Split Open / Red", - "colors": ["#ffffff", "#ff0000"] + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [72, 79], - "type": "ColorWheelIndex", - "index": 1.5, - "comment": "Split Red / Orange", - "colors": ["#ff0000", "#ffaa00"] + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [80, 87], - "type": "ColorWheelIndex", - "index": 2.5, - "comment": "Split Orange / Yellow", - "colors": ["#ffaa00", "#ffff00"] + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [88, 95], - "type": "ColorWheelIndex", - "index": 3.5, - "comment": "Split Yellow / Green", - "colors": ["#ffff00", "#00ff00"] + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [96, 103], - "type": "ColorWheelIndex", - "index": 4.5, - "comment": "Split Green / Blue", - "colors": ["#00ff00", "#0000ff"] + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [104, 111], - "type": "ColorWheelIndex", - "index": 5.5, - "comment": "Split Blue / Light Blue", - "colors": ["#0000ff", "#77ccff"] + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [112, 127], - "type": "ColorWheelIndex", - "index": 6.5, - "comment": "Split Light Blue / Pink", - "colors": ["#77ccff", "#ff00ff"] + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [128, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/american-dj/vizi-spot-led-pro.json b/fixtures/american-dj/vizi-spot-led-pro.json index 66f1bbb3b0..001da9a785 100644 --- a/fixtures/american-dj/vizi-spot-led-pro.json +++ b/fixtures/american-dj/vizi-spot-led-pro.json @@ -32,6 +32,83 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#800080"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffa500"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#3e0694"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffc0cb"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -59,81 +136,63 @@ "capabilities": [ { "dmxRange": [0, 14], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [15, 29], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [30, 44], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [45, 59], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [60, 74], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [75, 89], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#800080"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [90, 104], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffa500"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [105, 119], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#3e0694"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -145,90 +204,82 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 19], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 29], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 39], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 49], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 59], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [60, 69], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [70, 79], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [80, 95], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [96, 111], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [112, 127], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [128, 143], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [144, 159], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [160, 175], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [176, 191], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [192, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -240,24 +291,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 189], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/big-dipper/ls90.json b/fixtures/big-dipper/ls90.json index 8236d11f3c..f623d171de 100644 --- a/fixtures/big-dipper/ls90.json +++ b/fixtures/big-dipper/ls90.json @@ -35,6 +35,106 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Fuchsia", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Blue Green", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Dark Yellow", + "colors": ["#ccaa00"] + } + ] + }, + "Glass Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Metal Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -82,112 +182,82 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 19], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 29], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 39], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 49], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 59], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff00ff"], - "comment": "Fuchsia" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [60, 69], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#00ffff"], - "comment": "Blue Green" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [70, 79], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ccaa00"], - "comment": "Dark Yellow" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [80, 89], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#ccaa00", "#ffffff"], - "comment": "Split Dark Yellow / Open" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [90, 99], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#00ffff", "#ccaa00"], - "comment": "Split Blue Green / Dark Yellow" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [100, 109], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#ff00ff", "#00ffff"], - "comment": "Split Fuchsia / Blue Green" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [110, 119], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#ffff00", "#ff00ff"], - "comment": "Split Yellow / Fuchsia" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [120, 129], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#0000ff", "#ffff00"], - "comment": "Split Blue / Yellow" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [130, 139], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#00ff00", "#0000ff"], - "comment": "Split Green / Blue" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [140, 149], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ff0000", "#00ff00"], - "comment": "Split Red / Green" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [150, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -197,43 +267,42 @@ "capabilities": [ { "dmxRange": [0, 35], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [36, 71], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [72, 107], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [108, 143], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [144, 179], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [180, 215], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [216, 219], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [220, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -243,26 +312,30 @@ "capabilities": [ { "dmxRange": [0, 89], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Glass Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg", "helpWanted": "Is this capability correct?" }, { "dmxRange": [90, 167], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Glass Gobo Wheel", "speedStart": "fast CCW", "speedEnd": "slow CCW", "helpWanted": "Does the Gobo still rotate at DMX value 167?" }, { "dmxRange": [168, 178], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Glass Gobo Wheel", "speed": "stop" }, { "dmxRange": [179, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Glass Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -277,7 +350,8 @@ }, { "dmxRange": [11, 250], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Glass Gobo Wheel", "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, @@ -291,53 +365,52 @@ "capabilities": [ { "dmxRange": [0, 26], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [27, 53], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [54, 80], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [81, 107], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [108, 134], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [135, 161], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [162, 188], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [189, 214], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [215, 219], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [220, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -352,7 +425,8 @@ }, { "dmxRange": [11, 250], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Metal Gobo Wheel", "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, diff --git a/fixtures/boomtonedj/crazy-spot-30.json b/fixtures/boomtonedj/crazy-spot-30.json index fa9533f2c6..876ce4e1f1 100644 --- a/fixtures/boomtonedj/crazy-spot-30.json +++ b/fixtures/boomtonedj/crazy-spot-30.json @@ -32,6 +32,64 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -62,51 +120,43 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Color 1" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 14], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Color 2" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [15, 21], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Color 3" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [22, 28], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Color 4" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [29, 35], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Color 5" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [36, 42], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Color 6" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [43, 49], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Color 7" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [50, 56], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Color 8" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [57, 127], @@ -116,19 +166,19 @@ }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "helpWanted": "Correct direction?" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "helpWanted": "Correct direction?" @@ -139,123 +189,99 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Gobo 1" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 2" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 3" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 4" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 5" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 6" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 7" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 8" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 0, - "comment": "Gobo 1", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 1 }, { "dmxRange": [72, 79], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 2", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [80, 87], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 3", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [88, 95], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 4", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [96, 103], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 5", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [104, 111], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 6", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [112, 119], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 7", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [120, 127], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 8", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [128, 189], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "helpWanted": "Correct direction?" }, { "dmxRange": [190, 193], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "helpWanted": "Correct direction?" diff --git a/fixtures/cameo/gobo-scanner-80.json b/fixtures/cameo/gobo-scanner-80.json index e4b8237756..7287a56581 100644 --- a/fixtures/cameo/gobo-scanner-80.json +++ b/fixtures/cameo/gobo-scanner-80.json @@ -30,6 +30,94 @@ "tiltMax": 90 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Warm Yellow", + "colors": ["#f9d716"] + }, + { + "type": "Color", + "name": "Lavender", + "colors": ["#e6e6fa"] + }, + { + "type": "Color", + "name": "Lime", + "colors": ["#bfff00"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -81,82 +169,62 @@ "capabilities": [ { "dmxRange": [0, 5], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [6, 18], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#f9d716"], - "comment": "Warm Yellow" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [19, 31], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#e6e6fa"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [32, 44], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#bfff00"], - "comment": "Lime" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [45, 57], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [58, 70], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [71, 83], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [84, 96], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [97, 109], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [110, 122], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [123, 128], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [129, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -166,132 +234,131 @@ "capabilities": [ { "dmxRange": [0, 5], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [6, 17], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [18, 29], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 41], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [42, 53], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [54, 65], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [66, 77], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [78, 89], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [90, 101], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [102, 113], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [114, 125], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [126, 137], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [138, 149], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [150, 161], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [162, 173], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [174, 185], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [186, 197], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [198, 209], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [210, 221], - "type": "GoboIndex", - "index": 9, + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [222, 231], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [232, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [244, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" } diff --git a/fixtures/cameo/nanospot-120.json b/fixtures/cameo/nanospot-120.json index 321fd73968..e8605f72cf 100644 --- a/fixtures/cameo/nanospot-120.json +++ b/fixtures/cameo/nanospot-120.json @@ -33,6 +33,75 @@ "tiltMax": 230 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#ff00ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -63,69 +132,53 @@ "capabilities": [ { "dmxRange": [0, 10], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [11, 21], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [22, 32], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [33, 43], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [44, 54], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [55, 65], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [66, 76], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [77, 87], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ff00ff"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [88, 175], - "type": "ColorWheelRotation", + "type": "WheelRotation", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [176, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -141,34 +194,29 @@ "capabilities": [ { "dmxRange": [0, 15], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [16, 124], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 6, - "comment": "Gobo 1 … Gobo 6" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 7 }, { "dmxRange": [125, 234], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 6, - "shakeAngle": "wide", - "comment": "Gobo 1 … Gobo 6" + "type": "WheelShake", + "slotNumberStart": 2, + "slotNumberEnd": 7 }, { "dmxRange": [235, 249], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [250, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "fast CW" } ] diff --git a/fixtures/clay-paky/alpha-spot-qwo-800.json b/fixtures/clay-paky/alpha-spot-qwo-800.json index f5deb75178..4258926801 100644 --- a/fixtures/clay-paky/alpha-spot-qwo-800.json +++ b/fixtures/clay-paky/alpha-spot-qwo-800.json @@ -45,6 +45,125 @@ "tiltMax": 250 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ee262d"] + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#f1c136"], + "colorTemperature": "2600K" + }, + { + "type": "Color", + "name": "Green", + "colors": ["#08954d"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#87cf34"] + }, + { + "type": "Color", + "name": "Lavender", + "colors": ["#8566ba"] + }, + { + "type": "Color", + "name": "Aquamarine", + "colors": ["#69c981"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#f47327"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#2e52ab"] + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Animation Disk": { + "slots": [ + { + "type": "AnimationGoboStart" + }, + { + "type": "AnimationGoboEnd" + } + ] + } + }, "availableChannels": { "Cyan": { "defaultValue": 255, @@ -82,163 +201,118 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#ee262d"], - "comment": "Open … Red" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ee262d"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#ee262d"], - "colorsEnd": ["#f1c136"], - "comment": "Red … CTO (2600K)" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#f1c136"], - "comment": "CTO (2600K)" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#f1c136"], - "colorsEnd": ["#08954d"], - "comment": "CTO (2600K) … Green" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#08954d"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#08954d"], - "colorsEnd": ["#87cf34"], - "comment": "Green … Light Green" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#87cf34"], - "comment": "Light Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#87cf34"], - "colorsEnd": ["#8566ba"], - "comment": "Light Green … Lavender" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#8566ba"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#8566ba"], - "colorsEnd": ["#69c981"], - "comment": "Lavender … Aquamarine" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#69c981"], - "comment": "Aquamarine" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#69c981"], - "colorsEnd": ["#f47327"], - "comment": "Aquamarine … Orange" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#f47327"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#f47327"], - "colorsEnd": ["#2e52ab"], - "comment": "Orange … Blue" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 120], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#2e52ab"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [121, 127], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#2e52ab"], - "colorsEnd": ["#ffffff"], - "comment": "Blue … Open" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [128, 190], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "-5rpm", "speedEnd": "0rpm", "helpWanted": "Can the color wheel rotate in both directions? The manual only mentions slow to fast rotation in the DMX range 128…255. The capabilities here were imported from the GDTF file and manually edited instead." }, { "dmxRange": [191, 192], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "5rpm", "speedEnd": "0rpm" } @@ -798,120 +872,119 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 113], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "-100rpm", "speedEnd": "-5rpm" }, { "dmxRange": [114, 117], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [118, 159], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "5rpm", "speedEnd": "100rpm" }, { "dmxRange": [160, 171], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [172, 183], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [184, 195], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [196, 207], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [208, 219], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [220, 231], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [232, 243], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [244, 255], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" } @@ -922,91 +995,90 @@ "capabilities": [ { "dmxRange": [0, 16], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [17, 32], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [33, 48], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [49, 64], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [65, 81], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [82, 97], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [98, 113], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [114, 129], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [130, 147], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [148, 165], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [166, 183], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [184, 201], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [202, 219], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [220, 237], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [238, 255], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" } @@ -1018,89 +1090,105 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "0deg" }, { "dmxRange": [1, 20], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "90deg" }, { "dmxRange": [21, 21], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "90deg" }, { "dmxRange": [22, 41], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "90deg", "angleEnd": "180deg" }, { "dmxRange": [42, 42], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "180deg" }, { "dmxRange": [43, 62], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "180deg", "angleEnd": "270deg" }, { "dmxRange": [63, 63], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "270deg" }, { "dmxRange": [64, 83], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "270deg", "angleEnd": "360deg" }, { "dmxRange": [84, 84], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "360deg" }, { "dmxRange": [85, 104], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "360deg", "angleEnd": "450deg" }, { "dmxRange": [105, 105], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "450deg" }, { "dmxRange": [106, 126], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "450deg", "angleEnd": "540deg" }, { "dmxRange": [127, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "540deg" }, { "dmxRange": [128, 190], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "180rpm", "speedEnd": "0.0367rpm" }, { "dmxRange": [191, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "-0.0367rpm", "speedEnd": "-180rpm" } @@ -1230,18 +1318,21 @@ "capabilities": [ { "dmxRange": [0, 124], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Disk", "speedStart": "-120rpm", "speedEnd": "-0.0733rpm" }, { "dmxRange": [125, 125], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Disk", "speed": "stop" }, { "dmxRange": [126, 255], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Disk", "speedStart": "0.0733rpm", "speedEnd": "120rpm" } diff --git a/fixtures/clay-paky/sharpy.json b/fixtures/clay-paky/sharpy.json index 7e243e53e2..1eea305f11 100644 --- a/fixtures/clay-paky/sharpy.json +++ b/fixtures/clay-paky/sharpy.json @@ -39,252 +39,314 @@ "tiltMax": 250 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#c41c1a"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ed8229"] + }, + { + "type": "Color", + "name": "Aquamarine", + "colors": ["#7abd82"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#05822b"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#9ec233"] + }, + { + "type": "Color", + "name": "Lavender", + "colors": ["#8f73ad"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ed8080"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffed00"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#e30082"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00a6eb"] + }, + { + "type": "Color", + "name": "CTO 260", + "colors": ["#f5c745"] + }, + { + "type": "Color", + "name": "CTO 190", + "colors": ["#f5d985"] + }, + { + "type": "Color", + "name": "CTB 8000", + "colors": ["#96c7b8"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#004f99"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Color Wheel": { "capabilities": [ { "dmxRange": [0, 4], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [5, 8], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#c41c1a"], - "comment": "Open … Red" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [9, 12], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Red", - "colors": ["#c41c1a"] + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [13, 17], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#c41c1a"], - "colorsEnd": ["#ed8229"], - "comment": "Red … Orange" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [18, 21], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Orange", - "colors": ["#ed8229"] + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [22, 25], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#ed8229"], - "colorsEnd": ["#7abd82"], - "comment": "Orange … Aquamarine" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [26, 29], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Aquamarine", - "colors": ["#7abd82"] + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [30, 34], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#7abd82"], - "colorsEnd": ["#05822b"], - "comment": "Aquamarine … Green" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [35, 38], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Green", - "colors": ["#05822b"] + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [39, 42], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#05822b"], - "colorsEnd": ["#9ec233"], - "comment": "Green … Light Green" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [43, 46], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Light Green", - "colors": ["#9ec233"] + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [47, 51], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#9ec233"], - "colorsEnd": ["#8f73ad"], - "comment": "Light Green … Lavender" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [52, 55], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Lavender", - "colors": ["#8f73ad"] + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 59], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#8f73ad"], - "colorsEnd": ["#ed8080"], - "comment": "Lavender … Pink" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [60, 63], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Pink", - "colors": ["#ed8080"] + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 68], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#ed8080"], - "colorsEnd": ["#ffed00"], - "comment": "Pink … Yellow" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [69, 72], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Yellow", - "colors": ["#ffed00"] + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [73, 76], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#ffed00"], - "colorsEnd": ["#e30082"], - "comment": "Yellow … Magenta" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [77, 81], - "type": "ColorWheelIndex", - "index": 9, - "comment": "Magenta", - "colors": ["#e30082"] + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [82, 85], - "type": "ColorWheelIndex", - "indexStart": 9, - "indexEnd": 10, - "colorsStart": ["#e30082"], - "colorsEnd": ["#00a6eb"], - "comment": "Magenta … Cyan" + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11 }, { "dmxRange": [86, 89], - "type": "ColorWheelIndex", - "index": 10, - "comment": "Cyan", - "colors": ["#00a6eb"] + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [90, 93], - "type": "ColorWheelIndex", - "indexStart": 10, - "indexEnd": 11, - "colorsStart": ["#00a6eb"], - "colorsEnd": ["#f5c745"], - "comment": "Cyan … CTO 260" + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12 }, { "dmxRange": [94, 98], - "type": "ColorWheelIndex", - "index": 11, - "comment": "CTO 260", - "colors": ["#f5c745"] + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [99, 102], - "type": "ColorWheelIndex", - "indexStart": 11, - "indexEnd": 12, - "colorsStart": ["#f5c745"], - "colorsEnd": ["#f5d985"], - "comment": "CTO 260 … CTO 190" + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13 }, { "dmxRange": [103, 106], - "type": "ColorWheelIndex", - "index": 12, - "comment": "CTO 190", - "colors": ["#f5d985"] + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [107, 110], - "type": "ColorWheelIndex", - "indexStart": 12, - "indexEnd": 13, - "colorsStart": ["#f5d985"], - "colorsEnd": ["#96c7b8"], - "comment": "CTO 190 … CTB 8000" + "type": "WheelSlot", + "slotNumberStart": 13, + "slotNumberEnd": 14 }, { "dmxRange": [111, 115], - "type": "ColorWheelIndex", - "index": 13, - "comment": "CTB 8000", - "colors": ["#96c7b8"] + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [116, 119], - "type": "ColorWheelIndex", - "indexStart": 13, - "indexEnd": 14, - "colorsStart": ["#96c7b8"], - "colorsEnd": ["#004f99"], - "comment": "CTB 8000 … Blue" + "type": "WheelSlot", + "slotNumberStart": 14, + "slotNumberEnd": 15 }, { "dmxRange": [120, 123], - "type": "ColorWheelIndex", - "index": 14, - "comment": "Blue", - "colors": ["#004f99"] + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [124, 127], - "type": "ColorWheelIndex", - "indexStart": 14, - "indexEnd": 0, - "colorsStart": ["#004f99"], - "colorsEnd": ["#ffffff"], - "comment": "Blue … Open" + "type": "WheelSlot", + "slotNumberStart": 15, + "slotNumberEnd": 16 }, { "dmxRange": [128, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "0.2rpm", "speedEnd": "160rpm" } @@ -358,214 +420,213 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [4, 7], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [8, 11], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [12, 15], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [16, 19], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [20, 23], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [24, 27], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [28, 31], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [32, 35], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [36, 39], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [40, 43], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [44, 47], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [48, 51], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [52, 55], - "type": "GoboIndex", - "index": 13 + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [56, 59], - "type": "GoboIndex", - "index": 14 + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [60, 63], - "type": "GoboIndex", - "index": 15 + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [64, 67], - "type": "GoboIndex", - "index": 16 + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [68, 71], - "type": "GoboIndex", - "index": 17 + "type": "WheelSlot", + "slotNumber": 18 }, { "dmxRange": [72, 113], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "-60rpm", "speedEnd": "-5rpm" }, { "dmxRange": [114, 117], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [118, 159], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "5rpm", "speedEnd": "60rpm" }, { "dmxRange": [160, 166], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [167, 172], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [173, 179], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [180, 185], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [186, 191], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [192, 198], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [199, 204], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [205, 211], - "type": "GoboIndex", - "index": 9, + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [212, 217], - "type": "GoboIndex", - "index": 10, + "type": "WheelShake", + "slotNumber": 11, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [218, 223], - "type": "GoboIndex", - "index": 11, + "type": "WheelShake", + "slotNumber": 12, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [224, 230], - "type": "GoboIndex", - "index": 12, + "type": "WheelShake", + "slotNumber": 13, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [231, 236], - "type": "GoboIndex", - "index": 13, + "type": "WheelShake", + "slotNumber": 14, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [237, 243], - "type": "GoboIndex", - "index": 14, + "type": "WheelShake", + "slotNumber": 15, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [244, 249], - "type": "GoboIndex", - "index": 15, + "type": "WheelShake", + "slotNumber": 16, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [250, 255], - "type": "GoboIndex", - "index": 16, + "type": "WheelShake", + "slotNumber": 17, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" } diff --git a/fixtures/clay-paky/spheriscan.json b/fixtures/clay-paky/spheriscan.json index 249732b9a5..d21796f6e9 100644 --- a/fixtures/clay-paky/spheriscan.json +++ b/fixtures/clay-paky/spheriscan.json @@ -39,6 +39,120 @@ "tiltMax": 60 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Dark red", + "colors": ["#dc2919"] + }, + { + "type": "Color", + "name": "Brilliant blue", + "colors": ["#234faa"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#51bc49"] + }, + { + "type": "Color", + "name": "Half minus green", + "colors": ["#eee2d8"] + }, + { + "type": "Color", + "name": "Light orange", + "colors": ["#ff9c35"] + }, + { + "type": "Color", + "name": "Dark orange", + "colors": ["#ff4f23"] + }, + { + "type": "Color", + "name": "Navy blue", + "colors": ["#1356a4"] + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Small Dots" + }, + { + "type": "Gobo", + "name": "Shuffle" + }, + { + "type": "Gobo", + "name": "Floating Squares" + }, + { + "type": "Gobo", + "name": "Random Lines" + }, + { + "type": "Gobo", + "name": "Large Bubbles" + }, + { + "type": "Gobo", + "name": "Shattered" + }, + { + "type": "Gobo", + "name": "Big Dots" + }, + { + "type": "Gobo", + "name": "Tunnel" + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Clouds" + }, + { + "type": "Gobo", + "name": "Eccentric Circle" + }, + { + "type": "Gobo", + "name": "Multiple Cones" + }, + { + "type": "Gobo", + "name": "Fat Line" + }, + { + "type": "Gobo", + "name": "Half Circle" + }, + { + "type": "Gobo", + "name": "Linear Dots" + } + ] + } + }, "availableChannels": { "Cyan": { "defaultValue": 0, @@ -66,119 +180,87 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "ColorWheelIndex", - "index": 0.5, - "comment": "Split Open / Dark red", - "colors": ["#ffffff", "#dc2919"] + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [16, 23], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Dark red", - "colors": ["#dc2919"] + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [24, 31], - "type": "ColorWheelIndex", - "index": 1.5, - "comment": "Split Dark red / Brilliant blue", - "colors": ["#dc2919", "#234faa"] + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [32, 39], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Brilliant blue", - "colors": ["#234faa"] + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [40, 47], - "type": "ColorWheelIndex", - "index": 2.5, - "comment": "Split Brilliant blue / Green", - "colors": ["#234faa", "#51bc49"] + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [48, 55], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Green", - "colors": ["#51bc49"] + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [56, 63], - "type": "ColorWheelIndex", - "index": 3.5, - "comment": "Split Green / Half minus green", - "colors": ["#51bc49", "#eee2d8"] + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [64, 71], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Half minus green", - "colors": ["#eee2d8"] + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [72, 79], - "type": "ColorWheelIndex", - "index": 4.5, - "comment": "Split Half minus green / Light orange", - "colors": ["#eee2d8", "#ff9c35"] + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [80, 87], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Light orange", - "colors": ["#ff9c35"] + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [88, 95], - "type": "ColorWheelIndex", - "index": 5.5, - "comment": "Split Light orange / Dark orange", - "colors": ["#ff9c35", "#ff4f23"] + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [96, 103], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Dark orange", - "colors": ["#ff4f23"] + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [104, 111], - "type": "ColorWheelIndex", - "index": 6.5, - "comment": "Split Dark orange / Navy blue", - "colors": ["#ff4f23", "#1356a4"] + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [112, 119], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Navy blue", - "colors": ["#1356a4"] + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "index": 7.5, - "comment": "Split Navy blue / Open", - "colors": ["#1356a4", "#ffffff"] + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [128, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "0.73rpm", "speedEnd": "160rpm" } @@ -298,136 +380,119 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Small Dots" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2, - "comment": "Shuffle" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3, - "comment": "Floating Squares" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4, - "comment": "Random Lines" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5, - "comment": "Large Bubbles" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6, - "comment": "Shattered" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7, - "comment": "Big Dots" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 8, - "comment": "Tunnel" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 113], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "60rpm", "speedEnd": "5rpm" }, { "dmxRange": [114, 117], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [118, 159], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "-5rpm", "speedEnd": "-60rpm" }, { "dmxRange": [160, 171], - "type": "GoboIndex", - "index": 1, - "comment": "Small Dots", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [172, 183], - "type": "GoboIndex", - "index": 2, - "comment": "Shuffle", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [184, 195], - "type": "GoboIndex", - "index": 3, - "comment": "Floating Squares", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [196, 207], - "type": "GoboIndex", - "index": 4, - "comment": "Random Lines", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [208, 219], - "type": "GoboIndex", - "index": 5, - "comment": "Large Bubbles", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [220, 231], - "type": "GoboIndex", - "index": 6, - "comment": "Shattered", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [232, 243], - "type": "GoboIndex", - "index": 7, - "comment": "Big Dots", + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" }, { "dmxRange": [244, 255], - "type": "GoboIndex", - "index": 8, - "comment": "Tunnel", + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "24bpm", "shakeSpeedEnd": "600bpm" } @@ -438,91 +503,78 @@ "capabilities": [ { "dmxRange": [0, 18], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [19, 37], - "type": "GoboIndex", - "index": 1, - "comment": "Clouds" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [38, 56], - "type": "GoboIndex", - "index": 2, - "comment": "Eccentric Circle" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [57, 74], - "type": "GoboIndex", - "index": 3, - "comment": "Multiple Cones" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [75, 92], - "type": "GoboIndex", - "index": 4, - "comment": "Fat Line" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [93, 111], - "type": "GoboIndex", - "index": 5, - "comment": "Half Circle" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [112, 129], - "type": "GoboIndex", - "index": 6, - "comment": "Linear Dots" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [130, 150], - "type": "GoboIndex", - "index": 1, - "comment": "Clouds", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [151, 171], - "type": "GoboIndex", - "index": 2, - "comment": "Eccentric Circle", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [172, 192], - "type": "GoboIndex", - "index": 3, - "comment": "Multiple Cones", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [193, 213], - "type": "GoboIndex", - "index": 4, - "comment": "Fat Line", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [214, 234], - "type": "GoboIndex", - "index": 5, - "comment": "Half Circle", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [235, 255], - "type": "GoboIndex", - "index": 6, - "comment": "Linear Dots", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" } @@ -535,24 +587,28 @@ "capabilities": [ { "dmxRange": [0, 125], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "540deg" }, { "dmxRange": [126, 190], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "180rpm", "speedEnd": "0.36rpm" }, { "dmxRange": [191, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "-0.36rpm", "speedEnd": "-180rpm" } diff --git a/fixtures/coemar/prospot-250-lx.json b/fixtures/coemar/prospot-250-lx.json index 8b883c3011..fdbce924b9 100644 --- a/fixtures/coemar/prospot-250-lx.json +++ b/fixtures/coemar/prospot-250-lx.json @@ -35,6 +35,73 @@ "tiltMax": 284 } }, + "wheels": { + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -176,49 +243,57 @@ "capabilities": [ { "dmxRange": [0, 10], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [11, 30], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [31, 50], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [51, 70], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [71, 90], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [91, 110], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [111, 127], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [128, 192], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [193, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -232,7 +307,8 @@ }, { "dmxRange": [11, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -246,18 +322,21 @@ }, { "dmxRange": [11, 131], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [132, 134], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [135, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -300,86 +379,84 @@ "capabilities": [ { "dmxRange": [0, 4], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [5, 9], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [10, 14], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [15, 19], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [20, 24], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [25, 29], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [30, 34], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [35, 39], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [40, 44], - "type": "ColorWheelIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [45, 49], - "type": "ColorWheelIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [50, 54], - "type": "ColorWheelIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [55, 59], - "type": "ColorWheelIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [60, 127], - "type": "ColorWheelRotation", + "type": "WheelRotation", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 190], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [191, 192], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -393,7 +470,8 @@ }, { "dmxRange": [10, 249], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, @@ -408,57 +486,68 @@ "capabilities": [ { "dmxRange": [0, 23], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "100%" }, { "dmxRange": [24, 47], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "91%" }, { "dmxRange": [48, 71], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "82%" }, { "dmxRange": [72, 95], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "73%" }, { "dmxRange": [96, 119], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "64%" }, { "dmxRange": [120, 143], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "55%" }, { "dmxRange": [144, 167], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "45%" }, { "dmxRange": [168, 191], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "36%" }, { "dmxRange": [192, 215], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "27%" }, { "dmxRange": [216, 239], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "18%" }, { "dmxRange": [240, 255], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "shakeAngle": "9%" } ] @@ -660,43 +749,50 @@ "capabilities": [ { "dmxRange": [0, 31], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [32, 63], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [64, 95], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [96, 127], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [128, 159], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [160, 191], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [192, 223], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -706,24 +802,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 190], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [191, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/dts/xr1200-wash.json b/fixtures/dts/xr1200-wash.json index 11b5bca273..d78cb3ddda 100644 --- a/fixtures/dts/xr1200-wash.json +++ b/fixtures/dts/xr1200-wash.json @@ -27,6 +27,57 @@ "tiltMax": 320 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#ffd85e"], + "colorTemperature": "3200K" + }, + { + "type": "Color", + "name": "CTB", + "colors": ["#d1ffff"], + "colorTemperature": "5600K" + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#7038aa"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7000"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00c628"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#f4001c"] + }, + { + "type": "Color", + "name": "Dark Blue", + "colors": ["#660adb"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -152,123 +203,93 @@ "capabilities": [ { "dmxRange": [0, 12], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [13, 25], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ffd85e"], - "comment": "CTO (3200K)" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [26, 38], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#d1ffff"], - "comment": "CTB (5600K)" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [39, 51], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#7038aa"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [52, 64], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#7038aa", "#ff7000"], - "comment": "Split Purple / Orange" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [65, 77], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff7000"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [78, 90], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#ff7000", "#00c628"], - "comment": "Split Orange / Green" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [91, 103], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#00c628"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [104, 116], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#00c628", "#f4001c"], - "comment": "Split Green / Red" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [117, 129], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#f4001c"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [130, 142], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#f4001c", "#660adb"], - "comment": "Split Red / Dark Blue" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [143, 155], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#660adb"], - "comment": "Dark Blue" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [156, 168], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#660adb", "#ffbf00"], - "comment": "Split Dark Blue / Amber" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [169, 181], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [182, 197], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#ffbf00", "#ffffff"], - "comment": "Split Amber / Open" + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [198, 224], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [225, 228], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [229, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/elation/platinum-hfx.json b/fixtures/elation/platinum-hfx.json index 5e2c2c7d82..d8f873597d 100644 --- a/fixtures/elation/platinum-hfx.json +++ b/fixtures/elation/platinum-hfx.json @@ -29,6 +29,154 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ed2024"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#20409a"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#0ba14b"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#fff200"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#d93595"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#f26522"] + }, + { + "type": "Color", + "name": "Aqua", + "colors": ["#149389"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ec008c"] + }, + { + "type": "Color", + "name": "Quad color", + "colors": ["#3b59a8", "#f6f06b", "#47b749", "#991b1e"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00aeef"] + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#f26751"] + }, + { + "type": "Color", + "name": "CTB", + "colors": ["#c3e7ec"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#3e69b3"] + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -54,116 +202,88 @@ "capabilities": [ { "dmxRange": [0, 10], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [11, 19], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ed2024"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 28], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#20409a"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [29, 37], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#0ba14b"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [38, 46], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#fff200"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [47, 55], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#d93595"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [56, 64], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#f26522"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [65, 73], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#149389"], - "comment": "Aqua" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [74, 82], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ec008c"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [83, 91], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#3b59a8", "#f6f06b", "#47b749", "#991b1e"], - "comment": "Quad color" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [92, 100], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#00aeef"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [101, 109], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#f26751"], - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [110, 118], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#c3e7ec"], - "comment": "CTB" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [119, 127], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#3e69b3"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -178,115 +298,114 @@ }, { "dmxRange": [12, 21], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [22, 31], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [32, 41], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [42, 51], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [52, 61], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [62, 71], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [72, 81], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [82, 91], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [92, 101], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [102, 112], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [113, 123], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [124, 134], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [135, 145], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [146, 156], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [157, 167], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [168, 178], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [179, 189], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [190, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -298,24 +417,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 189], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -327,168 +450,167 @@ "capabilities": [ { "dmxRange": [0, 21], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [22, 28], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [29, 35], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [36, 42], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [43, 49], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 56], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [57, 63], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [64, 70], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [71, 77], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [78, 84], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [85, 91], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [92, 98], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [99, 105], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [106, 112], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [113, 119], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [120, 126], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [127, 133], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [134, 140], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [141, 147], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [148, 154], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [155, 161], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [162, 168], - "type": "GoboIndex", - "index": 9, + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [169, 175], - "type": "GoboIndex", - "index": 10, + "type": "WheelShake", + "slotNumber": 11, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [176, 182], - "type": "GoboIndex", - "index": 11, + "type": "WheelShake", + "slotNumber": 12, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [183, 189], - "type": "GoboIndex", - "index": 12, + "type": "WheelShake", + "slotNumber": 13, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [190, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [222, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/elation/platinum-spot-15r-pro.json b/fixtures/elation/platinum-spot-15r-pro.json index 3643b13e0f..bf56859a4b 100644 --- a/fixtures/elation/platinum-spot-15r-pro.json +++ b/fixtures/elation/platinum-spot-15r-pro.json @@ -26,6 +26,113 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -51,55 +158,53 @@ "capabilities": [ { "dmxRange": [0, 18], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [19, 37], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [38, 56], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [57, 75], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [76, 94], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [95, 113], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [114, 127], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -133,101 +238,92 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 19], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 29], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 39], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 49], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 59], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [60, 69], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [70, 79], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [80, 89], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [90, 104], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [105, 119], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [120, 134], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [135, 149], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [150, 164], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [165, 179], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [180, 194], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [195, 209], - "type": "GoboIndex", - "index": 8, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 9 }, { "dmxRange": [210, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -239,24 +335,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 189], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -268,181 +368,180 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 79], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [80, 87], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [88, 95], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [96, 103], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [104, 111], - "type": "GoboIndex", - "index": 13 + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [112, 119], - "type": "GoboIndex", - "index": 14 + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [120, 126], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [127, 133], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [134, 140], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [141, 147], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [148, 154], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [155, 161], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [162, 168], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [169, 175], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [176, 182], - "type": "GoboIndex", - "index": 9, + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [183, 189], - "type": "GoboIndex", - "index": 10, + "type": "WheelShake", + "slotNumber": 11, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [190, 196], - "type": "GoboIndex", - "index": 11, + "type": "WheelShake", + "slotNumber": 12, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [197, 203], - "type": "GoboIndex", - "index": 12, + "type": "WheelShake", + "slotNumber": 13, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [204, 210], - "type": "GoboIndex", - "index": 13, + "type": "WheelShake", + "slotNumber": 14, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [211, 217], - "type": "GoboIndex", - "index": 14, + "type": "WheelShake", + "slotNumber": 15, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [218, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/eurolite/led-tmh-x12.json b/fixtures/eurolite/led-tmh-x12.json index 53f44fd121..1d0930856c 100644 --- a/fixtures/eurolite/led-tmh-x12.json +++ b/fixtures/eurolite/led-tmh-x12.json @@ -36,6 +36,83 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#aaccff"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#cc00bb"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ff00ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -109,133 +186,97 @@ "capabilities": [ { "dmxRange": [0, 8], - "type": "ColorWheelIndex", - "index": 0.5, - "comment": "Split Open / Red", - "colors": ["#ffffff", "#ff0000"] + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [9, 10], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Red", - "colors": ["#ff0000"] + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [11, 18], - "type": "ColorWheelIndex", - "index": 1.5, - "comment": "Split Red / Orange", - "colors": ["#ff0000", "#ffaa00"] + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [19, 20], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Orange", - "colors": ["#ffaa00"] + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [21, 28], - "type": "ColorWheelIndex", - "index": 2.5, - "comment": "Split Orange / Green", - "colors": ["#ffaa00", "#00ff00"] + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [29, 30], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Green", - "colors": ["#00ff00"] + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [31, 38], - "type": "ColorWheelIndex", - "index": 3.5, - "comment": "Split Green / Light Blue", - "colors": ["#00ff00", "#aaccff"] + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [39, 40], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Light Blue", - "colors": ["#aaccff"] + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [41, 48], - "type": "ColorWheelIndex", - "index": 4.5, - "comment": "Split Light Blue / Purple", - "colors": ["#aaccff", "#cc00bb"] + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [49, 50], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Purple", - "colors": ["#cc00bb"] + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [51, 58], - "type": "ColorWheelIndex", - "index": 5.5, - "comment": "Split Purple / Yellow", - "colors": ["#cc00bb", "#ffff00"] + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [59, 60], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Yellow", - "colors": ["#ffff00"] + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [61, 68], - "type": "ColorWheelIndex", - "index": 6.5, - "comment": "Split Yellow / Blue", - "colors": ["#ffff00", "#0000ff"] + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [69, 70], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Blue", - "colors": ["#0000ff"] + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [71, 78], - "type": "ColorWheelIndex", - "index": 7.5, - "comment": "Split Blue / Pink", - "colors": ["#0000ff", "#ff00ff"] + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [79, 80], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Pink", - "colors": ["#ff00ff"] + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [81, 88], - "type": "ColorWheelIndex", - "index": 8.5, - "comment": "Split Pink / Open", - "colors": ["#ff00ff", "#ffffff"] + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [89, 90], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [91, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -245,118 +286,95 @@ "capabilities": [ { "dmxRange": [0, 4], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [5, 9], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 1" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [10, 14], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 2" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [15, 19], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 3" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [20, 24], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 4" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [25, 29], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 5" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [30, 34], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 6" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [35, 39], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 7" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [40, 129], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" }, { "dmxRange": [130, 134], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [135, 220], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [221, 225], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 1", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [226, 230], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 2", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [231, 235], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 3", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [236, 240], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 4", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [241, 245], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 5", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [246, 250], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 6", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [251, 255], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 7", - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 } ] }, @@ -368,24 +386,28 @@ }, { "dmxRange": [64, 126], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CCW", "speedEnd": "slow CCW" }, { "dmxRange": [127, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [128, 191], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [192, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { diff --git a/fixtures/futurelight/dmh-75-i-led-moving-head.json b/fixtures/futurelight/dmh-75-i-led-moving-head.json index 462f7949f1..0208f4f7bd 100644 --- a/fixtures/futurelight/dmh-75-i-led-moving-head.json +++ b/fixtures/futurelight/dmh-75-i-led-moving-head.json @@ -29,6 +29,67 @@ "tiltMax": "infinite" } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -242,7 +303,8 @@ }, { "dmxRange": [32, 47], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speed": "fast CW", "switchChannels": { "Color wheel": "Color wheel speed CW" @@ -250,7 +312,8 @@ }, { "dmxRange": [48, 63], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speed": "fast CCW", "switchChannels": { "Color wheel": "Color wheel speed CCW" @@ -266,8 +329,8 @@ }, { "dmxRange": [80, 111], - "type": "Effect", - "effectName": "Color Wheel shake", + "type": "WheelShake", + "wheel": "Color Wheel", "switchChannels": { "Color wheel": "Color wheel: Color selection" } @@ -285,70 +348,80 @@ "capabilities": [ { "dmxRange": [0, 27], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [28, 55], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [56, 83], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [84, 111], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [112, 139], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [140, 167], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [168, 195], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [196, 223], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [224, 255], - "type": "ColorWheelIndex", - "index": 8 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9 } ] }, "Color wheel speed CW": { "capability": { - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } }, "Color wheel speed CCW": { "capability": { - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } }, "Color wheel position": { "capability": { - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -358,171 +431,187 @@ "capabilities": [ { "dmxRange": [0, 5], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [6, 11], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [12, 17], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [18, 23], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [24, 29], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [30, 35], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [36, 41], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [42, 47], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [48, 53], - "type": "ColorWheelIndex", - "index": 8 + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9 }, { "dmxRange": [54, 59], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open (blackout at color change)", - "colors": ["#ffffff"] + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1, + "comment": "blackout at color change" }, { "dmxRange": [60, 65], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Color 1 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2, + "comment": "blackout at color change" }, { "dmxRange": [66, 71], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Color 2 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3, + "comment": "blackout at color change" }, { "dmxRange": [72, 77], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Color 3 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4, + "comment": "blackout at color change" }, { "dmxRange": [78, 83], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Color 4 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5, + "comment": "blackout at color change" }, { "dmxRange": [84, 89], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Color 5 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6, + "comment": "blackout at color change" }, { "dmxRange": [90, 95], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Color 6 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7, + "comment": "blackout at color change" }, { "dmxRange": [96, 101], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Color 7 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8, + "comment": "blackout at color change" }, { "dmxRange": [102, 106], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Color 8 (blackout at color change)" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9, + "comment": "blackout at color change" }, { "dmxRange": [107, 119], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open shake", - "colors": ["#ffffff"] + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [120, 132], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Color 1 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [133, 145], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Color 2 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [146, 158], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Color 3 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [159, 171], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Color 4 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [172, 184], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Color 5 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [185, 197], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Color 6 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [198, 210], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Color 7 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [211, 223], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Color 8 shake" + "type": "WheelShake", + "wheel": "Color Wheel", + "slotNumber": 9 }, { "dmxRange": [224, 239], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CW", "speedEnd": "fast CW", "comment": "Forwards rainbow effect" }, { "dmxRange": [240, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", + "wheel": "Color Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW", "comment": "Backwards rainbow effect" @@ -574,7 +663,8 @@ }, { "dmxRange": [80, 95], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel", "switchChannels": { "Gobo wheel": "Gobo wheel: Gobo selection" } @@ -592,44 +682,51 @@ "capabilities": [ { "dmxRange": [0, 31], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [32, 63], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [64, 95], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [96, 127], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [128, 159], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [160, 191], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [192, 223], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [224, 255], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 8 } ] }, @@ -637,12 +734,14 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [8, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -652,12 +751,14 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [8, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -665,7 +766,8 @@ }, "Gobo wheel position": { "capability": { - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -675,92 +777,107 @@ "capabilities": [ { "dmxRange": [0, 5], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [6, 11], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [12, 17], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [18, 23], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [24, 29], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [30, 35], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [36, 41], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [42, 47], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 8 }, { "dmxRange": [48, 53], - "type": "GoboIndex", - "index": 0, - "comment": "Open (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1, + "comment": "blackout at gobo change" }, { "dmxRange": [54, 59], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 1 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2, + "comment": "blackout at gobo change" }, { "dmxRange": [60, 65], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 2 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3, + "comment": "blackout at gobo change" }, { "dmxRange": [66, 71], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 3 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4, + "comment": "blackout at gobo change" }, { "dmxRange": [72, 77], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 4 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5, + "comment": "blackout at gobo change" }, { "dmxRange": [78, 83], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 5 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6, + "comment": "blackout at gobo change" }, { "dmxRange": [84, 89], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 6 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7, + "comment": "blackout at gobo change" }, { "dmxRange": [90, 95], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 7 (blackout at gobo change)" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 8, + "comment": "blackout at gobo change" }, { "dmxRange": [96, 97], @@ -769,65 +886,69 @@ }, { "dmxRange": [98, 115], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [116, 133], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [134, 151], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [152, 169], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [170, 187], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [188, 205], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [206, 223], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 8 }, { "dmxRange": [224, 224], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [225, 239], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [240, 240], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [241, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -903,7 +1024,8 @@ }, "Gobo indexing": { "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -912,12 +1034,14 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [8, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -927,12 +1051,14 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [8, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -950,7 +1076,8 @@ "capabilities": [ { "dmxRange": [0, 191], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, @@ -970,23 +1097,27 @@ }, { "dmxRange": [224, 224], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [225, 239], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [240, 240], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [241, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/futurelight/sc-250-scanner.json b/fixtures/futurelight/sc-250-scanner.json index db6b00dc72..ee81685407 100644 --- a/fixtures/futurelight/sc-250-scanner.json +++ b/fixtures/futurelight/sc-250-scanner.json @@ -28,6 +28,124 @@ "type": "Mirror" } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Turquoise", + "colors": ["#40e0d0"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Lightgreen", + "colors": ["#90ee90"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Lightblue", + "colors": ["#66ccff"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffaaaa"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#7f1ae5"] + }, + { + "type": "Color", + "name": "Red-Blue", + "colors": ["#ff0000", "#0000ff"] + }, + { + "type": "Color", + "name": "Yellow-Green", + "colors": ["#ffff00", "#00ff00"] + }, + { + "type": "Color", + "name": "Lightblue-Magenta", + "colors": ["#66ccff", "#ff00ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "defaultValue": 128, @@ -49,131 +167,99 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#40e0d0"], - "comment": "Turquoise" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#90ee90"], - "comment": "Lightgreen" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#66ccff"], - "comment": "Lightblue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 79], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#ffaaaa"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [80, 87], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [88, 95], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [96, 103], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#7f1ae5"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [104, 111], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#ff0000", "#0000ff"], - "comment": "Red-Blue" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [112, 119], - "type": "ColorWheelIndex", - "index": 14, - "colors": ["#ffff00", "#00ff00"], - "comment": "Yellow-Green" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "index": 15, - "colors": ["#66ccff", "#ff00ff"], - "comment": "Lightblue-Magenta" + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [128, 190], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "comment": "Rainbow Effect" }, { "dmxRange": [191, 192], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "comment": "Rainbow Effect" @@ -184,54 +270,53 @@ "capabilities": [ { "dmxRange": [0, 23], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [24, 47], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [48, 79], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [80, 103], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [104, 127], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [128, 151], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [152, 175], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [176, 207], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [208, 231], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [232, 255], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 } ] }, @@ -239,24 +324,28 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 191], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [192, 193], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/glp/impression-spot-one.json b/fixtures/glp/impression-spot-one.json index 669f9cf9b0..668c3a2395 100644 --- a/fixtures/glp/impression-spot-one.json +++ b/fixtures/glp/impression-spot-one.json @@ -33,6 +33,78 @@ "tiltMax": 280 } }, + "wheels": { + "Gobo Wheel 1": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "4 Circles" + }, + { + "type": "Gobo", + "name": "Vertical Bars" + }, + { + "type": "Gobo", + "name": "Two Light Tunnels" + }, + { + "type": "Gobo", + "name": "Triangles Random" + }, + { + "type": "Gobo", + "name": "Dash Mini" + }, + { + "type": "Gobo", + "name": "Dots Medium" + }, + { + "type": "Gobo", + "name": "Starry Night Dense" + } + ] + }, + "Gobo Wheel 2": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Cone" + }, + { + "type": "Gobo", + "name": "Leaves Foliage" + }, + { + "type": "Gobo", + "name": "Teeth" + }, + { + "type": "Gobo", + "name": "Shreds" + }, + { + "type": "Gobo", + "name": "Angry Hurricane" + }, + { + "type": "Gobo", + "name": "Shredded Earth" + }, + { + "type": "Gobo", + "name": "Diamond Pattern" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -284,195 +356,195 @@ }, { "dmxRange": [16, 23], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "12.5%", - "comment": "Gobowheel 1" + "shakeSpeed": "12.5%" }, { "dmxRange": [24, 31], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "25%", - "comment": "Gobowheel 1" + "shakeSpeed": "25%" }, { "dmxRange": [32, 39], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "37.5%", - "comment": "Gobowheel 1" + "shakeSpeed": "37.5%" }, { "dmxRange": [40, 47], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "50%", - "comment": "Gobowheel 1" + "shakeSpeed": "50%" }, { "dmxRange": [48, 55], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "62.5%", - "comment": "Gobowheel 1" + "shakeSpeed": "62.5%" }, { "dmxRange": [56, 63], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "75%", - "comment": "Gobowheel 1" + "shakeSpeed": "75%" }, { "dmxRange": [64, 71], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "87.5%", - "comment": "Gobowheel 1" + "shakeSpeed": "87.5%" }, { "dmxRange": [72, 79], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "100%", - "comment": "Gobowheel 1" + "shakeSpeed": "100%" }, { "dmxRange": [80, 87], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "12.5%", - "comment": "Gobowheel 2" + "shakeSpeed": "12.5%" }, { "dmxRange": [88, 95], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "25%", - "comment": "Gobowheel 2" + "shakeSpeed": "25%" }, { "dmxRange": [96, 103], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "37.5%", - "comment": "Gobowheel 2" + "shakeSpeed": "37.5%" }, { "dmxRange": [104, 111], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "50%", - "comment": "Gobowheel 2" + "shakeSpeed": "50%" }, { "dmxRange": [112, 119], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "62.5%", - "comment": "Gobowheel 2" + "shakeSpeed": "62.5%" }, { "dmxRange": [120, 127], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "75%", - "comment": "Gobowheel 2" + "shakeSpeed": "75%" }, { "dmxRange": [128, 135], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "87.5%", - "comment": "Gobowheel 2" + "shakeSpeed": "87.5%" }, { "dmxRange": [136, 143], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "100%", - "comment": "Gobowheel 2" + "shakeSpeed": "100%" }, { "dmxRange": [144, 151], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "12.5%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "12.5%" }, { "dmxRange": [152, 159], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "25%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "25%" }, { "dmxRange": [160, 167], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "37.5%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "37.5%" }, { "dmxRange": [168, 175], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "50%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "50%" }, { "dmxRange": [176, 183], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "62.5%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "62.5%" }, { "dmxRange": [184, 191], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "75%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "75%" }, { "dmxRange": [192, 199], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "87.5%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "87.5%" }, { "dmxRange": [200, 207], - "type": "GoboShake", + "type": "WheelShake", + "wheel": ["Gobo Wheel 1", "Gobo Wheel 2"], "shakeAngleStart": "12.5%", "shakeAngleEnd": "100%", - "shakeSpeed": "100%", - "comment": "Gobowheel 1&2" + "shakeSpeed": "100%" }, { "dmxRange": [208, 249], @@ -695,66 +767,58 @@ "capabilities": [ { "dmxRange": [0, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [16, 31], - "type": "GoboIndex", - "index": 2, - "comment": "4 Circles" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [32, 47], - "type": "GoboIndex", - "index": 3, - "comment": "Vertical Bars" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [48, 63], - "type": "GoboIndex", - "index": 4, - "comment": "Two Light Tunnels" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [64, 79], - "type": "GoboIndex", - "index": 5, - "comment": "Triangles Random" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [80, 95], - "type": "GoboIndex", - "index": 6, - "comment": "Dash Mini" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [96, 111], - "type": "GoboIndex", - "index": 7, - "comment": "Dots Medium" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [112, 126], - "type": "GoboIndex", - "index": 8, - "comment": "Starry Night Dense" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [127, 127], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [128, 192], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [193, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -766,30 +830,35 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "angleStart": "0deg", "angleEnd": "540deg" }, { "dmxRange": [128, 129], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speed": "stop" }, { "dmxRange": [130, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [193, 253], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [254, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speed": "stop" } ] @@ -798,66 +867,58 @@ "capabilities": [ { "dmxRange": [0, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [16, 31], - "type": "GoboIndex", - "index": 2, - "comment": "Cone" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [32, 47], - "type": "GoboIndex", - "index": 3, - "comment": "Leaves Foliage" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [48, 63], - "type": "GoboIndex", - "index": 4, - "comment": "Teeth" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [64, 79], - "type": "GoboIndex", - "index": 5, - "comment": "Shreds" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [80, 95], - "type": "GoboIndex", - "index": 6, - "comment": "Angry Hurricane" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [96, 111], - "type": "GoboIndex", - "index": 7, - "comment": "Shredded Earth" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [112, 126], - "type": "GoboIndex", - "index": 8, - "comment": "Diamond Pattern" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [127, 127], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [128, 192], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [193, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -869,30 +930,35 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "angleStart": "0deg", "angleEnd": "540deg" }, { "dmxRange": [128, 129], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "stop" }, { "dmxRange": [130, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [193, 253], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [254, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "stop" } ] diff --git a/fixtures/hong-yi/hy-g60.json b/fixtures/hong-yi/hy-g60.json index fef1f77111..fd3fd901a5 100644 --- a/fixtures/hong-yi/hy-g60.json +++ b/fixtures/hong-yi/hy-g60.json @@ -38,6 +38,78 @@ "tiltMax": 180 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#19ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#ff01fb"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00fbff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -59,118 +131,88 @@ "capabilities": [ { "dmxRange": [0, 10], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [11, 21], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#ff0000"], - "comment": "Split Open / Red" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [22, 32], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [33, 43], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ff0000", "#ffaa00"], - "comment": "Split Red / Orange" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [44, 54], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [55, 65], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#ffaa00", "#ffff00"], - "comment": "Split Orange / Yellow" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [66, 76], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [77, 87], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#ffff00", "#19ff00"], - "comment": "Split Yellow / Green" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [88, 98], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#19ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [99, 109], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#19ff00", "#0000ff"], - "comment": "Split Green / Blue" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [110, 120], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [121, 131], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#0000ff", "#ff01fb"], - "comment": "Split Blue / Purple" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [132, 142], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ff01fb"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [143, 153], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#ff01fb", "#00fbff"], - "comment": "Split Purple / Cyan" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [154, 159], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#00fbff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [160, 207], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [208, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -180,96 +222,88 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 19], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 29], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 39], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 49], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 59], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [60, 69], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [70, 79], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [80, 89], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [90, 99], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [100, 109], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [110, 119], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [120, 129], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [130, 139], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [140, 149], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [150, 202], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [203, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/jb-lighting/varyscan-p7.json b/fixtures/jb-lighting/varyscan-p7.json index bce43d44a9..d048565eba 100644 --- a/fixtures/jb-lighting/varyscan-p7.json +++ b/fixtures/jb-lighting/varyscan-p7.json @@ -30,6 +30,119 @@ "tiltMax": 280 } }, + "wheels": { + "Gobo Wheel 1": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Gobo Wheel 2": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + }, + { + "type": "Color", + "name": "Dark Blue", + "colors": ["#0000aa"] + }, + { + "type": "Color", + "name": "Turquoise", + "colors": ["#40e0d0"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ff88cc"] + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#ffd2b0"] + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -432,64 +545,63 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 191], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [192, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -500,39 +612,38 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 255], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 } ] }, @@ -542,23 +653,27 @@ "capabilities": [ { "dmxRange": [0, 191], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "angleStart": "0deg", "angleEnd": "540deg" }, { "dmxRange": [192, 222], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "fast CW" }, { "dmxRange": [223, 223], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "stop" }, { "dmxRange": [224, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "fast CCW" } ] @@ -568,143 +683,103 @@ "capabilities": [ { "dmxRange": [0, 1], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [2, 3], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#ff0000"], - "comment": "Split Open / Red" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [4, 5], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [6, 7], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ff0000", "#ffff00"], - "comment": "Split Red / Yellow" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [8, 9], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [10, 11], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#ffff00", "#ff00ff"], - "comment": "Split Yellow / Magenta" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [12, 13], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [14, 15], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#ff00ff", "#00ff00"], - "comment": "Split Magenta / Green" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [16, 17], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [18, 19], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#00ff00", "#ffbf00"], - "comment": "Split Green / Amber" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [20, 21], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [22, 23], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#ffbf00", "#0000aa"], - "comment": "Split Amber / Dark Blue" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [24, 25], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#0000aa"], - "comment": "Dark Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [26, 27], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#0000aa", "#40e0d0"], - "comment": "Split Dark Blue / Turquoise" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [28, 29], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#40e0d0"], - "comment": "Turquoise" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [30, 31], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#40e0d0", "#ff88cc"], - "comment": "Split Turquoise / Pink" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [32, 33], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ff88cc"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [34, 35], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#ff88cc", "#ffd2b0"], - "comment": "Split Pink / CTO" + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [36, 37], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#ffd2b0"], - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [38, 39], - "type": "ColorWheelIndex", - "index": 9.5, - "colors": ["#ffd2b0", "#ffffff"], - "comment": "Split CTO / Open" + "type": "WheelSlot", + "slotNumber": 10.5 }, { "dmxRange": [40, 63], @@ -712,20 +787,20 @@ }, { "dmxRange": [64, 191], - "type": "ColorWheelRotation", - "comment": "Colors linear, beginning from white", + "type": "WheelRotation", "angleStart": "0deg", - "angleEnd": "360deg" + "angleEnd": "360deg", + "comment": "Colors linear, beginning from white" }, { "dmxRange": [192, 223], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [224, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/kam/gobotracer.json b/fixtures/kam/gobotracer.json index ad42f3dede..10f0fc17f8 100644 --- a/fixtures/kam/gobotracer.json +++ b/fixtures/kam/gobotracer.json @@ -27,6 +27,78 @@ "tiltMax": 230 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -50,119 +122,87 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 19], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [20, 29], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [30, 39], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 49], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [50, 59], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff00ff"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [60, 69], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [70, 79], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [80, 89], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#ff0000"], - "comment": "Split Open / Red" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [90, 99], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ff0000", "#00ff00"], - "comment": "Split Red / Green" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [100, 109], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#00ff00", "#0000ff"], - "comment": "Split Green / Blue" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [110, 119], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#0000ff", "#ffff00"], - "comment": "Split Blue / Yellow" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [120, 129], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#ffff00", "#ff00ff"], - "comment": "Split Yellow / Purple" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [130, 139], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#ff00ff", "#ffaa00"], - "comment": "Split Purple / Orange" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [140, 149], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#ffaa00", "#00ffff"], - "comment": "Split Orange / Cyan" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [150, 159], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#00ffff", "#ffffff"], - "comment": "Split Cyan / Open" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [160, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "comment": "Color scroll" @@ -173,57 +213,54 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 127], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 7, - "shakeAngle": "wide", - "comment": "Gobo 1 … Gobo 7", + "type": "WheelShake", + "slotNumberStart": 2, + "slotNumberEnd": 8, "helpWanted": "At which DMX values can which Gobos be selected?" }, { "dmxRange": [128, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/lightmaxx/dj-scan-led.json b/fixtures/lightmaxx/dj-scan-led.json index c8157be36e..f41f7a256e 100644 --- a/fixtures/lightmaxx/dj-scan-led.json +++ b/fixtures/lightmaxx/dj-scan-led.json @@ -22,6 +22,48 @@ "type": "Mirror" } }, + "wheels": { + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "defaultValue": "50%", @@ -116,134 +158,122 @@ "capabilities": [ { "dmxRange": [0, 8], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [9, 17], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [18, 26], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [27, 35], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [36, 44], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [45, 53], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [54, 62], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [63, 71], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [72, 80], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [81, 89], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [90, 98], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [99, 107], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [108, 116], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [117, 125], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [126, 134], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [135, 143], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [144, 152], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [153, 161], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [162, 170], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [171, 179], - "type": "GoboIndex", - "index": 8, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 9 }, { "dmxRange": [180, 188], - "type": "GoboIndex", - "index": 9, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 10 }, { "dmxRange": [189, 197], - "type": "GoboIndex", - "index": 10, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 11 }, { "dmxRange": [198, 206], - "type": "GoboIndex", - "index": 11, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 12 }, { "dmxRange": [207, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/lixada/mini-gobo-moving-head-light.json b/fixtures/lixada/mini-gobo-moving-head-light.json index 8c96b358d8..376e3dc190 100644 --- a/fixtures/lixada/mini-gobo-moving-head-light.json +++ b/fixtures/lixada/mini-gobo-moving-head-light.json @@ -40,6 +40,78 @@ "tiltMax": 180 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Pale Blue", + "colors": ["#88dddd"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Open" + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -61,27 +133,27 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 7, + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 8, "comment": "blue/pink/red/pale blue/yellow/green/orange/white", - "helpWanted": "Which color can be selected at which DMX values?" + "helpWanted": "Which color can be selected at which DMX values? Is the Color Wheel correct?" }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW", "helpWanted": "Is this counterclockwise or clockwise?" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "helpWanted": "Is this counterclockwise or clockwise?" @@ -92,36 +164,33 @@ "capabilities": [ { "dmxRange": [0, 63], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 7, - "comment": "Open … Gobo 7", + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 8, "helpWanted": "Which Gobo can be selected at which DMX values?" }, { "dmxRange": [64, 127], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 7, - "shakeAngle": "wide", - "comment": "Open … Gobo 7", + "type": "WheelShake", + "slotNumberStart": 1, + "slotNumberEnd": 8, "helpWanted": "Which Gobo can be selected at which DMX values?" }, { "dmxRange": [128, 189], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "helpWanted": "Is this counterclockwise or clockwise?" }, { "dmxRange": [190, 193], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "helpWanted": "Is this counterclockwise or clockwise?" diff --git a/fixtures/martin/mac-600.json b/fixtures/martin/mac-600.json index 429f1ddbbb..c23997bb9d 100644 --- a/fixtures/martin/mac-600.json +++ b/fixtures/martin/mac-600.json @@ -36,6 +36,27 @@ "tiltMax": 306 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + } + }, "availableChannels": { "Shutter / Strobe / Reset / Lamp": { "capabilities": [ @@ -147,68 +168,62 @@ "capabilities": [ { "dmxRange": [0, 40], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Color 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [41, 80], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Color 1 … Color 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [81, 120], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Color 2 … Color 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [121, 160], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Color 3 … Color 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [161, 165], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [166, 170], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [171, 175], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [176, 180], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [181, 185], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [186, 214], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [215, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/martin/mac-700-wash.json b/fixtures/martin/mac-700-wash.json index 4f20357a1f..f1964af4b7 100644 --- a/fixtures/martin/mac-700-wash.json +++ b/fixtures/martin/mac-700-wash.json @@ -36,6 +36,47 @@ "tiltMax": 246 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Blue 110" + }, + { + "type": "Color", + "name": "Green 206 IAD" + }, + { + "type": "Color", + "name": "Pink 312" + }, + { + "type": "Color", + "name": "Orange 306M" + }, + { + "type": "Color", + "name": "Half minus green" + }, + { + "type": "Color", + "name": "CTO 3200-4100K" + }, + { + "type": "Color", + "name": "UV" + }, + { + "type": "Color", + "name": "Red 308" + } + ] + } + }, "availableChannels": { "Shutter / Strobe": { "defaultValue": 0, @@ -286,193 +327,162 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 16], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Blue 110" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [17, 17], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Blue 110" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [18, 33], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Blue 110 … Green 206 IAD" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [34, 34], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Green 206 IAD" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [35, 50], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Green 206 IAD … Pink 312" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [51, 51], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Pink 312" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [52, 67], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Pink 312 … Orange 306M" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [68, 68], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Orange 306M" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [69, 84], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Orange 306M … Half minus green" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [85, 85], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Half minus green" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [86, 101], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Half minus green … CTO 3200-4100K" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [102, 102], - "type": "ColorWheelIndex", - "index": 6, - "comment": "CTO 3200-4100K" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [103, 118], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "CTO 3200-4100K … UV" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [119, 119], - "type": "ColorWheelIndex", - "index": 7, - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [120, 135], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "UV … Red 308" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [136, 136], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Red 308" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [137, 152], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "comment": "Red 308 … Open" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [153, 153], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [154, 158], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Red 308" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [159, 163], - "type": "ColorWheelIndex", - "index": 7, - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [164, 168], - "type": "ColorWheelIndex", - "index": 6, - "comment": "CTO 3200-4100K" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [169, 173], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Half minus green" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [174, 178], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Orange 306M" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [179, 183], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Pink 312" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [184, 188], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Green 206 IAD" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [189, 193], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Blue 110" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [194, 198], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [199, 219], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [220, 240], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/martin/mac-axiom-hybrid.json b/fixtures/martin/mac-axiom-hybrid.json index cfea729671..ec06f91c4b 100644 --- a/fixtures/martin/mac-axiom-hybrid.json +++ b/fixtures/martin/mac-axiom-hybrid.json @@ -36,6 +36,211 @@ "tiltMax": 260 } }, + "wheels": { + "Color Wheel": { + "direction": "CCW", + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#71c9ed"] + }, + { + "type": "Color", + "name": "Light green", + "colors": ["#8ad088"] + }, + { + "type": "Color", + "name": "Half CTB", + "colors": ["#d4f1fb"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#cb6122"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#a035a0"] + }, + { + "type": "Color", + "name": "Full CTB", + "colors": ["#9bd2ef"] + }, + { + "type": "Color", + "name": "Yellow 2", + "colors": ["#f2e663"] + }, + { + "type": "Color", + "name": "Light blue", + "colors": ["#85d2f1"] + }, + { + "type": "Color", + "name": "Light red", + "colors": ["#be2b1f"] + }, + { + "type": "Color", + "name": "Lavender", + "colors": ["#5765b4"] + }, + { + "type": "Color", + "name": "Dark green", + "colors": ["#8cc783"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#ac87c3"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#aa47a3"] + }, + { + "type": "Color", + "name": "Yellow 1", + "colors": ["#ffde3f"] + }, + { + "type": "Color", + "name": "Blue 101", + "colors": ["#3b51aa"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ac241b"] + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Damped Wave" + }, + { + "type": "Gobo", + "name": "Luck Stakes" + }, + { + "type": "Gobo", + "name": "Bite Me" + }, + { + "type": "Gobo", + "name": "Laser Squares" + }, + { + "type": "Gobo", + "name": "Kite Surf" + }, + { + "type": "Gobo", + "name": "Dots in Space" + }, + { + "type": "Gobo", + "name": "Organic Delight" + }, + { + "type": "Gobo", + "name": "Slice It" + }, + { + "type": "Gobo", + "name": "Circles" + } + ] + }, + "Fixed Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Iris", + "openPercent": "75%" + }, + { + "type": "Iris", + "openPercent": "50%" + }, + { + "type": "Iris", + "openPercent": "25%" + }, + { + "type": "Iris", + "openPercent": "5%" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Frost" + }, + { + "type": "AnimationGoboStart" + }, + { + "type": "AnimationGoboEnd" + }, + { + "type": "Gobo", + "name": "Not used" + } + ] + } + }, "availableChannels": { "Strobe": { "defaultValue": 30, @@ -120,416 +325,295 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 8], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#71c9ed"], - "comment": "Open … Blue" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [9, 9], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#71c9ed"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [10, 17], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#71c9ed"], - "colorsEnd": ["#8ad088"], - "comment": "Blue … Light green" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [18, 18], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#8ad088"], - "comment": "Light green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [19, 26], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#8ad088"], - "colorsEnd": ["#d4f1fb"], - "comment": "Light green … Half CTB" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [27, 27], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#d4f1fb"], - "comment": "Half CTB" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [28, 35], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#d4f1fb"], - "colorsEnd": ["#cb6122"], - "comment": "Half CTB … Orange" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [36, 36], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#cb6122"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [37, 44], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#cb6122"], - "colorsEnd": ["#a035a0"], - "comment": "Orange … Magenta" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#a035a0"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [46, 53], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#a035a0"], - "colorsEnd": ["#9bd2ef"], - "comment": "Magenta … Full CTB" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [54, 54], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#9bd2ef"], - "comment": "Full CTB" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [55, 62], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#9bd2ef"], - "colorsEnd": ["#f2e663"], - "comment": "Full CTB … Yellow 2" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [63, 63], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#f2e663"], - "comment": "Yellow 2" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#f2e663"], - "colorsEnd": ["#85d2f1"], - "comment": "Yellow 2 … Light blue" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [72, 72], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#85d2f1"], - "comment": "Light blue" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [73, 80], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#85d2f1"], - "colorsEnd": ["#be2b1f"], - "comment": "Light blue … Light red" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [81, 81], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#be2b1f"], - "comment": "Light red" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [82, 89], - "type": "ColorWheelIndex", - "indexStart": 9, - "indexEnd": 10, - "colorsStart": ["#be2b1f"], - "colorsEnd": ["#5765b4"], - "comment": "Light red … Lavender" + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11 }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#5765b4"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [91, 98], - "type": "ColorWheelIndex", - "indexStart": 10, - "indexEnd": 11, - "colorsStart": ["#5765b4"], - "colorsEnd": ["#8cc783"], - "comment": "Lavender … Dark green" + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12 }, { "dmxRange": [99, 99], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#8cc783"], - "comment": "Dark green" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [100, 107], - "type": "ColorWheelIndex", - "indexStart": 11, - "indexEnd": 12, - "colorsStart": ["#8cc783"], - "colorsEnd": ["#ac87c3"], - "comment": "Dark green … Purple" + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13 }, { "dmxRange": [108, 108], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#ac87c3"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [109, 116], - "type": "ColorWheelIndex", - "indexStart": 12, - "indexEnd": 13, - "colorsStart": ["#ac87c3"], - "colorsEnd": ["#aa47a3"], - "comment": "Purple … Pink" + "type": "WheelSlot", + "slotNumberStart": 13, + "slotNumberEnd": 14 }, { "dmxRange": [117, 117], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#aa47a3"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [118, 125], - "type": "ColorWheelIndex", - "indexStart": 13, - "indexEnd": 14, - "colorsStart": ["#aa47a3"], - "colorsEnd": ["#ffde3f"], - "comment": "Pink … Yellow 1" + "type": "WheelSlot", + "slotNumberStart": 14, + "slotNumberEnd": 15 }, { "dmxRange": [126, 126], - "type": "ColorWheelIndex", - "index": 14, - "colors": ["#ffde3f"], - "comment": "Yellow 1" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [127, 134], - "type": "ColorWheelIndex", - "indexStart": 14, - "indexEnd": 15, - "colorsStart": ["#ffde3f"], - "colorsEnd": ["#3b51aa"], - "comment": "Yellow 1 … Blue 101" + "type": "WheelSlot", + "slotNumberStart": 15, + "slotNumberEnd": 16 }, { "dmxRange": [135, 135], - "type": "ColorWheelIndex", - "index": 15, - "colors": ["#3b51aa"], - "comment": "Blue 101" + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [136, 143], - "type": "ColorWheelIndex", - "indexStart": 15, - "indexEnd": 16, - "colorsStart": ["#3b51aa"], - "colorsEnd": ["#ac241b"], - "comment": "Blue 101 … Red" + "type": "WheelSlot", + "slotNumberStart": 16, + "slotNumberEnd": 17 }, { "dmxRange": [144, 144], - "type": "ColorWheelIndex", - "index": 16, - "colors": ["#ac241b"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [145, 152], - "type": "ColorWheelIndex", - "indexStart": 16, - "indexEnd": 0, - "colorsStart": ["#ac241b"], - "colorsEnd": ["#ffffff"], - "comment": "Red … Open" + "type": "WheelSlot", + "slotNumberStart": 17, + "slotNumberEnd": 1 }, { "dmxRange": [153, 162], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [163, 163], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#71c9ed"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [164, 164], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#8ad088"], - "comment": "Light green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [165, 165], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#d4f1fb"], - "comment": "Half CTB" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [166, 166], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#cb6122"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [167, 167], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#a035a0"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [168, 168], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#9bd2ef"], - "comment": "Full CTB" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [169, 169], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#f2e663"], - "comment": "Yellow 2" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [170, 170], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#85d2f1"], - "comment": "Light blue" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [171, 171], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#be2b1f"], - "comment": "Light red" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [172, 172], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#5765b4"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [173, 173], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#8cc783"], - "comment": "Dark green" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [174, 174], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#ac87c3"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [175, 175], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#aa47a3"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [176, 176], - "type": "ColorWheelIndex", - "index": 14, - "colors": ["#ffde3f"], - "comment": "Yellow 1" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [177, 177], - "type": "ColorWheelIndex", - "index": 15, - "colors": ["#3b51aa"], - "comment": "Blue 101" + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [178, 178], - "type": "ColorWheelIndex", - "index": 16, - "colors": ["#ac241b"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [179, 192], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [193, 214], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [215, 221], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [222, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -557,7 +641,8 @@ "fineChannelAliases": ["Gobo indexing angle fine"], "defaultValue": 32768, "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -568,29 +653,34 @@ "capabilities": [ { "dmxRange": [0, 600], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "0deg" }, { "dmxRange": [601, 32130], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [32131, 32895], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [32896, 64515], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [64516, 65535], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "90deg" } ] @@ -600,9 +690,8 @@ "capabilities": [ { "dmxRange": [0, 2], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -610,9 +699,9 @@ }, { "dmxRange": [3, 6], - "type": "GoboIndex", - "index": 1, - "comment": "Damped Wave (indexing)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -620,9 +709,9 @@ }, { "dmxRange": [7, 10], - "type": "GoboIndex", - "index": 2, - "comment": "Luck Stakes (indexing)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -630,9 +719,9 @@ }, { "dmxRange": [11, 14], - "type": "GoboIndex", - "index": 3, - "comment": "Bite Me (indexing)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -640,9 +729,9 @@ }, { "dmxRange": [15, 19], - "type": "GoboIndex", - "index": 4, - "comment": "Laser Squares (indexing)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -650,9 +739,9 @@ }, { "dmxRange": [20, 23], - "type": "GoboIndex", - "index": 5, - "comment": "Kite Surf (indexing)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -660,9 +749,9 @@ }, { "dmxRange": [24, 27], - "type": "GoboIndex", - "index": 6, - "comment": "Dots in Space (indexing)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -670,9 +759,9 @@ }, { "dmxRange": [28, 31], - "type": "GoboIndex", - "index": 7, - "comment": "Organic Delight (indexing)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -680,9 +769,9 @@ }, { "dmxRange": [32, 35], - "type": "GoboIndex", - "index": 8, - "comment": "Slice It (indexing)", + "type": "WheelSlot", + "slotNumber": 9, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -690,9 +779,9 @@ }, { "dmxRange": [36, 40], - "type": "GoboIndex", - "index": 9, - "comment": "Circles (indexing)", + "type": "WheelSlot", + "slotNumber": 10, + "comment": "indexing", "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -700,9 +789,9 @@ }, { "dmxRange": [41, 44], - "type": "GoboIndex", - "index": 1, - "comment": "Damped Wave (rotation)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -710,9 +799,9 @@ }, { "dmxRange": [45, 48], - "type": "GoboIndex", - "index": 2, - "comment": "Luck Stakes (rotation)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -720,9 +809,9 @@ }, { "dmxRange": [49, 52], - "type": "GoboIndex", - "index": 3, - "comment": "Bite Me (rotation)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -730,9 +819,9 @@ }, { "dmxRange": [53, 56], - "type": "GoboIndex", - "index": 4, - "comment": "Laser Squares (rotation)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -740,9 +829,9 @@ }, { "dmxRange": [57, 60], - "type": "GoboIndex", - "index": 5, - "comment": "Kite Surf (rotation)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -750,9 +839,9 @@ }, { "dmxRange": [61, 64], - "type": "GoboIndex", - "index": 6, - "comment": "Dots in Space (rotation)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -760,9 +849,9 @@ }, { "dmxRange": [65, 68], - "type": "GoboIndex", - "index": 7, - "comment": "Organic Delight (rotation)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -770,9 +859,9 @@ }, { "dmxRange": [69, 71], - "type": "GoboIndex", - "index": 8, - "comment": "Slice It (rotation)", + "type": "WheelSlot", + "slotNumber": 9, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -780,9 +869,9 @@ }, { "dmxRange": [72, 80], - "type": "GoboIndex", - "index": 9, - "comment": "Circles (rotation)", + "type": "WheelSlot", + "slotNumber": 10, + "comment": "rotation", "switchChannels": { "Gobo indexing angle / rotation": "Gobo rotation", "Gobo indexing angle / rotation fine": "Gobo rotation fine" @@ -790,9 +879,8 @@ }, { "dmxRange": [81, 90], - "type": "GoboIndex", - "index": 1, - "comment": "Damped Wave", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -804,9 +892,8 @@ }, { "dmxRange": [91, 100], - "type": "GoboIndex", - "index": 2, - "comment": "Luck Stakes", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -818,9 +905,8 @@ }, { "dmxRange": [101, 110], - "type": "GoboIndex", - "index": 3, - "comment": "Bite Me", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -832,9 +918,8 @@ }, { "dmxRange": [111, 120], - "type": "GoboIndex", - "index": 4, - "comment": "Laser Squares", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -846,9 +931,8 @@ }, { "dmxRange": [121, 130], - "type": "GoboIndex", - "index": 5, - "comment": "Kite Surf", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -860,9 +944,8 @@ }, { "dmxRange": [131, 140], - "type": "GoboIndex", - "index": 6, - "comment": "Dots in Space", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -874,9 +957,8 @@ }, { "dmxRange": [141, 150], - "type": "GoboIndex", - "index": 7, - "comment": "Organic Delight", + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -888,9 +970,8 @@ }, { "dmxRange": [151, 160], - "type": "GoboIndex", - "index": 8, - "comment": "Slice It", + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -902,9 +983,8 @@ }, { "dmxRange": [161, 170], - "type": "GoboIndex", - "index": 9, - "comment": "Circles", + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "25deg", @@ -916,9 +996,8 @@ }, { "dmxRange": [171, 200], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo indexing angle / rotation": "Gobo indexing angle", "Gobo indexing angle / rotation fine": "Gobo indexing angle fine" @@ -926,7 +1005,7 @@ }, { "dmxRange": [201, 228], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -936,7 +1015,7 @@ }, { "dmxRange": [229, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -950,150 +1029,132 @@ "capabilities": [ { "dmxRange": [0, 20], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [21, 30], - "type": "GoboIndex", - "index": 1, - "comment": "Iris 1" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [31, 40], - "type": "GoboIndex", - "index": 2, - "comment": "Iris 2" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [41, 50], - "type": "GoboIndex", - "index": 3, - "comment": "Iris 3" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [51, 60], - "type": "GoboIndex", - "index": 4, - "comment": "Pinspot" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 70], - "type": "GoboIndex", - "index": 5, - "comment": "1" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [71, 80], - "type": "GoboIndex", - "index": 6, - "comment": "2" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [81, 90], - "type": "GoboIndex", - "index": 7, - "comment": "3" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [91, 100], - "type": "GoboIndex", - "index": 8, - "comment": "4" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [101, 110], - "type": "GoboIndex", - "index": 9, - "comment": "5" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [111, 120], - "type": "GoboIndex", - "index": 10, - "comment": "6" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [121, 130], - "type": "GoboIndex", - "index": 11, - "comment": "7" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [131, 140], - "type": "GoboIndex", - "index": 12, - "comment": "8" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [141, 150], - "type": "GoboIndex", - "index": 13, - "comment": "9" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [151, 160], - "type": "GoboIndex", - "index": 14, - "comment": "10" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [161, 170], - "type": "GoboIndex", - "index": 15, - "comment": "11" + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [171, 180], - "type": "GoboIndex", - "index": 16, - "comment": "12" + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [181, 190], - "type": "GoboIndex", - "index": 17, - "comment": "Frost" + "type": "WheelSlot", + "slotNumber": 18 }, { "dmxRange": [191, 200], - "type": "GoboIndex", - "index": 18, - "comment": "Animation indexed" + "type": "WheelSlot", + "slotNumberStart": 19, + "slotNumberEnd": 20 }, { "dmxRange": [201, 201], - "type": "GoboIndex", - "index": 18, - "comment": "Animation slow" + "type": "WheelShake", + "slotNumber": 19.5, + "shakeSpeed": "slow" }, { "dmxRange": [202, 202], - "type": "GoboIndex", - "index": 18, - "comment": "Animation medium" + "type": "WheelShake", + "slotNumber": 19.5, + "shakeSpeed": "50%" }, { "dmxRange": [203, 203], - "type": "GoboIndex", - "index": 18, - "comment": "Animation fast" + "type": "WheelShake", + "slotNumber": 19.5, + "shakeSpeed": "fast" }, { "dmxRange": [204, 220], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [221, 226], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [227, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/martin/mac-viper-airfx.json b/fixtures/martin/mac-viper-airfx.json index 316ecdd43e..bbc06896a1 100644 --- a/fixtures/martin/mac-viper-airfx.json +++ b/fixtures/martin/mac-viper-airfx.json @@ -48,6 +48,86 @@ ] ] }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + }, + "Aerial Effects Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Strobe / Shutter": { "defaultValue": 30, @@ -123,165 +203,151 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Color 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Color 1 … Color 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Color 2 … Color 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Color 3 … Color 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Color 4 … Color 5" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Color 5 … Color 6" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Color 6 … Color 7" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Color 7 … Open" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 120], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [121, 125], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [126, 130], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [131, 135], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [136, 140], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [141, 145], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [146, 150], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [151, 155], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [156, 160], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [161, 200], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [201, 203], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [204, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -309,7 +375,8 @@ "fineChannelAliases": ["Aerial effects wheel: gobo indexing fine"], "defaultValue": 32768, "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "angleStart": "-197.5deg", "angleEnd": "197.5deg" } @@ -319,29 +386,34 @@ "capabilities": [ { "dmxRange": [0, 600], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "angle": "0deg" }, { "dmxRange": [601, 32130], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [32131, 32895], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "speed": "stop" }, { "dmxRange": [32896, 64515], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [64516, 65535], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Aerial Effects Wheel", "angle": "90deg" } ] @@ -351,9 +423,9 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 1, "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -361,9 +433,10 @@ }, { "dmxRange": [10, 14], - "type": "GoboIndex", - "index": 1, - "comment": "1 (Indexed)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 2, + "comment": "Indexed", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -371,9 +444,10 @@ }, { "dmxRange": [15, 19], - "type": "GoboIndex", - "index": 2, - "comment": "2 (Indexed)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 3, + "comment": "Indexed", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -381,9 +455,10 @@ }, { "dmxRange": [20, 24], - "type": "GoboIndex", - "index": 3, - "comment": "3 (Indexed)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 4, + "comment": "Indexed", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -391,9 +466,10 @@ }, { "dmxRange": [25, 29], - "type": "GoboIndex", - "index": 4, - "comment": "4 (Indexed)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 5, + "comment": "Indexed", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -401,9 +477,10 @@ }, { "dmxRange": [30, 34], - "type": "GoboIndex", - "index": 5, - "comment": "5 (Indexed)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 6, + "comment": "Indexed", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo indexing", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo indexing fine" @@ -411,9 +488,10 @@ }, { "dmxRange": [35, 39], - "type": "GoboIndex", - "index": 1, - "comment": "1 (Continuous Rotation)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 2, + "comment": "Continuous Rotation", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo rotation", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo rotation fine" @@ -421,9 +499,10 @@ }, { "dmxRange": [40, 44], - "type": "GoboIndex", - "index": 2, - "comment": "2 (Continuous Rotation)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 3, + "comment": "Continuous Rotation", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo rotation", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo rotation fine" @@ -431,9 +510,10 @@ }, { "dmxRange": [45, 49], - "type": "GoboIndex", - "index": 3, - "comment": "3 (Continuous Rotation)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 4, + "comment": "Continuous Rotation", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo rotation", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo rotation fine" @@ -441,9 +521,10 @@ }, { "dmxRange": [50, 54], - "type": "GoboIndex", - "index": 4, - "comment": "4 (Continuous Rotation)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 5, + "comment": "Continuous Rotation", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo rotation", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo rotation fine" @@ -451,9 +532,10 @@ }, { "dmxRange": [55, 59], - "type": "GoboIndex", - "index": 5, - "comment": "5 (Continuous Rotation)", + "type": "WheelSlot", + "wheel": "Aerial Effects Wheel", + "slotNumber": 6, + "comment": "Continuous Rotation", "switchChannels": { "Aerial effects wheel: gobo indexing / rotation": "Aerial effects wheel: gobo rotation", "Aerial effects wheel: gobo indexing / rotation fine": "Aerial effects wheel: gobo rotation fine" @@ -461,8 +543,9 @@ }, { "dmxRange": [60, 89], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "wheel": "Aerial Effects Wheel", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "360deg", @@ -474,8 +557,9 @@ }, { "dmxRange": [90, 119], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "wheel": "Aerial Effects Wheel", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "360deg", @@ -487,8 +571,9 @@ }, { "dmxRange": [120, 149], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "wheel": "Aerial Effects Wheel", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "360deg", @@ -500,8 +585,9 @@ }, { "dmxRange": [150, 179], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "wheel": "Aerial Effects Wheel", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "360deg", @@ -513,8 +599,9 @@ }, { "dmxRange": [180, 209], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "wheel": "Aerial Effects Wheel", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "shakeAngleStart": "360deg", @@ -526,7 +613,8 @@ }, { "dmxRange": [210, 232], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Aerial Effects Wheel", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -536,7 +624,8 @@ }, { "dmxRange": [233, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Aerial Effects Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -550,162 +639,151 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Gobo 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Gobo 1 … Gobo 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "GoboIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Gobo 2 … Gobo 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "GoboIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Gobo 3 … Gobo 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "GoboIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Gobo 4 … Gobo 5" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "GoboIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Gobo 5 … Gobo 6" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "GoboIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Gobo 6 … Gobo 7" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "GoboIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Gobo 7 … Open" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 120], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [121, 125], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [126, 130], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [131, 135], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [136, 140], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [141, 145], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [146, 150], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [151, 155], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [156, 160], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [161, 200], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [201, 203], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [204, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/martin/mac-viper-performance.json b/fixtures/martin/mac-viper-performance.json index 3f0268b440..08098083ec 100644 --- a/fixtures/martin/mac-viper-performance.json +++ b/fixtures/martin/mac-viper-performance.json @@ -39,6 +39,83 @@ "tiltMax": 268 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#3857ad"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#61c15a"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#fb9955"] + }, + { + "type": "Color", + "name": "Rose", + "colors": ["#fbe7f1"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#da9ecc"] + }, + { + "type": "Color", + "name": "Deep Blue", + "colors": ["#994ba6"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#de4b48"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Animation Wheel": { + "slots": [ + { + "type": "AnimationGoboStart", + "name": "Ripple Waves" + }, + { + "type": "AnimationGoboEnd" + } + ] + } + }, "availableChannels": { "Strobe / Shutter": { "defaultValue": 30, @@ -111,209 +188,151 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#3857ad"], - "comment": "Open … Blue" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#3857ad"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#3857ad"], - "colorsEnd": ["#61c15a"], - "comment": "Blue … Green" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#61c15a"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#61c15a"], - "colorsEnd": ["#fb9955"], - "comment": "Green … Orange" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#fb9955"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#fb9955"], - "colorsEnd": ["#fbe7f1"], - "comment": "Orange … Rose" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#fbe7f1"], - "comment": "Rose" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#fbe7f1"], - "colorsEnd": ["#da9ecc"], - "comment": "Rose … Magenta" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#da9ecc"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#da9ecc"], - "colorsEnd": ["#994ba6"], - "comment": "Magenta … Deep Blue" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#994ba6"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#994ba6"], - "colorsEnd": ["#de4b48"], - "comment": "Deep Blue … Red" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#de4b48"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#de4b48"], - "colorsEnd": ["#ffffff"], - "comment": "Red … Open" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 160], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [161, 163], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#3857ad"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [164, 166], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#61c15a"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [167, 169], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#fb9955"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [170, 172], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#fbe7f1"], - "comment": "Rose" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [173, 175], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#da9ecc"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [176, 178], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#994ba6"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [179, 181], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#de4b48"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [182, 192], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [193, 214], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [215, 221], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [222, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -342,9 +361,8 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -352,9 +370,9 @@ }, { "dmxRange": [10, 14], - "type": "GoboIndex", - "index": 1, - "comment": "1 (indexed)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexed", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -362,9 +380,9 @@ }, { "dmxRange": [15, 19], - "type": "GoboIndex", - "index": 2, - "comment": "2 (indexed)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexed", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -372,9 +390,9 @@ }, { "dmxRange": [20, 24], - "type": "GoboIndex", - "index": 3, - "comment": "3 (indexed)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexed", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -382,9 +400,9 @@ }, { "dmxRange": [25, 29], - "type": "GoboIndex", - "index": 4, - "comment": "4 (indexed)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexed", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -392,9 +410,9 @@ }, { "dmxRange": [30, 34], - "type": "GoboIndex", - "index": 5, - "comment": "5 (indexed)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexed", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo indexing angle", "Gobo indexing angle / rotation speed fine": "Gobo indexing angle fine" @@ -402,9 +420,9 @@ }, { "dmxRange": [35, 39], - "type": "GoboIndex", - "index": 1, - "comment": "1 (continuous rotation)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "continuous rotation", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo rotation speed", "Gobo indexing angle / rotation speed fine": "Gobo rotation speed fine" @@ -412,9 +430,9 @@ }, { "dmxRange": [40, 44], - "type": "GoboIndex", - "index": 2, - "comment": "2 (continuous rotation)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "continuous rotation", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo rotation speed", "Gobo indexing angle / rotation speed fine": "Gobo rotation speed fine" @@ -422,9 +440,9 @@ }, { "dmxRange": [45, 49], - "type": "GoboIndex", - "index": 3, - "comment": "3 (continuous rotation)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "continuous rotation", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo rotation speed", "Gobo indexing angle / rotation speed fine": "Gobo rotation speed fine" @@ -432,9 +450,9 @@ }, { "dmxRange": [50, 54], - "type": "GoboIndex", - "index": 4, - "comment": "4 (continuous rotation)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "continuous rotation", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo rotation speed", "Gobo indexing angle / rotation speed fine": "Gobo rotation speed fine" @@ -442,9 +460,9 @@ }, { "dmxRange": [55, 59], - "type": "GoboIndex", - "index": 5, - "comment": "5 (continuous rotation)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "continuous rotation", "switchChannels": { "Gobo indexing angle / rotation speed": "Gobo rotation speed", "Gobo indexing angle / rotation speed fine": "Gobo rotation speed fine" @@ -452,8 +470,8 @@ }, { "dmxRange": [60, 89], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "switchChannels": { @@ -463,8 +481,8 @@ }, { "dmxRange": [90, 119], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "switchChannels": { @@ -474,8 +492,8 @@ }, { "dmxRange": [120, 149], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "switchChannels": { @@ -485,8 +503,8 @@ }, { "dmxRange": [150, 179], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "switchChannels": { @@ -496,8 +514,8 @@ }, { "dmxRange": [180, 209], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "switchChannels": { @@ -507,7 +525,7 @@ }, { "dmxRange": [210, 232], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -517,7 +535,7 @@ }, { "dmxRange": [233, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -531,7 +549,8 @@ "fineChannelAliases": ["Gobo indexing angle fine"], "defaultValue": 32768, "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "-197.5deg", "angleEnd": "197.5deg" } @@ -542,29 +561,34 @@ "capabilities": [ { "dmxRange": [0, 600], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angle": "0deg" }, { "dmxRange": [601, 32130], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [32131, 32895], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [32896, 64515], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [64516, 65535], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angle": "90deg" } ] @@ -582,7 +606,7 @@ }, { "dmxRange": [11, 20], - "type": "Maintenance", + "type": "Generic", "comment": "Indexed", "switchChannels": { "Animation Wheel Indexing/Rotation": "Animation Wheel Indexing" @@ -598,7 +622,7 @@ }, { "dmxRange": [31, 40], - "type": "Maintenance", + "type": "Generic", "comment": "Continuous rotation", "switchChannels": { "Animation Wheel Indexing/Rotation": "Animation Wheel Rotation" @@ -606,7 +630,7 @@ }, { "dmxRange": [41, 50], - "type": "Rotation", + "type": "WheelRotation", "angle": "0deg", "comment": "Position 1", "switchChannels": { @@ -615,7 +639,7 @@ }, { "dmxRange": [51, 60], - "type": "Rotation", + "type": "WheelRotation", "angle": "-7deg", "comment": "Position 2", "switchChannels": { @@ -624,7 +648,7 @@ }, { "dmxRange": [61, 70], - "type": "Rotation", + "type": "WheelRotation", "angle": "-14deg", "comment": "Position 3", "switchChannels": { @@ -633,7 +657,7 @@ }, { "dmxRange": [71, 80], - "type": "Rotation", + "type": "WheelRotation", "angle": "-21deg", "comment": "Position 4", "switchChannels": { @@ -642,7 +666,7 @@ }, { "dmxRange": [81, 90], - "type": "Rotation", + "type": "WheelRotation", "angle": "-28deg", "comment": "Position 5", "switchChannels": { @@ -651,7 +675,7 @@ }, { "dmxRange": [91, 100], - "type": "Rotation", + "type": "WheelRotation", "angle": "-35deg", "comment": "Position 6", "switchChannels": { @@ -660,7 +684,7 @@ }, { "dmxRange": [101, 110], - "type": "Rotation", + "type": "WheelRotation", "angle": "-42deg", "comment": "Position 7", "switchChannels": { @@ -680,7 +704,8 @@ "Animation Wheel Indexing": { "defaultValue": 127, "capability": { - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -690,29 +715,34 @@ "capabilities": [ { "dmxRange": [0, 2], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "angle": "0deg" }, { "dmxRange": [3, 126], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [127, 129], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "speed": "stop" }, { "dmxRange": [130, 253], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [254, 255], - "type": "Rotation", + "type": "WheelRotation", + "wheel": "Animation Wheel", "angle": "90deg" } ] diff --git a/fixtures/martin/mac-viper-wash.json b/fixtures/martin/mac-viper-wash.json index a716bcbb29..8eb825dd98 100644 --- a/fixtures/martin/mac-viper-wash.json +++ b/fixtures/martin/mac-viper-wash.json @@ -40,6 +40,36 @@ "tiltMax": 268 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + }, + { + "type": "Color" + } + ] + } + }, "availableChannels": { "Strobe / Shutter": { "capabilities": [ @@ -111,165 +141,151 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Color 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Color 1 … Color 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Color 2 … Color 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Color 3 … Color 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Color 4 … Color 5" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Color 5 … Color 6" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Color 6 … Color 7" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Color 7 … Open" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 120], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [121, 125], - "type": "ColorWheelIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [126, 130], - "type": "ColorWheelIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [131, 135], - "type": "ColorWheelIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [136, 140], - "type": "ColorWheelIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [141, 145], - "type": "ColorWheelIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [146, 150], - "type": "ColorWheelIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [151, 155], - "type": "ColorWheelIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [156, 160], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [161, 200], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [201, 203], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [204, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/martin/roboscan-812.json b/fixtures/martin/roboscan-812.json index 8b0d9a08b7..2a76be4994 100644 --- a/fixtures/martin/roboscan-812.json +++ b/fixtures/martin/roboscan-812.json @@ -31,6 +31,127 @@ "tiltMax": 83 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Closed" + }, + { + "type": "Open" + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ca1f7b"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffc0cb"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#90ee90"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Dark Blue", + "colors": ["#00008b"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Closed" + }, + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Dot" + }, + { + "type": "Gobo", + "name": "Line" + }, + { + "type": "Gobo", + "name": "Stars" + }, + { + "type": "Gobo", + "name": "Triangles" + }, + { + "type": "Gobo", + "name": "Star" + }, + { + "type": "Gobo", + "name": "Dots" + }, + { + "type": "Gobo", + "name": "Bells" + }, + { + "type": "Gobo", + "name": "Cone" + }, + { + "type": "Gobo", + "name": "Phone" + }, + { + "type": "Gobo", + "name": "Window" + }, + { + "type": "Gobo", + "name": "Triangle" + } + ] + } + }, "availableChannels": { "Strobe": { "defaultValue": 0, @@ -84,298 +205,212 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#000000"], - "comment": "Closed" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#000000"], - "colorsEnd": ["#ffffff"], - "comment": "Closed … Open", + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2, "menuClick": "center" }, { "dmxRange": [15, 15], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#ca1f7b"], - "comment": "Open … Magenta", + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3, "menuClick": "center" }, { "dmxRange": [30, 30], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ca1f7b"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#ca1f7b"], - "colorsEnd": ["#ffc0cb"], - "comment": "Magenta … Pink", + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4, "menuClick": "center" }, { "dmxRange": [45, 45], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#ffc0cb"], - "colorsEnd": ["#ff0000"], - "comment": "Pink … Red", + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5, "menuClick": "center" }, { "dmxRange": [60, 60], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#ff0000"], - "colorsEnd": ["#ff7f00"], - "comment": "Red … Orange", + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6, "menuClick": "center" }, { "dmxRange": [75, 75], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#ff7f00"], - "colorsEnd": ["#ffbf00"], - "comment": "Orange … Amber", + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7, "menuClick": "center" }, { "dmxRange": [90, 90], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#ffbf00"], - "colorsEnd": ["#ffff00"], - "comment": "Amber … Yellow", + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8, "menuClick": "center" }, { "dmxRange": [105, 105], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#ffff00"], - "colorsEnd": ["#90ee90"], - "comment": "Yellow … Light Green", + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9, "menuClick": "center" }, { "dmxRange": [120, 120], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#90ee90"], - "comment": "Light Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [121, 134], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#90ee90"], - "colorsEnd": ["#00ff00"], - "comment": "Light Green … Green", + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10, "menuClick": "center" }, { "dmxRange": [135, 135], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [136, 149], - "type": "ColorWheelIndex", - "indexStart": 9, - "indexEnd": 10, - "colorsStart": ["#00ff00"], - "colorsEnd": ["#00ffff"], - "comment": "Green … Cyan", + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11, "menuClick": "center" }, { "dmxRange": [150, 150], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [151, 164], - "type": "ColorWheelIndex", - "indexStart": 10, - "indexEnd": 11, - "colorsStart": ["#00ffff"], - "colorsEnd": ["#0000ff"], - "comment": "Cyan … Blue", + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12, "menuClick": "center" }, { "dmxRange": [165, 165], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [166, 179], - "type": "ColorWheelIndex", - "indexStart": 11, - "indexEnd": 12, - "colorsStart": ["#0000ff"], - "colorsEnd": ["#00008b"], - "comment": "Blue … Dark Blue", + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13, "menuClick": "center" }, { "dmxRange": [180, 184], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#00008b"], - "comment": "Dark Blue" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [185, 189], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [190, 194], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [195, 199], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [200, 204], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#90ee90"], - "comment": "Light Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [205, 209], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [210, 214], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [215, 219], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [220, 224], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [225, 229], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [230, 234], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ca1f7b"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [235, 239], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [240, 255], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#000000"], - "comment": "Closed" + "type": "WheelSlot", + "slotNumber": 1 } ] }, @@ -383,237 +418,200 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboIndex", - "index": 0, - "comment": "Closed" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 14], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Closed … Open" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [15, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 29], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Open … Gobo Dot" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [30, 30], - "type": "GoboIndex", - "index": 2, - "comment": "Dot" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [31, 44], - "type": "GoboIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Gobo Dot … Gobo Line" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [45, 45], - "type": "GoboIndex", - "index": 3, - "comment": "Line" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [46, 59], - "type": "GoboIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Gobo Line … Gobo Stars" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [60, 60], - "type": "GoboIndex", - "index": 4, - "comment": "Stars" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [61, 74], - "type": "GoboIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Gobo Stars … Gobo Triangles" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [75, 75], - "type": "GoboIndex", - "index": 5, - "comment": "Triangles" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [76, 89], - "type": "GoboIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Gobo Triangles … Gobo Star" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [90, 90], - "type": "GoboIndex", - "index": 6, - "comment": "Star" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [91, 104], - "type": "GoboIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Gobo Star … Gobo Dots" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [105, 105], - "type": "GoboIndex", - "index": 7, - "comment": "Dots" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [106, 119], - "type": "GoboIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Gobo Dots … Gobo Bells" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 120], - "type": "GoboIndex", - "index": 8, - "comment": "Bells" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [121, 134], - "type": "GoboIndex", - "indexStart": 8, - "indexEnd": 9, - "comment": "Gobo Bells … Gobo Cone" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [135, 135], - "type": "GoboIndex", - "index": 9, - "comment": "Cone" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [136, 149], - "type": "GoboIndex", - "indexStart": 9, - "indexEnd": 10, - "comment": "Gobo Cone … Gobo Phone" + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11 }, { "dmxRange": [150, 150], - "type": "GoboIndex", - "index": 10, - "comment": "Phone" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [151, 164], - "type": "GoboIndex", - "indexStart": 10, - "indexEnd": 11, - "comment": "Gobo Phone … Gobo Window" + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12 }, { "dmxRange": [165, 165], - "type": "GoboIndex", - "index": 11, - "comment": "Window" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [166, 179], - "type": "GoboIndex", - "indexStart": 11, - "indexEnd": 12, - "comment": "Gobo Window … Gobo Triangle" + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13 }, { "dmxRange": [180, 184], - "type": "GoboIndex", - "index": 12, - "comment": "Triangle" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [185, 189], - "type": "GoboIndex", - "index": 11, - "comment": "Window" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [190, 194], - "type": "GoboIndex", - "index": 10, - "comment": "Phone" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [195, 199], - "type": "GoboIndex", - "index": 9, - "comment": "Cone" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [200, 204], - "type": "GoboIndex", - "index": 8, - "comment": "Bells" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [205, 209], - "type": "GoboIndex", - "index": 7, - "comment": "Dots" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [210, 214], - "type": "GoboIndex", - "index": 6, - "comment": "Star" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [215, 219], - "type": "GoboIndex", - "index": 5, - "comment": "Triangles" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [220, 224], - "type": "GoboIndex", - "index": 4, - "comment": "Stars" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [225, 229], - "type": "GoboIndex", - "index": 3, - "comment": "Line" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [230, 234], - "type": "GoboIndex", - "index": 2, - "comment": "Dot" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [235, 239], - "type": "GoboIndex", - "index": 1, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [240, 255], - "type": "GoboIndex", - "index": 0, - "comment": "Closed" + "type": "WheelSlot", + "slotNumber": 1 } ] }, diff --git a/fixtures/martin/rush-mh-3-beam.json b/fixtures/martin/rush-mh-3-beam.json index 67a77531bd..281d663e69 100644 --- a/fixtures/martin/rush-mh-3-beam.json +++ b/fixtures/martin/rush-mh-3-beam.json @@ -36,6 +36,143 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Turquoise", + "colors": ["#40e0d0"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#00aaff"] + }, + { + "type": "Color", + "name": "Light Pink", + "colors": ["#e0b0ff"] + }, + { + "type": "Color", + "name": "Yellow Green", + "colors": ["#ddff00"] + }, + { + "type": "Color", + "name": "Dark Pink", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Light Yellow", + "colors": ["#ffff99"] + }, + { + "type": "Color", + "name": "Off White", + "colors": ["#ffffff"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#00aaff"] + }, + { + "type": "Color", + "name": "Dark Blue", + "colors": ["#0000aa"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -352,235 +489,175 @@ "capabilities": [ { "dmxRange": [0, 2], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [3, 4], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#ff0000"], - "comment": "Split Open / Red" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [5, 6], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [7, 8], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#ff0000", "#ffff00"], - "comment": "Split Red / Yellow" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [9, 10], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [11, 12], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#ffff00", "#0000ff"], - "comment": "Split Yellow / Blue" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [13, 14], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [15, 16], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#0000ff", "#40e0d0"], - "comment": "Split Blue / Turquoise" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [17, 18], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#40e0d0"], - "comment": "Turquoise" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [19, 21], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#40e0d0", "#00ff00"], - "comment": "Split Turquoise / Green" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [22, 23], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [24, 25], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#00ff00", "#00aaff"], - "comment": "Split Green / Light Blue" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [26, 27], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#00aaff"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [28, 29], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#00aaff", "#e0b0ff"], - "comment": "Split Light Blue / Light Pink" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [30, 31], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#e0b0ff"], - "comment": "Light Pink" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [32, 33], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#e0b0ff", "#ddff00"], - "comment": "Split Light Pink / Yellow Green" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [34, 35], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ddff00"], - "comment": "Yellow Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [36, 37], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#ddff00", "#ff00ff"], - "comment": "Split Yellow Green / Dark Pink" + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [38, 39], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#ff00ff"], - "comment": "Dark Pink" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [40, 42], - "type": "ColorWheelIndex", - "index": 9.5, - "colors": ["#ff00ff", "#0000ff"], - "comment": "Split Dark Pink / Blue" + "type": "WheelSlot", + "slotNumber": 10.5 }, { "dmxRange": [43, 44], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [45, 46], - "type": "ColorWheelIndex", - "index": 10.5, - "colors": ["#0000ff", "#ffff99"], - "comment": "Split Blue / Light Yellow" + "type": "WheelSlot", + "slotNumber": 11.5 }, { "dmxRange": [47, 48], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#ffff99"], - "comment": "Light Yellow" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [49, 50], - "type": "ColorWheelIndex", - "index": 11.5, - "colors": ["#ffff99", "#ffffff"], - "comment": "Split Light Yellow / Off White" + "type": "WheelSlot", + "slotNumber": 12.5 }, { "dmxRange": [51, 52], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#ffffff"], - "comment": "Off White", + "type": "WheelSlot", + "slotNumber": 13, "helpWanted": "What color is \"Off White\"?" }, { "dmxRange": [53, 54], - "type": "ColorWheelIndex", - "index": 12.5, - "colors": ["#ffffff", "#00aaff"], - "comment": "Split Off White / Light Blue" + "type": "WheelSlot", + "slotNumber": 13.5 }, { "dmxRange": [55, 56], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#00aaff"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [57, 58], - "type": "ColorWheelIndex", - "index": 13.5, - "colors": ["#00aaff", "#0000aa"], - "comment": "Split Light Blue / Dark Blue" + "type": "WheelSlot", + "slotNumber": 14.5 }, { "dmxRange": [59, 60], - "type": "ColorWheelIndex", - "index": 14, - "colors": ["#0000aa"], - "comment": "Dark Blue" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [61, 63], - "type": "ColorWheelIndex", - "index": 14.5, - "colors": ["#0000aa", "#ffffff"], - "comment": "Split Dark Blue / Open" + "type": "WheelSlot", + "slotNumber": 15.5 }, { "dmxRange": [64, 127], - "type": "ColorWheelRotation", + "type": "WheelRotation", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 189], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [190, 193], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -590,218 +667,198 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [4, 6], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [7, 9], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [10, 12], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [13, 15], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [16, 18], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [19, 21], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [22, 24], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [25, 27], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [28, 30], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [31, 33], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [34, 36], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [37, 39], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [40, 42], - "type": "GoboIndex", - "index": 13 + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [43, 45], - "type": "GoboIndex", - "index": 14 + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [46, 48], - "type": "GoboIndex", - "index": 15 + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [49, 51], - "type": "GoboIndex", - "index": 16 + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [52, 55], - "type": "GoboIndex", - "index": 17 + "type": "WheelSlot", + "slotNumber": 18 }, { "dmxRange": [56, 59], - "type": "GoboIndex", - "index": 0, - "shakeAngle": "wide", - "comment": "Open" + "type": "WheelShake", + "slotNumber": 1 }, { "dmxRange": [60, 63], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [64, 67], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [68, 71], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [72, 75], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [76, 79], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [80, 83], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [84, 87], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [88, 91], - "type": "GoboIndex", - "index": 8, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 9 }, { "dmxRange": [92, 95], - "type": "GoboIndex", - "index": 9, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 10 }, { "dmxRange": [96, 99], - "type": "GoboIndex", - "index": 10, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 11 }, { "dmxRange": [100, 103], - "type": "GoboIndex", - "index": 11, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 12 }, { "dmxRange": [104, 107], - "type": "GoboIndex", - "index": 12, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 13 }, { "dmxRange": [108, 111], - "type": "GoboIndex", - "index": 13, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 14 }, { "dmxRange": [112, 115], - "type": "GoboIndex", - "index": 14, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 15 }, { "dmxRange": [116, 119], - "type": "GoboIndex", - "index": 15, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 16 }, { "dmxRange": [120, 123], - "type": "GoboIndex", - "index": 16, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 17 }, { "dmxRange": [124, 127], - "type": "GoboIndex", - "index": 17, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 18 }, { "dmxRange": [128, 189], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" }, { "dmxRange": [190, 193], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [194, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/martin/rush-mh-7-hybrid.json b/fixtures/martin/rush-mh-7-hybrid.json index 481ae3f760..e848db0aae 100644 --- a/fixtures/martin/rush-mh-7-hybrid.json +++ b/fixtures/martin/rush-mh-7-hybrid.json @@ -34,6 +34,171 @@ "tiltMax": 250 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffaaff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffaa00"] + }, + { + "type": "Color", + "name": "Aqua", + "colors": ["#99ddff"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#aa00ff"] + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#ffcc99"] + }, + { + "type": "Color", + "name": "CTB", + "colors": ["#88bbdd"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#a996ff"] + } + ] + }, + "Rotating Gobo Wheel": { + "direction": "CCW", + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Damped Wave" + }, + { + "type": "Gobo", + "name": "Luck Stakes" + }, + { + "type": "Gobo", + "name": "Bite Me" + }, + { + "type": "Gobo", + "name": "Laser Squares" + }, + { + "type": "Gobo", + "name": "Kite Surf" + }, + { + "type": "Gobo", + "name": "Dots in Space" + }, + { + "type": "Gobo", + "name": "Organic Delight" + }, + { + "type": "Gobo", + "name": "Slice It" + } + ] + }, + "Fixed Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Iris", + "openPercent": "75%" + }, + { + "type": "Iris", + "openPercent": "60%" + }, + { + "type": "Iris", + "openPercent": "40%" + }, + { + "type": "Iris", + "openPercent": "20%" + }, + { + "type": "Iris", + "openPercent": "5%" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Dimmer": { "fineChannelAliases": ["Dimmer fine"], @@ -95,354 +260,256 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 11], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#ff0000"], - "comment": "Open … Red", + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2, "menuClick": "center" }, { "dmxRange": [12, 12], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [13, 22], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#ff0000"], - "colorsEnd": ["#0000ff"], - "comment": "Red … Blue", + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3, "menuClick": "center" }, { "dmxRange": [23, 23], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 32], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#0000ff"], - "colorsEnd": ["#00ff00"], - "comment": "Blue … Green", + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4, "menuClick": "center" }, { "dmxRange": [33, 33], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [34, 42], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#00ff00"], - "colorsEnd": ["#ff00ff"], - "comment": "Green … Magenta", + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5, "menuClick": "center" }, { "dmxRange": [43, 43], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [44, 52], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#ff00ff"], - "colorsEnd": ["#ffff00"], - "comment": "Magenta … Yellow", + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6, "menuClick": "center" }, { "dmxRange": [53, 53], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [54, 62], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#ffff00"], - "colorsEnd": ["#00ffff"], - "comment": "Yellow … Light Blue", + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7, "menuClick": "center" }, { "dmxRange": [63, 63], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#00ffff"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [64, 73], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#00ffff"], - "colorsEnd": ["#ffaaff"], - "comment": "Light Blue … Pink", + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8, "menuClick": "center" }, { "dmxRange": [74, 74], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffaaff"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [75, 84], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#ffaaff"], - "colorsEnd": ["#ffaa00"], - "comment": "Pink … Orange", + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9, "menuClick": "center" }, { "dmxRange": [85, 85], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [86, 95], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#ffaa00"], - "colorsEnd": ["#99ddff"], - "comment": "Orange … Aqua", + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10, "menuClick": "center" }, { "dmxRange": [96, 96], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#99ddff"], - "comment": "Aqua" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [97, 105], - "type": "ColorWheelIndex", - "indexStart": 9, - "indexEnd": 10, - "colorsStart": ["#99ddff"], - "colorsEnd": ["#aa00ff"], - "comment": "Aqua … Purple", + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11, "menuClick": "center" }, { "dmxRange": [106, 106], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#aa00ff"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [107, 114], - "type": "ColorWheelIndex", - "indexStart": 10, - "indexEnd": 11, - "colorsStart": ["#aa00ff"], - "colorsEnd": ["#ffcc99"], - "comment": "Purple … CTO", + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12, "menuClick": "center" }, { "dmxRange": [115, 115], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#ffcc99"], - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [116, 124], - "type": "ColorWheelIndex", - "indexStart": 11, - "indexEnd": 12, - "colorsStart": ["#ffcc99"], - "colorsEnd": ["#88bbdd"], - "comment": "CTO … CTB", + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13, "menuClick": "center" }, { "dmxRange": [125, 125], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#88bbdd"], - "comment": "CTB" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [126, 136], - "type": "ColorWheelIndex", - "indexStart": 12, - "indexEnd": 13, - "colorsStart": ["#88bbdd"], - "colorsEnd": ["#a996ff"], - "comment": "CTB … UV", + "type": "WheelSlot", + "slotNumberStart": 13, + "slotNumberEnd": 14, "menuClick": "center" }, { "dmxRange": [137, 137], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#a996ff"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [138, 146], - "type": "ColorWheelIndex", - "indexStart": 13, - "indexEnd": 14, - "colorsStart": ["#a996ff"], - "colorsEnd": ["#ffffff"], - "comment": "UV … Open", + "type": "WheelSlot", + "slotNumberStart": 14, + "slotNumberEnd": 15, "menuClick": "center" }, { "dmxRange": [147, 147], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [148, 151], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [152, 155], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [156, 159], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [160, 163], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [164, 167], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [168, 171], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#00ffff"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [172, 175], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffaaff"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [176, 179], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#ffaa00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [180, 183], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#99ddff"], - "comment": "Aqua" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [184, 187], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#aa00ff"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [188, 191], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#ffcc99"], - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [192, 195], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#88bbdd"], - "comment": "CTB" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [196, 199], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#a996ff"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [200, 220], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [221, 222], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [223, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -479,9 +546,8 @@ }, { "dmxRange": [12, 23], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -489,9 +555,9 @@ }, { "dmxRange": [24, 29], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo Damped Wave (indexed)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -499,9 +565,9 @@ }, { "dmxRange": [30, 35], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo Luck Stakes (indexed)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -509,9 +575,9 @@ }, { "dmxRange": [36, 41], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo Bite Me (indexed)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -519,9 +585,9 @@ }, { "dmxRange": [42, 47], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo Laser Squares (indexed)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -529,9 +595,9 @@ }, { "dmxRange": [48, 53], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo Kite Surf (indexed)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -539,9 +605,9 @@ }, { "dmxRange": [54, 59], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo Dots in Space (indexed)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -549,9 +615,9 @@ }, { "dmxRange": [60, 65], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo Organic Delight (indexed)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -559,9 +625,9 @@ }, { "dmxRange": [66, 71], - "type": "GoboIndex", - "index": 8, - "comment": "Gobo Slice It (indexed)", + "type": "WheelSlot", + "slotNumber": 9, + "comment": "indexed", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Indexing", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Indexing fine" @@ -569,9 +635,9 @@ }, { "dmxRange": [72, 76], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo Damped Wave (rotating)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -579,9 +645,9 @@ }, { "dmxRange": [77, 81], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo Luck Stakes (rotating)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -589,9 +655,9 @@ }, { "dmxRange": [82, 86], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo Bite Me (rotating)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -599,9 +665,9 @@ }, { "dmxRange": [87, 91], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo Laser Squares (rotating)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -609,9 +675,9 @@ }, { "dmxRange": [92, 96], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo Kite Surf (rotating)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -619,9 +685,9 @@ }, { "dmxRange": [97, 101], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo Dots in Space (rotating)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -629,9 +695,9 @@ }, { "dmxRange": [102, 106], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo Organic Delight (rotating)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -639,9 +705,9 @@ }, { "dmxRange": [107, 111], - "type": "GoboIndex", - "index": 8, - "comment": "Gobo Slice It (rotating)", + "type": "WheelSlot", + "slotNumber": 9, + "comment": "rotating", "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -649,10 +715,8 @@ }, { "dmxRange": [112, 121], - "type": "GoboIndex", - "index": 1, - "comment": "Damped Wave", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 2, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -660,10 +724,8 @@ }, { "dmxRange": [122, 131], - "type": "GoboIndex", - "index": 2, - "comment": "Luck Stakes", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 3, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -671,10 +733,8 @@ }, { "dmxRange": [132, 141], - "type": "GoboIndex", - "index": 3, - "comment": "Bite Me", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 4, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -682,10 +742,8 @@ }, { "dmxRange": [142, 151], - "type": "GoboIndex", - "index": 4, - "comment": "Laser Squares", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 5, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -693,10 +751,8 @@ }, { "dmxRange": [152, 161], - "type": "GoboIndex", - "index": 5, - "comment": "Kite Surf", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 6, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -704,10 +760,8 @@ }, { "dmxRange": [162, 171], - "type": "GoboIndex", - "index": 6, - "comment": "Dots in Space", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 7, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -715,10 +769,8 @@ }, { "dmxRange": [172, 181], - "type": "GoboIndex", - "index": 7, - "comment": "Organic Delight", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 8, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -726,10 +778,8 @@ }, { "dmxRange": [182, 191], - "type": "GoboIndex", - "index": 8, - "comment": "Slice It", - "shakeAngle": "wide", + "type": "WheelShake", + "slotNumber": 9, "switchChannels": { "Rotating Gobo Indexing/Speed": "Rotating Gobo Speed", "Rotating Gobo Indexing/Speed fine": "Rotating Gobo Speed fine" @@ -737,7 +787,7 @@ }, { "dmxRange": [192, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -747,7 +797,7 @@ }, { "dmxRange": [224, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -760,7 +810,8 @@ "Rotating Gobo Indexing": { "fineChannelAliases": ["Rotating Gobo Indexing fine"], "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -771,29 +822,34 @@ "capabilities": [ { "dmxRange": [0, 31], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "0deg" }, { "dmxRange": [32, 93], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [94, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [128, 189], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, { "dmxRange": [190, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angle": "90deg" } ] @@ -802,277 +858,236 @@ "capabilities": [ { "dmxRange": [0, 2], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [3, 5], - "type": "GoboIndex", - "index": 1, - "comment": "Iris 1 (widest)" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [6, 8], - "type": "GoboIndex", - "index": 2, - "comment": "Iris 2" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [9, 11], - "type": "GoboIndex", - "index": 3, - "comment": "Iris 3" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [12, 14], - "type": "GoboIndex", - "index": 4, - "comment": "Iris 4" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [15, 17], - "type": "GoboIndex", - "index": 5, - "comment": "Iris 5 (narrowest)" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [18, 20], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 1" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [21, 23], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 2" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [24, 26], - "type": "GoboIndex", - "index": 8, - "comment": "Gobo 3" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [27, 29], - "type": "GoboIndex", - "index": 9, - "comment": "Gobo 4" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [30, 32], - "type": "GoboIndex", - "index": 10, - "comment": "Gobo 5" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [33, 35], - "type": "GoboIndex", - "index": 11, - "comment": "Gobo 6" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [36, 38], - "type": "GoboIndex", - "index": 12, - "comment": "Gobo 7" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [39, 41], - "type": "GoboIndex", - "index": 13, - "comment": "Gobo 8" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [42, 42], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [43, 53], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Iris 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [54, 54], - "type": "GoboIndex", - "index": 1, - "comment": "Iris 1" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [55, 64], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Iris 1 … Iris 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [65, 65], - "type": "GoboIndex", - "index": 2, - "comment": "Iris 2" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [66, 76], - "type": "GoboIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Iris 2 … Iris 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [77, 77], - "type": "GoboIndex", - "index": 3, - "comment": "Iris 3" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [78, 88], - "type": "GoboIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Iris 3 … Iris 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [89, 89], - "type": "GoboIndex", - "index": 4, - "comment": "Iris 4" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [90, 100], - "type": "GoboIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Iris 4 … Iris 5" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [101, 101], - "type": "GoboIndex", - "index": 5, - "comment": "Iris 5" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [102, 112], - "type": "GoboIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Iris 5 … Gobo 1" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [113, 113], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 1" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [114, 123], - "type": "GoboIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Gobo 1 … Gobo 2" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [124, 124], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 2" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [125, 135], - "type": "GoboIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Gobo 2 … Gobo 3" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [136, 136], - "type": "GoboIndex", - "index": 8, - "comment": "Gobo 3" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [137, 147], - "type": "GoboIndex", - "indexStart": 8, - "indexEnd": 9, - "comment": "Gobo 3 … Gobo 4" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [148, 148], - "type": "GoboIndex", - "index": 9, - "comment": "Gobo 4" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [149, 159], - "type": "GoboIndex", - "indexStart": 9, - "indexEnd": 10, - "comment": "Gobo 4 … Gobo 5" + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11 }, { "dmxRange": [160, 160], - "type": "GoboIndex", - "index": 10, - "comment": "Gobo 5" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [161, 170], - "type": "GoboIndex", - "indexStart": 10, - "indexEnd": 11, - "comment": "Gobo 5 … Gobo 6" + "type": "WheelSlot", + "slotNumberStart": 11, + "slotNumberEnd": 12 }, { "dmxRange": [171, 171], - "type": "GoboIndex", - "index": 11, - "comment": "Gobo 6" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [172, 182], - "type": "GoboIndex", - "indexStart": 11, - "indexEnd": 12, - "comment": "Gobo 6 … Gobo 7" + "type": "WheelSlot", + "slotNumberStart": 12, + "slotNumberEnd": 13 }, { "dmxRange": [183, 183], - "type": "GoboIndex", - "index": 12, - "comment": "Gobo 7" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [184, 194], - "type": "GoboIndex", - "indexStart": 12, - "indexEnd": 13, - "comment": "Gobo 7 … Gobo 8" + "type": "WheelSlot", + "slotNumberStart": 13, + "slotNumberEnd": 14 }, { "dmxRange": [195, 195], - "type": "GoboIndex", - "index": 13, - "comment": "Gobo 8" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [196, 217], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [218, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [222, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/fixtures/nicols/pat-252.json b/fixtures/nicols/pat-252.json index fef1ed4ee0..8f6930fdd7 100644 --- a/fixtures/nicols/pat-252.json +++ b/fixtures/nicols/pat-252.json @@ -37,6 +37,119 @@ "tiltMax": 60 } }, + "wheels": { + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Green", + "colors": ["#58b848"] + }, + { + "type": "Color", + "name": "Orange 306", + "colors": ["#f46f34"] + }, + { + "type": "Color", + "name": "Light blue", + "colors": ["#95d8e0"] + }, + { + "type": "Color", + "name": "Y52-Yellow", + "colors": ["#e8ea7c"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ef332d"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#73479a"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#f097c0"] + }, + { + "type": "Color", + "name": "Light green", + "colors": ["#39b773"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#1857a7"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#e6e74d"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#a65a9d"] + } + ] + } + }, "availableChannels": { "Shutter": { "capabilities": [ @@ -71,7 +184,8 @@ }, { "dmxRange": [197, 255], - "type": "GoboShake" + "type": "WheelShake", + "wheel": "Gobo Wheel" } ] }, @@ -84,83 +198,82 @@ }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [72, 79], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [80, 87], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [88, 95], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [96, 103], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [104, 111], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [112, 119], - "type": "GoboIndex", - "index": 13 + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [120, 127], - "type": "GoboIndex", - "index": 14 + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [128, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } @@ -170,91 +283,67 @@ "capabilities": [ { "dmxRange": [0, 11], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [12, 22], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#58b848"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [23, 33], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#f46f34"], - "comment": "Orange 306" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [34, 44], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#95d8e0"], - "comment": "Light blue" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [45, 55], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#e8ea7c"], - "comment": "Y52-Yellow" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [56, 66], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ef332d"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [67, 77], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#73479a"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [78, 88], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#f097c0"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [89, 99], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#39b773"], - "comment": "Light green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [100, 110], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#1857a7"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [111, 121], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#e6e74d"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [122, 128], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#a65a9d"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [129, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" } diff --git a/fixtures/prolights/v700spot.json b/fixtures/prolights/v700spot.json index 3d4a9e9e8a..1c7f5e54e5 100644 --- a/fixtures/prolights/v700spot.json +++ b/fixtures/prolights/v700spot.json @@ -40,6 +40,126 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel 1": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#add8e6"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffc0cb"] + }, + { + "type": "Color", + "name": "UV Purple", + "colors": ["#e005fa"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#90ee90"] + }, + { + "type": "Color", + "name": "3200K", + "colors": ["#ffc076"] + }, + { + "type": "Color", + "name": "5600K", + "colors": ["#ffefe1"] + } + ] + }, + "Color Wheel 2": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ffa500"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Light Yellow", + "colors": ["#ffffe0"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + } + ] + }, + "Gobo Wheel 1": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Gobo Wheel 2": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -93,17 +213,17 @@ }, { "dmxRange": [132, 185], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 1", "shakeSpeedStart": "slow", - "shakeSpeedEnd": "fast", - "comment": "Gobo Wheel 1" + "shakeSpeedEnd": "fast" }, { "dmxRange": [186, 239], - "type": "GoboShake", + "type": "WheelShake", + "wheel": "Gobo Wheel 2", "shakeSpeedStart": "slow", - "shakeSpeedEnd": "fast", - "comment": "Gobo Wheel 2" + "shakeSpeedEnd": "fast" }, { "dmxRange": [240, 247], @@ -122,68 +242,54 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 18], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#add8e6"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [19, 27], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [28, 36], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#e005fa"], - "comment": "UV Purple" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [37, 45], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#90ee90"], - "comment": "Light Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [46, 54], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffc076"], - "comment": "3200K" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [55, 63], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffefe1"], - "comment": "5600K" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [64, 127], - "type": "ColorWheelRotation", + "type": "WheelRotation", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 191], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [192, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -193,68 +299,54 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [10, 18], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [19, 27], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [28, 36], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ffa500"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [37, 45], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff00ff"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [46, 54], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ffffe0"], - "comment": "Light Yellow" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [55, 63], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [64, 127], - "type": "ColorWheelRotation", + "type": "WheelRotation", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 167], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [168, 207], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -294,44 +386,43 @@ "capabilities": [ { "dmxRange": [0, 21], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [22, 42], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [43, 63], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [64, 84], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [85, 105], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [106, 127], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [128, 191], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [192, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -341,19 +432,22 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 191], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [192, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "fast CCW", "speedEnd": "slow CCW" } @@ -363,44 +457,43 @@ "capabilities": [ { "dmxRange": [0, 21], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [22, 42], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [43, 63], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [64, 84], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [85, 105], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [106, 127], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [128, 191], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [192, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" } diff --git a/fixtures/qtx/lux-ld30w.json b/fixtures/qtx/lux-ld30w.json index 31bf208df3..456388dd92 100644 --- a/fixtures/qtx/lux-ld30w.json +++ b/fixtures/qtx/lux-ld30w.json @@ -30,74 +30,127 @@ "type": "Head" } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7700"] + }, + { + "type": "Color", + "name": "Purple", + "colors": ["#ff00aa"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Color Wheel": { "capabilities": [ { "dmxRange": [0, 17], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [18, 33], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [34, 50], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [51, 67], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [68, 84], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [85, 101], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff7700"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [102, 107], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ff00aa"], - "comment": "Purple" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [108, 127], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [128, 192], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" }, { "dmxRange": [193, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -107,49 +160,48 @@ "capabilities": [ { "dmxRange": [0, 20], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [21, 41], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [42, 62], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [63, 83], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [84, 104], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [105, 119], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [120, 127], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [128, 192], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CCW", "speedEnd": "slow CCW" }, { "dmxRange": [193, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -159,18 +211,21 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [1, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [128, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/robe/colorspot-2500e-at.json b/fixtures/robe/colorspot-2500e-at.json index 9c5a9b85a8..eb6e8f5ce0 100644 --- a/fixtures/robe/colorspot-2500e-at.json +++ b/fixtures/robe/colorspot-2500e-at.json @@ -32,6 +32,108 @@ "tiltMax": 260 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Deep Red", + "colors": ["#dd0000"] + }, + { + "type": "Color", + "name": "Deep Blue", + "colors": ["#0000dd"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff9900"] + }, + { + "type": "Color", + "name": "White", + "colors": ["#fff6ed"], + "colorTemperature": "6000K" + }, + { + "type": "Color", + "name": "UV Filter", + "colors": ["#8800ff"] + } + ] + }, + "Gobo Wheel 1": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Rainbow Chips 15030012" + }, + { + "type": "Gobo", + "name": "Sun Man 15030013" + }, + { + "type": "Gobo", + "name": "Water Drops 15030014" + }, + { + "type": "Gobo", + "name": "Triangle Floating 15020123" + }, + { + "type": "Gobo", + "name": "Laser 15020124" + }, + { + "type": "Gobo", + "name": "Swirl Electric 15020125" + } + ] + }, + "Gobo Wheel 2": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Diamante Spot 15040020" + }, + { + "type": "Gobo", + "name": "Wheel 15020126" + }, + { + "type": "Gobo", + "name": "Space Tunel 15020127" + }, + { + "type": "Gobo", + "name": "Bubbles 1 15020128" + }, + { + "type": "Gobo", + "name": "12 Dots 15020129" + }, + { + "type": "Gobo", + "name": "Radial Dashes 15020130" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -270,181 +372,130 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 17], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#dd0000"], - "comment": "Open … Deep Red" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [18, 18], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#dd0000"], - "comment": "Deep Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [19, 36], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#dd0000"], - "colorsEnd": ["#0000dd"], - "comment": "Deep Red … Deep Blue" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [37, 37], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000dd"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [38, 54], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#0000dd"], - "colorsEnd": ["#00ff00"], - "comment": "Deep Blue … Green" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [55, 55], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [56, 72], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#00ff00"], - "colorsEnd": ["#ff9900"], - "comment": "Green … Orange" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [73, 73], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff9900"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [74, 90], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#ff9900"], - "colorsEnd": ["#fff6ed"], - "comment": "Orange … White (6000K)" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [91, 91], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#fff6ed"], - "comment": "White", - "colorTemperature": "6000K" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [92, 109], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#fff6ed"], - "colorsEnd": ["#8800ff"], - "comment": "White (6000K) … UV Filter" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [110, 110], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#8800ff"], - "comment": "UV Filter" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [111, 127], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#8800ff"], - "colorsEnd": ["#ffffff"], - "comment": "UV Filter … Open" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [128, 129], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [130, 139], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#dd0000"], - "comment": "Deep Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [140, 149], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000dd"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [150, 159], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [160, 169], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#ff9900"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [170, 179], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#fff6ed"], - "comment": "White", - "colorTemperature": "6000K" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [180, 189], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#8800ff"], - "comment": "UV Filter" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [190, 215], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [216, 217], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [218, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -845,9 +896,8 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -855,9 +905,9 @@ }, { "dmxRange": [10, 13], - "type": "GoboIndex", - "index": 1, - "comment": "Rainbow Chips 15030012 (indexed)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -865,9 +915,9 @@ }, { "dmxRange": [14, 17], - "type": "GoboIndex", - "index": 2, - "comment": "Sun Man 15030013 (indexed)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -875,9 +925,9 @@ }, { "dmxRange": [18, 21], - "type": "GoboIndex", - "index": 3, - "comment": "Water Drops 15030014 (indexed)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -885,9 +935,9 @@ }, { "dmxRange": [22, 25], - "type": "GoboIndex", - "index": 4, - "comment": "Triangle Floating 15020123 (indexed)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -895,9 +945,9 @@ }, { "dmxRange": [26, 29], - "type": "GoboIndex", - "index": 5, - "comment": "Laser 15020124 (indexed)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -905,9 +955,9 @@ }, { "dmxRange": [30, 33], - "type": "GoboIndex", - "index": 6, - "comment": "Swirl Electric 15020125 (indexed)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -915,9 +965,9 @@ }, { "dmxRange": [34, 37], - "type": "GoboIndex", - "index": 1, - "comment": "Rainbow Chips 15030012 (rotation)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -925,9 +975,9 @@ }, { "dmxRange": [38, 41], - "type": "GoboIndex", - "index": 2, - "comment": "Sun Man 15030013 (rotation)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -935,9 +985,9 @@ }, { "dmxRange": [42, 45], - "type": "GoboIndex", - "index": 3, - "comment": "Water Drops 15030014 (rotation)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -945,9 +995,9 @@ }, { "dmxRange": [46, 49], - "type": "GoboIndex", - "index": 4, - "comment": "Triangle Floating 15020123 (rotation)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -955,9 +1005,9 @@ }, { "dmxRange": [50, 53], - "type": "GoboIndex", - "index": 5, - "comment": "Laser 15020124 (rotation)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -965,9 +1015,9 @@ }, { "dmxRange": [54, 57], - "type": "GoboIndex", - "index": 6, - "comment": "Swirl Electric 15020125 (rotation)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -975,11 +1025,11 @@ }, { "dmxRange": [58, 69], - "type": "GoboIndex", - "index": 1, - "comment": "Rainbow Chips 15030012 (indexed)", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -987,11 +1037,11 @@ }, { "dmxRange": [70, 81], - "type": "GoboIndex", - "index": 2, - "comment": "Sun Man 15030013 (indexed)", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -999,11 +1049,11 @@ }, { "dmxRange": [82, 93], - "type": "GoboIndex", - "index": 3, - "comment": "Water Drops 15030014 (indexed)", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -1011,11 +1061,11 @@ }, { "dmxRange": [94, 105], - "type": "GoboIndex", - "index": 4, - "comment": "Triangle Floating 15020123 (indexed)", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -1023,11 +1073,11 @@ }, { "dmxRange": [106, 117], - "type": "GoboIndex", - "index": 5, - "comment": "Laser 15020124 (indexed)", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -1035,11 +1085,11 @@ }, { "dmxRange": [118, 129], - "type": "GoboIndex", - "index": 6, - "comment": "Swirl Electric 15020125 (indexed)", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 indexing", "Gobo 1 indexing/rotation fine": "Gobo 1 indexing fine" @@ -1047,11 +1097,11 @@ }, { "dmxRange": [130, 141], - "type": "GoboIndex", - "index": 1, - "comment": "Rainbow Chips 15030012 (rotation)", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1059,11 +1109,11 @@ }, { "dmxRange": [142, 153], - "type": "GoboIndex", - "index": 2, - "comment": "Sun Man 15030013 (rotation)", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1071,11 +1121,11 @@ }, { "dmxRange": [154, 165], - "type": "GoboIndex", - "index": 3, - "comment": "Water Drops 15030014 (rotation)", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1083,11 +1133,11 @@ }, { "dmxRange": [166, 177], - "type": "GoboIndex", - "index": 4, - "comment": "Triangle Floating 15020123 (rotation)", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1095,11 +1145,11 @@ }, { "dmxRange": [178, 189], - "type": "GoboIndex", - "index": 5, - "comment": "Laser 15020124 (rotation)", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1107,11 +1157,11 @@ }, { "dmxRange": [190, 201], - "type": "GoboIndex", - "index": 6, - "comment": "Swirl Electric 15020125 (rotation)", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", "Gobo 1 indexing/rotation fine": "Gobo 1 rotation fine" @@ -1119,7 +1169,7 @@ }, { "dmxRange": [202, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -1129,7 +1179,7 @@ }, { "dmxRange": [222, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop", "switchChannels": { "Gobo 1 indexing/rotation": "Gobo 1 rotation", @@ -1138,7 +1188,7 @@ }, { "dmxRange": [224, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -1172,7 +1222,8 @@ "Gobo 1 indexing": { "fineChannelAliases": ["Gobo 1 indexing fine"], "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "angleStart": "0deg", "angleEnd": "360deg" } @@ -1183,23 +1234,27 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speed": "stop" }, { "dmxRange": [1, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [128, 129], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speed": "stop" }, { "dmxRange": [130, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 1", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -1210,9 +1265,8 @@ "capabilities": [ { "dmxRange": [0, 9], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1220,9 +1274,9 @@ }, { "dmxRange": [10, 13], - "type": "GoboIndex", - "index": 1, - "comment": "Diamante Spot 15040020 (indexed)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1230,9 +1284,9 @@ }, { "dmxRange": [14, 17], - "type": "GoboIndex", - "index": 2, - "comment": "Wheel 15020126 (indexed)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1240,9 +1294,9 @@ }, { "dmxRange": [18, 21], - "type": "GoboIndex", - "index": 3, - "comment": "Space Tunel 15020127 (indexed)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1250,9 +1304,9 @@ }, { "dmxRange": [22, 25], - "type": "GoboIndex", - "index": 4, - "comment": "Bubbles 1 15020128 (indexed)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1260,9 +1314,9 @@ }, { "dmxRange": [26, 29], - "type": "GoboIndex", - "index": 5, - "comment": "12 Dots 15020129 (indexed)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1270,9 +1324,9 @@ }, { "dmxRange": [30, 33], - "type": "GoboIndex", - "index": 6, - "comment": "Radial Dashes 15020130 (indexed)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1280,9 +1334,9 @@ }, { "dmxRange": [34, 37], - "type": "GoboIndex", - "index": 1, - "comment": "Diamante Spot 15040020 (rotation)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1290,9 +1344,9 @@ }, { "dmxRange": [38, 41], - "type": "GoboIndex", - "index": 2, - "comment": "Wheel 15020126 (rotation)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1300,9 +1354,9 @@ }, { "dmxRange": [42, 45], - "type": "GoboIndex", - "index": 3, - "comment": "Space Tunel 15020127 (rotation)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1310,9 +1364,9 @@ }, { "dmxRange": [46, 49], - "type": "GoboIndex", - "index": 4, - "comment": "Bubbles 1 15020128 (rotation)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1320,9 +1374,9 @@ }, { "dmxRange": [50, 53], - "type": "GoboIndex", - "index": 5, - "comment": "12 Dots 15020129 (rotation)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1330,9 +1384,9 @@ }, { "dmxRange": [54, 57], - "type": "GoboIndex", - "index": 6, - "comment": "Radial Dashes 15020130 (rotation)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1340,11 +1394,11 @@ }, { "dmxRange": [58, 69], - "type": "GoboIndex", - "index": 1, - "comment": "Diamante Spot 15040020 (indexed)", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1352,11 +1406,11 @@ }, { "dmxRange": [70, 81], - "type": "GoboIndex", - "index": 2, - "comment": "Wheel 15020126 (indexed)", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1364,11 +1418,11 @@ }, { "dmxRange": [82, 93], - "type": "GoboIndex", - "index": 3, - "comment": "Space Tunel 15020127 (indexed)", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1376,11 +1430,11 @@ }, { "dmxRange": [94, 105], - "type": "GoboIndex", - "index": 4, - "comment": "Bubbles 1 15020128 (indexed)", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1388,11 +1442,11 @@ }, { "dmxRange": [106, 117], - "type": "GoboIndex", - "index": 5, - "comment": "12 Dots 15020129 (indexed)", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1400,11 +1454,11 @@ }, { "dmxRange": [118, 129], - "type": "GoboIndex", - "index": 6, - "comment": "Radial Dashes 15020130 (indexed)", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "indexed", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 indexing", "Gobo 2 indexing/rotation fine": "Gobo 2 indexing fine" @@ -1412,11 +1466,11 @@ }, { "dmxRange": [130, 141], - "type": "GoboIndex", - "index": 1, - "comment": "Diamante Spot 15040020 (rotation)", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1424,11 +1478,11 @@ }, { "dmxRange": [142, 153], - "type": "GoboIndex", - "index": 2, - "comment": "Wheel 15020126 (rotation)", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1436,11 +1490,11 @@ }, { "dmxRange": [154, 165], - "type": "GoboIndex", - "index": 3, - "comment": "Space Tunel 15020127 (rotation)", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1448,11 +1502,11 @@ }, { "dmxRange": [166, 177], - "type": "GoboIndex", - "index": 4, - "comment": "Bubbles 1 15020128 (rotation)", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1460,11 +1514,11 @@ }, { "dmxRange": [178, 189], - "type": "GoboIndex", - "index": 5, - "comment": "12 Dots 15020129 (rotation)", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1472,11 +1526,11 @@ }, { "dmxRange": [190, 201], - "type": "GoboIndex", - "index": 6, - "comment": "Radial Dashes 15020130 (rotation)", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", + "comment": "rotation", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", "Gobo 2 indexing/rotation fine": "Gobo 2 rotation fine" @@ -1484,7 +1538,7 @@ }, { "dmxRange": [202, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -1494,7 +1548,7 @@ }, { "dmxRange": [222, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop", "switchChannels": { "Gobo 2 indexing/rotation": "Gobo 2 rotation", @@ -1503,7 +1557,7 @@ }, { "dmxRange": [224, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -1537,7 +1591,8 @@ "Gobo 2 indexing": { "fineChannelAliases": ["Gobo 2 indexing fine"], "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "angleStart": "0deg", "angleEnd": "360deg" } @@ -1548,23 +1603,27 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "stop" }, { "dmxRange": [1, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [128, 129], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speed": "stop" }, { "dmxRange": [130, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel 2", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/robe/dj-scan-250-xt.json b/fixtures/robe/dj-scan-250-xt.json index 1a4eb2b43e..719fcdb048 100644 --- a/fixtures/robe/dj-scan-250-xt.json +++ b/fixtures/robe/dj-scan-250-xt.json @@ -29,6 +29,124 @@ "type": "Mirror" } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Turquoise", + "colors": ["#40e0d0"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Cyan", + "colors": ["#00ffff"] + }, + { + "type": "Color", + "name": "Light green", + "colors": ["#90ee90"] + }, + { + "type": "Color", + "name": "Magenta", + "colors": ["#ca1f7b"] + }, + { + "type": "Color", + "name": "Light blue", + "colors": ["#add8e6"] + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ffc0cb"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#bf00fe"] + }, + { + "type": "Color", + "name": "Split Red / Blue", + "colors": ["#ff0000", "#0000ff"] + }, + { + "type": "Color", + "name": "Split Yellow / Green", + "colors": ["#ffff00", "#00ff00"] + }, + { + "type": "Color", + "name": "Split Pink / Blue", + "colors": ["#ffc0cb", "#0000ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "defaultValue": "50%", @@ -51,131 +169,99 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#40e0d0"], - "comment": "Turquoise" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ffff"], - "comment": "Cyan" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#90ee90"], - "comment": "Light green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ca1f7b"], - "comment": "Magenta" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#add8e6"], - "comment": "Light blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [72, 79], - "type": "ColorWheelIndex", - "index": 9, - "colors": ["#ffc0cb"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [80, 87], - "type": "ColorWheelIndex", - "index": 10, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [88, 95], - "type": "ColorWheelIndex", - "index": 11, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [96, 103], - "type": "ColorWheelIndex", - "index": 12, - "colors": ["#bf00fe"], - "comment": "UV" + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [104, 111], - "type": "ColorWheelIndex", - "index": 13, - "colors": ["#ff0000", "#0000ff"], - "comment": "Split Red / Blue" + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [112, 119], - "type": "ColorWheelIndex", - "index": 14, - "colors": ["#ffff00", "#00ff00"], - "comment": "Split Yellow / Green" + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "index": 15, - "colors": ["#ffc0cb", "#0000ff"], - "comment": "Split Pink / Blue" + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [128, 190], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "menuClick": "center" }, { "dmxRange": [191, 192], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" @@ -186,54 +272,53 @@ "capabilities": [ { "dmxRange": [0, 23], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [24, 47], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [48, 79], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [80, 103], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [104, 127], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [128, 151], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [152, 175], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [176, 207], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [208, 231], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [232, 255], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 } ] }, @@ -241,25 +326,29 @@ "capabilities": [ { "dmxRange": [0, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [128, 190], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW", "menuClick": "center" }, { "dmxRange": [191, 192], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [193, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" diff --git a/fixtures/robe/robin-600e-spot.json b/fixtures/robe/robin-600e-spot.json index ae7196bb47..0eb904a887 100644 --- a/fixtures/robe/robin-600e-spot.json +++ b/fixtures/robe/robin-600e-spot.json @@ -41,6 +41,112 @@ "tiltMax": 280 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Deep Red", + "colors": ["#aa0000"] + }, + { + "type": "Color", + "name": "Deep Blue", + "colors": ["#0000ff"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ff7f00"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Light Red", + "colors": ["#ff4000"] + }, + { + "type": "Color", + "name": "Amber", + "colors": ["#ffbf00"] + }, + { + "type": "Color", + "name": "UV Filter", + "colors": ["#8800ff"] + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -192,202 +298,146 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 15], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#aa0000"], - "comment": "Open … Deep Red" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [16, 16], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#aa0000"], - "comment": "Deep Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [17, 31], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#aa0000"], - "colorsEnd": ["#0000ff"], - "comment": "Deep Red … Deep Blue" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [32, 32], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [33, 47], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#0000ff"], - "colorsEnd": ["#ff7f00"], - "comment": "Deep Blue … Orange" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [48, 48], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [49, 63], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#ff7f00"], - "colorsEnd": ["#00ff00"], - "comment": "Orange … Green" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [64, 64], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [65, 79], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#00ff00"], - "colorsEnd": ["#ff4000"], - "comment": "Green … Light Red" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [80, 80], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff4000"], - "comment": "Light Red" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [81, 95], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#ff4000"], - "colorsEnd": ["#ffbf00"], - "comment": "Light Red … Amber" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [96, 96], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [97, 111], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#ffbf00"], - "colorsEnd": ["#8800ff"], - "comment": "Amber … UV Filter" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [112, 112], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#8800ff"], - "comment": "UV Filter" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [113, 127], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#8800ff"], - "colorsEnd": ["#ffffff"], - "comment": "UV Filter … Open" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [128, 129], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [130, 137], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#aa0000"], - "comment": "Deep Red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [138, 145], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#0000ff"], - "comment": "Deep Blue" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [146, 153], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#ff7f00"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [154, 163], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [164, 171], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#ff4000"], - "comment": "Light Red" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [172, 181], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ffbf00"], - "comment": "Amber" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [182, 189], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#8800ff"], - "comment": "UV Filter" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [190, 215], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [216, 217], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [218, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -616,250 +666,228 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 6], - "type": "GoboIndex", - "indexStart": 0, - "indexEnd": 1, - "comment": "Open … Gobo 1" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [7, 7], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [8, 12], - "type": "GoboIndex", - "indexStart": 1, - "indexEnd": 2, - "comment": "Gobo 1 … Gobo 2" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [13, 13], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [14, 18], - "type": "GoboIndex", - "indexStart": 2, - "indexEnd": 3, - "comment": "Gobo 2 … Gobo 3" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [19, 19], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [20, 25], - "type": "GoboIndex", - "indexStart": 3, - "indexEnd": 4, - "comment": "Gobo 3 … Gobo 4" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [26, 26], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [27, 31], - "type": "GoboIndex", - "indexStart": 4, - "indexEnd": 5, - "comment": "Gobo 4 … Gobo 5" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [32, 32], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [33, 38], - "type": "GoboIndex", - "indexStart": 5, - "indexEnd": 6, - "comment": "Gobo 5 … Gobo 6" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [39, 39], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [40, 44], - "type": "GoboIndex", - "indexStart": 6, - "indexEnd": 7, - "comment": "Gobo 6 … Gobo 7" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [45, 45], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [46, 50], - "type": "GoboIndex", - "indexStart": 7, - "indexEnd": 8, - "comment": "Gobo 7 … Gobo 8" + "type": "WheelSlot", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [51, 51], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [52, 57], - "type": "GoboIndex", - "indexStart": 8, - "indexEnd": 9, - "comment": "Gobo 8 … Gobo 9" + "type": "WheelSlot", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [58, 58], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [59, 63], - "type": "GoboIndex", - "indexStart": 9, - "indexEnd": 10, - "comment": "Gobo 9 … Open" + "type": "WheelSlot", + "slotNumberStart": 10, + "slotNumberEnd": 11 }, { "dmxRange": [64, 64], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [65, 69], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [70, 74], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [75, 79], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [80, 84], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [85, 89], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [90, 94], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [95, 99], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [100, 104], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [105, 109], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [110, 119], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 2 }, { "dmxRange": [120, 129], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 3 }, { "dmxRange": [130, 139], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 4 }, { "dmxRange": [140, 149], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 5 }, { "dmxRange": [150, 159], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 6 }, { "dmxRange": [160, 169], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 7 }, { "dmxRange": [170, 179], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 8 }, { "dmxRange": [180, 189], - "type": "GoboIndex", - "index": 8, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 9 }, { "dmxRange": [190, 199], - "type": "GoboIndex", - "index": 9, - "shakeAngle": "wide" + "type": "WheelShake", + "slotNumber": 10 }, { "dmxRange": [200, 201], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [202, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [222, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [224, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -883,9 +911,8 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -893,9 +920,9 @@ }, { "dmxRange": [4, 7], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 1 (indexing)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -903,9 +930,9 @@ }, { "dmxRange": [8, 11], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 2 (indexing)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -913,9 +940,9 @@ }, { "dmxRange": [12, 15], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 3 (indexing)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -923,9 +950,9 @@ }, { "dmxRange": [16, 19], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 4 (indexing)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -933,9 +960,9 @@ }, { "dmxRange": [20, 23], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 5 (indexing)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -943,9 +970,9 @@ }, { "dmxRange": [24, 27], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 6 (indexing)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -953,9 +980,9 @@ }, { "dmxRange": [28, 31], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 7 (indexing)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -963,9 +990,9 @@ }, { "dmxRange": [32, 35], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 1 (rotation)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -973,9 +1000,9 @@ }, { "dmxRange": [36, 39], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 2 (rotation)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -983,9 +1010,9 @@ }, { "dmxRange": [40, 43], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 3 (rotation)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -993,9 +1020,9 @@ }, { "dmxRange": [44, 47], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 4 (rotation)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1003,9 +1030,9 @@ }, { "dmxRange": [48, 51], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 5 (rotation)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1013,9 +1040,9 @@ }, { "dmxRange": [52, 55], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 6 (rotation)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1023,9 +1050,9 @@ }, { "dmxRange": [56, 59], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 7 (rotation)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1033,10 +1060,9 @@ }, { "dmxRange": [60, 69], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide", - "comment": "1 (indexing)", + "type": "WheelShake", + "slotNumber": 2, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1044,10 +1070,9 @@ }, { "dmxRange": [70, 79], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide", - "comment": "2 (indexing)", + "type": "WheelShake", + "slotNumber": 3, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1055,10 +1080,9 @@ }, { "dmxRange": [80, 89], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide", - "comment": "3 (indexing)", + "type": "WheelShake", + "slotNumber": 4, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1066,10 +1090,9 @@ }, { "dmxRange": [90, 99], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide", - "comment": "4 (indexing)", + "type": "WheelShake", + "slotNumber": 5, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1077,10 +1100,9 @@ }, { "dmxRange": [100, 109], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide", - "comment": "5 (indexing)", + "type": "WheelShake", + "slotNumber": 6, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1088,10 +1110,9 @@ }, { "dmxRange": [110, 119], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide", - "comment": "6 (indexing)", + "type": "WheelShake", + "slotNumber": 7, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1099,10 +1120,9 @@ }, { "dmxRange": [120, 129], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide", - "comment": "7 (indexing)", + "type": "WheelShake", + "slotNumber": 8, + "comment": "indexing", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1110,10 +1130,9 @@ }, { "dmxRange": [130, 139], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide", - "comment": "1 (rotation)", + "type": "WheelShake", + "slotNumber": 2, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1121,10 +1140,9 @@ }, { "dmxRange": [140, 149], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide", - "comment": "2 (rotation)", + "type": "WheelShake", + "slotNumber": 3, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1132,10 +1150,9 @@ }, { "dmxRange": [150, 159], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide", - "comment": "3 (rotation)", + "type": "WheelShake", + "slotNumber": 4, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1143,10 +1160,9 @@ }, { "dmxRange": [160, 169], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide", - "comment": "4 (rotation)", + "type": "WheelShake", + "slotNumber": 5, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1154,10 +1170,9 @@ }, { "dmxRange": [170, 179], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide", - "comment": "5 (rotation)", + "type": "WheelShake", + "slotNumber": 6, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1165,10 +1180,9 @@ }, { "dmxRange": [180, 189], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide", - "comment": "6 (rotation)", + "type": "WheelShake", + "slotNumber": 7, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1176,10 +1190,9 @@ }, { "dmxRange": [190, 199], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide", - "comment": "7 (rotation)", + "type": "WheelShake", + "slotNumber": 8, + "comment": "rotation", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Rotation", "Rotating Gobo Control fine": "Rotating Gobo Rotation fine" @@ -1187,9 +1200,8 @@ }, { "dmxRange": [200, 201], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", "Rotating Gobo Control fine": "Rotating Gobo Indexing fine" @@ -1197,7 +1209,7 @@ }, { "dmxRange": [202, 221], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -1207,7 +1219,7 @@ }, { "dmxRange": [222, 223], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speed": "stop", "switchChannels": { "Rotating Gobo Control": "Rotating Gobo Indexing", @@ -1216,7 +1228,7 @@ }, { "dmxRange": [224, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -1250,7 +1262,8 @@ "Rotating Gobo Indexing": { "fineChannelAliases": ["Rotating Gobo Indexing fine"], "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -1261,23 +1274,27 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [1, 127], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [128, 129], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [130, 255], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/robe/robin-viva-cmy.json b/fixtures/robe/robin-viva-cmy.json index b8cbd607af..47078f1b66 100644 --- a/fixtures/robe/robin-viva-cmy.json +++ b/fixtures/robe/robin-viva-cmy.json @@ -47,6 +47,124 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Deep red", + "colors": ["#d0282f"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00a650"] + }, + { + "type": "Color", + "name": "CTO", + "colors": ["#f9d1aa"], + "colorTemperature": "2700K" + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#faa649"] + }, + { + "type": "Color", + "name": "Lavender", + "colors": ["#c6cbe6"] + }, + { + "type": "Color", + "name": "Congo blue", + "colors": ["#6863e1"] + } + ] + }, + "Static Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Gobo 1 (99014836-1)" + }, + { + "type": "Gobo", + "name": "Gobo 2 (99014836-2)" + }, + { + "type": "Gobo", + "name": "Gobo 3 (99014836-3)" + }, + { + "type": "Gobo", + "name": "Gobo 4 (99014836-4)" + }, + { + "type": "Gobo", + "name": "Gobo 5 (99014836-5)" + }, + { + "type": "Gobo", + "name": "Gobo 6 (99014836-6)" + }, + { + "type": "Gobo", + "name": "Gobo 7 (99014836-7)" + }, + { + "type": "Gobo", + "name": "Gobo 8 (99014836-8)" + }, + { + "type": "Gobo", + "name": "Gobo 9 (99014836-9)" + } + ] + }, + "Rotating Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Ornament" + }, + { + "type": "Gobo", + "name": "Bubble Triangle" + }, + { + "type": "Gobo", + "name": "Whirls" + }, + { + "type": "Gobo", + "name": "Pinwheel" + }, + { + "type": "Gobo", + "name": "Abstract Squares" + }, + { + "type": "Gobo", + "name": "Abstract Lines" + }, + { + "type": "Gobo", + "name": "Lines With Wheels" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -263,181 +381,130 @@ "capabilities": [ { "dmxRange": [0, 0], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [1, 17], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#d0282f"], - "comment": "Open … Deep red" + "type": "WheelSlot", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [18, 18], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#d0282f"], - "comment": "Deep red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [19, 36], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#d0282f"], - "colorsEnd": ["#00a650"], - "comment": "Deep red … Green" + "type": "WheelSlot", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [37, 37], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#00a650"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [38, 54], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#00a650"], - "colorsEnd": ["#f9d1aa"], - "comment": "Green … CTO (2700K)" + "type": "WheelSlot", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [55, 55], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#f9d1aa"], - "colorTemperature": "2700K", - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [56, 72], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#f9d1aa"], - "colorsEnd": ["#faa649"], - "comment": "CTO (2700K) … Orange" + "type": "WheelSlot", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [73, 73], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#faa649"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [74, 90], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#faa649"], - "colorsEnd": ["#c6cbe6"], - "comment": "Orange … Lavender" + "type": "WheelSlot", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [91, 91], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#c6cbe6"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [92, 108], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#c6cbe6"], - "colorsEnd": ["#6863e1"], - "comment": "Lavender … Congo blue" + "type": "WheelSlot", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [109, 109], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#6863e1"], - "comment": "Congo blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [110, 127], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#6863e1"], - "colorsEnd": ["#ffffff"], - "comment": "Congo blue … Open" + "type": "WheelSlot", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [128, 129], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [130, 139], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#d0282f"], - "comment": "Deep red" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [140, 149], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#00a650"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [150, 159], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#f9d1aa"], - "colorTemperature": "2700K", - "comment": "CTO" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [160, 169], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#faa649"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [170, 179], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#c6cbe6"], - "comment": "Lavender" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [180, 189], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#6863e1"], - "comment": "Congo blue" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [190, 215], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [216, 217], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speed": "stop" }, { "dmxRange": [218, 243], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -872,151 +939,131 @@ "capabilities": [ { "dmxRange": [0, 8], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [9, 17], - "type": "GoboIndex", - "index": 1, - "comment": "1 (99014836-1)" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [18, 26], - "type": "GoboIndex", - "index": 2, - "comment": "2 (99014836-2)" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [27, 35], - "type": "GoboIndex", - "index": 3, - "comment": "3 (99014836-3)" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [36, 44], - "type": "GoboIndex", - "index": 4, - "comment": "4 (99014836-4)" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [45, 53], - "type": "GoboIndex", - "index": 5, - "comment": "5 (99014836-5)" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [54, 62], - "type": "GoboIndex", - "index": 6, - "comment": "6 (99014836-6)" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [63, 71], - "type": "GoboIndex", - "index": 7, - "comment": "7 (99014836-7)" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [72, 80], - "type": "GoboIndex", - "index": 8, - "comment": "8 (99014836-8)" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [81, 91], - "type": "GoboIndex", - "index": 9, - "comment": "9 (99014836-9)" + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [92, 103], - "type": "GoboIndex", - "index": 1, - "comment": "1 (99014836-1)", + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [104, 115], - "type": "GoboIndex", - "index": 2, - "comment": "2 (99014836-2)", + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [116, 127], - "type": "GoboIndex", - "index": 3, - "comment": "3 (99014836-3)", + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [128, 139], - "type": "GoboIndex", - "index": 4, - "comment": "4 (99014836-4)", + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [140, 151], - "type": "GoboIndex", - "index": 5, - "comment": "5 (99014836-5)", + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [152, 163], - "type": "GoboIndex", - "index": 6, - "comment": "6 (99014836-6)", + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [164, 175], - "type": "GoboIndex", - "index": 7, - "comment": "7 (99014836-7)", + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [176, 187], - "type": "GoboIndex", - "index": 8, - "comment": "8 (99014836-8)", + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [188, 199], - "type": "GoboIndex", - "index": 9, - "comment": "9 (99014836-9)", + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [200, 201], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [202, 222], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [223, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, @@ -1040,9 +1087,8 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1050,9 +1096,9 @@ }, { "dmxRange": [4, 7], - "type": "GoboIndex", - "index": 1, - "comment": "Ornament (indexing)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1060,9 +1106,9 @@ }, { "dmxRange": [8, 11], - "type": "GoboIndex", - "index": 2, - "comment": "Bubble Triangle (indexing)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1070,9 +1116,9 @@ }, { "dmxRange": [12, 15], - "type": "GoboIndex", - "index": 3, - "comment": "Whirls (indexing)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1080,9 +1126,9 @@ }, { "dmxRange": [16, 19], - "type": "GoboIndex", - "index": 4, - "comment": "Pinwheel (indexing)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1090,9 +1136,9 @@ }, { "dmxRange": [20, 23], - "type": "GoboIndex", - "index": 5, - "comment": "Abstract Squares (indexing)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1100,9 +1146,9 @@ }, { "dmxRange": [24, 27], - "type": "GoboIndex", - "index": 6, - "comment": "Abstract Lines (indexing)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1110,9 +1156,9 @@ }, { "dmxRange": [28, 31], - "type": "GoboIndex", - "index": 7, - "comment": "Lines With Wheels (indexing)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1120,9 +1166,9 @@ }, { "dmxRange": [32, 35], - "type": "GoboIndex", - "index": 1, - "comment": "Ornament (rotating)", + "type": "WheelSlot", + "slotNumber": 2, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1130,9 +1176,9 @@ }, { "dmxRange": [36, 39], - "type": "GoboIndex", - "index": 2, - "comment": "Bubble Triangle (rotating)", + "type": "WheelSlot", + "slotNumber": 3, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1140,9 +1186,9 @@ }, { "dmxRange": [40, 43], - "type": "GoboIndex", - "index": 3, - "comment": "Whirls (rotating)", + "type": "WheelSlot", + "slotNumber": 4, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1150,9 +1196,9 @@ }, { "dmxRange": [44, 47], - "type": "GoboIndex", - "index": 4, - "comment": "Pinwheel (rotating)", + "type": "WheelSlot", + "slotNumber": 5, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1160,9 +1206,9 @@ }, { "dmxRange": [48, 51], - "type": "GoboIndex", - "index": 5, - "comment": "Abstract Squares (rotating)", + "type": "WheelSlot", + "slotNumber": 6, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1170,9 +1216,9 @@ }, { "dmxRange": [52, 55], - "type": "GoboIndex", - "index": 6, - "comment": "Abstract Lines (rotating)", + "type": "WheelSlot", + "slotNumber": 7, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1180,9 +1226,9 @@ }, { "dmxRange": [56, 59], - "type": "GoboIndex", - "index": 7, - "comment": "Lines With Wheels (rotating)", + "type": "WheelSlot", + "slotNumber": 8, + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1190,11 +1236,11 @@ }, { "dmxRange": [60, 69], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Ornament (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1202,11 +1248,11 @@ }, { "dmxRange": [70, 79], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Bubble Triangle (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1214,11 +1260,11 @@ }, { "dmxRange": [80, 89], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Whirls (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1226,11 +1272,11 @@ }, { "dmxRange": [90, 99], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Pinwheel (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1238,11 +1284,11 @@ }, { "dmxRange": [100, 109], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Abstract Squares (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1250,11 +1296,11 @@ }, { "dmxRange": [110, 119], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Abstract Lines (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1262,11 +1308,11 @@ }, { "dmxRange": [120, 129], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Lines With Wheels (indexing)", + "comment": "indexing", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Angle", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Angle fine" @@ -1274,11 +1320,11 @@ }, { "dmxRange": [130, 139], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Ornament (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1286,11 +1332,11 @@ }, { "dmxRange": [140, 149], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Bubble Triangle (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1298,11 +1344,11 @@ }, { "dmxRange": [150, 159], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Whirls (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1310,11 +1356,11 @@ }, { "dmxRange": [160, 169], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Pinwheel (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1322,11 +1368,11 @@ }, { "dmxRange": [170, 179], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Abstract Squares (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1334,11 +1380,11 @@ }, { "dmxRange": [180, 189], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Abstract Lines (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1346,11 +1392,11 @@ }, { "dmxRange": [190, 199], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", - "comment": "Lines With Wheels (rotating)", + "comment": "rotating", "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1358,9 +1404,8 @@ }, { "dmxRange": [200, 201], - "type": "GoboIndex", - "index": 0, - "comment": "Open", + "type": "WheelSlot", + "slotNumber": 1, "switchChannels": { "Gobo Stencil Rotation": "Gobo Stencil Rotation Speed", "Gobo Stencil Rotation fine": "Gobo Stencil Rotation Speed fine" @@ -1368,7 +1413,7 @@ }, { "dmxRange": [202, 222], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "fast CW", "speedEnd": "slow CW", "switchChannels": { @@ -1378,7 +1423,7 @@ }, { "dmxRange": [223, 243], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "switchChannels": { @@ -1413,7 +1458,8 @@ "fineChannelAliases": ["Gobo Stencil Rotation Angle fine"], "defaultValue": 32896, "capability": { - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" } @@ -1424,18 +1470,21 @@ "capabilities": [ { "dmxRange": [0, 32767], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "fast CW", "speedEnd": "slow CW" }, { "dmxRange": [32768, 32768], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speed": "stop" }, { "dmxRange": [32769, 65535], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Rotating Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } diff --git a/fixtures/showtec/kanjo-spot-60.json b/fixtures/showtec/kanjo-spot-60.json index 9eaac28cce..8b4de178e2 100644 --- a/fixtures/showtec/kanjo-spot-60.json +++ b/fixtures/showtec/kanjo-spot-60.json @@ -32,6 +32,36 @@ "tiltMax": 230 } }, + "wheels": { + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -123,48 +153,47 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [64, 127], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW" }, @@ -174,50 +203,50 @@ }, { "dmxRange": [144, 159], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [160, 175], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [176, 191], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [192, 207], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [208, 223], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [224, 239], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [240, 255], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" } diff --git a/fixtures/showtec/phantom-140-led-spot.json b/fixtures/showtec/phantom-140-led-spot.json index a60c0e3cf1..01bd38e444 100644 --- a/fixtures/showtec/phantom-140-led-spot.json +++ b/fixtures/showtec/phantom-140-led-spot.json @@ -34,6 +34,143 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#fffc00"] + }, + { + "type": "Color", + "name": "Light Pink", + "colors": ["#ff8697"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#1c7403"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#cd000f"] + }, + { + "type": "Color", + "name": "Bright Blue", + "colors": ["#0065fd"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#60fb0a"] + }, + { + "type": "Color", + "name": "Dark Yellow", + "colors": ["#e1e900"] + }, + { + "type": "Color", + "name": "Old Yellow", + "colors": ["#ff9c03"] + }, + { + "type": "Color", + "name": "Violet", + "colors": ["#7173c8"] + }, + { + "type": "Color", + "name": "Hard Pink", + "colors": ["#ee008a"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#6ea4ee"] + }, + { + "type": "Color", + "name": "Moon Yellow", + "colors": ["#f8d158"] + }, + { + "type": "Color", + "name": "Steel Blue", + "colors": ["#d6e5fc"] + }, + { + "type": "Color", + "name": "UV", + "colors": ["#33199e"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + }, + { + "type": "Gobo" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -66,224 +203,164 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "ColorWheelIndex", - "index": 0, - "comment": "Open", - "colors": ["#ffffff"] + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [4, 7], - "type": "ColorWheelIndex", - "index": 1, - "comment": "Yellow", - "colors": ["#fffc00"] + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [8, 11], - "type": "ColorWheelIndex", - "index": 2, - "comment": "Light Pink", - "colors": ["#ff8697"] + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [12, 15], - "type": "ColorWheelIndex", - "index": 3, - "comment": "Green", - "colors": ["#1c7403"] + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [16, 19], - "type": "ColorWheelIndex", - "index": 4, - "comment": "Red", - "colors": ["#cd000f"] + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [20, 23], - "type": "ColorWheelIndex", - "index": 5, - "comment": "Bright Blue", - "colors": ["#0065fd"] + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [24, 27], - "type": "ColorWheelIndex", - "index": 6, - "comment": "Light Green", - "colors": ["#60fb0a"] + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [28, 31], - "type": "ColorWheelIndex", - "index": 7, - "comment": "Dark Yellow", - "colors": ["#e1e900"] + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [32, 35], - "type": "ColorWheelIndex", - "index": 8, - "comment": "Old Yellow", - "colors": ["#ff9c03"] + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [36, 39], - "type": "ColorWheelIndex", - "index": 9, - "comment": "Violet", - "colors": ["#7173c8"] + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [40, 43], - "type": "ColorWheelIndex", - "index": 10, - "comment": "Hard Pink", - "colors": ["#ee008a"] + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [44, 47], - "type": "ColorWheelIndex", - "index": 11, - "comment": "Light Blue", - "colors": ["#6ea4ee"] + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [48, 51], - "type": "ColorWheelIndex", - "index": 12, - "comment": "Moon Yellow", - "colors": ["#f8d158"] + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [52, 55], - "type": "ColorWheelIndex", - "index": 13, - "comment": "Steel Blue", - "colors": ["#d6e5fc"] + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [56, 63], - "type": "ColorWheelIndex", - "index": 14, - "comment": "UV", - "colors": ["#33199e"] + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [64, 67], - "type": "ColorWheelIndex", - "index": 0.5, - "comment": "Split Open / Yellow", - "colors": ["#ffffff", "#fffc00"] + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [68, 71], - "type": "ColorWheelIndex", - "index": 1.5, - "comment": "Split Yellow / Light Pink", - "colors": ["#fffc00", "#ff8697"] + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [72, 75], - "type": "ColorWheelIndex", - "index": 2.5, - "comment": "Split Light Pink / Green", - "colors": ["#ff8697", "#1c7403"] + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [76, 79], - "type": "ColorWheelIndex", - "index": 3.5, - "comment": "Split Green / Red", - "colors": ["#1c7403", "#cd000f"] + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [80, 83], - "type": "ColorWheelIndex", - "index": 4.5, - "comment": "Split Red / Bright Blue", - "colors": ["#cd000f", "#0065fd"] + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [84, 87], - "type": "ColorWheelIndex", - "index": 5.5, - "comment": "Split Bright Blue / Light Green", - "colors": ["#0065fd", "#60fb0a"] + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [88, 91], - "type": "ColorWheelIndex", - "index": 6.5, - "comment": "Split Light Green / Dark Yellow", - "colors": ["#60fb0a", "#e1e900"] + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [92, 95], - "type": "ColorWheelIndex", - "index": 7.5, - "comment": "Split Dark Yellow / Old Yellow", - "colors": ["#e1e900", "#ff9c03"] + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [96, 99], - "type": "ColorWheelIndex", - "index": 8.5, - "comment": "Split Old Yellow / Violet", - "colors": ["#ff9c03", "#7173c8"] + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [100, 103], - "type": "ColorWheelIndex", - "index": 9.5, - "comment": "Split Violet / Hard Pink", - "colors": ["#7173c8", "#ee008a"] + "type": "WheelSlot", + "slotNumber": 10.5 }, { "dmxRange": [104, 107], - "type": "ColorWheelIndex", - "index": 10.5, - "comment": "Split Hard Pink / Light Blue", - "colors": ["#ee008a", "#6ea4ee"] + "type": "WheelSlot", + "slotNumber": 11.5 }, { "dmxRange": [108, 111], - "type": "ColorWheelIndex", - "index": 11.5, - "comment": "Split Light Blue / Moon Yellow", - "colors": ["#6ea4ee", "#f8d158"] + "type": "WheelSlot", + "slotNumber": 12.5 }, { "dmxRange": [112, 115], - "type": "ColorWheelIndex", - "index": 12.5, - "comment": "Split Moon Yellow / Steel Blue", - "colors": ["#f8d158", "#d6e5fc"] + "type": "WheelSlot", + "slotNumber": 13.5 }, { "dmxRange": [116, 119], - "type": "ColorWheelIndex", - "index": 13.5, - "comment": "Split Steel Blue / UV", - "colors": ["#d6e5fc", "#33199e"] + "type": "WheelSlot", + "slotNumber": 14.5 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "index": 14.5, - "comment": "Split UV / Open", - "colors": ["#33199e", "#ffffff"] + "type": "WheelSlot", + "slotNumber": 15.5 }, { "dmxRange": [128, 191], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "menuClick": "center" }, { "dmxRange": [192, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" @@ -346,230 +423,228 @@ "capabilities": [ { "dmxRange": [0, 3], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [4, 7], - "type": "GoboIndex", - "index": 1 + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [8, 11], - "type": "GoboIndex", - "index": 2 + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [12, 15], - "type": "GoboIndex", - "index": 3 + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [16, 19], - "type": "GoboIndex", - "index": 4 + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [20, 23], - "type": "GoboIndex", - "index": 5 + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [24, 27], - "type": "GoboIndex", - "index": 6 + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [28, 31], - "type": "GoboIndex", - "index": 7 + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [32, 35], - "type": "GoboIndex", - "index": 8 + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [36, 39], - "type": "GoboIndex", - "index": 9 + "type": "WheelSlot", + "slotNumber": 10 }, { "dmxRange": [40, 43], - "type": "GoboIndex", - "index": 10 + "type": "WheelSlot", + "slotNumber": 11 }, { "dmxRange": [44, 47], - "type": "GoboIndex", - "index": 11 + "type": "WheelSlot", + "slotNumber": 12 }, { "dmxRange": [48, 51], - "type": "GoboIndex", - "index": 12 + "type": "WheelSlot", + "slotNumber": 13 }, { "dmxRange": [52, 55], - "type": "GoboIndex", - "index": 13 + "type": "WheelSlot", + "slotNumber": 14 }, { "dmxRange": [56, 59], - "type": "GoboIndex", - "index": 14 + "type": "WheelSlot", + "slotNumber": 15 }, { "dmxRange": [60, 63], - "type": "GoboIndex", - "index": 15 + "type": "WheelSlot", + "slotNumber": 16 }, { "dmxRange": [64, 67], - "type": "GoboIndex", - "index": 16 + "type": "WheelSlot", + "slotNumber": 17 }, { "dmxRange": [68, 71], - "type": "GoboIndex", - "index": 17 + "type": "WheelSlot", + "slotNumber": 18 }, { "dmxRange": [72, 77], - "type": "GoboIndex", - "index": 17, + "type": "WheelShake", + "slotNumber": 18, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [78, 83], - "type": "GoboIndex", - "index": 16, + "type": "WheelShake", + "slotNumber": 17, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [84, 89], - "type": "GoboIndex", - "index": 15, + "type": "WheelShake", + "slotNumber": 16, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [90, 95], - "type": "GoboIndex", - "index": 14, + "type": "WheelShake", + "slotNumber": 15, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [96, 101], - "type": "GoboIndex", - "index": 13, + "type": "WheelShake", + "slotNumber": 14, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [102, 107], - "type": "GoboIndex", - "index": 12, + "type": "WheelShake", + "slotNumber": 13, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [108, 113], - "type": "GoboIndex", - "index": 11, + "type": "WheelShake", + "slotNumber": 12, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [114, 119], - "type": "GoboIndex", - "index": 10, + "type": "WheelShake", + "slotNumber": 11, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [120, 125], - "type": "GoboIndex", - "index": 9, + "type": "WheelShake", + "slotNumber": 10, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [126, 131], - "type": "GoboIndex", - "index": 8, + "type": "WheelShake", + "slotNumber": 9, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [132, 137], - "type": "GoboIndex", - "index": 7, + "type": "WheelShake", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [138, 143], - "type": "GoboIndex", - "index": 6, + "type": "WheelShake", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [144, 149], - "type": "GoboIndex", - "index": 5, + "type": "WheelShake", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [150, 155], - "type": "GoboIndex", - "index": 4, + "type": "WheelShake", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [156, 161], - "type": "GoboIndex", - "index": 3, + "type": "WheelShake", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [162, 167], - "type": "GoboIndex", - "index": 2, + "type": "WheelShake", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [168, 173], - "type": "GoboIndex", - "index": 1, + "type": "WheelShake", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast" }, { "dmxRange": [174, 179], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [180, 217], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "menuClick": "center" }, { "dmxRange": [218, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" diff --git a/fixtures/showtec/phantom-50-led-spot.json b/fixtures/showtec/phantom-50-led-spot.json index bba90ff55b..3982c5df28 100644 --- a/fixtures/showtec/phantom-50-led-spot.json +++ b/fixtures/showtec/phantom-50-led-spot.json @@ -35,6 +35,90 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#fef201"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#c600ce"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#017f01"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#941e30"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#0155e9"] + }, + { + "type": "Color", + "name": "Light Green", + "colors": ["#01c702"] + }, + { + "type": "Color", + "name": "Orange", + "colors": ["#ca450c"] + }, + { + "type": "Color", + "name": "Dark Blue", + "colors": ["#2921d3"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Gobo 1 Glass" + }, + { + "type": "Gobo", + "name": "Gobo 2 Glass" + }, + { + "type": "Gobo", + "name": "Gobo 3 Metal" + }, + { + "type": "Gobo", + "name": "Gobo 4 Metal" + }, + { + "type": "Gobo", + "name": "Gobo 5 Metal" + }, + { + "type": "Gobo", + "name": "Gobo 6 Metal" + }, + { + "type": "Gobo", + "name": "Gobo 7 Metal" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -68,140 +152,104 @@ "capabilities": [ { "dmxRange": [0, 6], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "slotNumber": 1 }, { "dmxRange": [7, 13], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#fef201"], - "comment": "Yellow" + "type": "WheelSlot", + "slotNumber": 2 }, { "dmxRange": [14, 20], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#c600ce"], - "comment": "Pink" + "type": "WheelSlot", + "slotNumber": 3 }, { "dmxRange": [21, 27], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#017f01"], - "comment": "Green" + "type": "WheelSlot", + "slotNumber": 4 }, { "dmxRange": [28, 34], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#941e30"], - "comment": "Red" + "type": "WheelSlot", + "slotNumber": 5 }, { "dmxRange": [35, 41], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#0155e9"], - "comment": "Light Blue" + "type": "WheelSlot", + "slotNumber": 6 }, { "dmxRange": [42, 48], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#01c702"], - "comment": "Light Green" + "type": "WheelSlot", + "slotNumber": 7 }, { "dmxRange": [49, 55], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ca450c"], - "comment": "Orange" + "type": "WheelSlot", + "slotNumber": 8 }, { "dmxRange": [56, 64], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#2921d3"], - "comment": "Dark Blue" + "type": "WheelSlot", + "slotNumber": 9 }, { "dmxRange": [65, 71], - "type": "ColorWheelIndex", - "index": 0.5, - "colors": ["#ffffff", "#fef201"], - "comment": "Split Open / Yellow" + "type": "WheelSlot", + "slotNumber": 1.5 }, { "dmxRange": [72, 78], - "type": "ColorWheelIndex", - "index": 1.5, - "colors": ["#fef201", "#c600ce"], - "comment": "Split Yellow / Pink" + "type": "WheelSlot", + "slotNumber": 2.5 }, { "dmxRange": [79, 85], - "type": "ColorWheelIndex", - "index": 2.5, - "colors": ["#c600ce", "#017f01"], - "comment": "Split Pink / Green" + "type": "WheelSlot", + "slotNumber": 3.5 }, { "dmxRange": [86, 92], - "type": "ColorWheelIndex", - "index": 3.5, - "colors": ["#017f01", "#941e30"], - "comment": "Split Green / Red" + "type": "WheelSlot", + "slotNumber": 4.5 }, { "dmxRange": [93, 99], - "type": "ColorWheelIndex", - "index": 4.5, - "colors": ["#941e30", "#0155e9"], - "comment": "Split Red / Light Blue" + "type": "WheelSlot", + "slotNumber": 5.5 }, { "dmxRange": [100, 106], - "type": "ColorWheelIndex", - "index": 5.5, - "colors": ["#0155e9", "#01c702"], - "comment": "Split Light Blue / Light Green" + "type": "WheelSlot", + "slotNumber": 6.5 }, { "dmxRange": [107, 113], - "type": "ColorWheelIndex", - "index": 6.5, - "colors": ["#01c702", "#ca450c"], - "comment": "Split Light Green / Orange" + "type": "WheelSlot", + "slotNumber": 7.5 }, { "dmxRange": [114, 120], - "type": "ColorWheelIndex", - "index": 7.5, - "colors": ["#ca450c", "#2921d3"], - "comment": "Split Orange / Dark Blue" + "type": "WheelSlot", + "slotNumber": 8.5 }, { "dmxRange": [121, 127], - "type": "ColorWheelIndex", - "index": 8.5, - "colors": ["#2921d3", "#ffffff"], - "comment": "Split Dark Blue / Open" + "type": "WheelSlot", + "slotNumber": 9.5 }, { "dmxRange": [128, 191], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CW", "speedEnd": "fast CW", "menuClick": "center" }, { "dmxRange": [192, 255], - "type": "ColorWheelRotation", + "type": "WheelRotation", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" @@ -247,131 +295,133 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1, - "comment": "1 Glass" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2, - "comment": "2 Glass" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3, - "comment": "3 Metal" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4, - "comment": "4 Metal" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5, - "comment": "5 Metal" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6, - "comment": "6 Metal" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7, - "comment": "7 Metal" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 7, - "comment": "7 Metal", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 8, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [72, 79], - "type": "GoboIndex", - "index": 6, - "comment": "6 Metal", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 7, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [80, 87], - "type": "GoboIndex", - "index": 5, - "comment": "5 Metal", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 6, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [88, 95], - "type": "GoboIndex", - "index": 4, - "comment": "4 Metal", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 5, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [96, 103], - "type": "GoboIndex", - "index": 3, - "comment": "3 Metal", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 4, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [104, 111], - "type": "GoboIndex", - "index": 2, - "comment": "2 Glass", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 3, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [112, 119], - "type": "GoboIndex", - "index": 1, - "comment": "1 Glass", + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 2, "shakeSpeedStart": "slow", "shakeSpeedEnd": "fast", "menuClick": "center" }, { "dmxRange": [120, 127], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [128, 191], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW", "menuClick": "center" }, { "dmxRange": [192, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" @@ -383,27 +433,31 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speed": "stop" }, { "dmxRange": [8, 119], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW", "menuClick": "center" }, { "dmxRange": [120, 231], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW", "menuClick": "center" }, { "dmxRange": [232, 255], - "type": "Effect", - "effectName": "Gobo Wheel slot shake" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "isShaking": "slot" } ] }, diff --git a/fixtures/stairville/mh-x25.json b/fixtures/stairville/mh-x25.json index 36d2a01956..8658366fed 100644 --- a/fixtures/stairville/mh-x25.json +++ b/fixtures/stairville/mh-x25.json @@ -28,6 +28,90 @@ "tiltMax": 270 } }, + "wheels": { + "Color Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Color", + "name": "Yellow", + "colors": ["#ffff00"] + }, + { + "type": "Color", + "name": "Pink", + "colors": ["#ff00ff"] + }, + { + "type": "Color", + "name": "Green", + "colors": ["#00ff00"] + }, + { + "type": "Color", + "name": "Peachblow", + "colors": ["#d7735b"] + }, + { + "type": "Color", + "name": "Light Blue", + "colors": ["#add8e6"] + }, + { + "type": "Color", + "name": "Yellow-Green", + "colors": ["#ccfe50"] + }, + { + "type": "Color", + "name": "Red", + "colors": ["#ff0000"] + }, + { + "type": "Color", + "name": "Blue", + "colors": ["#0000ff"] + } + ] + }, + "Gobo Wheel": { + "slots": [ + { + "type": "Open" + }, + { + "type": "Gobo", + "name": "Gobo 2" + }, + { + "type": "Gobo", + "name": "Gobo 3" + }, + { + "type": "Gobo", + "name": "Gobo 4" + }, + { + "type": "Gobo", + "name": "Gobo 5" + }, + { + "type": "Gobo", + "name": "Gobo 6" + }, + { + "type": "Gobo", + "name": "Gobo 7" + }, + { + "type": "Gobo", + "name": "Gobo 8" + } + ] + } + }, "availableChannels": { "Pan": { "fineChannelAliases": ["Pan fine"], @@ -51,147 +135,120 @@ "capabilities": [ { "dmxRange": [0, 4], - "type": "ColorWheelIndex", - "index": 0, - "colors": ["#ffffff"], - "comment": "Open" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 1 }, { "dmxRange": [5, 9], - "type": "ColorWheelIndex", - "index": 1, - "colors": ["#ffff00"], - "comment": "Yellow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 2 }, { "dmxRange": [10, 14], - "type": "ColorWheelIndex", - "index": 2, - "colors": ["#ff00ff"], - "comment": "Pink" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 3 }, { "dmxRange": [15, 19], - "type": "ColorWheelIndex", - "index": 3, - "colors": ["#00ff00"], - "comment": "Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 4 }, { "dmxRange": [20, 24], - "type": "ColorWheelIndex", - "index": 4, - "colors": ["#d7735b"], - "comment": "Peachblow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 5 }, { "dmxRange": [25, 29], - "type": "ColorWheelIndex", - "index": 5, - "colors": ["#add8e6"], - "comment": "Light Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 6 }, { "dmxRange": [30, 34], - "type": "ColorWheelIndex", - "index": 6, - "colors": ["#ccfe50"], - "comment": "Yellow-Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 7 }, { "dmxRange": [35, 39], - "type": "ColorWheelIndex", - "index": 7, - "colors": ["#ff0000"], - "comment": "Red" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 8 }, { "dmxRange": [40, 44], - "type": "ColorWheelIndex", - "index": 8, - "colors": ["#0000ff"], - "comment": "Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumber": 9 }, { "dmxRange": [45, 54], - "type": "ColorWheelIndex", - "indexStart": 0, - "indexEnd": 1, - "colorsStart": ["#ffffff"], - "colorsEnd": ["#ffff00"], - "comment": "Open … Yellow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 1, + "slotNumberEnd": 2 }, { "dmxRange": [55, 64], - "type": "ColorWheelIndex", - "indexStart": 1, - "indexEnd": 2, - "colorsStart": ["#ffff00"], - "colorsEnd": ["#ff00ff"], - "comment": "Yellow … Pink" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 2, + "slotNumberEnd": 3 }, { "dmxRange": [65, 73], - "type": "ColorWheelIndex", - "indexStart": 2, - "indexEnd": 3, - "colorsStart": ["#ff00ff"], - "colorsEnd": ["#00ff00"], - "comment": "Pink … Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 3, + "slotNumberEnd": 4 }, { "dmxRange": [74, 83], - "type": "ColorWheelIndex", - "indexStart": 3, - "indexEnd": 4, - "colorsStart": ["#00ff00"], - "colorsEnd": ["#d7735b"], - "comment": "Green … Peachblow" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 4, + "slotNumberEnd": 5 }, { "dmxRange": [84, 92], - "type": "ColorWheelIndex", - "indexStart": 4, - "indexEnd": 5, - "colorsStart": ["#d7735b"], - "colorsEnd": ["#add8e6"], - "comment": "Peachblow … Light Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 5, + "slotNumberEnd": 6 }, { "dmxRange": [93, 101], - "type": "ColorWheelIndex", - "indexStart": 5, - "indexEnd": 6, - "colorsStart": ["#add8e6"], - "colorsEnd": ["#ccfe50"], - "comment": "Light Blue … Yellow-Green" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 6, + "slotNumberEnd": 7 }, { "dmxRange": [102, 110], - "type": "ColorWheelIndex", - "indexStart": 6, - "indexEnd": 7, - "colorsStart": ["#ccfe50"], - "colorsEnd": ["#ff0000"], - "comment": "Yellow-Green … Red" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 7, + "slotNumberEnd": 8 }, { "dmxRange": [111, 119], - "type": "ColorWheelIndex", - "indexStart": 7, - "indexEnd": 8, - "colorsStart": ["#ff0000"], - "colorsEnd": ["#0000ff"], - "comment": "Red … Blue" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 8, + "slotNumberEnd": 9 }, { "dmxRange": [120, 127], - "type": "ColorWheelIndex", - "indexStart": 8, - "indexEnd": 9, - "colorsStart": ["#0000ff"], - "colorsEnd": ["#ffffff"], - "comment": "Blue … Open" + "type": "WheelSlot", + "wheel": "Color Wheel", + "slotNumberStart": 9, + "slotNumberEnd": 10 }, { "dmxRange": [128, 191], @@ -239,116 +296,111 @@ "capabilities": [ { "dmxRange": [0, 7], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [8, 15], - "type": "GoboIndex", - "index": 1, - "comment": "Gobo 2" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [16, 23], - "type": "GoboIndex", - "index": 2, - "comment": "Gobo 3" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [24, 31], - "type": "GoboIndex", - "index": 3, - "comment": "Gobo 4" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [32, 39], - "type": "GoboIndex", - "index": 4, - "comment": "Gobo 5" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [40, 47], - "type": "GoboIndex", - "index": 5, - "comment": "Gobo 6" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [48, 55], - "type": "GoboIndex", - "index": 6, - "comment": "Gobo 7" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [56, 63], - "type": "GoboIndex", - "index": 7, - "comment": "Gobo 8" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 8 }, { "dmxRange": [64, 71], - "type": "GoboIndex", - "index": 7, - "shakeAngle": "wide", - "comment": "Gobo 8" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 8 }, { "dmxRange": [72, 79], - "type": "GoboIndex", - "index": 6, - "shakeAngle": "wide", - "comment": "Gobo 7" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 7 }, { "dmxRange": [80, 87], - "type": "GoboIndex", - "index": 5, - "shakeAngle": "wide", - "comment": "Gobo 6" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 6 }, { "dmxRange": [88, 95], - "type": "GoboIndex", - "index": 4, - "shakeAngle": "wide", - "comment": "Gobo 5" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 5 }, { "dmxRange": [96, 103], - "type": "GoboIndex", - "index": 3, - "shakeAngle": "wide", - "comment": "Gobo 4" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 4 }, { "dmxRange": [104, 111], - "type": "GoboIndex", - "index": 2, - "shakeAngle": "wide", - "comment": "Gobo 3" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 3 }, { "dmxRange": [112, 119], - "type": "GoboIndex", - "index": 1, - "shakeAngle": "wide", - "comment": "Gobo 2" + "type": "WheelShake", + "wheel": "Gobo Wheel", + "slotNumber": 2 }, { "dmxRange": [120, 127], - "type": "GoboIndex", - "index": 0, - "comment": "Open" + "type": "WheelSlot", + "wheel": "Gobo Wheel", + "slotNumber": 1 }, { "dmxRange": [128, 191], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [192, 255], - "type": "GoboWheelRotation", + "type": "WheelRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" } @@ -358,19 +410,22 @@ "capabilities": [ { "dmxRange": [0, 63], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "angleStart": "0deg", "angleEnd": "360deg" }, { "dmxRange": [64, 147], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CW", "speedEnd": "fast CW" }, { "dmxRange": [148, 231], - "type": "GoboStencilRotation", + "type": "WheelSlotRotation", + "wheel": "Gobo Wheel", "speedStart": "slow CCW", "speedEnd": "fast CCW" }, diff --git a/lib/fixture-features/wheels.js b/lib/fixture-features/wheels.js new file mode 100644 index 0000000000..35d77b2703 --- /dev/null +++ b/lib/fixture-features/wheels.js @@ -0,0 +1,58 @@ +/* eslint-disable no-unused-vars */ +const { + AbstractChannel, + Capability, + CoarseChannel, + FineChannel, + Fixture, + Manufacturer, + Matrix, + Meta, + Mode, + NullChannel, + Physical, + Range, + SwitchingChannel, + TemplateChannel +} = require(`../model.js`); +/* eslint-enable no-unused-vars */ + +const schemaProperties = require(`../../lib/schema-properties.js`); + +/** @type {Array.} */ +const wheelSlotTypes = Object.keys(schemaProperties.wheelSlotTypes); + +/** @type {Array.} */ +const wheelTypes = wheelSlotTypes.filter(type => !type.startsWith(`AnimationGobo`)).concat(`AnimationGobo`); + +const wheelTypeFeatures = wheelTypes.map(type => ({ + id: `wheel-type-${type}`, + name: `Wheel type ${type}`, + description: `Whether the fixture has at least one wheel of type '${type}'`, + + /** + * @param {Fixture} fixture The Fixture instance + * @returns {boolean} true if the fixture has at least one wheel of the current type + */ + hasFeature: fixture => fixture.wheels.some( + wheel => wheel.type === type + ) +})); + +const wheelSlotTypeFeatures = wheelSlotTypes.map(type => ({ + id: `wheel-slot-type-${type}`, + name: `Wheel slot type ${type}`, + description: `Whether the fixture has at least one wheel slot of type '${type}'`, + + /** + * @param {Fixture} fixture The Fixture instance + * @returns {boolean} true if the fixture has at least one wheel slot of the current type + */ + hasFeature: fixture => fixture.wheels.some( + wheel => wheel.slots.some( + slot => slot.type === type + ) + ) +})); + +module.exports = wheelTypeFeatures.concat(wheelSlotTypeFeatures); diff --git a/lib/model.js b/lib/model.js index d00327acc8..d4051833fa 100644 --- a/lib/model.js +++ b/lib/model.js @@ -17,6 +17,8 @@ const Physical = require(`./model/Physical.mjs`).default; const Range = require(`./model/Range.mjs`).default; const SwitchingChannel = require(`./model/SwitchingChannel.mjs`).default; const TemplateChannel = require(`./model/TemplateChannel.mjs`).default; +const Wheel = require(`./model/Wheel.mjs`).default; +const WheelSlot = require(`./model/WheelSlot.mjs`).default; /** * Look up the fixture definition in the directory structure and create a Fixture instance. @@ -73,6 +75,8 @@ module.exports = { Range, SwitchingChannel, TemplateChannel, + Wheel, + WheelSlot, fixtureFromFile, fixtureFromRepository diff --git a/lib/model/Capability.mjs b/lib/model/Capability.mjs index c5a6185cff..8fc636fc21 100644 --- a/lib/model/Capability.mjs +++ b/lib/model/Capability.mjs @@ -4,7 +4,7 @@ import Range from './Range.mjs'; import scaleDmxValuesJs from '../scale-dmx-values.js'; const { scaleDmxRange } = scaleDmxValuesJs; -const START_END_ENTITIES = [`speed`, `duration`, `time`, `brightness`, `index`, `angle`, `colorTemperature`, `soundSensitivity`, `shakeAngle`, `shakeSpeed`, `distance`, `openPercent`, `frostIntensity`, `insertion`, `fogOutput`, `parameter`]; +const START_END_ENTITIES = [`speed`, `duration`, `time`, `brightness`, `slotNumber`, `angle`, `colorTemperature`, `soundSensitivity`, `shakeAngle`, `shakeSpeed`, `distance`, `openPercent`, `frostIntensity`, `insertion`, `fogOutput`, `parameter`]; const namePerType = { NoFunction: cap => cap.comment || `No function`, @@ -52,30 +52,6 @@ const namePerType = { return name; }, - ColorWheelIndex: cap => { - let name; - - const [indexStart, indexEnd] = cap.index; - if (cap.hasComment) { - name = `${cap.comment}`; - } - else if (indexStart.equals(indexEnd)) { - name = `Color ${indexStart.number}`; - } - else { - name = `Colors ${indexStart.number}…${indexEnd.number}`; - } - - if (cap.colorTemperature) { - name += ` (${colorTemperaturesToString(cap.colorTemperature)})`; - } - - return name; - }, - ColorWheelRotation: cap => { - const speedOrAngle = cap.speed !== null ? `speed` : `angle`; - return appendInBrackets(`Color Wheel rotation ${startEndToString(cap[speedOrAngle], speedOrAngle, true)}`, cap.comment); - }, ColorTemperature: cap => appendInBrackets(`Color temperature ${colorTemperaturesToString(cap.colorTemperature)}`, cap.comment), Pan: cap => appendInBrackets(`Pan ${startEndToString(cap.angle, `angle`, true)}`, cap.comment), PanContinuous: cap => appendInBrackets(`Pan ${startEndToString(cap.speed, `speed`, true)}`, cap.comment), @@ -93,6 +69,39 @@ const namePerType = { return appendInBrackets(name, cap.comment); }, + WheelSlot: cap => appendInBrackets(getSlotCapabilityName(cap), cap.comment), + WheelShake: cap => { + let name = cap.slotNumber ? getSlotCapabilityName(cap) : cap.wheels.map(wheel => wheel.name).join(`, `); + + if (cap.isShaking === `slot`) { + name += ` slot`; + } + + name += ` shake`; + + if (cap.shakeAngle) { + name += ` ${startEndToString(cap.shakeAngle, `angle`, true)}`; + } + + if (cap.shakeSpeed) { + name += ` ${startEndToString(cap.shakeSpeed, `speed`, true)}`; + } + + return appendInBrackets(name, cap.comment); + }, + WheelSlotRotation: cap => { + let wheelSlotName = cap.wheelSlot ? cap.wheelSlot[0].name : cap.wheels[0].type; + if (wheelSlotName === `Gobo`) { + wheelSlotName = `Gobo stencil`; + } + + const speedOrAngle = cap.speed !== null ? `speed` : `angle`; + return appendInBrackets(`${wheelSlotName} rotation ${startEndToString(cap[speedOrAngle], speedOrAngle, true)}`, cap.comment); + }, + WheelRotation: cap => { + const speedOrAngle = cap.speed !== null ? `speed` : `angle`; + return appendInBrackets(`${cap.wheels[0] ? cap.wheels[0].name : `Wheel`} rotation ${startEndToString(cap[speedOrAngle], speedOrAngle, true)}`, cap.comment); + }, Effect: cap => { let name = cap.effectName; @@ -123,51 +132,6 @@ const namePerType = { EffectDuration: cap => appendInBrackets(`Effect duration ${startEndToString(cap.duration)}`, cap.comment), EffectParameter: cap => `${cap.comment || `Effect parameter`} ${startEndToString(cap.parameter)}`, SoundSensitivity: cap => appendInBrackets(`Sound sensitivity ${startEndToString(cap.soundSensitivity)}`, cap.comment), - GoboIndex: cap => { - let name = ``; - - if (cap.hasComment) { - name = cap.comment.replace(/^(?:gobo\s+|)(?!open|closed)/i, `Gobo `); - } - else { - name = `Gobo ${startEndToString(cap.index)}`; - } - - if (cap.isShaking) { - name += ` shake`; - - if (cap.shakeAngle && (cap.shakeAngle[0].keyword !== `wide` || cap.shakeAngle[1].keyword !== `wide`)) { - name += ` ${startEndToString(cap.shakeAngle, `shake angle`)}`; - } - - if (cap.shakeSpeed) { - name += ` ${startEndToString(cap.shakeSpeed, `speed`)}`; - } - } - - return name; - }, - GoboShake: cap => { - let name = `Gobo Wheel shake`; - - if (cap.shakeAngle) { - name += ` ${startEndToString(cap.shakeAngle, `angle`, true)}`; - } - - if (cap.shakeSpeed) { - name += ` ${startEndToString(cap.shakeSpeed, `speed`, true)}`; - } - - return appendInBrackets(name, cap.comment); - }, - GoboStencilRotation: cap => { - const speedOrAngle = cap.speed !== null ? `speed` : `angle`; - return appendInBrackets(`Gobo stencil rotation ${startEndToString(cap[speedOrAngle], speedOrAngle, true)}`, cap.comment); - }, - GoboWheelRotation: cap => { - const speedOrAngle = cap.speed !== null ? `speed` : `angle`; - return appendInBrackets(`Gobo Wheel rotation ${startEndToString(cap[speedOrAngle], speedOrAngle, true)}`, cap.comment); - }, Focus: cap => appendInBrackets(`Focus ${startEndToString(cap.distance, `distance`)}`, cap.comment), Zoom: cap => appendInBrackets(`Zoom ${startEndToString(cap.angle, `beam angle`)}`, cap.comment), Iris: cap => appendInBrackets(`Iris ${startEndToString(cap.openPercent, `open`)}`, cap.comment), @@ -244,6 +208,28 @@ const namePerType = { Generic: cap => cap.comment || `Generic` }; +/** + * @param {object} cap The capability (with a set slot property) to generate a name for. + * @returns {string} The name for the capability, without the comment appended (if any). + */ +function getSlotCapabilityName(cap) { + if (cap.wheelSlot === null) { + // should only happen when fixture is invalid anyway + return `Unknown wheel slot`; + } + + let name; + + if (cap.slotNumber[0].number === cap.slotNumber[1].number) { + name = cap.wheelSlot[0].name; + } + else { + name = cap.wheelSlot.map(slot => slot.name).join(` … `); + } + + return name; +} + /** * A capability represents a range of a channel. */ @@ -422,7 +408,7 @@ class Capability { } return this.usedStartEndEntities.every(prop => { - const tolerance = prop === `index` ? 0 : 1; + const tolerance = prop === `slotNumber` ? 0 : 1; const delta = nextCapability[prop][0].number - this[prop][1].number; return Math.abs(delta) <= tolerance; }); @@ -493,43 +479,80 @@ class Capability { */ get colors() { if (!(`colors` in this._cache)) { - const fixedColors = { - Open: [`#ffffff`], - Closed: [`#000000`], - 'Open … Closed': [`#ffffff`, `#000000`], - 'Closed … Open': [`#000000`, `#ffffff`] - }; - - if (`colors` in this._jsonObject) { - this._cache.colors = { - startColors: this._jsonObject.colors, - endColors: this._jsonObject.colors, - allColors: this._jsonObject.colors, - isStep: true - }; + let startColors = this._jsonObject.colors; + let endColors = this._jsonObject.colors; + let isStep = true; + + const isColorWheelSlot = () => this.wheelSlot !== null && this.wheelSlot[0].colors !== null && this.wheelSlot[1].colors !== null; + + if (isColorWheelSlot()) { + startColors = this.wheelSlot[0].colors; + endColors = this.wheelSlot[1].colors; + isStep = this.slotNumber[0].number === this.slotNumber[1].number; } else if (`colorsStart` in this._jsonObject) { - this._cache.colors = { - startColors: this._jsonObject.colorsStart, - endColors: this._jsonObject.colorsEnd, - allColors: this._jsonObject.colorsStart.concat(this._jsonObject.colorsEnd), - isStep: false - }; + startColors = this._jsonObject.colorsStart; + endColors = this._jsonObject.colorsEnd; + isStep = false; } - else if (this.type === `GoboIndex` && Object.keys(fixedColors).includes(this.comment)) { - this._cache.colors = { - startColors: fixedColors[this.comment], - endColors: fixedColors[this.comment], - allColors: fixedColors[this.comment], - isStep: true - }; + + this._cache.colors = startColors ? { + startColors, + endColors, + allColors: startColors.concat(isStep ? [] : endColors), + isStep + } : null; + } + + return this._cache.colors; + } + + /** + * @returns {array.} The wheels this capability refers to. The array has one or more elements in wheel-related capabilities, zero otherwise. + */ + get wheels() { + if (!(`wheels` in this._cache)) { + let wheelNames; + + if (`wheel` in this._jsonObject) { + wheelNames = [].concat(this._jsonObject.wheel); + } + else if (this.type.includes(`Wheel`)) { + // default to channel name + wheelNames = [this._channel.name]; } else { - this._cache.colors = null; + wheelNames = []; } + + this._cache.wheels = wheelNames.map(wheelName => this._channel.fixture.getWheelByName(wheelName)); } - return this._cache.colors; + return this._cache.wheels; + } + + /** + * @param {string|RegExp} slotType The type of the slot to check. Can be a regular expression to be checked against the type. + * @returns {boolean} True if the capability references a slot (or range of slots) of the given type, false otherwise. + */ + isSlotType(slotType) { + // eslint-disable-next-line security/detect-non-literal-regexp + const slotTypeRegExp = slotType instanceof RegExp ? slotType : new RegExp(`^${slotType}$`); + + const isCorrectSlotType = slot => slotTypeRegExp.test(slot.type) || ([`Open`, `Closed`].includes(slot.type) && slotTypeRegExp.test(this.wheels[0].type)); + + return this.slotNumber !== null && this.wheelSlot.every(slot => { + return isCorrectSlotType(slot) + || (slot.type === `Split` && isCorrectSlotType(slot.floorSlot) && isCorrectSlotType(slot.ceilSlot)); + }); + } + + /** + * Use only in `WheelShake` capabilities! + * @returns {'slot'|'wheel'} The fixture component that is shaking. + */ + get isShaking() { + return this.jsonObject.isShaking || `wheel`; } /** @@ -575,21 +598,6 @@ class Capability { return this._jsonObject.randomTiming === true; } - /** - * @returns {boolean} True if this is a capability that activates Gobo shaking, false otherwise. - */ - get isShaking() { - if (!(`isShaking` in this._cache)) { - const angleUsed = this.shakeAngle !== null; - const zeroAngle = angleUsed && (this.shakeAngle[0].number === 0 || this.shakeAngle[1].number === 0); - const speedUsed = this.shakeSpeed !== null; - - this._cache.isShaking = (angleUsed || speedUsed) && !zeroAngle; - } - - return this._cache.isShaking; - } - /** * @returns {'Top'|'Right'|'Bottom'|'Left'|number|null} At which position the blade is attached. Defaults to null. */ @@ -672,14 +680,33 @@ class Capability { } /** - * @returns {array.|null} Start and end index values. Defaults to null. + * @returns {array.|null} Start and end slot numbers. Defaults to null. + */ + get slotNumber() { + if (!(`slotNumber` in this._cache)) { + this._cache.slotNumber = this._getStartEndArray(`slotNumber`); + } + + return this._cache.slotNumber; + } + + /** + * @returns {array.|null} Start and end wheel slot objects this capability is referencing. Defaults to null. */ - get index() { - if (!(`index` in this._cache)) { - this._cache.index = this._getStartEndArray(`index`); + get wheelSlot() { + if (this.slotNumber === null) { + return null; + } + + if (this.wheels.length !== 1) { + throw new RangeError(`When accessing the current wheel slot, the referenced wheel must be unambiguous.`); + } + + if (!(`wheelSlot` in this._cache)) { + this._cache.wheelSlot = this.wheels[0] ? this.slotNumber.map(slotNumber => this.wheels[0].getSlot(slotNumber.number)) : null; } - return this._cache.index; + return this._cache.wheelSlot; } /** diff --git a/lib/model/CoarseChannel.mjs b/lib/model/CoarseChannel.mjs index 09a18ee680..6be186f4c0 100644 --- a/lib/model/CoarseChannel.mjs +++ b/lib/model/CoarseChannel.mjs @@ -9,16 +9,26 @@ const { scaleDmxValue } = scaleDmxValuesJs; const channelTypeConstraints = { 'Single Color': [`ColorIntensity`], - 'Multi-Color': [`ColorPreset`, `ColorWheelIndex`], + 'Multi-Color': { + required: [`ColorPreset`, `WheelSlot`], + predicate: channel => channel.capabilities.every( + cap => cap.type !== `WheelSlot` || (cap.wheels[0] && cap.wheels[0].type === `Color`) + ) + }, 'Pan': [`Pan`, `PanContinuous`], 'Tilt': [`Tilt`, `TiltContinuous`], 'Focus': [`Focus`], 'Zoom': [`Zoom`], 'Iris': [`Iris`, `IrisEffect`], - 'Gobo': [`GoboIndex`, `GoboShake`], + 'Gobo': { + required: [`WheelSlot`, `WheelShake`], + predicate: channel => channel.capabilities.every( + cap => cap.wheels.every(wheel => wheel && wheel.type === `Gobo`) + ) + }, 'Prism': [`Prism`], 'Color Temperature': [`ColorTemperature`], - 'Effect': [`Effect`, `EffectParameter`, `Frost`, `FrostEffect`, `SoundSensitivity`], + 'Effect': [`Effect`, `EffectParameter`, `Frost`, `FrostEffect`, `SoundSensitivity`, `WheelSlot`], 'Strobe': { required: [`ShutterStrobe`], predicate: channel => channel.capabilities.some( @@ -27,7 +37,7 @@ const channelTypeConstraints = { }, 'Shutter': [`ShutterStrobe`, `BladeInsertion`, `BladeRotation`, `BladeSystemRotation`], 'Fog': [`Fog`, `FogOutput`, `FogType`], - 'Speed': [`StrobeSpeed`, `StrobeDuration`, `ColorWheelRotation`, `PanTiltSpeed`, `EffectSpeed`, `EffectDuration`, `GoboStencilRotation`, `GoboWheelRotation`, `PrismRotation`, `Rotation`, `Speed`, `Time`], + 'Speed': [`StrobeSpeed`, `StrobeDuration`, `PanTiltSpeed`, `EffectSpeed`, `EffectDuration`, `PrismRotation`, `Rotation`, `Speed`, `Time`, `WheelSlotRotation`, `WheelRotation`, `WheelShake`], 'Maintenance': [`Maintenance`], 'Intensity': [`Intensity`, `BeamAngle`, `Generic`], 'NoFunction': [`NoFunction`] diff --git a/lib/model/Fixture.mjs b/lib/model/Fixture.mjs index 1ff8e31447..39b6ff7213 100644 --- a/lib/model/Fixture.mjs +++ b/lib/model/Fixture.mjs @@ -8,6 +8,7 @@ import NullChannel from './NullChannel.mjs'; import Physical from './Physical.mjs'; import SwitchingChannel from './SwitchingChannel.mjs'; import TemplateChannel from './TemplateChannel.mjs'; +import Wheel from './Wheel.mjs'; import packageJson from '../../package.json'; @@ -226,6 +227,35 @@ class Fixture { return this._cache.matrix; } + /** + * @returns {array.} The fixture's wheels as {@link Wheel} instances. + */ + get wheels() { + if (!(`wheels` in this._cache)) { + this._cache.wheels = Object.entries(this._jsonObject.wheels || {}).map( + ([wheelName, wheelJson]) => new Wheel(wheelName, wheelJson) + ); + } + + return this._cache.wheels; + } + + /** + * @param {string} wheelName The name of the wheel. + * @returns {Wheel|null} The wheel with the given name, or null if no wheel with the given name exists. + */ + getWheelByName(wheelName) { + if (!(`wheelByName` in this._cache)) { + this._cache.wheelByName = {}; + + this.wheels.forEach(wheel => { + this._cache.wheelByName[wheel.name] = wheel; + }); + } + + return this._cache.wheelByName[wheelName] || null; + } + /** * @returns {object} Channel keys from {@link Fixture#allChannelKeys} pointing to unique versions of their channel names. */ diff --git a/lib/model/Wheel.mjs b/lib/model/Wheel.mjs new file mode 100644 index 0000000000..b151bd7f82 --- /dev/null +++ b/lib/model/Wheel.mjs @@ -0,0 +1,117 @@ +import WheelSlot from "./WheelSlot.mjs"; + +/** + * Information about a fixture's wheel. + */ +class Wheel { + /** + * Creates a new Wheel instance. + * @param {string} wheelName The wheel's name, like specified in the JSON. + * @param {object} jsonObject A wheel object from the fixture's JSON data. + */ + constructor(wheelName, jsonObject) { + this._name = wheelName; + this._jsonObject = jsonObject; + this._cache = { + splitSlots: {}, + slotsOfType: {} + }; + } + + /** + * @returns {string} The wheel's name. + */ + get name() { + return this._name; + } + + /** + * @returns {'CW'|'CCW'} The direction the wheel's slots are arranged in. Defaults to clockwise. + */ + get direction() { + return this._jsonObject.direction || `CW`; + } + + /** + * @returns {string} The type of the Wheel, i.e. the most frequent slot type (except for animation gobo wheels; the wheel type is AnimationGobo there). + */ + get type() { + // see https://stackoverflow.com/a/20762713/451391 + + const slotTypes = this.slots.map(slot => slot.type); + + // sort by number of occurrences + slotTypes.sort((a, b) => { + const occurrencesOfA = slotTypes.filter(type => type === a); + const occurrencesOfB = slotTypes.filter(type => type === b); + return occurrencesOfA.length - occurrencesOfB.length; + }); + + const type = slotTypes.pop(); + + if (type.startsWith(`AnimationGobo`)) { + return `AnimationGobo`; + } + + return type; + } + + /** + * @returns {array.} Array of wheel slots. + */ + get slots() { + if (!(`slots` in this._cache)) { + this._cache.slots = this._jsonObject.slots.map(slotJson => new WheelSlot(slotJson, this)); + } + + return this._cache.slots; + } + + /** + * @param {number} slotNumber The one-based slot number. + * @returns {object} The slot object. Can be a split slot object, if a non-integer index is specified. + */ + getSlot(slotNumber) { + if (slotNumber % 1 === 0) { + return this.slots[this.getAbsoluteSlotIndex(slotNumber)]; + } + + const floorIndex = this.getAbsoluteSlotIndex(Math.floor(slotNumber)); + const ceilIndex = this.getAbsoluteSlotIndex(Math.ceil(slotNumber)); + const splitKey = `Split ${floorIndex}/${ceilIndex}`; + + if (!(splitKey in this._cache.splitSlots)) { + // split slot + const floorSlot = this.slots[floorIndex]; + const ceilSlot = this.slots[ceilIndex]; + + this._cache.splitSlots[splitKey] = new WheelSlot(null, this, floorSlot, ceilSlot); + } + + return this._cache.splitSlots[splitKey]; + } + + /** + * @param {number} slotNumber The one-based slot number, can be smaller than 1 and greater than the number of slots. + * @returns {number} The zero-based slot index, bounded by the number of slots. + */ + getAbsoluteSlotIndex(slotNumber) { + return ((slotNumber - 1) % this.slots.length) + (slotNumber < 1 ? this.slots.length : 0); + } + + /** + * @param {string} type The wheel slot type to search for. + * @returns {array.} All slots with the given type. + */ + getSlotsOfType(type) { + if (!(type in this._cache.slotsOfType)) { + this._cache.slotsOfType[type] = this.slots.filter( + slot => slot.type === type + ); + } + + return this._cache.slotsOfType[type]; + } +} + +export default Wheel; diff --git a/lib/model/WheelSlot.mjs b/lib/model/WheelSlot.mjs new file mode 100644 index 0000000000..b707e39b9e --- /dev/null +++ b/lib/model/WheelSlot.mjs @@ -0,0 +1,250 @@ +import Entity from './Entity.mjs'; + +const namePerType = { + Color: (slot, name) => { + if (name !== null && slot.colorTemperature !== null) { + return `${name} (${slot.colorTemperature.toString()})`; + } + + if (slot.colorTemperature !== null) { + return slot.colorTemperature.toString(); + } + + return name; + }, + Gobo: (slot, name) => { + if (name === null) { + return null; + } + + if (name.startsWith(`Gobo`)) { + return name; + } + + return `Gobo ${name}`; + }, + Prism: (slot, name) => { + if (name !== null && slot.facets !== null) { + return `${slot.facets}-facet ${name}`; + } + + if (slot.facets !== null) { + return `${slot.facets}-facet prism`; + } + + return name; + }, + Iris: (slot, name) => { + if (slot.openPercent !== null) { + return `Iris ${slot.openPercent.toString()}`; + } + + return null; + }, + Frost: (slot, name) => { + if (slot.frostIntensity !== null) { + return `Frost ${slot.frostIntensity.toString()}`; + } + + return null; + }, + Split: (slot, name) => { + return `Split ${slot.floorSlot.name} / ${slot.ceilSlot.name}`; + }, + AnimationGoboStart: (slot, name) => { + return name !== null ? `${name} Start` : null; + }, + AnimationGoboEnd: (slot, name) => { + const slotNumber = slot._wheel.slots.indexOf(slot) + 1; + const prevSlot = slot._wheel.getSlot(slotNumber - 1); + + return prevSlot._jsonObject.name ? `${prevSlot._jsonObject.name} End` : null; + }, + AnimationGobo: (slot, name) => { + return slot.floorSlot.name.replace(` Start`, ``); + }, + Default: (slot, name) => { + return name; + } +}; + +/** + * Information about a single wheel slot (or a split slot). + */ +class WheelSlot { + /** + * Creates a new WheelSlot instance. + * @param {object|null} jsonObject A wheel slot object from the fixture's JSON data. If null, this WheelSlot is a split slot. + * @param {Wheel} wheel The wheel that this slot belongs to. + * @param {WheelSlot|null} floorSlot For split slots, the WheelSlot instance at the start. + * @param {WheelSlot|null} ceilSlot For split slots, the WheelSlot instance at the end. + */ + constructor(jsonObject, wheel, floorSlot = null, ceilSlot = null) { + this._jsonObject = jsonObject; + this._wheel = wheel; + this._cache = {}; + this._floorSlot = floorSlot; + this._ceilSlot = ceilSlot; + } + + /** + * @returns {boolean} True if this WheelSlot instance represents a split slot. + */ + get isSplitSlot() { + return this._jsonObject === null; + } + + /** + * @returns {string} The slot's type. + */ + get type() { + if (!(`type` in this._cache)) { + if (!this.isSplitSlot) { + this._cache.type = this._jsonObject.type; + } + else if (this._floorSlot.type === `AnimationGoboStart`) { + this._cache.type = `AnimationGobo`; + } + else { + this._cache.type = `Split`; + } + } + + return this._cache.type; + } + + /** + * @returns {number} The zero-based index of this slot amongst all slots with the same type in this wheel. + */ + get nthOfType() { + if (!(`nthOfType` in this._cache)) { + this._cache.nthOfType = this._wheel.getSlotsOfType(this.type).indexOf(this); + } + + return this._cache.nthOfType; + } + + /** + * @returns {string} The wheel slot's name. + */ + get name() { + if (!(`name` in this._cache)) { + const nameFunction = this.type in namePerType ? namePerType[this.type] : namePerType.Default; + let name = nameFunction(this, this.isSplitSlot ? null : (this._jsonObject.name || null)); + + if (name === null) { + const typeName = this.type.replace(/([a-z])([A-Z])/g, `$1 $2`); // 'CamelCase' -> 'Camel Case' + + if (this._wheel.getSlotsOfType(this.type).length === 1) { + name = typeName; + } + else { + name = `${typeName} ${this.nthOfType + 1}`; + } + } + + this._cache.name = name; + } + + return this._cache.name; + } + + /** + * @returns {array.|null} The colors of this wheel slot, or null if this slot has no colors. + */ + get colors() { + if (!(`colors` in this._cache)) { + const fixedColors = { + Open: [`#ffffff`], + Closed: [`#000000`] + }; + + this._cache.colors = null; + + if (this.type in fixedColors) { + this._cache.colors = fixedColors[this.type]; + } + else if (this.isSplitSlot) { + if (this._floorSlot.colors && this._ceilSlot.colors) { + this._cache.colors = this._floorSlot.colors.concat(this._ceilSlot.colors); + } + } + else if (`colors` in this._jsonObject) { + this._cache.colors = this._jsonObject.colors; + } + } + + return this._cache.colors; + } + + /** + * @returns {Entity|null} For Color slots, the slot's color temperature. Null if this slot has no color temperature. + */ + get colorTemperature() { + if (!(`colorTemperature` in this._cache)) { + if (`colorTemperature` in this._jsonObject) { + this._cache.colorTemperature = Entity.createFromEntityString(this._jsonObject.colorTemperature); + } + else { + this._cache.colorTemperature = null; + } + } + + return this._cache.colorTemperature; + } + + /** + * @returns {number|null} For Prism slots, the number of prism facets. Null if number of facets is not defined. + */ + get facets() { + return this._jsonObject.facets || null; + } + + /** + * @returns {Entity|null} For Iris slots, the slot's openPercent value. Null if this slot has no openPercent value. + */ + get openPercent() { + if (!(`openPercent` in this._cache)) { + if (`openPercent` in this._jsonObject) { + this._cache.openPercent = Entity.createFromEntityString(this._jsonObject.openPercent); + } + else { + this._cache.openPercent = null; + } + } + + return this._cache.openPercent; + } + + /** + * @returns {Entity|null} For Frost slots, the slot's frost intensity. Null if this slot has no frost intensity. + */ + get frostIntensity() { + if (!(`frostIntensity` in this._cache)) { + if (`frostIntensity` in this._jsonObject) { + this._cache.frostIntensity = Entity.createFromEntityString(this._jsonObject.frostIntensity); + } + else { + this._cache.frostIntensity = null; + } + } + + return this._cache.frostIntensity; + } + + /** + * @returns {WheelSlot|null} For split slots, the floor (start) slot. Null for non-split slots. + */ + get floorSlot() { + return this._floorSlot || null; + } + + /** + * @returns {WheelSlot|null} For split slots, the ceil (end) slot. Null for non-split slots. + */ + get ceilSlot() { + return this._ceilSlot || null; + } +} + +export default WheelSlot; diff --git a/lib/schema-properties.js b/lib/schema-properties.js index be9a059a64..088ec2fe44 100644 --- a/lib/schema-properties.js +++ b/lib/schema-properties.js @@ -2,6 +2,7 @@ const manufacturersSchema = require(`../schemas/manufacturers.json`); const fixtureSchema = require(`../schemas/fixture.json`); const channelSchema = require(`../schemas/channel.json`); const capabilitySchema = require(`../schemas/capability.json`); +const wheelSlotSchema = require(`../schemas/wheel-slot.json`); const definitionsSchema = require(`../schemas/definitions.json`); const fixtureProperties = fixtureSchema.properties; @@ -13,6 +14,12 @@ capabilitySchema.allOf.forEach(ifThenClause => { capabilityTypes[type] = ifThenClause.then; }); +const wheelSlotTypes = {}; +wheelSlotSchema.allOf.forEach(ifThenClause => { + const type = ifThenClause[`if`].properties.type.const; + wheelSlotTypes[type] = ifThenClause.then; +}); + module.exports = { manufacturerKey: manufacturersSchema.propertyNames, manufacturer: manufacturersSchema.additionalProperties.properties, @@ -26,6 +33,8 @@ module.exports = { channel: channelSchema.properties, capability: capabilitySchema.properties, capabilityTypes, + wheelSlot: wheelSlotSchema.properties, + wheelSlotTypes, definitions: definitionsSchema, dimensionsXYZ: definitionsSchema.dimensionsXYZ, units: definitionsSchema.units, diff --git a/plugins/ecue/import.js b/plugins/ecue/import.js index 5dfd0110d0..1a3ad7df3f 100644 --- a/plugins/ecue/import.js +++ b/plugins/ecue/import.js @@ -271,16 +271,18 @@ function addChannelToFixture(ecueChannel, fixture, warningsArray) { cap.comment = capabilityName; }, - ColorWheelIndex() { - const color = capabilityName.toLowerCase().replace(/\s/g, ``); - if (color in colors) { - cap.color = colors[color]; + WheelSlot() { + if (ecueChannel._ecueChannelType === `ChannelColor`) { + const color = capabilityName.toLowerCase().replace(/\s/g, ``); + if (color in colors) { + cap.colors = [colors[color]]; + } } cap.comment = getSpeedGuessedComment(); if (`speedStart` in cap) { - cap.type = `ColorWheelRotation`; + cap.type = ecueChannel._ecueChannelType === `ChannelColor` ? `WheelRotation` : `WheelSlotRotation`; } }, ColorPreset() { @@ -392,7 +394,7 @@ function addChannelToFixture(ecueChannel, fixture, warningsArray) { } if (channelName.match(/wheel\b/i)) { - return `ColorWheelIndex`; + return `WheelSlot`; } return `ColorPreset`; @@ -442,10 +444,10 @@ function addChannelToFixture(ecueChannel, fixture, warningsArray) { EffectDuration: /\beffect duration\b/, Effect: /\beffect\b/, SoundSensitivity: /\b(?:sound|mic|microphone) sensitivity\b/, - GoboShake: /\bgobo shake\b/, - GoboStencilRotation: /\bgobo rot(?:ation)?\b/, - GoboWheelRotation: /\bgobo wheel rot(?:ation)?\b/, - GoboIndex: /\bgobo\b/, + WheelShake: /\bgobo shake\b/, + WheelSlotRotation: /\bgobo rot(?:ation)?\b/, + WheelRotation: /wheel rot(?:ation)?\b/, + WheelSlot: /\bgobo\b/, Focus: /\bfocus\b/, Zoom: /\bzoom\b/, IrisEffect: /\biris effect\b/, diff --git a/plugins/gdtf/gdtf-attributes.js b/plugins/gdtf/gdtf-attributes.js index d826a60ac2..0efd1a947f 100644 --- a/plugins/gdtf/gdtf-attributes.js +++ b/plugins/gdtf/gdtf-attributes.js @@ -99,12 +99,7 @@ const gdtfAttributes = { ActiveZone: undefined, // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd AnimationIndexRotate: { // Controls the animation disk's index or its rotation speed. - oflType: `Rotation`, - oflProperty: `speed`, - defaultPhysicalEntity: `AngularSpeed`, - beforePhysicalPropertyHook(capability, gdtfCapability) { - normalizeAngularSpeedDirection(gdtfCapability); - } + inheritFrom: `AnimationWheelPosSpin` }, AnimationIndexRotateMode: { // Changes control between selecting, indexing, and rotating the animation wheel. @@ -112,24 +107,44 @@ const gdtfAttributes = { oflProperty: `parameter`, defaultPhysicalEntity: `Percent` }, - AnimationOffset: undefined, // Controls the animation disk's shaking. - AnimationWheel: undefined, // Inserts a gobo disk into the beam. The disk has the ability to continuously index and rotate. + AnimationOffset: { + // Controls the animation disk's shaking. + oflType: `WheelShake`, + oflProperty: `shakeAngle`, + defaultPhysicalEntity: `Percent`, + beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = `Animation Disk`; + } + }, + AnimationWheel: { + // Inserts a gobo disk into the beam. The disk has the ability to continuously index and rotate. + oflType: `Effect`, + oflProperty: `parameter`, + defaultPhysicalEntity: `Percent`, + beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.effectName = `Animation Disk insertion`; + } + }, AnimationWheelMacro: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd inheritFrom: `Effects` }, AnimationWheelPos: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - oflType: `Rotation`, + oflType: `WheelRotation`, oflProperty: `angle`, - defaultPhysicalEntity: `Angle` + defaultPhysicalEntity: `Angle`, + beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = `Animation Disk`; + } }, AnimationWheelPosSpin: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - oflType: `Rotation`, + oflType: `WheelRotation`, oflProperty: `speed`, defaultPhysicalEntity: `AngularSpeed`, beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = `Animation Disk`; normalizeAngularSpeedDirection(gdtfCapability); } }, @@ -262,43 +277,40 @@ const gdtfAttributes = { Blower: undefined, // Fog or hazer‘s blower feature. Color1: { // Selects colors in the fixture's color wheel 1. - oflType: `ColorWheelIndex`, - oflProperty: `index`, + oflType: `WheelSlot`, + oflProperty: `slotNumber`, defaultPhysicalEntity: `None`, beforePhysicalPropertyHook(capability, gdtfCapability) { - const gdtfIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; + const gdtfSlotNumber = parseInt(gdtfCapability.$.WheelSlotIndex); - let indexStart = gdtfIndex; - let indexEnd = gdtfIndex; + let slotNumberStart = gdtfSlotNumber; + let slotNumberEnd = gdtfSlotNumber; const physicalFrom = gdtfCapability._physicalFrom; const physicalTo = gdtfCapability._physicalTo; if (physicalFrom !== 0 || physicalTo !== 1) { - indexStart += physicalFrom; - indexEnd += physicalTo; + slotNumberStart += physicalFrom; + slotNumberEnd += physicalTo; } - // write back physical values so that they can be assigned to index or indexStart/indexEnd - gdtfCapability._physicalFrom = indexStart; - gdtfCapability._physicalTo = indexEnd; + // write back physical values so that they can be assigned to slotNumber or slotNumberStart/slotNumberEnd + gdtfCapability._physicalFrom = slotNumberStart; + gdtfCapability._physicalTo = slotNumberEnd; + + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; }, afterPhysicalPropertyHook(capability, gdtfCapability) { - const gdtfIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; + const gdtfSlotIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; if (`Wheel` in gdtfCapability._channelFunction.$) { const wheelReference = gdtfCapability._channelFunction.$.Wheel; const gdtfWheel = followXmlNodeReference(gdtfCapability._fixture.Wheels[0], wheelReference); - const gdtfSlot = gdtfWheel.Slot[gdtfIndex]; + const gdtfSlot = gdtfWheel.Slot[gdtfSlotIndex]; - if (gdtfSlot) { - if (gdtfCapability.$.Name !== gdtfSlot.$.Name) { - gdtfCapability.$.Name += ` (${gdtfSlot.$.Name})`; - } - - if (gdtfSlot.$.Color) { - capability.colors = [getRgbColorFromGdtfColor(gdtfSlot.$.Color)]; - } + if (gdtfSlot && gdtfCapability.$.Name === gdtfSlot.$.Name) { + // clear comment + gdtfCapability.$.Name = ``; } } } @@ -318,7 +330,12 @@ const gdtfAttributes = { }, Color1Index: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - inheritFrom: `Color1` + oflType: `WheelRotation`, + oflProperty: `angle`, + defaultPhysicalEntity: `Angle`, + beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; + } }, Color1Mode: { // Changes control between selecting, continuous selection, half selection, random selection, color spinning, etc. in colors of color wheel 1. @@ -334,10 +351,11 @@ const gdtfAttributes = { }, Color1Spin: { // Controls the speed and direction of the fixture's color wheel 1. - oflType: `ColorWheelRotation`, + oflType: `WheelRotation`, oflProperty: `speed`, defaultPhysicalEntity: `AngularSpeed`, beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; normalizeAngularSpeedDirection(gdtfCapability); } }, @@ -859,39 +877,40 @@ const gdtfAttributes = { }, Gobo1: { // Selects gobos in the fixture's gobo wheel 1. - oflType: `GoboIndex`, - oflProperty: `index`, + oflType: `WheelSlot`, + oflProperty: `slotNumber`, defaultPhysicalEntity: `None`, beforePhysicalPropertyHook(capability, gdtfCapability) { - const gdtfIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; + const gdtfSlotNumber = parseInt(gdtfCapability.$.WheelSlotIndex); - let indexStart = gdtfIndex; - let indexEnd = gdtfIndex; + let slotNumberStart = gdtfSlotNumber; + let slotNumberEnd = gdtfSlotNumber; const physicalFrom = gdtfCapability._physicalFrom; const physicalTo = gdtfCapability._physicalTo; if (physicalFrom !== 0 || physicalTo !== 1) { - indexStart += physicalFrom; - indexEnd += physicalTo; + slotNumberStart += physicalFrom; + slotNumberEnd += physicalTo; } - // write back physical values so that they can be assigned to index or indexStart/indexEnd - gdtfCapability._physicalFrom = indexStart; - gdtfCapability._physicalTo = indexEnd; + // write back physical values so that they can be assigned to slotNumber or slotNumberStart/slotNumberEnd + gdtfCapability._physicalFrom = slotNumberStart; + gdtfCapability._physicalTo = slotNumberEnd; + + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; }, afterPhysicalPropertyHook(capability, gdtfCapability) { - const gdtfIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; + const gdtfSlotIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; if (`Wheel` in gdtfCapability._channelFunction.$) { const wheelReference = gdtfCapability._channelFunction.$.Wheel; const gdtfWheel = followXmlNodeReference(gdtfCapability._fixture.Wheels[0], wheelReference); - const gdtfSlot = gdtfWheel.Slot[gdtfIndex]; + const gdtfSlot = gdtfWheel.Slot[gdtfSlotIndex]; - if (gdtfSlot) { - if (gdtfCapability.$.Name !== gdtfSlot.$.Name) { - gdtfCapability.$.Name += ` (${gdtfSlot.$.Name})`; - } + if (gdtfSlot && gdtfCapability.$.Name === gdtfSlot.$.Name) { + // clear comment + gdtfCapability.$.Name = ``; } } } @@ -911,16 +930,20 @@ const gdtfAttributes = { }, Gobo1Pos: { // Controls angle of indexed rotation of gobos in gobo wheel 1. - oflType: `GoboStencilRotation`, + oflType: `WheelSlotRotation`, oflProperty: `angle`, - defaultPhysicalEntity: `Angle` + defaultPhysicalEntity: `Angle`, + beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; + } }, Gobo1PosRotation: { // Controls the speed and direction of continuous rotation of gobos in gobo wheel 1. - oflType: `GoboStencilRotation`, + oflType: `WheelSlotRotation`, oflProperty: `speed`, defaultPhysicalEntity: `AngularSpeed`, beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; normalizeAngularSpeedDirection(gdtfCapability); } }, @@ -948,20 +971,23 @@ const gdtfAttributes = { Gobo1Shake: { // Control the frequency of the shake of gobo wheel 1. inheritFrom: `Gobo1`, + oflType: `WheelShake`, oflProperty: `shakeSpeed`, defaultPhysicalEntity: `Frequency`, beforePhysicalPropertyHook(capability, gdtfCapability) { - const gdtfIndex = parseInt(gdtfCapability.$.WheelSlotIndex) - 1; + const gdtfSlotNumber = parseInt(gdtfCapability.$.WheelSlotIndex); - capability.index = gdtfIndex; + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; + capability.slotNumber = gdtfSlotNumber; } }, Gobo1Spin: { // Controls the speed and direction of the continuous rotation of gobo wheel 1. - oflType: `GoboWheelRotation`, + oflType: `WheelRotation`, oflProperty: `speed`, defaultPhysicalEntity: `AngularSpeed`, beforePhysicalPropertyHook(capability, gdtfCapability) { + capability.wheel = gdtfCapability._channelFunction.$.Wheel || `Unknown`; normalizeAngularSpeedDirection(gdtfCapability); } }, @@ -971,8 +997,7 @@ const gdtfAttributes = { }, Gobo1WheelShake: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - oflType: `GoboShake`, - oflProperty: `shakeSpeed` + inheritFrom: `Gobo1Shake` // there seems to be no GDTF attribute to specify wheel slot shake, so both Gobo1Shake and Gobo1WheelShake shake the wheel }, Gobo1WheelSpin: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd @@ -1006,19 +1031,19 @@ const gdtfAttributes = { }, Gobo2SelectIndex: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - inheritFrom: `Gobo2` + inheritFrom: `Gobo1SelectIndex` }, Gobo2SelectShakeIndex: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - inheritFrom: `Gobo2Shake` + inheritFrom: `Gobo1SelectShakeIndex` }, Gobo2SelectShakeSpin: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - inheritFrom: `Gobo2Shake` + inheritFrom: `Gobo1SelectShakeSpin` }, Gobo2SelectSpin: { // From https://gitlab.com/petrvanek/gdtf-libraries/blob/master/gdtf.xsd - inheritFrom: `Gobo2` + inheritFrom: `Gobo1SelectSpin` }, Gobo2Shake: { // Control the frequency of the shake of gobo wheel 2. diff --git a/plugins/gdtf/import.js b/plugins/gdtf/import.js index 5c135cbcab..49a0985273 100644 --- a/plugins/gdtf/import.js +++ b/plugins/gdtf/import.js @@ -6,7 +6,7 @@ const manufacturers = require(`../../fixtures/manufacturers.json`); const { CoarseChannel } = require(`../../lib/model.js`); const { scaleDmxValue, scaleDmxRangeIndividually } = require(`../../lib/scale-dmx-values.js`); const { gdtfAttributes, gdtfUnits } = require(`./gdtf-attributes.js`); -const { followXmlNodeReference } = require(`./gdtf-helpers.js`); +const { getRgbColorFromGdtfColor, followXmlNodeReference } = require(`./gdtf-helpers.js`); module.exports.name = `GDTF 0.87`; module.exports.version = `0.1.0`; @@ -88,6 +88,8 @@ module.exports.import = async function importGdtf(buffer, filename, authorName) fixture.matrix = {}; + addWheels(fixture, gdtfFixture); + autoGenerateGdtfNameAttributes(gdtfFixture); const relations = splitSwitchingChannels(gdtfFixture); @@ -154,6 +156,66 @@ module.exports.import = async function importGdtf(buffer, filename, authorName) } + /** + * Adds wheels to the OFL fixture (if there are any). + * @param {object} fixture The OFL fixture object. + * @param {object} gdtfFixture The GDTF fixture object. + */ + function addWheels(fixture, gdtfFixture) { + if (!(`Wheels` in gdtfFixture)) { + return; + } + + const gdtfWheels = (gdtfFixture.Wheels[0].Wheel || []).filter( + wheel => wheel.$.Name !== `ColorMacro` + ); + + if (gdtfWheels.length === 0) { + return; + } + + fixture.wheels = {}; + + gdtfWheels.forEach(gdtfWheel => { + fixture.wheels[gdtfWheel.$.Name] = { + slots: gdtfWheel.Slot.map(gdtfSlot => { + const name = gdtfSlot.$.Name; + + const slot = { + type: `Unknown` + }; + + if (name === `Open`) { + slot.type = `Open`; + } + else if (name === `Closed`) { + slot.type = `Closed`; + } + else if (`Color` in gdtfSlot.$) { + slot.type = `Color`; + slot.name = name; + slot.colors = [getRgbColorFromGdtfColor(gdtfSlot.$.Color)]; + } + else if (`Facet` in gdtfSlot) { + slot.type = `Prism`; + slot.name = name; + slot.facets = gdtfSlot.Facet.length; + } + else if (name.startsWith(`Gobo`) || gdtfWheel.$.Name.startsWith(`Gobo`)) { + slot.type = `Gobo`; + slot.name = name; + } + else { + slot.name = name; + } + + return slot; + }) + }; + }); + } + + /** * @param {object} gdtfFixture The GDTF fixture object. */ diff --git a/plugins/millumin/export.js b/plugins/millumin/export.js index 909926c8d4..f9b1119e72 100644 --- a/plugins/millumin/export.js +++ b/plugins/millumin/export.js @@ -45,15 +45,17 @@ module.exports.export = function exportMillumin(fixtures, options) { } } + delete jsonData.wheels; + if (jsonData.availableChannels) { Object.keys(jsonData.availableChannels).forEach( - chKey => downgradeChannel(jsonData.availableChannels, chKey) + chKey => downgradeChannel(jsonData.availableChannels, chKey, fixture) ); } if (jsonData.templateChannels) { Object.keys(jsonData.templateChannels).forEach( - chKey => downgradeChannel(jsonData.templateChannels, chKey) + chKey => downgradeChannel(jsonData.templateChannels, chKey, fixture) ); } @@ -92,10 +94,11 @@ function getDowngradedCategories(categories) { * Replaces the specified channel in the specified channels object with a downgraded version for schema 7.1.0. * @param {object} channelObject Either availableChannels or templateChannels. * @param {string} channelKey A key that exists in given channelObject and specifies the channel that should be downgraded. + * @param {Fixture} fixture The fixture the channel belongs to. */ -function downgradeChannel(channelObject, channelKey) { +function downgradeChannel(channelObject, channelKey, fixture) { const jsonChannel = channelObject[channelKey]; - const channel = new CoarseChannel(channelKey, jsonChannel, null); + const channel = new CoarseChannel(channelKey, jsonChannel, fixture); const downgradedChannel = {}; diff --git a/plugins/qlcplus_4.11.2/import.js b/plugins/qlcplus_4.11.2/import.js index e9eafd1294..16fa728f55 100644 --- a/plugins/qlcplus_4.11.2/import.js +++ b/plugins/qlcplus_4.11.2/import.js @@ -59,14 +59,15 @@ module.exports.import = function importQlcPlus(buffer, filename, authorName) { fixture.physical = getOflPhysical(qlcPlusFixture.Mode[0].Physical[0], {}); fixture.matrix = {}; + fixture.wheels = getOflWheels(qlcPlusFixture); fixture.availableChannels = {}; fixture.templateChannels = {}; const doubleByteChannels = []; for (const channel of qlcPlusFixture.Channel || []) { - fixture.availableChannels[channel.$.Name] = getOflChannel(channel); + fixture.availableChannels[channel.$.Name] = getOflChannel(channel, fixture.wheels); - if (channel.Group[0].$.Byte === `1`) { + if (`Group` in channel && channel.Group[0].$.Byte === `1`) { doubleByteChannels.push(channel.$.Name); } } @@ -83,18 +84,113 @@ module.exports.import = function importQlcPlus(buffer, filename, authorName) { }); }; +/** + * Try to extract (guessed) wheels from all channels / capabilities. + * @param {object} qlcPlusFixture The QLC+ fixture object. + * @returns {object|undefined} The OFL wheels object or undefined if there are no wheels. + */ +function getOflWheels(qlcPlusFixture) { + const wheels = {}; + + for (const channel of qlcPlusFixture.Channel || []) { + const channelName = channel.$.Name; + if (/wheel\b/i.test(channelName) && !/(rotation|index)/i.test(channelName) && channel.Group[0]._ !== `Speed`) { + wheels[channelName] = { + slots: getSlots(channel) + }; + } + } + + return Object.keys(wheels).length > 0 ? wheels : undefined; + + + /** + * @param {object} qlcPlusChannel The QLC+ channel object. + * @returns {array.} An array of OFL slot objects. + */ + function getSlots(qlcPlusChannel) { + const slots = []; + + (qlcPlusChannel.Capability || []).forEach(capability => { + if (/\b(CW|CCW)\b/.test(capability._)) { + // skip rotation capabilities + return; + } + + const slotTypeFunctions = { + Open: { + isSlotType: (cap, group) => cap._ === `Open`, + addSlotProperties: (cap, slot) => {} + }, + Gobo: { + isSlotType: (cap, group) => group === `Gobo`, + addSlotProperties: (cap, slot) => { + slot.name = cap._; + } + }, + Color: { + isSlotType: (cap, group) => group === `Colour`, + addSlotProperties: (cap, slot) => { + slot.name = cap._; + + if (`Color` in cap.$) { + slot.colors = [cap.$.Color]; + + if (`Color2` in cap.$) { + slot.colors.push(cap.$.Color2); + } + } + } + }, + Prism: { + isSlotType: (cap, group) => group === `Prism`, + addSlotProperties: (cap, slot) => { + slot.name = cap._; + } + }, + + // default (has to be the last element!) + Unknown: { + isSlotType: (cap, group) => true, + addSlotProperties: (cap, slot) => { + slot.name = cap._; + } + } + }; + + + const slotType = Object.keys(slotTypeFunctions).find( + slotType => slotTypeFunctions[slotType].isSlotType(capability, qlcPlusChannel.Group[0]._) + ); + + const slot = { + type: slotType + }; + + slotTypeFunctions[slotType].addSlotProperties(capability, slot); + + slots.push(slot); + }); + + return slots; + } +} + /** * @param {object} qlcPlusChannel The QLC+ channel object. + * @param {object} oflWheels The OFL fixture's wheels object. * @returns {object} The OFL channel object. */ -function getOflChannel(qlcPlusChannel) { +function getOflChannel(qlcPlusChannel, oflWheels) { const channel = { fineChannelAliases: [], dmxValueResolution: `8bit` }; if (`Capability` in qlcPlusChannel) { - channel.capabilities = qlcPlusChannel.Capability.map(cap => getOflCapability(cap, qlcPlusChannel)); + channel.capabilities = qlcPlusChannel.Capability.map( + cap => getOflCapability(cap, qlcPlusChannel, oflWheels) + ); } else { channel.capabilities = [getOflCapability({ @@ -103,7 +199,7 @@ function getOflChannel(qlcPlusChannel) { Min: `0`, Max: `255` } - })]; + }, qlcPlusChannel, oflWheels)]; } if (channel.capabilities.length === 1) { @@ -118,9 +214,10 @@ function getOflChannel(qlcPlusChannel) { /** * @param {object} qlcPlusCapability The QLC+ capability object. * @param {object} qlcPlusChannel The QLC+ channel object. + * @param {object} oflWheels The OFL fixture's wheels object. * @returns {object} The OFL capability object. */ -function getOflCapability(qlcPlusCapability, qlcPlusChannel) { +function getOflCapability(qlcPlusCapability, qlcPlusChannel, oflWheels) { const cap = { dmxRange: [parseInt(qlcPlusCapability.$.Min), parseInt(qlcPlusCapability.$.Max)], type: `` @@ -128,7 +225,7 @@ function getOflCapability(qlcPlusCapability, qlcPlusChannel) { const channelName = qlcPlusChannel.$.Name.trim(); const channelType = qlcPlusChannel.Group[0]._; - const capabilityName = qlcPlusCapability._.trim(); + const capabilityName = (qlcPlusCapability._ || ``).trim(); // first check if it can be a NoFunction capability if (capabilityName.match(/^(?:nothing|no func(?:tion)?|unused|not used|empty|no strobe|no prism|no frost)$/i)) { @@ -155,33 +252,60 @@ function getOflCapability(qlcPlusCapability, qlcPlusChannel) { } }, Colour() { - if (`Color` in qlcPlusCapability.$) { - cap.colors = [qlcPlusCapability.$.Color]; - - if (`Color2` in qlcPlusCapability.$) { - cap.colors.push(qlcPlusCapability.$.Color2); - } - } + if (channelName.match(/wheel\b/i)) { + cap.type = `WheelSlot`; + cap.slotNumber = qlcPlusChannel.Capability.indexOf(qlcPlusCapability) + 1; - if (channelName.match(/wheel/i)) { - cap.type = `ColorWheelIndex`; cap.comment = getSpeedGuessedComment(); if (`speedStart` in cap) { - cap.type = `ColorWheelRotation`; + cap.type = `WheelRotation`; + delete cap.slotNumber; } } else { cap.type = `ColorPreset`; cap.comment = capabilityName; + + if (`Color` in qlcPlusCapability.$) { + cap.colors = [qlcPlusCapability.$.Color]; + + if (`Color2` in qlcPlusCapability.$) { + cap.colors.push(qlcPlusCapability.$.Color2); + } + } } }, Gobo() { - cap.type = `GoboIndex`; - cap.comment = getSpeedGuessedComment(); + cap.type = `WheelSlot`; + cap.slotNumber = qlcPlusChannel.Capability.indexOf(qlcPlusCapability) + 1; - if (`speedStart` in cap) { - cap.type = `GoboWheelRotation`; + if (/shake\b|shaking\b/i.test(capabilityName)) { + cap.type = `WheelShake`; + + const comment = getSpeedGuessedComment(); + + if (`speedStart` in cap) { + cap.shakeSpeedStart = cap.speedStart; + cap.shakeSpeedEnd = cap.speedEnd; + delete cap.speedStart; + delete cap.speedEnd; + } + + cap.comment = comment; + } + else { + cap.comment = getSpeedGuessedComment(); + + if (`speedStart` in cap) { + if (qlcPlusChannel.$.Name in oflWheels) { + cap.type = `WheelRotation`; + } + else { + cap.type = `WheelSlotRotation`; + } + delete cap.slotNumber; + } } }, Effect() { diff --git a/plugins/qlcplus_4.12.0/export.js b/plugins/qlcplus_4.12.0/export.js index c7cd75640a..e2d876f2e3 100644 --- a/plugins/qlcplus_4.12.0/export.js +++ b/plugins/qlcplus_4.12.0/export.js @@ -234,14 +234,14 @@ function getChannelPreset(channel) { SpeedTiltFastSlow: cap => cap.type === `TiltContinuous` && capabilityHelpers.isDecreasingSpeed(cap), SpeedPanTiltSlowFast: cap => cap.type === `PanTiltSpeed` && (capabilityHelpers.isIncreasingSpeed(cap) || capabilityHelpers.isDecreasingDuration(cap)), SpeedPanTiltFastSlow: cap => cap.type === `PanTiltSpeed` && (capabilityHelpers.isDecreasingSpeed(cap) || capabilityHelpers.isIncreasingDuration(cap)), - ColorMacro: cap => cap.type === `ColorPreset` || cap.type === `ColorWheelIndex`, - ColorWheel: cap => cap.type === `ColorWheelRotation`, + ColorMacro: cap => cap.type === `ColorPreset` || (cap.type === `WheelSlot` && cap.isSlotType(`Color`)), + ColorWheel: cap => cap.type === `WheelRotation` && cap.wheels[0].type === `Color`, ColorRGBMixer: cap => false, ColorCTOMixer: cap => cap.type === `ColorTemperature` && cap.colorTemperature[0].number === 0 && cap.colorTemperature[1].number < 0, ColorCTBMixer: cap => cap.type === `ColorTemperature` && cap.colorTemperature[0].number === 0 && cap.colorTemperature[1].number > 0, ColorCTCMixer: cap => cap.type === `ColorTemperature`, - GoboWheel: cap => cap.type === `GoboWheelRotation`, - GoboIndex: cap => cap.type === `GoboIndex`, + GoboWheel: cap => cap.type === `WheelRotation` && cap.wheels[0].type === `Gobo`, + GoboIndex: cap => cap.type === `WheelSlotRotation` && cap.wheels[0].type === `Gobo`, ShutterStrobeSlowFast: cap => cap.type === `ShutterStrobe` && capabilityHelpers.isIncreasingSpeed(cap), ShutterStrobeFastSlow: cap => cap.type === `ShutterStrobe` && capabilityHelpers.isDecreasingSpeed(cap), ShutterIrisMinToMax: cap => cap.type === `Iris` && cap.openPercent[0].number < cap.openPercent[1].number, @@ -288,17 +288,19 @@ function getFineChannelPreset(fineChannel) { PositionTiltFine: () => channelPreset === `PositionTilt`, ColorWheelFine: () => coarseChannel.capabilities.some( - cap => [`ColorWheelIndex`, `ColorWheelRotation`].includes(cap.type) + cap => [`WheelSlot`, `WheelRotation`].includes(cap.type) ) && coarseChannel.capabilities.every( - cap => [`ColorWheelIndex`, `ColorWheelRotation`, `Effect`, `NoFunction`].includes(cap.type) + cap => [`WheelSlot`, `WheelShake`, `WheelSlotRotation`, `WheelRotation`, `Effect`, `NoFunction`].includes(cap.type) && + (cap.wheels.length === 0 || cap.wheels[0].type === `Color`) ), GoboWheelFine: () => coarseChannel.capabilities.some( - cap => [`GoboIndex`, `GoboWheelRotation`].includes(cap.type) + cap => [`WheelSlot`, `WheelRotation`].includes(cap.type) ) && coarseChannel.capabilities.every( - cap => [`GoboIndex`, `GoboWheelRotation`, `Effect`, `NoFunction`].includes(cap.type) + cap => [`WheelSlot`, `WheelShake`, `WheelSlotRotation`, `WheelRotation`, `Effect`, `NoFunction`].includes(cap.type) && + (cap.wheels.length === 0 || cap.wheels[0].type === `Gobo`) ), GoboIndexFine: () => coarseChannel.capabilities.every( - cap => cap.type === `GoboStencilRotation` + cap => cap.type === `WheelSlotRotation` && cap.wheels[0].type === `Gobo` ), ShutterIrisFine: () => coarseChannel.type === `Iris`, @@ -469,31 +471,34 @@ function getCapabilityPreset(capability) { // color capabilities ColorMacro: { - handler: cap => (cap.type === `ColorPreset` || cap.type === `ColorWheelIndex`) && cap.colors !== null && cap.colors.allColors.length === 1, + handler: cap => (cap.type === `ColorPreset` || cap.isSlotType(`Color`)) && cap.colors !== null && cap.colors.allColors.length === 1, res1: cap => cap.colors.allColors[0] }, ColorDoubleMacro: { - handler: cap => (cap.type === `ColorPreset` || cap.type === `ColorWheelIndex`) && cap.colors !== null && cap.colors.allColors.length === 2, + handler: cap => (cap.type === `ColorPreset` || cap.isSlotType(`Color`)) && cap.colors !== null && cap.colors.allColors.length === 2, res1: cap => cap.colors.allColors[0], res2: cap => cap.colors.allColors[1] }, ColorWheelIndex: { - handler: cap => false // seems to be unused in QLC+ for now + handler: cap => cap.type === `WheelRotation` && cap.wheels[0].type === `Color` && capabilityHelpers.isRotationAngle(cap) }, // gobo capabilities // TODO: export a gobo image as res1 GoboShakeMacro: { - handler: cap => cap.type === `GoboIndex` && cap.isShaking + handler: cap => cap.type === `WheelShake` && (cap.isSlotType(/Gobo|Iris|Frost/) || cap.isSlotType(`Open`)), + res1: cap => (cap.isSlotType(`Open`) ? `Others/open.svg` : null) }, GoboMacro: { - handler: cap => cap.type === `GoboIndex` + handler: cap => cap.isSlotType(/Gobo|Iris|Frost/) || cap.isSlotType(`Open`), + res1: cap => (cap.isSlotType(`Open`) ? `Others/open.svg` : null) }, // prism capabilities - // TODO: export the number of prism faces as res1 + // TODO: export the number of prism facets as res1 for Prism capabilities PrismEffectOn: { - handler: cap => cap.type === `Prism` + handler: cap => cap.type === `Prism` || (cap.type === `WheelSlot` && cap.isSlotType(`Prism`)), + res1: cap => (cap.wheelSlot && cap.slotNumber[0].number === cap.slotNumber[1].number && cap.wheelSlot[0].facets) }, PrismEffectOff: { handler: cap => cap.type === `NoFunction` && cap._channel.type === `Prism` diff --git a/plugins/qlcplus_4.12.0/exportTests/fixture-tool-validation.js b/plugins/qlcplus_4.12.0/exportTests/fixture-tool-validation.js index d140613776..f1ca93fab2 100644 --- a/plugins/qlcplus_4.12.0/exportTests/fixture-tool-validation.js +++ b/plugins/qlcplus_4.12.0/exportTests/fixture-tool-validation.js @@ -43,6 +43,7 @@ module.exports = function testFixtureToolValidation(exportFile) { // store used gobos in the gobos/ directory .then(() => mkdirp(path.join(directory, `resources/gobos/Others`))) + .then(() => writeFile(path.join(directory, `resources/gobos/Others/open.svg`), ``)) .then(() => writeFile(path.join(directory, `resources/gobos/Others/rainbow.png`), ``)) // call the fixture tool diff --git a/schemas/capability.json b/schemas/capability.json index 5449a4e93a..93a02477c3 100644 --- a/schemas/capability.json +++ b/schemas/capability.json @@ -20,23 +20,21 @@ "Intensity", "ColorIntensity", "ColorPreset", - "ColorWheelIndex", - "ColorWheelRotation", "ColorTemperature", "Pan", "PanContinuous", "Tilt", "TiltContinuous", "PanTiltSpeed", + "WheelSlot", + "WheelShake", + "WheelSlotRotation", + "WheelRotation", "Effect", "EffectSpeed", "EffectDuration", "EffectParameter", "SoundSensitivity", - "GoboIndex", - "GoboShake", - "GoboStencilRotation", - "GoboWheelRotation", "Focus", "Zoom", "Iris", @@ -332,54 +330,26 @@ { "if": { "properties": { - "type": { "enum": ["ColorWheelIndex"] } + "type": { "enum": ["ColorTemperature"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, - "index": { "$ref": "definitions.json#/entities/index" }, - "indexStart": { "$ref": "definitions.json#/entities/index" }, - "indexEnd": { "$ref": "definitions.json#/entities/index" }, - "comment": {}, - "colors": { - "type": "array", - "minItems": 1, - "items": { "$ref": "definitions.json#/colorString" } - }, - "colorsStart": { - "type": "array", - "minItems": 1, - "items": { "$ref": "definitions.json#/colorString" } - }, - "colorsEnd": { - "type": "array", - "minItems": 1, - "items": { "$ref": "definitions.json#/colorString" } - }, "colorTemperature": { "$ref": "definitions.json#/entities/colorTemperature" }, "colorTemperatureStart": { "$ref": "definitions.json#/entities/colorTemperature" }, "colorTemperatureEnd": { "$ref": "definitions.json#/entities/colorTemperature" }, + "comment": {}, "helpWanted": {}, "menuClick": {}, "switchChannels": {} }, "oneOf": [ - { "required": ["index"] }, - { "required": ["indexStart"] } + { "required": ["colorTemperature"] }, + { "required": ["colorTemperatureStart"] } ], - "not": { - "anyOf": [ - { "required": ["colors", "colorsStart"] }, - { "required": ["colorTemperature", "colorTemperatureStart"] } - ] - }, "dependencies": { - "indexStart": ["indexEnd"], - "indexEnd": ["indexStart"], - "colorsStart": ["colorsEnd"], - "colorsEnd": ["colorsStart"], "colorTemperatureStart": ["colorTemperatureEnd"], "colorTemperatureEnd": ["colorTemperatureStart"] }, @@ -389,16 +359,13 @@ { "if": { "properties": { - "type": { "enum": ["ColorWheelRotation"] } + "type": { "enum": ["Pan"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, - "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, @@ -408,14 +375,10 @@ "switchChannels": {} }, "oneOf": [ - { "required": ["speed"] }, - { "required": ["speedStart"] }, { "required": ["angle"] }, { "required": ["angleStart"] } ], "dependencies": { - "speedStart": ["speedEnd"], - "speedEnd": ["speedStart"], "angleStart": ["angleEnd"], "angleEnd": ["angleStart"] }, @@ -425,28 +388,28 @@ { "if": { "properties": { - "type": { "enum": ["ColorTemperature"] } + "type": { "enum": ["PanContinuous"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, - "colorTemperature": { "$ref": "definitions.json#/entities/colorTemperature" }, - "colorTemperatureStart": { "$ref": "definitions.json#/entities/colorTemperature" }, - "colorTemperatureEnd": { "$ref": "definitions.json#/entities/colorTemperature" }, + "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, "comment": {}, "helpWanted": {}, "menuClick": {}, "switchChannels": {} }, "oneOf": [ - { "required": ["colorTemperature"] }, - { "required": ["colorTemperatureStart"] } + { "required": ["speed"] }, + { "required": ["speedStart"] } ], "dependencies": { - "colorTemperatureStart": ["colorTemperatureEnd"], - "colorTemperatureEnd": ["colorTemperatureStart"] + "speedStart": ["speedEnd"], + "speedEnd": ["speedStart"] }, "additionalProperties": false } @@ -454,7 +417,7 @@ { "if": { "properties": { - "type": { "enum": ["Pan"] } + "type": { "enum": ["Tilt"] } } }, "then": { @@ -483,7 +446,7 @@ { "if": { "properties": { - "type": { "enum": ["PanContinuous"] } + "type": { "enum": ["TiltContinuous"] } } }, "then": { @@ -512,28 +475,35 @@ { "if": { "properties": { - "type": { "enum": ["Tilt"] } + "type": { "enum": ["PanTiltSpeed"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, - "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, + "speed": { "$ref": "definitions.json#/entities/speed" }, + "speedStart": { "$ref": "definitions.json#/entities/speed" }, + "speedEnd": { "$ref": "definitions.json#/entities/speed" }, + "duration": { "$ref": "definitions.json#/entities/time" }, + "durationStart": { "$ref": "definitions.json#/entities/time" }, + "durationEnd": { "$ref": "definitions.json#/entities/time" }, "comment": {}, "helpWanted": {}, "menuClick": {}, "switchChannels": {} }, "oneOf": [ - { "required": ["angle"] }, - { "required": ["angleStart"] } + { "required": ["speed"] }, + { "required": ["speedStart"] }, + { "required": ["duration"] }, + { "required": ["durationStart"] } ], "dependencies": { - "angleStart": ["angleEnd"], - "angleEnd": ["angleStart"] + "speedStart": ["speedEnd"], + "speedEnd": ["speedStart"], + "durationStart": ["durationEnd"], + "durationEnd": ["durationStart"] }, "additionalProperties": false } @@ -541,16 +511,128 @@ { "if": { "properties": { - "type": { "enum": ["TiltContinuous"] } + "type": { "enum": ["WheelSlot"] } + } + }, + "then": { + "properties": { + "dmxRange": {}, + "type": {}, + "wheel": { "$ref": "definitions.json#/nonEmptyString" }, + "slotNumber": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberStart": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberEnd": { "$ref": "definitions.json#/entities/slotNumber" }, + "comment": {}, + "helpWanted": {}, + "menuClick": {}, + "switchChannels": {} + }, + "oneOf": [ + { "required": ["slotNumber"] }, + { "required": ["slotNumberStart"] } + ], + "dependencies": { + "slotNumberStart": ["slotNumberEnd"], + "slotNumberEnd": ["slotNumberStart"] + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "enum": ["WheelShake"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, + "wheel": {}, + "isShaking": { + "enum": ["wheel", "slot"] + }, + "slotNumber": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberStart": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberEnd": { "$ref": "definitions.json#/entities/slotNumber" }, + "shakeSpeed": { "$ref": "definitions.json#/entities/speed" }, + "shakeSpeedStart": { "$ref": "definitions.json#/entities/speed" }, + "shakeSpeedEnd": { "$ref": "definitions.json#/entities/speed" }, + "shakeAngle": { "$ref": "definitions.json#/entities/swingAngle" }, + "shakeAngleStart": { "$ref": "definitions.json#/entities/swingAngle" }, + "shakeAngleEnd": { "$ref": "definitions.json#/entities/swingAngle" }, + "comment": {}, + "helpWanted": {}, + "menuClick": {}, + "switchChannels": {} + }, + "not": { + "anyOf": [ + { "required": ["slotNumber", "slotNumberStart"] }, + { "required": ["shakeSpeed", "shakeSpeedStart"] }, + { "required": ["shakeAngle", "shakeAngleStart"] } + ] + }, + "dependencies": { + "shakeSpeedStart": ["shakeSpeedEnd"], + "shakeSpeedEnd": ["shakeSpeedStart"], + "shakeAngleStart": ["shakeAngleEnd"], + "shakeAngleEnd": ["shakeAngleStart"], + "slotNumberStart": ["slotNumberEnd"], + "slotNumberEnd": ["slotNumberStart"] + }, + "if": { + "$comment": "slotNumber is set", + "anyOf": [ + { "required": ["slotNumber"] }, + { "required": ["slotNumberStart"] } + ] + }, + "then": { + "$comment": "wheel must be a single wheel", + "properties": { + "wheel": { "$ref": "definitions.json#/nonEmptyString" } + } + }, + "else": { + "$comment": "wheel can be a single wheel or multiple wheels", + "properties": { + "wheel": { + "oneOf": [ + { "$ref": "definitions.json#/nonEmptyString" }, + { + "type": "array", + "uniqueItems": true, + "minItems": 2, + "items": { "$ref": "definitions.json#/nonEmptyString" } + } + ] + } + } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "enum": ["WheelSlotRotation"] } + } + }, + "then": { + "properties": { + "dmxRange": {}, + "type": {}, + "wheel": {}, + "slotNumber": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberStart": { "$ref": "definitions.json#/entities/slotNumber" }, + "slotNumberEnd": { "$ref": "definitions.json#/entities/slotNumber" }, "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, + "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, + "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, "comment": {}, "helpWanted": {}, "menuClick": {}, @@ -558,11 +640,47 @@ }, "oneOf": [ { "required": ["speed"] }, - { "required": ["speedStart"] } + { "required": ["speedStart"] }, + { "required": ["angle"] }, + { "required": ["angleStart"] } ], + "not": { "required": ["slotNumber", "slotNumberStart"] }, "dependencies": { + "slotNumberStart": ["slotNumberEnd"], + "slotNumberEnd": ["slotNumberStart"], "speedStart": ["speedEnd"], - "speedEnd": ["speedStart"] + "speedEnd": ["speedStart"], + "angleStart": ["angleEnd"], + "angleEnd": ["angleStart"] + }, + "if": { + "$comment": "slotNumber is set", + "anyOf": [ + { "required": ["slotNumber"] }, + { "required": ["slotNumberStart"] } + ] + }, + "then": { + "$comment": "wheel must be a single wheel", + "properties": { + "wheel": { "$ref": "definitions.json#/nonEmptyString" } + } + }, + "else": { + "$comment": "wheel can be a single wheel or multiple wheels", + "properties": { + "wheel": { + "oneOf": [ + { "$ref": "definitions.json#/nonEmptyString" }, + { + "type": "array", + "uniqueItems": true, + "minItems": 2, + "items": { "$ref": "definitions.json#/nonEmptyString" } + } + ] + } + } }, "additionalProperties": false } @@ -570,19 +688,30 @@ { "if": { "properties": { - "type": { "enum": ["PanTiltSpeed"] } + "type": { "enum": ["WheelRotation"] } } }, "then": { "properties": { "dmxRange": {}, "type": {}, - "speed": { "$ref": "definitions.json#/entities/speed" }, - "speedStart": { "$ref": "definitions.json#/entities/speed" }, - "speedEnd": { "$ref": "definitions.json#/entities/speed" }, - "duration": { "$ref": "definitions.json#/entities/time" }, - "durationStart": { "$ref": "definitions.json#/entities/time" }, - "durationEnd": { "$ref": "definitions.json#/entities/time" }, + "wheel": { + "oneOf": [ + { "$ref": "definitions.json#/nonEmptyString" }, + { + "type": "array", + "uniqueItems": true, + "minItems": 2, + "items": { "$ref": "definitions.json#/nonEmptyString" } + } + ] + }, + "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, + "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, + "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, + "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, "comment": {}, "helpWanted": {}, "menuClick": {}, @@ -591,14 +720,14 @@ "oneOf": [ { "required": ["speed"] }, { "required": ["speedStart"] }, - { "required": ["duration"] }, - { "required": ["durationStart"] } + { "required": ["angle"] }, + { "required": ["angleStart"] } ], "dependencies": { "speedStart": ["speedEnd"], "speedEnd": ["speedStart"], - "durationStart": ["durationEnd"], - "durationEnd": ["durationStart"] + "angleStart": ["angleEnd"], + "angleEnd": ["angleStart"] }, "additionalProperties": false } @@ -774,159 +903,6 @@ "additionalProperties": false } }, - { - "if": { - "properties": { - "type": { "enum": ["GoboIndex"] } - } - }, - "then": { - "properties": { - "dmxRange": {}, - "type": {}, - "index": { "$ref": "definitions.json#/entities/index" }, - "indexStart": { "$ref": "definitions.json#/entities/index" }, - "indexEnd": { "$ref": "definitions.json#/entities/index" }, - "comment": {}, - "shakeSpeed": { "$ref": "definitions.json#/entities/speed" }, - "shakeSpeedStart": { "$ref": "definitions.json#/entities/speed" }, - "shakeSpeedEnd": { "$ref": "definitions.json#/entities/speed" }, - "shakeAngle": { "$ref": "definitions.json#/entities/swingAngle" }, - "shakeAngleStart": { "$ref": "definitions.json#/entities/swingAngle" }, - "shakeAngleEnd": { "$ref": "definitions.json#/entities/swingAngle" }, - "helpWanted": {}, - "menuClick": {}, - "switchChannels": {} - }, - "oneOf": [ - { "required": ["index"] }, - { "required": ["indexStart"] } - ], - "not": { - "anyOf": [ - { "required": ["shakeSpeed", "shakeSpeedStart"] }, - { "required": ["shakeAngle", "shakeAngleStart"] } - ] - }, - "dependencies": { - "indexStart": ["indexEnd"], - "indexEnd": ["indexStart"], - "shakeSpeedStart": ["shakeSpeedEnd"], - "shakeSpeedEnd": ["shakeSpeedStart"], - "shakeAngleStart": ["shakeAngleEnd"], - "shakeAngleEnd": ["shakeAngleStart"] - }, - "additionalProperties": false - } - }, - { - "if": { - "properties": { - "type": { "enum": ["GoboShake"] } - } - }, - "then": { - "properties": { - "dmxRange": {}, - "type": {}, - "shakeSpeed": { "$ref": "definitions.json#/entities/speed" }, - "shakeSpeedStart": { "$ref": "definitions.json#/entities/speed" }, - "shakeSpeedEnd": { "$ref": "definitions.json#/entities/speed" }, - "shakeAngle": { "$ref": "definitions.json#/entities/swingAngle" }, - "shakeAngleStart": { "$ref": "definitions.json#/entities/swingAngle" }, - "shakeAngleEnd": { "$ref": "definitions.json#/entities/swingAngle" }, - "comment": {}, - "helpWanted": {}, - "menuClick": {}, - "switchChannels": {} - }, - "not": { - "anyOf": [ - { "required": ["shakeSpeed", "shakeSpeedStart"] }, - { "required": ["shakeAngle", "shakeAngleStart"] } - ] - }, - "dependencies": { - "shakeSpeedStart": ["shakeSpeedEnd"], - "shakeSpeedEnd": ["shakeSpeedStart"], - "shakeAngleStart": ["shakeAngleEnd"], - "shakeAngleEnd": ["shakeAngleStart"] - }, - "additionalProperties": false - } - }, - { - "if": { - "properties": { - "type": { "enum": ["GoboStencilRotation"] } - } - }, - "then": { - "properties": { - "dmxRange": {}, - "type": {}, - "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, - "comment": {}, - "helpWanted": {}, - "menuClick": {}, - "switchChannels": {} - }, - "oneOf": [ - { "required": ["speed"] }, - { "required": ["speedStart"] }, - { "required": ["angle"] }, - { "required": ["angleStart"] } - ], - "dependencies": { - "speedStart": ["speedEnd"], - "speedEnd": ["speedStart"], - "angleStart": ["angleEnd"], - "angleEnd": ["angleStart"] - }, - "additionalProperties": false - } - }, - { - "if": { - "properties": { - "type": { "enum": ["GoboWheelRotation"] } - } - }, - "then": { - "properties": { - "dmxRange": {}, - "type": {}, - "speed": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedStart": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "speedEnd": { "$ref": "definitions.json#/entities/rotationSpeed" }, - "angle": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleStart": { "$ref": "definitions.json#/entities/rotationAngle" }, - "angleEnd": { "$ref": "definitions.json#/entities/rotationAngle" }, - "comment": {}, - "helpWanted": {}, - "menuClick": {}, - "switchChannels": {} - }, - "oneOf": [ - { "required": ["speed"] }, - { "required": ["speedStart"] }, - { "required": ["angle"] }, - { "required": ["angleStart"] } - ], - "dependencies": { - "speedStart": ["speedEnd"], - "speedEnd": ["speedStart"], - "angleStart": ["angleEnd"], - "angleEnd": ["angleStart"] - }, - "additionalProperties": false - } - }, { "if": { "properties": { diff --git a/schemas/definitions.json b/schemas/definitions.json index d0fd14df0e..0daa506f48 100644 --- a/schemas/definitions.json +++ b/schemas/definitions.json @@ -210,7 +210,7 @@ { "enum": ["off", "low", "high", "slow", "fast", "small", "big", "instant", "short", "long"] } ] }, - "index": { + "slotNumber": { "$ref": "#/units/nonNegativeNumber" }, "percent": { diff --git a/schemas/fixture-redirect.json b/schemas/fixture-redirect.json index 5e985459f3..16b20af19f 100644 --- a/schemas/fixture-redirect.json +++ b/schemas/fixture-redirect.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture-redirect.json", - "version": "10.0.0", + "version": "11.0.0", "type": "object", "properties": { diff --git a/schemas/fixture.json b/schemas/fixture.json index 7e2ff98179..816632ab0f 100644 --- a/schemas/fixture.json +++ b/schemas/fixture.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/fixture.json", - "version": "10.0.0", + "version": "11.0.0", "type": "object", "properties": { @@ -268,6 +268,27 @@ ], "additionalProperties": false }, + "wheels": { + "type": "object", + "minProperties": 1, + "propertyNames": { + "$comment": "wheel names", + "$ref": "definitions.json#/nonEmptyString" + }, + "additionalProperties": { + "type": "object", + "properties": { + "direction": { "enum": ["CW", "CCW"] }, + "slots": { + "type": "array", + "minItems": 2, + "items": { "$ref": "wheel-slot.json#" } + } + }, + "required": ["slots"], + "additionalProperties": false + } + }, "availableChannels": { "type": "object", "minProperties": 1, diff --git a/schemas/manufacturers.json b/schemas/manufacturers.json index 5c97baff01..0c18e7e800 100644 --- a/schemas/manufacturers.json +++ b/schemas/manufacturers.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/manufacturers.json", - "version": "10.0.0", + "version": "11.0.0", "type": "object", "propertyNames": { diff --git a/schemas/wheel-slot.json b/schemas/wheel-slot.json new file mode 100644 index 0000000000..ecdfdfffce --- /dev/null +++ b/schemas/wheel-slot.json @@ -0,0 +1,159 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/master/schemas/wheel-slot.json", + + "$comment": "This file is used by another schema file and should not be used directly as a JSON schema.", + + "type": "object", + "properties": { + "type": { + "enum": [ + "Open", + "Closed", + "Color", + "Gobo", + "Prism", + "Iris", + "Frost", + "AnimationGoboStart", + "AnimationGoboEnd" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { "const": "Open" } + } + }, + "then": { + "properties": { + "type": {} + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Closed" } + } + }, + "then": { + "properties": { + "type": {} + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Color" } + } + }, + "then": { + "properties": { + "type": {}, + "name": { "$ref": "definitions.json#/nonEmptyString" }, + "colors": { + "type": "array", + "minItems": 1, + "items": { "$ref": "definitions.json#/colorString" } + }, + "colorTemperature": { "$ref": "definitions.json#/entities/colorTemperature" } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Gobo" } + } + }, + "then": { + "properties": { + "type": {}, + "name": { "$ref": "definitions.json#/nonEmptyString" } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Prism" } + } + }, + "then": { + "properties": { + "type": {}, + "name": { "$ref": "definitions.json#/nonEmptyString" }, + "facets": { + "type": "integer", + "minimum": 2 + } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Iris" } + } + }, + "then": { + "properties": { + "type": {}, + "openPercent": { "$ref": "definitions.json#/entities/irisPercent" } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "Frost" } + } + }, + "then": { + "properties": { + "type": {}, + "frostIntensity": { "$ref": "definitions.json#/entities/percent" } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "AnimationGoboStart" } + } + }, + "then": { + "properties": { + "type": {}, + "name": { "$ref": "definitions.json#/nonEmptyString" } + }, + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "type": { "const": "AnimationGoboEnd" } + } + }, + "then": { + "properties": { + "type": {} + }, + "additionalProperties": false + } + } + ], + "required": ["type"] +} diff --git a/tests/fixture-valid.js b/tests/fixture-valid.js index 1729a02336..201abaff09 100644 --- a/tests/fixture-valid.js +++ b/tests/fixture-valid.js @@ -50,6 +50,11 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { const usedChannelKeys = new Set(); // and aliases /** @type {Set} */ const possibleMatrixChKeys = new Set(); // and aliases + /** @type {Set} */ + const usedWheels = new Set(); + /** @type {Set} */ + const usedWheelSlots = new Set(); + /** @type {Set} */ const modeNames = new Set(); /** @type {Set} */ @@ -80,6 +85,7 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { checkMeta(fixture.meta); checkPhysical(fixture.physical); checkMatrix(fixture.matrix); + checkWheels(fixture.wheels); checkTemplateChannels(fixtureJson); checkChannels(fixtureJson); @@ -88,6 +94,8 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { } checkUnusedChannels(); + checkUnusedWheels(); + checkUnusedWheelSlots(); checkCategories(); checkRdm(manKey, uniqueValues); } @@ -250,6 +258,36 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { } } + /** + * Checks if the fixture's wheels are correct. + * @param {array.} wheels The fixture's Wheel instances. + */ + function checkWheels(wheels) { + for (const wheel of wheels) { + if (!/\b(?:wheel|disk)\b/i.test(wheel.name)) { + result.warnings.push(`Name of wheel '${wheel.name}' does not contain the word 'wheel' or 'disk', which could lead to confusing capability names.`); + } + + const expectedAnimationGoboEndSlots = []; + wheel.slots.forEach((slot, index) => { + if (slot.type === `AnimationGoboStart`) { + expectedAnimationGoboEndSlots.push(index + 1); + } + }); + + const foundAnimationGoboEndSlots = []; + wheel.slots.forEach((slot, index) => { + if (slot.type === `AnimationGoboEnd`) { + foundAnimationGoboEndSlots.push(index); + } + }); + + if (!arraysEqual(expectedAnimationGoboEndSlots, foundAnimationGoboEndSlots)) { + result.errors.push(`An 'AnimationGoboEnd' slot must be used after an 'AnimationGoboStart' slot in wheel ${wheel.name}. (${expectedAnimationGoboEndSlots}; ${foundAnimationGoboEndSlots})`); + } + } + } + /** * Check if templateChannels are defined correctly. Does not check the channel data itself. * @param {object} fixtureJson The fixture's JSON data @@ -499,11 +537,14 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { const capabilityTypeChecks = { ShutterStrobe: checkShutterStrobeCapability, - ColorWheelIndex: checkColorWheelIndexCapability, Pan: checkPanTiltCapability, Tilt: checkPanTiltCapability, PanContinuous: checkPanTiltContinuousCapability, TiltContinuous: checkPanTiltContinuousCapability, + WheelSlot: checkWheelCapability, + WheelShake: checkWheelCapability, + WheelSlotRotation: checkWheelCapability, + WheelRotation: checkWheelCapability, Effect: checkEffectCapability }; @@ -532,12 +573,75 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { } /** - * Type-specific checks for ColorWheelIndex capabilities. + * Check that referenced wheels exist in the fixture. */ - function checkColorWheelIndexCapability() { - if ((cap.index !== null && cap.index[0].number !== cap.index[1].number) && - (cap.colors !== null && cap.colors.isStep)) { - result.errors.push(`${errorPrefix}: Must use colorsStart and colorsEnd when index also has start/end values.`); + function checkWheelCapability() { + let shouldCheckSlotNumbers = true; + + if (`wheel` in cap.jsonObject) { + const wheelNames = [].concat(cap.jsonObject.wheel); + + wheelNames.forEach(wheelName => { + const wheel = fixture.getWheelByName(wheelName); + if (wheel) { + usedWheels.add(wheelName); + } + else { + result.errors.push(`${errorPrefix} references wheel '${wheelName}' which is not defined in the fixture.`); + shouldCheckSlotNumbers = false; + } + }); + + if (wheelNames.length === 1 && wheelNames[0] === cap._channel.name) { + result.warnings.push(`${errorPrefix} explicitly references wheel '${wheelNames[0]}', which is the default anyway (through the channel name). Please remove the 'wheel' property.`); + } + } + else if (cap.wheels.includes(undefined)) { + result.errors.push(`${errorPrefix} does not explicitly reference any wheel, but the default wheel '${cap._channel.name}' (through the channel name) does not exist.`); + shouldCheckSlotNumbers = false; + } + else { + usedWheels.add(cap._channel.name); + } + + if (cap.slotNumber !== null && shouldCheckSlotNumbers) { + checkSlotNumbers(); + } + + + /** + * Check that slot indices are used correctly for the specific wheel. + */ + function checkSlotNumbers() { + const min = Math.min(cap.slotNumber[0], cap.slotNumber[1]); + const max = Math.max(cap.slotNumber[0], cap.slotNumber[1]); + for (let i = Math.floor(min); i <= Math.ceil(max); i++) { + usedWheelSlots.add(`${cap.wheels[0].name} (slot ${i})`); + } + + if (max - min > 1) { + result.warnings.push(`${errorPrefix} references a wheel slot range (${min}…${max}) which is greater than 1.`); + } + + const minSlotNumber = 1; + const maxSlotNumber = cap.wheels[0].slots.length; + + const isInRangeExclusive = (number, start, end) => number > start && number < end; + const isInRangeInclusive = (number, start, end) => number >= start && number <= end; + + if (cap.slotNumber[0].equals(cap.slotNumber[1])) { + if (!isInRangeExclusive(cap.slotNumber[0].number, minSlotNumber - 1, maxSlotNumber + 1)) { + result.errors.push(`${errorPrefix} references wheel slot ${cap.slotNumber[0].number} which is outside the allowed range ${minSlotNumber - 1}…${maxSlotNumber + 1} (exclusive).`); + } + return; + } + + if (!isInRangeInclusive(cap.slotNumber[0].number, minSlotNumber - 1, maxSlotNumber)) { + result.errors.push(`${errorPrefix} starts at wheel slot ${cap.slotNumber[0].number} which is outside the allowed range ${minSlotNumber - 1}…${maxSlotNumber} (inclusive).`); + } + else if (!isInRangeInclusive(cap.slotNumber[1].number, minSlotNumber, maxSlotNumber + 1)) { + result.errors.push(`${errorPrefix} ends at wheel slot ${cap.slotNumber[1].number} which is outside the allowed range ${minSlotNumber}…${maxSlotNumber + 1} (inclusive).`); + } } } @@ -865,6 +969,43 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { } } + /** + * Add a warning if there are unused wheels. + */ + function checkUnusedWheels() { + const unusedWheels = fixture.wheels.filter( + wheel => !usedWheels.has(wheel.name) + ).map(wheel => wheel.name); + + if (unusedWheels.length > 0) { + result.warnings.push(`Unused wheel(s): ${unusedWheels.join(`, `)}`); + } + } + + /** + * Add a warning if there are unused wheel slots. + */ + function checkUnusedWheelSlots() { + const slotsOfUsedWheels = []; + [...usedWheels].forEach(wheelName => { + const wheel = fixture.getWheelByName(wheelName); + + if (wheel.type !== `AnimationGobo`) { + slotsOfUsedWheels.push(...(wheel.slots.map( + (slot, slotIndex) => `${wheelName} (slot ${slotIndex + 1})` + ))); + } + }); + + const unusedWheelSlots = slotsOfUsedWheels.filter( + slot => !usedWheelSlots.has(slot) + ); + + if (unusedWheelSlots.length > 0) { + result.warnings.push(`Unused wheel slot(s): ${unusedWheelSlots.join(`, `)}`); + } + } + /** * Checks if the used channels fits to the fixture's categories and raise warnings suggesting to add/remove a category. */ @@ -872,8 +1013,8 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { const categories = { 'Color Changer': { isSuggested: isColorChanger(), - suggestedPhrase: `there are at least one ColorPreset, ColorWheelIndex or two ColorIntensity capabilities`, - invalidPhrase: `there are no ColorPreset, ColorWheelIndex and less than two ColorIntensity capabilities` + suggestedPhrase: `there are ColorPreset or ColorIntensity capabilities or Color wheel slots`, + invalidPhrase: `there are no ColorPreset and less than two ColorIntensity capabilities and no Color wheel slots` }, 'Moving Head': { isSuggested: isMovingHead(), @@ -929,7 +1070,9 @@ function checkFixture(manKey, fixKey, fixtureJson, uniqueValues = null) { * @returns {boolean} Whether the 'Color Changer' category is suggested. */ function isColorChanger() { - return hasCapabilityOfType(`ColorPreset`) || hasCapabilityOfType(`ColorWheelIndex`) || hasCapabilityOfType(`ColorIntensity`, 2); + return hasCapabilityOfType(`ColorPreset`) || hasCapabilityOfType(`ColorIntensity`, 2) || fixture.wheels.some( + wheel => wheel.slots.some(slot => slot.type === `Color`) + ); } /** diff --git a/tests/test-fixtures.json b/tests/test-fixtures.json index 9f4320fa75..db9add89b0 100644 --- a/tests/test-fixtures.json +++ b/tests/test-fixtures.json @@ -40,19 +40,23 @@ "capability-type-ShutterStrobe", "capability-type-StrobeDuration", "capability-type-Intensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelRotation", "capability-type-Effect", - "capability-type-GoboIndex", - "capability-type-GoboWheelRotation", "capability-type-Maintenance", "fine-channel-alias", "floating-point-weight", "multiple-categories", - "reused-channels" + "reused-channels", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -117,16 +121,14 @@ "capability-type-NoFunction", "capability-type-ShutterStrobe", "capability-type-Intensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", - "capability-type-GoboIndex", - "capability-type-GoboShake", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Prism", "capability-type-PrismRotation", @@ -136,7 +138,12 @@ "floating-point-weight", "multiple-categories", "null-channels", - "reused-channels" + "reused-channels", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -148,11 +155,11 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-Zoom", "capability-type-Frost", @@ -161,7 +168,10 @@ "fine-channel-alias", "multiple-categories", "physical-override", - "reused-channels" + "reused-channels", + "wheel-type-Color", + "wheel-slot-type-Open", + "wheel-slot-type-Color" ] }, { @@ -173,17 +183,15 @@ "capability-type-ShutterStrobe", "capability-type-StrobeSpeed", "capability-type-Intensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-EffectSpeed", - "capability-type-GoboIndex", - "capability-type-GoboShake", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Prism", "capability-type-Maintenance", @@ -195,7 +203,12 @@ "multiple-categories", "reused-channels", "switching-channels", - "switching-channel-positions" + "switching-channel-positions", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -210,38 +223,6 @@ "reused-channels" ] }, - { - "man": "glp", - "key": "impression-spot-one", - "name": "impression Spot One", - "features": [ - "capability-type-NoFunction", - "capability-type-ShutterStrobe", - "capability-type-Intensity", - "capability-type-ColorIntensity", - "capability-type-ColorPreset", - "capability-type-ColorTemperature", - "capability-type-Pan", - "capability-type-Tilt", - "capability-type-PanTiltSpeed", - "capability-type-Effect", - "capability-type-GoboIndex", - "capability-type-GoboShake", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", - "capability-type-Focus", - "capability-type-Zoom", - "capability-type-Iris", - "capability-type-Prism", - "capability-type-Rotation", - "capability-type-Maintenance", - "capability-type-Generic", - "fine-channel-alias", - "multiple-categories", - "rdm", - "reused-channels" - ] - }, { "man": "jb-lighting", "key": "varyscan-p7", @@ -251,16 +232,14 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-EffectSpeed", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Iris", @@ -273,7 +252,12 @@ "fine-channel-alias", "floating-point-pan-tilt-max", "multiple-categories", - "reused-channels" + "reused-channels", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -285,15 +269,14 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-ColorTemperature", "capability-type-Pan", "capability-type-Tilt", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Frost", @@ -305,7 +288,16 @@ "floating-point-weight", "multiple-categories", "switching-channels", - "switches-fine-channels" + "switches-fine-channels", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo", + "wheel-slot-type-Iris", + "wheel-slot-type-Frost", + "wheel-slot-type-AnimationGoboStart", + "wheel-slot-type-AnimationGoboEnd" ] }, { @@ -317,17 +309,16 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-ColorTemperature", "capability-type-Pan", "capability-type-Tilt", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-EffectDuration", "capability-type-EffectParameter", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Iris", @@ -342,7 +333,12 @@ "reused-channels", "switching-channels", "switches-fine-channels", - "switching-channel-positions" + "switching-channel-positions", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -354,15 +350,14 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-ColorTemperature", "capability-type-Pan", "capability-type-Tilt", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Iris", @@ -372,8 +367,8 @@ "capability-type-BladeInsertion", "capability-type-BladeRotation", "capability-type-BladeSystemRotation", - "capability-type-Rotation", "capability-type-Maintenance", + "capability-type-Generic", "duplicate-channel-names", "fine-channel-alias", "floating-point-weight", @@ -382,7 +377,40 @@ "reused-channels", "switching-channels", "switches-fine-channels", - "switching-channel-positions" + "switching-channel-positions", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-type-AnimationGobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo", + "wheel-slot-type-AnimationGoboStart", + "wheel-slot-type-AnimationGoboEnd" + ] + }, + { + "man": "martin", + "key": "roboscan-812", + "name": "RoboScan 812", + "features": [ + "capability-type-NoFunction", + "capability-type-ShutterStrobe", + "capability-type-Pan", + "capability-type-Tilt", + "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-Speed", + "capability-type-Maintenance", + "floating-point-weight", + "floating-point-lens-degrees", + "multiple-categories", + "reused-channels", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Closed", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -409,17 +437,16 @@ "capability-type-ShutterStrobe", "capability-type-Intensity", "capability-type-ColorIntensity", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-ColorTemperature", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-EffectSpeed", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Iris", @@ -437,7 +464,12 @@ "reused-channels", "switching-channels", "switches-fine-channels", - "switching-channel-positions" + "switching-channel-positions", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] }, { @@ -450,16 +482,15 @@ "capability-type-Intensity", "capability-type-ColorIntensity", "capability-type-ColorPreset", - "capability-type-ColorWheelIndex", - "capability-type-ColorWheelRotation", "capability-type-Pan", "capability-type-Tilt", "capability-type-PanTiltSpeed", + "capability-type-WheelSlot", + "capability-type-WheelShake", + "capability-type-WheelSlotRotation", + "capability-type-WheelRotation", "capability-type-Effect", "capability-type-EffectSpeed", - "capability-type-GoboIndex", - "capability-type-GoboStencilRotation", - "capability-type-GoboWheelRotation", "capability-type-Focus", "capability-type-Zoom", "capability-type-Iris", @@ -476,7 +507,12 @@ "reused-channels", "switching-channels", "switches-fine-channels", - "switching-channel-positions" + "switching-channel-positions", + "wheel-type-Color", + "wheel-type-Gobo", + "wheel-slot-type-Open", + "wheel-slot-type-Color", + "wheel-slot-type-Gobo" ] } ] diff --git a/tests/test-fixtures.md b/tests/test-fixtures.md index 9ca57496ae..7f11303530 100644 --- a/tests/test-fixtures.md +++ b/tests/test-fixtures.md @@ -11,11 +11,11 @@ generated by [`cli/make-test-fixtures.js`](../cli/make-test-fixtures.js). 6. [*DTS* XR1200 WASH](../fixtures/dts/xr1200-wash.json) 7. [*Futurelight* DMH-75.i LED Moving Head](../fixtures/futurelight/dmh-75-i-led-moving-head.json) 8. [*Generic* RGBD Fader](../fixtures/generic/rgbd-fader.json) -9. [*GLP* impression Spot One](../fixtures/glp/impression-spot-one.json) -10. [*JB-Lighting* Varyscan P7](../fixtures/jb-lighting/varyscan-p7.json) -11. [*Martin* MAC Axiom Hybrid](../fixtures/martin/mac-axiom-hybrid.json) -12. [*Martin* MAC Viper AirFX](../fixtures/martin/mac-viper-airfx.json) -13. [*Martin* MAC Viper Performance](../fixtures/martin/mac-viper-performance.json) +9. [*JB-Lighting* Varyscan P7](../fixtures/jb-lighting/varyscan-p7.json) +10. [*Martin* MAC Axiom Hybrid](../fixtures/martin/mac-axiom-hybrid.json) +11. [*Martin* MAC Viper AirFX](../fixtures/martin/mac-viper-airfx.json) +12. [*Martin* MAC Viper Performance](../fixtures/martin/mac-viper-performance.json) +13. [*Martin* RoboScan 812](../fixtures/martin/roboscan-812.json) 14. [*MDG* theONE Atmospheric Generator](../fixtures/mdg/theone-atmospheric-generator.json) 15. [*Robe* Robin 600E Spot](../fixtures/robe/robin-600e-spot.json) 16. [*Robe* ROBIN Viva CMY](../fixtures/robe/robin-viva-cmy.json) @@ -26,84 +26,100 @@ generated by [`cli/make-test-fixtures.js`](../cli/make-test-fixtures.js). **Capability type ShutterStrobe** [[2]](#user-content-footnote-2) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ **Capability type StrobeSpeed** [[3]](#user-content-footnote-3) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ **Capability type StrobeDuration** [[4]](#user-content-footnote-4) | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type Intensity** [[5]](#user-content-footnote-5) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type ColorIntensity** [[6]](#user-content-footnote-6) | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type ColorPreset** [[7]](#user-content-footnote-7) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ -**Capability type ColorWheelIndex** [[8]](#user-content-footnote-8) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type ColorWheelRotation** [[9]](#user-content-footnote-9) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type ColorTemperature** [[10]](#user-content-footnote-10) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ -**Capability type Pan** [[11]](#user-content-footnote-11) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type PanContinuous** [[12]](#user-content-footnote-12) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type Tilt** [[13]](#user-content-footnote-13) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type TiltContinuous** [[14]](#user-content-footnote-14) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type PanTiltSpeed** [[15]](#user-content-footnote-15) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ +**Capability type Intensity** [[5]](#user-content-footnote-5) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type ColorIntensity** [[6]](#user-content-footnote-6) | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type ColorPreset** [[7]](#user-content-footnote-7) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ +**Capability type ColorTemperature** [[8]](#user-content-footnote-8) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ +**Capability type Pan** [[9]](#user-content-footnote-9) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Capability type PanContinuous** [[10]](#user-content-footnote-10) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type Tilt** [[11]](#user-content-footnote-11) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Capability type TiltContinuous** [[12]](#user-content-footnote-12) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type PanTiltSpeed** [[13]](#user-content-footnote-13) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ +**Capability type WheelSlot** [[14]](#user-content-footnote-14) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Capability type WheelShake** [[15]](#user-content-footnote-15) | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ *Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 -**Capability type Effect** [[16]](#user-content-footnote-16) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type EffectSpeed** [[17]](#user-content-footnote-17) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ -**Capability type EffectDuration** [[18]](#user-content-footnote-18) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ -**Capability type EffectParameter** [[19]](#user-content-footnote-19) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ -**Capability type SoundSensitivity** [[20]](#user-content-footnote-20) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type GoboIndex** [[21]](#user-content-footnote-21) | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type GoboShake** [[22]](#user-content-footnote-22) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type GoboStencilRotation** [[23]](#user-content-footnote-23) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type GoboWheelRotation** [[24]](#user-content-footnote-24) | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type Focus** [[25]](#user-content-footnote-25) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type Zoom** [[26]](#user-content-footnote-26) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type Iris** [[27]](#user-content-footnote-27) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ -**Capability type IrisEffect** [[28]](#user-content-footnote-28) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ -**Capability type Frost** [[29]](#user-content-footnote-29) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ -**Capability type FrostEffect** [[30]](#user-content-footnote-30) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ +**Capability type WheelSlotRotation** [[16]](#user-content-footnote-16) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type WheelRotation** [[17]](#user-content-footnote-17) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type Effect** [[18]](#user-content-footnote-18) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type EffectSpeed** [[19]](#user-content-footnote-19) | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ +**Capability type EffectDuration** [[20]](#user-content-footnote-20) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type EffectParameter** [[21]](#user-content-footnote-21) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type SoundSensitivity** [[22]](#user-content-footnote-22) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type Focus** [[23]](#user-content-footnote-23) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type Zoom** [[24]](#user-content-footnote-24) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type Iris** [[25]](#user-content-footnote-25) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type IrisEffect** [[26]](#user-content-footnote-26) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ +**Capability type Frost** [[27]](#user-content-footnote-27) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type FrostEffect** [[28]](#user-content-footnote-28) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ +**Capability type Prism** [[29]](#user-content-footnote-29) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ +**Capability type PrismRotation** [[30]](#user-content-footnote-30) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ *Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 -**Capability type Prism** [[31]](#user-content-footnote-31) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ -**Capability type PrismRotation** [[32]](#user-content-footnote-32) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ -**Capability type BladeInsertion** [[33]](#user-content-footnote-33) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ -**Capability type BladeRotation** [[34]](#user-content-footnote-34) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ -**Capability type BladeSystemRotation** [[35]](#user-content-footnote-35) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ -**Capability type Fog** [[36]](#user-content-footnote-36) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ -**Capability type FogOutput** [[37]](#user-content-footnote-37) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ -**Capability type FogType** [[38]](#user-content-footnote-38) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ -**Capability type BeamAngle** [[39]](#user-content-footnote-39) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type Rotation** [[40]](#user-content-footnote-40) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ -**Capability type Speed** [[41]](#user-content-footnote-41) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Capability type Time** [[42]](#user-content-footnote-42) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ -**Capability type Maintenance** [[43]](#user-content-footnote-43) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ -**Capability type Generic** [[44]](#user-content-footnote-44) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Duplicate channel names** | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ +**Capability type BladeInsertion** [[31]](#user-content-footnote-31) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Capability type BladeRotation** [[32]](#user-content-footnote-32) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Capability type BladeSystemRotation** [[33]](#user-content-footnote-33) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Capability type Fog** [[34]](#user-content-footnote-34) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ +**Capability type FogOutput** [[35]](#user-content-footnote-35) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ +**Capability type FogType** [[36]](#user-content-footnote-36) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ +**Capability type BeamAngle** [[37]](#user-content-footnote-37) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Capability type Rotation** [[38]](#user-content-footnote-38) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ +**Capability type Speed** [[39]](#user-content-footnote-39) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ +**Capability type Time** [[40]](#user-content-footnote-40) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ +**Capability type Maintenance** [[41]](#user-content-footnote-41) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ +**Capability type Generic** [[42]](#user-content-footnote-42) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Duplicate channel names** | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Fine channels (16bit)** [[43]](#user-content-footnote-43) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Fine channels (>16bit)** [[44]](#user-content-footnote-44) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ *Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 -**Fine channels (16bit)** [[45]](#user-content-footnote-45) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Fine channels (>16bit)** [[46]](#user-content-footnote-46) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Fine channel capabilities** [[47]](#user-content-footnote-47) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Fine before coarse** [[48]](#user-content-footnote-48) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Fine not-adjacent after coarse** [[49]](#user-content-footnote-49) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Floating point dimensions** [[50]](#user-content-footnote-50) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ -**Floating point weight** | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ +**Fine channel capabilities** [[45]](#user-content-footnote-45) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Fine before coarse** [[46]](#user-content-footnote-46) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Fine not-adjacent after coarse** [[47]](#user-content-footnote-47) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Floating point dimensions** [[48]](#user-content-footnote-48) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ +**Floating point weight** | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ **Floating point power** | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ **Floating point color temperature** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ **Floating point lumens** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Floating point lens degrees** | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Floating point pan/tilt maximum** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Infinite pan** [[51]](#user-content-footnote-51) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Infinite tilt** [[52]](#user-content-footnote-52) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Uses pixelKeys** [[53]](#user-content-footnote-53) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Floating point lens degrees** | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ +**Floating point pan/tilt maximum** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Infinite pan** [[49]](#user-content-footnote-49) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Infinite tilt** [[50]](#user-content-footnote-50) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Uses pixelKeys** [[51]](#user-content-footnote-51) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ +**Uses pixelCount** [[52]](#user-content-footnote-52) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Uses pixelGroups** [[53]](#user-content-footnote-53) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ *Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 -**Uses pixelCount** [[54]](#user-content-footnote-54) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Uses pixelGroups** [[55]](#user-content-footnote-55) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Custom matrix layout** [[56]](#user-content-footnote-56) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Fine matrix channel** [[57]](#user-content-footnote-57) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Switching matrix channel** [[58]](#user-content-footnote-58) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Matrix channel overridden** [[59]](#user-content-footnote-59) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Matrix channel used directly** [[60]](#user-content-footnote-60) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Custom matrix layout** [[54]](#user-content-footnote-54) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Fine matrix channel** [[55]](#user-content-footnote-55) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Switching matrix channel** [[56]](#user-content-footnote-56) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Matrix channel overridden** [[57]](#user-content-footnote-57) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Matrix channel used directly** [[58]](#user-content-footnote-58) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ **Multiple categories** | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ -**Multiple Focuses** [[61]](#user-content-footnote-61) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Multiple Focuses** [[59]](#user-content-footnote-59) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ **No physical** | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**`null` channels** [[62]](#user-content-footnote-62) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**Physical override** [[63]](#user-content-footnote-63) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ -**RDM** [[64]](#user-content-footnote-64) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ -**Reused channels** [[65]](#user-content-footnote-65) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ -**Switching channels** [[66]](#user-content-footnote-66) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**`null` channels** [[60]](#user-content-footnote-60) | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Physical override** [[61]](#user-content-footnote-61) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**RDM** [[62]](#user-content-footnote-62) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ +**Reused channels** [[63]](#user-content-footnote-63) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Switching channels** [[64]](#user-content-footnote-64) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Switches fine channels** [[65]](#user-content-footnote-65) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ +**Switching channel at different positions** [[66]](#user-content-footnote-66) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ *Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 -**Switches fine channels** [[67]](#user-content-footnote-67) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ -**Switching channel at different positions** [[68]](#user-content-footnote-68) | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel type Open** [[67]](#user-content-footnote-67) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel type Closed** [[68]](#user-content-footnote-68) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel type Color** [[69]](#user-content-footnote-69) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel type Gobo** [[70]](#user-content-footnote-70) | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel type Prism** [[71]](#user-content-footnote-71) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel type Iris** [[72]](#user-content-footnote-72) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel type Frost** [[73]](#user-content-footnote-73) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel type AnimationGobo** [[74]](#user-content-footnote-74) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Wheel slot type Open** [[75]](#user-content-footnote-75) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel slot type Closed** [[76]](#user-content-footnote-76) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ +**Wheel slot type Color** [[77]](#user-content-footnote-77) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel slot type Gobo** [[78]](#user-content-footnote-78) | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ +**Wheel slot type Prism** [[79]](#user-content-footnote-79) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel slot type Iris** [[80]](#user-content-footnote-80) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +**Wheel slot type Frost** [[81]](#user-content-footnote-81) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ +*Fixture number* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 +**Wheel slot type AnimationGoboStart** [[82]](#user-content-footnote-82) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ +**Wheel slot type AnimationGoboEnd** [[83]](#user-content-footnote-83) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ ## Footnotes @@ -114,64 +130,79 @@ generated by [`cli/make-test-fixtures.js`](../cli/make-test-fixtures.js). **[5]**: Whether the fixture has at least one capability of type 'Intensity' **[6]**: Whether the fixture has at least one capability of type 'ColorIntensity' **[7]**: Whether the fixture has at least one capability of type 'ColorPreset' -**[8]**: Whether the fixture has at least one capability of type 'ColorWheelIndex' -**[9]**: Whether the fixture has at least one capability of type 'ColorWheelRotation' -**[10]**: Whether the fixture has at least one capability of type 'ColorTemperature' -**[11]**: Whether the fixture has at least one capability of type 'Pan' -**[12]**: Whether the fixture has at least one capability of type 'PanContinuous' -**[13]**: Whether the fixture has at least one capability of type 'Tilt' -**[14]**: Whether the fixture has at least one capability of type 'TiltContinuous' -**[15]**: Whether the fixture has at least one capability of type 'PanTiltSpeed' -**[16]**: Whether the fixture has at least one capability of type 'Effect' -**[17]**: Whether the fixture has at least one capability of type 'EffectSpeed' -**[18]**: Whether the fixture has at least one capability of type 'EffectDuration' -**[19]**: Whether the fixture has at least one capability of type 'EffectParameter' -**[20]**: Whether the fixture has at least one capability of type 'SoundSensitivity' -**[21]**: Whether the fixture has at least one capability of type 'GoboIndex' -**[22]**: Whether the fixture has at least one capability of type 'GoboShake' -**[23]**: Whether the fixture has at least one capability of type 'GoboStencilRotation' -**[24]**: Whether the fixture has at least one capability of type 'GoboWheelRotation' -**[25]**: Whether the fixture has at least one capability of type 'Focus' -**[26]**: Whether the fixture has at least one capability of type 'Zoom' -**[27]**: Whether the fixture has at least one capability of type 'Iris' -**[28]**: Whether the fixture has at least one capability of type 'IrisEffect' -**[29]**: Whether the fixture has at least one capability of type 'Frost' -**[30]**: Whether the fixture has at least one capability of type 'FrostEffect' -**[31]**: Whether the fixture has at least one capability of type 'Prism' -**[32]**: Whether the fixture has at least one capability of type 'PrismRotation' -**[33]**: Whether the fixture has at least one capability of type 'BladeInsertion' -**[34]**: Whether the fixture has at least one capability of type 'BladeRotation' -**[35]**: Whether the fixture has at least one capability of type 'BladeSystemRotation' -**[36]**: Whether the fixture has at least one capability of type 'Fog' -**[37]**: Whether the fixture has at least one capability of type 'FogOutput' -**[38]**: Whether the fixture has at least one capability of type 'FogType' -**[39]**: Whether the fixture has at least one capability of type 'BeamAngle' -**[40]**: Whether the fixture has at least one capability of type 'Rotation' -**[41]**: Whether the fixture has at least one capability of type 'Speed' -**[42]**: Whether the fixture has at least one capability of type 'Time' -**[43]**: Whether the fixture has at least one capability of type 'Maintenance' -**[44]**: Whether the fixture has at least one capability of type 'Generic' -**[45]**: Whether a channel defines exactly one fine channel alias -**[46]**: Whether a channel defines two or more fine channel aliases -**[47]**: Whether a channel with fine channel aliases has capabilities -**[48]**: Fine channel used in a mode before its coarse channel -**[49]**: Coarse channel with fine channels are not directly after each other -**[50]**: In fixture physical or in a mode's physical override. See [#133](https://github.com/OpenLightingProject/open-fixture-library/issues/133). -**[51]**: Whether panMax is set to "infinite" -**[52]**: Whether tiltMax is set to "infinite" -**[53]**: The fixture has a matrix and has set the pixelKeys individually. -**[54]**: The fixture has a matrix and has set the pixelCount property. -**[55]**: The fixture has a matrix and has set pixelGroups. -**[56]**: The fixture has a matrix and it uses null pixelKeys – it is no line, rectangle or cube. -**[57]**: The fixture repeats fine channels for matrix pixels. -**[58]**: The fixture repeats switching channels for matrix pixels. -**[59]**: An available channel overrides a specific matrix channel (at a specific pixel). -**[60]**: If a mode contains a resolved matrix channel key in its raw channel list or if a non-matrix switching channel switches to a matrix channel. -**[61]**: True if multiple Pan / Tilt channels are used in some mode. -**[62]**: Channel list of a mode contains null, so it has an unused channel -**[63]**: Whether at least one mode uses the 'physical' property -**[64]**: Whether an RDM model ID is set -**[65]**: Whether there is at least one channel that is used in different modes -**[66]**: Whether at least one channel defines switching channel aliases -**[67]**: Whether at least one switching channel switches fine channels -**[68]**: Whether there is a switching channel that is used at different positions in different modes +**[8]**: Whether the fixture has at least one capability of type 'ColorTemperature' +**[9]**: Whether the fixture has at least one capability of type 'Pan' +**[10]**: Whether the fixture has at least one capability of type 'PanContinuous' +**[11]**: Whether the fixture has at least one capability of type 'Tilt' +**[12]**: Whether the fixture has at least one capability of type 'TiltContinuous' +**[13]**: Whether the fixture has at least one capability of type 'PanTiltSpeed' +**[14]**: Whether the fixture has at least one capability of type 'WheelSlot' +**[15]**: Whether the fixture has at least one capability of type 'WheelShake' +**[16]**: Whether the fixture has at least one capability of type 'WheelSlotRotation' +**[17]**: Whether the fixture has at least one capability of type 'WheelRotation' +**[18]**: Whether the fixture has at least one capability of type 'Effect' +**[19]**: Whether the fixture has at least one capability of type 'EffectSpeed' +**[20]**: Whether the fixture has at least one capability of type 'EffectDuration' +**[21]**: Whether the fixture has at least one capability of type 'EffectParameter' +**[22]**: Whether the fixture has at least one capability of type 'SoundSensitivity' +**[23]**: Whether the fixture has at least one capability of type 'Focus' +**[24]**: Whether the fixture has at least one capability of type 'Zoom' +**[25]**: Whether the fixture has at least one capability of type 'Iris' +**[26]**: Whether the fixture has at least one capability of type 'IrisEffect' +**[27]**: Whether the fixture has at least one capability of type 'Frost' +**[28]**: Whether the fixture has at least one capability of type 'FrostEffect' +**[29]**: Whether the fixture has at least one capability of type 'Prism' +**[30]**: Whether the fixture has at least one capability of type 'PrismRotation' +**[31]**: Whether the fixture has at least one capability of type 'BladeInsertion' +**[32]**: Whether the fixture has at least one capability of type 'BladeRotation' +**[33]**: Whether the fixture has at least one capability of type 'BladeSystemRotation' +**[34]**: Whether the fixture has at least one capability of type 'Fog' +**[35]**: Whether the fixture has at least one capability of type 'FogOutput' +**[36]**: Whether the fixture has at least one capability of type 'FogType' +**[37]**: Whether the fixture has at least one capability of type 'BeamAngle' +**[38]**: Whether the fixture has at least one capability of type 'Rotation' +**[39]**: Whether the fixture has at least one capability of type 'Speed' +**[40]**: Whether the fixture has at least one capability of type 'Time' +**[41]**: Whether the fixture has at least one capability of type 'Maintenance' +**[42]**: Whether the fixture has at least one capability of type 'Generic' +**[43]**: Whether a channel defines exactly one fine channel alias +**[44]**: Whether a channel defines two or more fine channel aliases +**[45]**: Whether a channel with fine channel aliases has capabilities +**[46]**: Fine channel used in a mode before its coarse channel +**[47]**: Coarse channel with fine channels are not directly after each other +**[48]**: In fixture physical or in a mode's physical override. See [#133](https://github.com/OpenLightingProject/open-fixture-library/issues/133). +**[49]**: Whether panMax is set to "infinite" +**[50]**: Whether tiltMax is set to "infinite" +**[51]**: The fixture has a matrix and has set the pixelKeys individually. +**[52]**: The fixture has a matrix and has set the pixelCount property. +**[53]**: The fixture has a matrix and has set pixelGroups. +**[54]**: The fixture has a matrix and it uses null pixelKeys – it is no line, rectangle or cube. +**[55]**: The fixture repeats fine channels for matrix pixels. +**[56]**: The fixture repeats switching channels for matrix pixels. +**[57]**: An available channel overrides a specific matrix channel (at a specific pixel). +**[58]**: If a mode contains a resolved matrix channel key in its raw channel list or if a non-matrix switching channel switches to a matrix channel. +**[59]**: True if multiple Pan / Tilt channels are used in some mode. +**[60]**: Channel list of a mode contains null, so it has an unused channel +**[61]**: Whether at least one mode uses the 'physical' property +**[62]**: Whether an RDM model ID is set +**[63]**: Whether there is at least one channel that is used in different modes +**[64]**: Whether at least one channel defines switching channel aliases +**[65]**: Whether at least one switching channel switches fine channels +**[66]**: Whether there is a switching channel that is used at different positions in different modes +**[67]**: Whether the fixture has at least one wheel of type 'Open' +**[68]**: Whether the fixture has at least one wheel of type 'Closed' +**[69]**: Whether the fixture has at least one wheel of type 'Color' +**[70]**: Whether the fixture has at least one wheel of type 'Gobo' +**[71]**: Whether the fixture has at least one wheel of type 'Prism' +**[72]**: Whether the fixture has at least one wheel of type 'Iris' +**[73]**: Whether the fixture has at least one wheel of type 'Frost' +**[74]**: Whether the fixture has at least one wheel of type 'AnimationGobo' +**[75]**: Whether the fixture has at least one wheel slot of type 'Open' +**[76]**: Whether the fixture has at least one wheel slot of type 'Closed' +**[77]**: Whether the fixture has at least one wheel slot of type 'Color' +**[78]**: Whether the fixture has at least one wheel slot of type 'Gobo' +**[79]**: Whether the fixture has at least one wheel slot of type 'Prism' +**[80]**: Whether the fixture has at least one wheel slot of type 'Iris' +**[81]**: Whether the fixture has at least one wheel slot of type 'Frost' +**[82]**: Whether the fixture has at least one wheel slot of type 'AnimationGoboStart' +**[83]**: Whether the fixture has at least one wheel slot of type 'AnimationGoboEnd' diff --git a/ui/ajax/submit-editor.js b/ui/ajax/submit-editor.js index d2e1b8f0ee..e28c2ae592 100644 --- a/ui/ajax/submit-editor.js +++ b/ui/ajax/submit-editor.js @@ -102,6 +102,9 @@ function addFixture(fixture) { addMode(key, mode); } } + else if (prop === `wheels`) { + addWheels(out.fixtures[key], fixture); + } else if (propExistsIn(prop, fixture)) { out.fixtures[key][prop] = fixture[prop]; } @@ -114,6 +117,11 @@ function addFixture(fixture) { out.errors[key] = checkResult.errors; } +/** + * If a new manufacturer was entered in the editor, it is also saved here. + * @param {object} fixture The editor fixture object. + * @returns {string} The manufacturer key. + */ function getManufacturerKey(fixture) { if (fixture.useExistingManufacturer) { return fixture.manufacturerKey; @@ -141,6 +149,11 @@ function getManufacturerKey(fixture) { return manKey; } +/** + * @param {object} fixture The editor fixture object. + * @param {string} manKey The manufacturer key of the fixture. + * @returns {string} The fixture key. + */ function getFixtureKey(fixture, manKey) { if (`key` in fixture && fixture.key !== `[new]`) { return fixture.key; @@ -184,6 +197,10 @@ function getPhysical(from) { return physical; } +/** + * @param {object} fixture The OFL fixture object to save the links to. + * @param {array.} editorLinksArray The editor link object array. + */ function addLinks(fixture, editorLinksArray) { fixture.links = {}; @@ -200,6 +217,56 @@ function addLinks(fixture, editorLinksArray) { } } +/** + * Sanitize and save wheels from the editor's channel objects, if there are any. + * @param {object} fixture The OFL fixture object to save the wheels to. + * @param {object} editorFixture The editor fixture object to get the wheels from. + */ +function addWheels(fixture, editorFixture) { + const editorWheelChannels = Object.values(editorFixture.availableChannels).filter( + editorChannel => editorChannel.wheel.slots.length > 0 && editorChannel.wheel.slots.some( + editorWheelSlot => editorWheelSlot !== null && editorWheelSlot.type !== `` + ) + ); + + if (editorWheelChannels.length === 0) { + return; + } + + fixture.wheels = {}; + + editorWheelChannels.forEach(editorChannel => { + const slots = editorChannel.wheel.slots.map(editorWheelSlot => { + if (editorWheelSlot === null || editorWheelSlot.type === ``) { + return null; + } + + const wheelSlot = { + type: editorWheelSlot.type + }; + + const wheelSlotSchema = schemaProperties.wheelSlotTypes[wheelSlot.type]; + + for (const slotProp of Object.keys(wheelSlotSchema.properties)) { + if (propExistsIn(slotProp, editorWheelSlot.typeData)) { + wheelSlot[slotProp] = editorWheelSlot.typeData[slotProp]; + } + } + + return wheelSlot; + }); + + // remove trailing null slots + while (slots[slots.length - 1] === null) { + slots.pop(); + } + + fixture.wheels[editorChannel.name] = { + slots + }; + }); +} + function addAvailableChannel(fixKey, availableChannels, chId) { const from = availableChannels[chId]; diff --git a/ui/assets/scripts/editor-utils.mjs b/ui/assets/scripts/editor-utils.mjs index 1c46e3b5eb..3baf003bab 100644 --- a/ui/assets/scripts/editor-utils.mjs +++ b/ui/assets/scripts/editor-utils.mjs @@ -111,6 +111,10 @@ export function getEmptyChannel() { constant: null, crossfade: null, precedence: ``, + wheel: { + direction: ``, + slots: [] + }, wizard: { show: false, start: 0, @@ -151,6 +155,18 @@ export function getEmptyCapability() { } +/** + * @returns {object} An empty wheel slot object. + */ +export function getEmptyWheelSlot() { + return { + uuid: uuidV4(), + type: ``, + typeData: {} + }; +} + + /** * @param {object} channel The channel object. * @returns {boolean} False if the channel object is still empty / unchanged, true otherwise. diff --git a/ui/components/editor-capabilities/ColorPreset.vue b/ui/components/editor-capabilities/ColorPreset.vue index 0122fee3f9..838588cde4 100644 --- a/ui/components/editor-capabilities/ColorPreset.vue +++ b/ui/components/editor-capabilities/ColorPreset.vue @@ -93,7 +93,7 @@ export default { data() { return { properties: schemaProperties, - hint: `This capability enables a static predefined color (mix). Use ColorWheelIndex for color wheel filters.`, + hint: `This capability enables a static predefined color (mix). Use WheelSlot for color wheel filters.`, defaultData: { comment: ``, colors: null, diff --git a/ui/components/editor-capabilities/ColorWheelIndex.vue b/ui/components/editor-capabilities/ColorWheelIndex.vue deleted file mode 100644 index 363fbcec86..0000000000 --- a/ui/components/editor-capabilities/ColorWheelIndex.vue +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/ui/components/editor-capabilities/GoboIndex.vue b/ui/components/editor-capabilities/GoboIndex.vue deleted file mode 100644 index 9be803ef2d..0000000000 --- a/ui/components/editor-capabilities/GoboIndex.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - diff --git a/ui/components/editor-capabilities/GoboStencilRotation.vue b/ui/components/editor-capabilities/WheelRotation.vue similarity index 89% rename from ui/components/editor-capabilities/GoboStencilRotation.vue rename to ui/components/editor-capabilities/WheelRotation.vue index 16b9a60a2c..a19f68a8ce 100644 --- a/ui/components/editor-capabilities/GoboStencilRotation.vue +++ b/ui/components/editor-capabilities/WheelRotation.vue @@ -73,14 +73,15 @@ export default { data() { return { properties: schemaProperties, + hint: `Rotation of the whole wheel (i.e. over all wheel slots). Use WheelSlotRotation if only the slot itself (e.g. a Gobo) rotates in this capability.`, defaultData: { speedOrAngle: `speed`, - angle: ``, - angleStart: null, - angleEnd: null, - speed: ``, - speedStart: null, - speedEnd: null, + speed: null, + speedStart: `slow CW`, + speedEnd: `fast CW`, + angle: null, + angleStart: `0deg`, + angleEnd: `360deg`, comment: `` } }; diff --git a/ui/components/editor-capabilities/GoboShake.vue b/ui/components/editor-capabilities/WheelShake.vue similarity index 69% rename from ui/components/editor-capabilities/GoboShake.vue rename to ui/components/editor-capabilities/WheelShake.vue index 04cbb95fc4..9bb6705dc9 100644 --- a/ui/components/editor-capabilities/GoboShake.vue +++ b/ui/components/editor-capabilities/WheelShake.vue @@ -1,6 +1,18 @@ + + + + diff --git a/ui/components/editor-wheel-slots.vue b/ui/components/editor-wheel-slots.vue new file mode 100644 index 0000000000..65b341c577 --- /dev/null +++ b/ui/components/editor-wheel-slots.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/ui/components/fixture-wheel.vue b/ui/components/fixture-wheel.vue new file mode 100644 index 0000000000..4181614c98 --- /dev/null +++ b/ui/components/fixture-wheel.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/ui/components/labeled-input.vue b/ui/components/labeled-input.vue index e1008dc63d..16cf0df173 100644 --- a/ui/components/labeled-input.vue +++ b/ui/components/labeled-input.vue @@ -32,6 +32,8 @@
Please use the same unit or select a keyword for both entities.
Please enter a list of #rrggbb (red, green, blue) hex codes.
The file size must be less or equal to {{ fieldState.$attrs[`max-file-size`] }}.
+
AnimationGoboEnd slots must only be used directly after AnimationGoboStart slots.
+
An AnimationGoboEnd slot must be used directly after an AnimationGoboStart slot.
Please enter a number.
diff --git a/ui/components/svg.vue b/ui/components/svg.vue index ff0a0e2839..d6cad6b6a8 100644 --- a/ui/components/svg.vue +++ b/ui/components/svg.vue @@ -148,31 +148,43 @@ function getColorCircle(colors, title) { // use current fill color as background / border str += ``; + str += getColorCircleSvgFragment(colors, radius); + + str += ``; + + return str; +} + + +/** + * @param {array.} colors An array of hex colors to fill into the circle. + * @param {number} radius The radius of the circle. + * @returns {string} A string containing one SVG element or multiple SVG elements. + */ +export function getColorCircleSvgFragment(colors, radius) { if (colors.length === 1) { - str += ``; + return ``; } - else { - const slicePercent = 1.0 / colors.length; - const xAxisRotation = 0; - const largeArcFlag = 0; - const sweepFlag = 1; + let svgStr = ``; + const slicePercent = 1.0 / colors.length; - for (let i = 0; i < colors.length; i++) { - const [startX, startY] = getCoordinatesForPercent(i * slicePercent, radius); - const [endX, endY] = getCoordinatesForPercent((i + 1) * slicePercent, radius); + const xAxisRotation = 0; + const largeArcFlag = 0; + const sweepFlag = 1; - const pathMove = `M ${startX} ${startY}`; - const pathArc = `A ${radius} ${radius} ${xAxisRotation} ${largeArcFlag} ${sweepFlag} ${endX} ${endY}`; - const pathLine = `L 0 0`; + for (let i = 0; i < colors.length; i++) { + const [startX, startY] = getCoordinatesForPercent(i * slicePercent, radius); + const [endX, endY] = getCoordinatesForPercent((i + 1) * slicePercent, radius); - str += ``; - } - } + const pathMove = `M ${startX} ${startY}`; + const pathArc = `A ${radius} ${radius} ${xAxisRotation} ${largeArcFlag} ${sweepFlag} ${endX} ${endY}`; + const pathLine = `L 0 0`; - str += ``; + svgStr += ``; + } - return str; + return svgStr; } diff --git a/ui/components/wheel-slots/AnimationGoboEnd.vue b/ui/components/wheel-slots/AnimationGoboEnd.vue new file mode 100644 index 0000000000..17dba06079 --- /dev/null +++ b/ui/components/wheel-slots/AnimationGoboEnd.vue @@ -0,0 +1,24 @@ + + + diff --git a/ui/components/wheel-slots/AnimationGoboStart.vue b/ui/components/wheel-slots/AnimationGoboStart.vue new file mode 100644 index 0000000000..f297d8af90 --- /dev/null +++ b/ui/components/wheel-slots/AnimationGoboStart.vue @@ -0,0 +1,49 @@ + + + diff --git a/ui/components/wheel-slots/Closed.vue b/ui/components/wheel-slots/Closed.vue new file mode 100644 index 0000000000..17dba06079 --- /dev/null +++ b/ui/components/wheel-slots/Closed.vue @@ -0,0 +1,24 @@ + + + diff --git a/ui/components/wheel-slots/Color.vue b/ui/components/wheel-slots/Color.vue new file mode 100644 index 0000000000..740e8bfbcd --- /dev/null +++ b/ui/components/wheel-slots/Color.vue @@ -0,0 +1,97 @@ + + + diff --git a/ui/components/wheel-slots/Frost.vue b/ui/components/wheel-slots/Frost.vue new file mode 100644 index 0000000000..9db71e7a63 --- /dev/null +++ b/ui/components/wheel-slots/Frost.vue @@ -0,0 +1,49 @@ + + + diff --git a/ui/components/wheel-slots/Gobo.vue b/ui/components/wheel-slots/Gobo.vue new file mode 100644 index 0000000000..34268c7a33 --- /dev/null +++ b/ui/components/wheel-slots/Gobo.vue @@ -0,0 +1,49 @@ + + + diff --git a/ui/components/wheel-slots/Iris.vue b/ui/components/wheel-slots/Iris.vue new file mode 100644 index 0000000000..e5415697c9 --- /dev/null +++ b/ui/components/wheel-slots/Iris.vue @@ -0,0 +1,49 @@ + + + diff --git a/ui/components/wheel-slots/Open.vue b/ui/components/wheel-slots/Open.vue new file mode 100644 index 0000000000..17dba06079 --- /dev/null +++ b/ui/components/wheel-slots/Open.vue @@ -0,0 +1,24 @@ + + + diff --git a/ui/components/wheel-slots/Prism.vue b/ui/components/wheel-slots/Prism.vue new file mode 100644 index 0000000000..3f5e30890c --- /dev/null +++ b/ui/components/wheel-slots/Prism.vue @@ -0,0 +1,63 @@ + + + diff --git a/ui/pages/_manufacturerKey/_fixtureKey.vue b/ui/pages/_manufacturerKey/_fixtureKey.vue index c9635629c0..96a63e79e1 100644 --- a/ui/pages/_manufacturerKey/_fixtureKey.vue +++ b/ui/pages/_manufacturerKey/_fixtureKey.vue @@ -119,6 +119,13 @@ + +
@@ -209,6 +216,12 @@ } } +.wheels { + white-space: nowrap; + overflow: hidden; + overflow-x: auto; +} + #contribute:target { animation: contribute-highlight 1.5s ease; animation-delay: 0.5s; @@ -247,6 +260,7 @@ import fixturePhysical from '~/components/fixture-physical.vue'; import fixtureHelpWanted from '~/components/fixture-help-wanted.vue'; import fixtureHelpWantedDialog from '~/components/fixture-help-wanted-dialog.vue'; import fixtureMatrix from '~/components/fixture-matrix.vue'; +import fixtureWheel from '~/components/fixture-wheel.vue'; import fixtureMode from '~/components/fixture-mode.vue'; import labeledValueVue from '~/components/labeled-value.vue'; @@ -264,6 +278,7 @@ export default { 'app-fixture-help-wanted': fixtureHelpWanted, 'app-fixture-help-wanted-dialog': fixtureHelpWantedDialog, 'app-fixture-matrix': fixtureMatrix, + 'app-fixture-wheel': fixtureWheel, 'app-fixture-mode': fixtureMode, 'app-labeled-value': labeledValueVue },