@rocketshow/designer 1.31.0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/array-sort-pipe.mjs +30 -0
- package/esm2022/lib/designer.component.mjs +605 -0
- package/esm2022/lib/designer.module.mjs +183 -0
- package/esm2022/lib/designer.service.mjs +14 -0
- package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -0
- package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
- package/esm2022/lib/effect/effect.component.mjs +174 -0
- package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
- package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +160 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
- package/esm2022/lib/fixture/fixture.component.mjs +138 -0
- package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
- package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +589 -0
- package/esm2022/lib/intro/intro.component.mjs +95 -0
- package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
- package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
- package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
- package/esm2022/lib/models/cached-fixture.mjs +6 -0
- package/esm2022/lib/models/color.mjs +8 -0
- package/esm2022/lib/models/composition.mjs +46 -0
- package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
- package/esm2022/lib/models/effect-curve.mjs +69 -0
- package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
- package/esm2022/lib/models/effect.mjs +12 -0
- package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
- package/esm2022/lib/models/fixture-capability.mjs +84 -0
- package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
- package/esm2022/lib/models/fixture-channel.mjs +24 -0
- package/esm2022/lib/models/fixture-mode.mjs +14 -0
- package/esm2022/lib/models/fixture-profile.mjs +70 -0
- package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
- package/esm2022/lib/models/fixture-wheel.mjs +15 -0
- package/esm2022/lib/models/fixture.mjs +40 -0
- package/esm2022/lib/models/preset-region-scene.mjs +8 -0
- package/esm2022/lib/models/preset.mjs +56 -0
- package/esm2022/lib/models/project.mjs +68 -0
- package/esm2022/lib/models/scene-playback-region.mjs +11 -0
- package/esm2022/lib/models/scene.mjs +27 -0
- package/esm2022/lib/models/universe.mjs +11 -0
- package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
- package/esm2022/lib/preset/preset.component.mjs +131 -0
- package/esm2022/lib/preview/models/color-changer-3d.mjs +167 -0
- package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
- package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
- package/esm2022/lib/preview/preview.component.mjs +212 -0
- package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
- package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
- package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
- package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
- package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
- package/esm2022/lib/scene/scene.component.mjs +110 -0
- package/esm2022/lib/services/animation.service.mjs +16 -0
- package/esm2022/lib/services/config.service.mjs +27 -0
- package/esm2022/lib/services/effect.service.mjs +14 -0
- package/esm2022/lib/services/error-dialog.service.mjs +39 -0
- package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
- package/esm2022/lib/services/fixture.service.mjs +431 -0
- package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
- package/esm2022/lib/services/intro.service.mjs +140 -0
- package/esm2022/lib/services/preset.service.mjs +400 -0
- package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
- package/esm2022/lib/services/preview.service.mjs +496 -0
- package/esm2022/lib/services/project-load.service.mjs +149 -0
- package/esm2022/lib/services/project.service.mjs +97 -0
- package/esm2022/lib/services/scene.service.mjs +164 -0
- package/esm2022/lib/services/timeline.service.mjs +726 -0
- package/esm2022/lib/services/universe.service.mjs +23 -0
- package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
- package/esm2022/lib/services/user.service.mjs +89 -0
- package/esm2022/lib/services/uuid.service.mjs +23 -0
- package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
- package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +334 -0
- package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
- package/esm2022/lib/timeline/timeline.component.mjs +418 -0
- package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
- package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
- package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
- package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
- package/esm2022/public_api.mjs +7 -0
- package/esm2022/rocketshow-designer.mjs +5 -0
- package/fesm2022/rocketshow-designer.mjs +10626 -0
- package/fesm2022/rocketshow-designer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/array-sort-pipe.d.ts +3 -0
- package/lib/designer.component.d.ts +15 -12
- package/lib/designer.module.d.ts +54 -0
- package/lib/designer.service.d.ts +3 -0
- package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
- package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
- package/lib/effect/effect.component.d.ts +3 -0
- package/lib/error-dialog/error-dialog.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
- package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
- package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
- package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
- package/lib/fixture/fixture.component.d.ts +3 -0
- package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
- package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
- package/lib/intro/intro.component.d.ts +3 -0
- package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
- package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
- package/lib/preset/preset.component.d.ts +3 -0
- package/lib/preview/preview.component.d.ts +4 -4
- package/lib/project/project-browser/project-browser.component.d.ts +3 -0
- package/lib/project/project-import/project-import.component.d.ts +3 -0
- package/lib/project/project-save/project-save.component.d.ts +3 -0
- package/lib/project/project-share/project-share.component.d.ts +3 -0
- package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
- package/lib/scene/scene.component.d.ts +3 -0
- package/lib/services/animation.service.d.ts +3 -0
- package/lib/services/config.service.d.ts +3 -0
- package/lib/services/effect.service.d.ts +3 -0
- package/lib/services/error-dialog.service.d.ts +3 -0
- package/lib/services/fixture-pool.service.d.ts +3 -0
- package/lib/services/fixture.service.d.ts +3 -0
- package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
- package/lib/services/intro.service.d.ts +3 -0
- package/lib/services/preset.service.d.ts +3 -0
- package/lib/services/preview-mesh.service.d.ts +3 -0
- package/lib/services/preview.service.d.ts +4 -0
- package/lib/services/project-load.service.d.ts +3 -0
- package/lib/services/project.service.d.ts +3 -0
- package/lib/services/scene.service.d.ts +3 -0
- package/lib/services/timeline.service.d.ts +4 -1
- package/lib/services/universe.service.d.ts +3 -0
- package/lib/services/user-ensure-login.service.d.ts +3 -0
- package/lib/services/user.service.d.ts +3 -0
- package/lib/services/uuid.service.d.ts +3 -0
- package/lib/services/warning-dialog.service.d.ts +3 -0
- package/lib/timeline/composition-settings/composition-settings.component.d.ts +3 -0
- package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
- package/lib/timeline/timeline.component.d.ts +3 -0
- package/lib/user/user-login/user-login.component.d.ts +3 -0
- package/lib/user/user-register/user-register.component.d.ts +3 -0
- package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
- package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
- package/package.json +20 -22
- package/rocketshow-designer-1.33.0.tgz +0 -0
- package/bundles/rocketshow-designer.umd.js +0 -9947
- package/bundles/rocketshow-designer.umd.js.map +0 -1
- package/bundles/rocketshow-designer.umd.min.js +0 -17
- package/bundles/rocketshow-designer.umd.min.js.map +0 -1
- package/esm2015/lib/array-sort-pipe.js +0 -28
- package/esm2015/lib/designer.component.js +0 -411
- package/esm2015/lib/designer.module.js +0 -117
- package/esm2015/lib/designer.service.js +0 -16
- package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
- package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
- package/esm2015/lib/effect/effect.component.js +0 -73
- package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
- package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
- package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
- package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
- package/esm2015/lib/fixture/fixture.component.js +0 -70
- package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
- package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
- package/esm2015/lib/intro/intro.component.js +0 -25
- package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
- package/esm2015/lib/models/cached-fixture-capability.js +0 -9
- package/esm2015/lib/models/cached-fixture-channel.js +0 -7
- package/esm2015/lib/models/cached-fixture.js +0 -6
- package/esm2015/lib/models/color.js +0 -8
- package/esm2015/lib/models/composition.js +0 -46
- package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
- package/esm2015/lib/models/effect-curve.js +0 -69
- package/esm2015/lib/models/effect-pan-tilt.js +0 -19
- package/esm2015/lib/models/effect.js +0 -12
- package/esm2015/lib/models/fixture-capability-value.js +0 -15
- package/esm2015/lib/models/fixture-capability.js +0 -84
- package/esm2015/lib/models/fixture-channel-value.js +0 -11
- package/esm2015/lib/models/fixture-channel.js +0 -24
- package/esm2015/lib/models/fixture-mode.js +0 -14
- package/esm2015/lib/models/fixture-profile.js +0 -70
- package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
- package/esm2015/lib/models/fixture-wheel.js +0 -15
- package/esm2015/lib/models/fixture.js +0 -40
- package/esm2015/lib/models/preset-region-scene.js +0 -8
- package/esm2015/lib/models/preset.js +0 -56
- package/esm2015/lib/models/project.js +0 -68
- package/esm2015/lib/models/scene-playback-region.js +0 -11
- package/esm2015/lib/models/scene.js +0 -27
- package/esm2015/lib/models/universe.js +0 -11
- package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
- package/esm2015/lib/preset/preset.component.js +0 -85
- package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
- package/esm2015/lib/preview/models/fixture-3d.js +0 -150
- package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
- package/esm2015/lib/preview/preview.component.js +0 -242
- package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
- package/esm2015/lib/project/project-import/project-import.component.js +0 -89
- package/esm2015/lib/project/project-save/project-save.component.js +0 -105
- package/esm2015/lib/project/project-share/project-share.component.js +0 -43
- package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
- package/esm2015/lib/scene/scene.component.js +0 -56
- package/esm2015/lib/services/animation.service.js +0 -17
- package/esm2015/lib/services/config.service.js +0 -28
- package/esm2015/lib/services/effect.service.js +0 -16
- package/esm2015/lib/services/error-dialog.service.js +0 -44
- package/esm2015/lib/services/fixture-pool.service.js +0 -34
- package/esm2015/lib/services/fixture.service.js +0 -443
- package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
- package/esm2015/lib/services/intro.service.js +0 -144
- package/esm2015/lib/services/preset.service.js +0 -416
- package/esm2015/lib/services/preview-mesh.service.js +0 -58
- package/esm2015/lib/services/preview.service.js +0 -500
- package/esm2015/lib/services/project-load.service.js +0 -171
- package/esm2015/lib/services/project.service.js +0 -113
- package/esm2015/lib/services/scene.service.js +0 -174
- package/esm2015/lib/services/timeline.service.js +0 -738
- package/esm2015/lib/services/universe.service.js +0 -24
- package/esm2015/lib/services/user-ensure-login.service.js +0 -44
- package/esm2015/lib/services/user.service.js +0 -93
- package/esm2015/lib/services/uuid.service.js +0 -25
- package/esm2015/lib/services/warning-dialog.service.js +0 -43
- package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
- package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
- package/esm2015/lib/timeline/timeline.component.js +0 -239
- package/esm2015/lib/user/user-login/user-login.component.js +0 -64
- package/esm2015/lib/user/user-register/user-register.component.js +0 -89
- package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
- package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
- package/esm2015/public_api.js +0 -7
- package/esm2015/rocketshow-designer.js +0 -61
- package/esm5/lib/array-sort-pipe.js +0 -31
- package/esm5/lib/designer.component.js +0 -468
- package/esm5/lib/designer.module.js +0 -120
- package/esm5/lib/designer.service.js +0 -17
- package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
- package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
- package/esm5/lib/effect/effect.component.js +0 -75
- package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
- package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
- package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
- package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
- package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
- package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
- package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
- package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
- package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
- package/esm5/lib/fixture/fixture.component.js +0 -71
- package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
- package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
- package/esm5/lib/intro/intro.component.js +0 -26
- package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
- package/esm5/lib/models/cached-fixture-capability.js +0 -11
- package/esm5/lib/models/cached-fixture-channel.js +0 -9
- package/esm5/lib/models/cached-fixture.js +0 -8
- package/esm5/lib/models/color.js +0 -10
- package/esm5/lib/models/composition.js +0 -60
- package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
- package/esm5/lib/models/effect-curve.js +0 -95
- package/esm5/lib/models/effect-pan-tilt.js +0 -24
- package/esm5/lib/models/effect.js +0 -14
- package/esm5/lib/models/fixture-capability-value.js +0 -17
- package/esm5/lib/models/fixture-capability.js +0 -86
- package/esm5/lib/models/fixture-channel-value.js +0 -13
- package/esm5/lib/models/fixture-channel.js +0 -38
- package/esm5/lib/models/fixture-mode.js +0 -16
- package/esm5/lib/models/fixture-profile.js +0 -114
- package/esm5/lib/models/fixture-wheel-slot.js +0 -28
- package/esm5/lib/models/fixture-wheel.js +0 -29
- package/esm5/lib/models/fixture.js +0 -42
- package/esm5/lib/models/preset-region-scene.js +0 -10
- package/esm5/lib/models/preset.js +0 -90
- package/esm5/lib/models/project.js +0 -122
- package/esm5/lib/models/scene-playback-region.js +0 -13
- package/esm5/lib/models/scene.js +0 -29
- package/esm5/lib/models/universe.js +0 -13
- package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
- package/esm5/lib/preset/preset.component.js +0 -86
- package/esm5/lib/preview/models/color-changer-3d.js +0 -194
- package/esm5/lib/preview/models/fixture-3d.js +0 -196
- package/esm5/lib/preview/models/moving-head-3d.js +0 -250
- package/esm5/lib/preview/preview.component.js +0 -280
- package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
- package/esm5/lib/project/project-import/project-import.component.js +0 -88
- package/esm5/lib/project/project-save/project-save.component.js +0 -120
- package/esm5/lib/project/project-share/project-share.component.js +0 -44
- package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
- package/esm5/lib/scene/scene.component.js +0 -57
- package/esm5/lib/services/animation.service.js +0 -18
- package/esm5/lib/services/config.service.js +0 -29
- package/esm5/lib/services/effect.service.js +0 -17
- package/esm5/lib/services/error-dialog.service.js +0 -46
- package/esm5/lib/services/fixture-pool.service.js +0 -36
- package/esm5/lib/services/fixture.service.js +0 -643
- package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
- package/esm5/lib/services/intro.service.js +0 -145
- package/esm5/lib/services/preset.service.js +0 -637
- package/esm5/lib/services/preview-mesh.service.js +0 -61
- package/esm5/lib/services/preview.service.js +0 -754
- package/esm5/lib/services/project-load.service.js +0 -185
- package/esm5/lib/services/project.service.js +0 -127
- package/esm5/lib/services/scene.service.js +0 -251
- package/esm5/lib/services/timeline.service.js +0 -845
- package/esm5/lib/services/universe.service.js +0 -36
- package/esm5/lib/services/user-ensure-login.service.js +0 -45
- package/esm5/lib/services/user.service.js +0 -95
- package/esm5/lib/services/uuid.service.js +0 -26
- package/esm5/lib/services/warning-dialog.service.js +0 -45
- package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
- package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
- package/esm5/lib/timeline/timeline.component.js +0 -243
- package/esm5/lib/user/user-login/user-login.component.js +0 -66
- package/esm5/lib/user/user-register/user-register.component.js +0 -91
- package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
- package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
- package/esm5/public_api.js +0 -7
- package/esm5/rocketshow-designer.js +0 -61
- package/fesm2015/rocketshow-designer.js +0 -7945
- package/fesm2015/rocketshow-designer.js.map +0 -1
- package/fesm5/rocketshow-designer.js +0 -9690
- package/fesm5/rocketshow-designer.js.map +0 -1
- package/rocketshow-designer-1.31.0.tgz +0 -0
- package/rocketshow-designer.d.ts +0 -60
- package/rocketshow-designer.metadata.json +0 -1
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { __extends, __read, __values } from "tslib";
|
|
2
|
-
import { forkJoin } from 'rxjs';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { Fixture3d } from './fixture-3d';
|
|
6
|
-
var ColorChanger3d = /** @class */ (function (_super) {
|
|
7
|
-
__extends(ColorChanger3d, _super);
|
|
8
|
-
function ColorChanger3d(fixtureService, previewMeshService, fixture, scene) {
|
|
9
|
-
var _this = _super.call(this, fixtureService, fixture, scene) || this;
|
|
10
|
-
_this.pointLightMaxIntensity = 2;
|
|
11
|
-
_this.spotLightMaxIntensity = 5;
|
|
12
|
-
_this.objectGroup = new THREE.Object3D();
|
|
13
|
-
_this.spotlightGroup = new THREE.Object3D();
|
|
14
|
-
forkJoin([previewMeshService.getMesh('color-changer')])
|
|
15
|
-
.pipe(map(function (_a) {
|
|
16
|
-
var _b = __read(_a, 1), colorChanger = _b[0];
|
|
17
|
-
_this.mesh = colorChanger;
|
|
18
|
-
_this.createObjects();
|
|
19
|
-
}))
|
|
20
|
-
.subscribe();
|
|
21
|
-
return _this;
|
|
22
|
-
}
|
|
23
|
-
ColorChanger3d.prototype.atmosphereMat = function () {
|
|
24
|
-
var vertexShader = [
|
|
25
|
-
'varying vec3 vVertexWorldPosition;',
|
|
26
|
-
'varying vec3 vVertexNormal;',
|
|
27
|
-
'void main(){',
|
|
28
|
-
' vVertexNormal = normalize(normalMatrix * normal);',
|
|
29
|
-
' vVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',
|
|
30
|
-
' // set gl_Position',
|
|
31
|
-
' gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);',
|
|
32
|
-
'}',
|
|
33
|
-
].join('\n');
|
|
34
|
-
var fragmentShader = [
|
|
35
|
-
'uniform vec3 glowColor;',
|
|
36
|
-
'uniform float coeficient;',
|
|
37
|
-
'uniform float power;',
|
|
38
|
-
'uniform float opacity;',
|
|
39
|
-
'varying vec3 vVertexNormal;',
|
|
40
|
-
'varying vec3 vVertexWorldPosition;',
|
|
41
|
-
'void main(){',
|
|
42
|
-
' vec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',
|
|
43
|
-
' vec3 viewCameraToVertex = (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',
|
|
44
|
-
' viewCameraToVertex = normalize(viewCameraToVertex);',
|
|
45
|
-
' float intensity = pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',
|
|
46
|
-
' gl_FragColor = vec4(glowColor, intensity * opacity);',
|
|
47
|
-
'}',
|
|
48
|
-
].join('\n');
|
|
49
|
-
// create custom material from the shader code above
|
|
50
|
-
// that is within specially labeled script tags
|
|
51
|
-
var material = new THREE.ShaderMaterial({
|
|
52
|
-
uniforms: {
|
|
53
|
-
coeficient: {
|
|
54
|
-
type: 'f',
|
|
55
|
-
value: 0.3,
|
|
56
|
-
},
|
|
57
|
-
power: {
|
|
58
|
-
type: 'f',
|
|
59
|
-
value: 1.3,
|
|
60
|
-
},
|
|
61
|
-
opacity: {
|
|
62
|
-
type: 'f',
|
|
63
|
-
value: 1.0,
|
|
64
|
-
},
|
|
65
|
-
glowColor: {
|
|
66
|
-
type: 'c',
|
|
67
|
-
value: new THREE.Color('white'),
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
vertexShader: vertexShader,
|
|
71
|
-
fragmentShader: fragmentShader,
|
|
72
|
-
// blending: THREE.AdditiveBlending,
|
|
73
|
-
transparent: true,
|
|
74
|
-
depthWrite: false,
|
|
75
|
-
});
|
|
76
|
-
return material;
|
|
77
|
-
};
|
|
78
|
-
ColorChanger3d.prototype.createSpotLightBeam = function () {
|
|
79
|
-
if (this.spotLightBeam) {
|
|
80
|
-
this.spotlightGroup.remove(this.spotLightBeam);
|
|
81
|
-
}
|
|
82
|
-
// TODO update the correct angle from the profile
|
|
83
|
-
var beamAngleDegrees = 14;
|
|
84
|
-
var geometry = new THREE.CylinderGeometry(0.8, beamAngleDegrees * 1.2, 100, 64, 20, false);
|
|
85
|
-
geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
|
|
86
|
-
geometry.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
|
|
87
|
-
this.atmosphereMaterial = this.atmosphereMat();
|
|
88
|
-
this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
|
|
89
|
-
this.spotLightBeam.position.set(0, -0.02, 0);
|
|
90
|
-
this.spotlightGroup.add(this.spotLightBeam);
|
|
91
|
-
this.spotLightBeam.rotation.x = Math.PI / 2;
|
|
92
|
-
};
|
|
93
|
-
ColorChanger3d.prototype.createObjects = function () {
|
|
94
|
-
this.material = new THREE.MeshLambertMaterial({
|
|
95
|
-
color: 0x0d0d0d,
|
|
96
|
-
emissive: 0x0d0d0d,
|
|
97
|
-
});
|
|
98
|
-
this.mesh.material = this.material;
|
|
99
|
-
// Add the spotlight
|
|
100
|
-
this.spotLight = new THREE.SpotLight(0xffffff, 1);
|
|
101
|
-
this.spotLight.angle = 0.244;
|
|
102
|
-
this.spotLight.penumbra = 0.5;
|
|
103
|
-
this.spotLight.decay = 2;
|
|
104
|
-
this.spotLight.distance = 60000;
|
|
105
|
-
this.spotLight.castShadow = false;
|
|
106
|
-
this.spotLight.intensity = 10;
|
|
107
|
-
this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);
|
|
108
|
-
// scene.add(this.spotLightHelper);
|
|
109
|
-
var spotLightTarget = new THREE.Object3D();
|
|
110
|
-
this.spotLight.target = spotLightTarget;
|
|
111
|
-
this.spotlightGroup.add(this.spotLight);
|
|
112
|
-
this.spotlightGroup.add(spotLightTarget);
|
|
113
|
-
this.spotLight.position.set(0, -1.4, 0);
|
|
114
|
-
spotLightTarget.position.set(0, -10, 0);
|
|
115
|
-
// Add the point light for the surrounding light
|
|
116
|
-
this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);
|
|
117
|
-
this.spotlightGroup.add(this.pointLight);
|
|
118
|
-
this.pointLight.position.set(0, -1.4, 0);
|
|
119
|
-
// Add the light beam
|
|
120
|
-
this.createSpotLightBeam();
|
|
121
|
-
this.objectGroup.add(this.spotlightGroup);
|
|
122
|
-
this.objectGroup.add(this.mesh);
|
|
123
|
-
// A moving head has about 32 cm in width
|
|
124
|
-
this.objectGroup.scale.multiplyScalar(9);
|
|
125
|
-
this.scene.add(this.objectGroup);
|
|
126
|
-
this.isLoaded = true;
|
|
127
|
-
};
|
|
128
|
-
ColorChanger3d.prototype.getObject = function () {
|
|
129
|
-
return this.objectGroup;
|
|
130
|
-
};
|
|
131
|
-
ColorChanger3d.prototype.updatePreview = function (channelValues, masterDimmerValue) {
|
|
132
|
-
var e_1, _a, e_2, _b;
|
|
133
|
-
_super.prototype.updatePreview.call(this, channelValues, masterDimmerValue);
|
|
134
|
-
if (!this.isLoaded) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
this.updatePosition(this.objectGroup);
|
|
138
|
-
// Update the material
|
|
139
|
-
if (this.lastSelected !== this.isSelected) {
|
|
140
|
-
if (this.isSelected) {
|
|
141
|
-
try {
|
|
142
|
-
for (var _c = __values(this.mesh.children), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
143
|
-
var child = _d.value;
|
|
144
|
-
child.material = this.selectedMaterial;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
148
|
-
finally {
|
|
149
|
-
try {
|
|
150
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
151
|
-
}
|
|
152
|
-
finally { if (e_1) throw e_1.error; }
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
try {
|
|
157
|
-
for (var _e = __values(this.mesh.children), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
158
|
-
var child = _f.value;
|
|
159
|
-
child.material = this.material;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
163
|
-
finally {
|
|
164
|
-
try {
|
|
165
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
166
|
-
}
|
|
167
|
-
finally { if (e_2) throw e_2.error; }
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
this.lastSelected = this.isSelected;
|
|
171
|
-
}
|
|
172
|
-
// Update the light helpers
|
|
173
|
-
this.spotLightHelper.update();
|
|
174
|
-
// Apply the colors
|
|
175
|
-
var color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
|
|
176
|
-
this.pointLight.color = color;
|
|
177
|
-
this.spotLight.color = color;
|
|
178
|
-
this.spotLightBeam.material.uniforms.glowColor.value = color;
|
|
179
|
-
// Apply the dimmer value
|
|
180
|
-
// Take the color into account for the beam (don't show a black beam)
|
|
181
|
-
var intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
|
|
182
|
-
this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer) * 0.5;
|
|
183
|
-
this.spotLight.intensity = this.spotLightMaxIntensity * this.dimmer;
|
|
184
|
-
this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
|
|
185
|
-
};
|
|
186
|
-
ColorChanger3d.prototype.destroy = function () {
|
|
187
|
-
this.scene.remove(this.objectGroup);
|
|
188
|
-
this.material.dispose();
|
|
189
|
-
this.atmosphereMaterial.dispose();
|
|
190
|
-
};
|
|
191
|
-
return ColorChanger3d;
|
|
192
|
-
}(Fixture3d));
|
|
193
|
-
export { ColorChanger3d };
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItY2hhbmdlci0zZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Byb2NrZXRzaG93L2Rlc2lnbmVyLyIsInNvdXJjZXMiOlsibGliL3ByZXZpZXcvbW9kZWxzL2NvbG9yLWNoYW5nZXItM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBTS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekM7SUFBb0Msa0NBQVM7SUFvSjNDLHdCQUFZLGNBQThCLEVBQUUsa0JBQXNDLEVBQUUsT0FBc0IsRUFBRSxLQUFVO1FBQXRILFlBQ0Usa0JBQU0sY0FBYyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FXdEM7UUEvSmdCLDRCQUFzQixHQUFXLENBQUMsQ0FBQztRQUNuQywyQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFJM0MsaUJBQVcsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsb0JBQWMsR0FBbUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFnSjVELFFBQVEsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO2FBQ3BELElBQUksQ0FDSCxHQUFHLENBQUMsVUFBQyxFQUFjO2dCQUFkLGtCQUFjLEVBQWIsb0JBQVk7WUFDaEIsS0FBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7WUFFekIsS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7O0lBQ2pCLENBQUM7SUE3SU8sc0NBQWEsR0FBckI7UUFDRSxJQUFNLFlBQVksR0FBRztZQUNuQixvQ0FBb0M7WUFDcEMsNkJB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QU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUxRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN4RSxDQUFDO0lBRUQsZ0NBQU8sR0FBUDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBdk5ELENBQW9DLFNBQVMsR0F1TjVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE1lc2ggfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdNZXNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctbWVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmUzZCB9IGZyb20gJy4vZml4dHVyZS0zZCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xvckNoYW5nZXIzZCBleHRlbmRzIEZpeHR1cmUzZCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcG9pbnRMaWdodE1heEludGVuc2l0eTogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSByZWFkb25seSBzcG90TGlnaHRNYXhJbnRlbnNpdHk6IG51bWJlciA9IDU7XG5cbiAgcHJpdmF0ZSBtZXNoOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgb2JqZWN0R3JvdXA6IFRIUkVFLk9iamVjdDNEID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gIHByaXZhdGUgc3BvdGxpZ2h0R3JvdXA6IFRIUkVFLk9iamVjdDNEID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gIHByaXZhdGUgc3BvdExpZ2h0OiBUSFJFRS5TcG90TGlnaHQ7XG4gIHByaXZhdGUgc3BvdExpZ2h0SGVscGVyOiBUSFJFRS5TcG90TGlnaHRIZWxwZXI7XG4gIHByaXZhdGUgc3BvdExpZ2h0QmVhbTogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIHBvaW50TGlnaHQ6IFRIUkVFLlBvaW50TGlnaHQ7XG5cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBtYXRlcmlhbDogVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWw7XG4gIHByaXZhdGUgYXRtb3NwaGVyZU1hdGVyaWFsOiBUSFJFRS5TaGFkZXJNYXRlcmlhbDtcblxuICBwcml2YXRlIGF0bW9zcGhlcmVNYXQoKSB7XG4gICAgY29uc3QgdmVydGV4U2hhZGVyID0gW1xuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleFdvcmxkUG9zaXRpb247JyxcbiAgICAgICd2YXJ5aW5nIHZlYzNcdHZWZXJ0ZXhOb3JtYWw7JyxcblxuICAgICAgJ3ZvaWQgbWFpbigpeycsXG4gICAgICAnXHR2VmVydGV4Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7JyxcblxuICAgICAgJ1x0dlZlcnRleFdvcmxkUG9zaXRpb24gPSAobW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7JyxcblxuICAgICAgJ1x0Ly8gc2V0IGdsX1Bvc2l0aW9uJyxcbiAgICAgICdcdGdsX1Bvc2l0aW9uXHQ9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApOycsXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IFtcbiAgICAgICd1bmlmb3JtIHZlYzNcdGdsb3dDb2xvcjsnLFxuICAgICAgJ3VuaWZvcm0gZmxvYXRcdGNvZWZpY2llbnQ7JyxcbiAgICAgICd1bmlmb3JtIGZsb2F0XHRwb3dlcjsnLFxuICAgICAgJ3VuaWZvcm0gZmxvYXRcdG9wYWNpdHk7JyxcblxuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleE5vcm1hbDsnLFxuICAgICAgJ3ZhcnlpbmcgdmVjM1x0dlZlcnRleFdvcmxkUG9zaXRpb247JyxcblxuICAgICAgJ3ZvaWQgbWFpbigpeycsXG4gICAgICAnXHR2ZWMzIHdvcmxkQ2FtZXJhVG9WZXJ0ZXg9IHZWZXJ0ZXhXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb247JyxcbiAgICAgICdcdHZlYzMgdmlld0NhbWVyYVRvVmVydGV4XHQ9ICh2aWV3TWF0cml4ICogdmVjNCh3b3JsZENhbWVyYVRvVmVydGV4LCAwLjApKS54eXo7JyxcbiAgICAgICdcdHZpZXdDYW1lcmFUb1ZlcnRleFx0PSBub3JtYWxpemUodmlld0NhbWVyYVRvVmVydGV4KTsnLFxuICAgICAgJ1x0ZmxvYXQgaW50ZW5zaXR5XHRcdD0gcG93KGNvZWZpY2llbnQgKyBkb3QodlZlcnRleE5vcm1hbCwgdmlld0NhbWVyYVRvVmVydGV4KSwgcG93ZXIpOycsXG4gICAgICAnXHRnbF9GcmFnQ29sb3JcdFx0PSB2ZWM0KGdsb3dDb2xvciwgaW50ZW5zaXR5ICogb3BhY2l0eSk7JyxcbiAgICAgICd9JyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuXG4gICAgLy8gY3JlYXRlIGN1c3RvbSBtYXRlcmlhbCBmcm9tIHRoZSBzaGFkZXIgY29kZSBhYm92ZVxuICAgIC8vIHRoYXQgaXMgd2l0aGluIHNwZWNpYWxseSBsYWJlbGVkIHNjcmlwdCB0YWdzXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgY29lZmljaWVudDoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogMC4zLFxuICAgICAgICB9LFxuICAgICAgICBwb3dlcjoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogMS4zLFxuICAgICAgICB9LFxuICAgICAgICBvcGFjaXR5OiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAxLjAsXG4gICAgICAgIH0sXG4gICAgICAgIGdsb3dDb2xvcjoge1xuICAgICAgICAgIHR5cGU6ICdjJyxcbiAgICAgICAgICB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZlcnRleFNoYWRlcixcbiAgICAgIGZyYWdtZW50U2hhZGVyLFxuICAgICAgLy8gYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTcG90TGlnaHRCZWFtKCkge1xuICAgIGlmICh0aGlzLnNwb3RMaWdodEJlYW0pIHtcbiAgICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAucmVtb3ZlKHRoaXMuc3BvdExpZ2h0QmVhbSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB1cGRhdGUgdGhlIGNvcnJlY3QgYW5nbGUgZnJvbSB0aGUgcHJvZmlsZVxuICAgIGNvbnN0IGJlYW1BbmdsZURlZ3JlZXMgPSAxNDtcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KDAuOCwgYmVhbUFuZ2xlRGVncmVlcyAqIDEuMiwgMTAwLCA2NCwgMjAsIGZhbHNlKTtcbiAgICBnZW9tZXRyeS5hcHBseU1hdHJpeChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXgobmV3IFRIUkVFLk1hdHJpeDQoKS5tYWtlUm90YXRpb25YKC1NYXRoLlBJIC8gMikpO1xuXG4gICAgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwgPSB0aGlzLmF0bW9zcGhlcmVNYXQoKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0gPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwpO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5wb3NpdGlvbi5zZXQoMCwgLTAuMDIsIDApO1xuXG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucm90YXRpb24ueCA9IE1hdGguUEkgLyAyO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPYmplY3RzKCkge1xuICAgICh0aGlzLm1hdGVyaWFsIGFzIGFueSkgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICBlbWlzc2l2ZTogMHgwZDBkMGQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG4gICAgLy8gQWRkIHRoZSBzcG90bGlnaHRcbiAgICB0aGlzLnNwb3RMaWdodCA9IG5ldyBUSFJFRS5TcG90TGlnaHQoMHhmZmZmZmYsIDEpO1xuICAgIHRoaXMuc3BvdExpZ2h0LmFuZ2xlID0gMC4yNDQ7XG4gICAgdGhpcy5zcG90TGlnaHQucGVudW1icmEgPSAwLjU7XG4gICAgdGhpcy5zcG90TGlnaHQuZGVjYXkgPSAyO1xuICAgIHRoaXMuc3BvdExpZ2h0LmRpc3RhbmNlID0gNjAwMDA7XG4gICAgdGhpcy5zcG90TGlnaHQuY2FzdFNoYWRvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IDEwO1xuXG4gICAgdGhpcy5zcG90TGlnaHRIZWxwZXIgPSBuZXcgVEhSRUUuU3BvdExpZ2h0SGVscGVyKHRoaXMuc3BvdExpZ2h0KTtcbiAgICAvLyBzY2VuZS5hZGQodGhpcy5zcG90TGlnaHRIZWxwZXIpO1xuXG4gICAgY29uc3Qgc3BvdExpZ2h0VGFyZ2V0ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgdGhpcy5zcG90TGlnaHQudGFyZ2V0ID0gc3BvdExpZ2h0VGFyZ2V0O1xuXG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHQpO1xuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHNwb3RMaWdodFRhcmdldCk7XG4gICAgdGhpcy5zcG90TGlnaHQucG9zaXRpb24uc2V0KDAsIC0xLjQsIDApO1xuICAgIHNwb3RMaWdodFRhcmdldC5wb3NpdGlvbi5zZXQoMCwgLTEwLCAwKTtcblxuICAgIC8vIEFkZCB0aGUgcG9pbnQgbGlnaHQgZm9yIHRoZSBzdXJyb3VuZGluZyBsaWdodFxuICAgIHRoaXMucG9pbnRMaWdodCA9IG5ldyBUSFJFRS5Qb2ludExpZ2h0KDB4ZmZmZmZmLCAyLCAxMDAwKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnBvaW50TGlnaHQpO1xuICAgIHRoaXMucG9pbnRMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG5cbiAgICAvLyBBZGQgdGhlIGxpZ2h0IGJlYW1cbiAgICB0aGlzLmNyZWF0ZVNwb3RMaWdodEJlYW0oKTtcblxuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuc3BvdGxpZ2h0R3JvdXApO1xuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMubWVzaCk7XG5cbiAgICAvLyBBIG1vdmluZyBoZWFkIGhhcyBhYm91dCAzMiBjbSBpbiB3aWR0aFxuICAgIHRoaXMub2JqZWN0R3JvdXAuc2NhbGUubXVsdGlwbHlTY2FsYXIoOSk7XG5cbiAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLm9iamVjdEdyb3VwKTtcblxuICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLCBwcmV2aWV3TWVzaFNlcnZpY2U6IFByZXZpZXdNZXNoU2VydmljZSwgZml4dHVyZTogQ2FjaGVkRml4dHVyZSwgc2NlbmU6IGFueSkge1xuICAgIHN1cGVyKGZpeHR1cmVTZXJ2aWNlLCBmaXh0dXJlLCBzY2VuZSk7XG5cbiAgICBmb3JrSm9pbihbcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ2NvbG9yLWNoYW5nZXInKV0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChbY29sb3JDaGFuZ2VyXSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzaCA9IGNvbG9yQ2hhbmdlcjtcblxuICAgICAgICAgIHRoaXMuY3JlYXRlT2JqZWN0cygpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldE9iamVjdCgpOiBUSFJFRS5PYmplY3QzRCB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0R3JvdXA7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXMsIG1hc3RlckRpbW1lclZhbHVlKTtcblxuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUG9zaXRpb24odGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG1hdGVyaWFsXG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkICE9PSB0aGlzLmlzU2VsZWN0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm1lc2guY2hpbGRyZW4pIHtcbiAgICAgICAgICAoY2hpbGQgYXMgTWVzaCkubWF0ZXJpYWwgPSB0aGlzLnNlbGVjdGVkTWF0ZXJpYWw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5tZXNoLmNoaWxkcmVuKSB7XG4gICAgICAgICAgKGNoaWxkIGFzIE1lc2gpLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpZ2h0IGhlbHBlcnNcbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlci51cGRhdGUoKTtcblxuICAgIC8vIEFwcGx5IHRoZSBjb2xvcnNcbiAgICBjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigncmdiKCcgKyB0aGlzLmNvbG9yUmVkICsgJywgJyArIHRoaXMuY29sb3JHcmVlbiArICcsICcgKyB0aGlzLmNvbG9yQmx1ZSArICcpJyk7XG5cbiAgICB0aGlzLnBvaW50TGlnaHQuY29sb3IgPSBjb2xvcjtcblxuICAgIHRoaXMuc3BvdExpZ2h0LmNvbG9yID0gY29sb3I7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLmdsb3dDb2xvci52YWx1ZSA9IGNvbG9yO1xuXG4gICAgLy8gQXBwbHkgdGhlIGRpbW1lciB2YWx1ZVxuICAgIC8vIFRha2UgdGhlIGNvbG9yIGludG8gYWNjb3VudCBmb3IgdGhlIGJlYW0gKGRvbid0IHNob3cgYSBibGFjayBiZWFtKVxuICAgIGNvbnN0IGludGVuc2l0eUNvbG9yID0gTWF0aC5tYXgodGhpcy5jb2xvclJlZCwgdGhpcy5jb2xvckdyZWVuLCB0aGlzLmNvbG9yQmx1ZSk7XG4gICAgKHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbCBhcyBhbnkpLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpICogMC41O1xuXG4gICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5zcG90TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcbiAgICB0aGlzLnBvaW50TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5wb2ludExpZ2h0TWF4SW50ZW5zaXR5ICogdGhpcy5kaW1tZXI7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2NlbmUucmVtb3ZlKHRoaXMub2JqZWN0R3JvdXApO1xuICAgIHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO1xuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { __values } from "tslib";
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
import { Positioning } from '../../models/fixture';
|
|
4
|
-
import { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';
|
|
5
|
-
var Fixture3d = /** @class */ (function () {
|
|
6
|
-
function Fixture3d(fixtureService, fixture, scene) {
|
|
7
|
-
var e_1, _a, e_2, _b;
|
|
8
|
-
this.fixtureService = fixtureService;
|
|
9
|
-
this.fixtureHasDimmer = false;
|
|
10
|
-
this.fixtureHasColorWheel = false;
|
|
11
|
-
this.fixtureHasColor = false;
|
|
12
|
-
this.dimmer = 0;
|
|
13
|
-
this.isSelected = false;
|
|
14
|
-
this.isLoaded = false;
|
|
15
|
-
this.fixture = fixture;
|
|
16
|
-
this.scene = scene;
|
|
17
|
-
// TODO Don't create it for each fixture but pass it from the preview service
|
|
18
|
-
this.selectedMaterial = new THREE.MeshLambertMaterial({
|
|
19
|
-
color: 0xff00ff,
|
|
20
|
-
emissive: 0xff00ff,
|
|
21
|
-
});
|
|
22
|
-
try {
|
|
23
|
-
// evaluate, various capabilities of this fixture
|
|
24
|
-
for (var _c = __values(this.fixture.channels), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
25
|
-
var cachedChannel = _d.value;
|
|
26
|
-
if (cachedChannel.channel) {
|
|
27
|
-
try {
|
|
28
|
-
for (var _e = (e_2 = void 0, __values(cachedChannel.capabilities)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
29
|
-
var capability = _f.value;
|
|
30
|
-
switch (capability.capability.type) {
|
|
31
|
-
case FixtureCapabilityType.Intensity:
|
|
32
|
-
this.fixtureHasDimmer = true;
|
|
33
|
-
break;
|
|
34
|
-
case FixtureCapabilityType.ColorIntensity:
|
|
35
|
-
this.fixtureHasColor = true;
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
41
|
-
finally {
|
|
42
|
-
try {
|
|
43
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
44
|
-
}
|
|
45
|
-
finally { if (e_2) throw e_2.error; }
|
|
46
|
-
}
|
|
47
|
-
if (cachedChannel.colorWheel) {
|
|
48
|
-
this.fixtureHasColorWheel = true;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
54
|
-
finally {
|
|
55
|
-
try {
|
|
56
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
57
|
-
}
|
|
58
|
-
finally { if (e_1) throw e_1.error; }
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
Fixture3d.prototype.getCapabilityInValue = function (channel, value) {
|
|
62
|
-
var e_3, _a;
|
|
63
|
-
try {
|
|
64
|
-
for (var _b = __values(channel.capabilities), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
65
|
-
var capability = _c.value;
|
|
66
|
-
if (capability.capability.dmxRange.length === 0 ||
|
|
67
|
-
(value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])) {
|
|
68
|
-
return capability;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
73
|
-
finally {
|
|
74
|
-
try {
|
|
75
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
76
|
-
}
|
|
77
|
-
finally { if (e_3) throw e_3.error; }
|
|
78
|
-
}
|
|
79
|
-
return undefined;
|
|
80
|
-
};
|
|
81
|
-
// Apply the properties of the base fixture to the preview
|
|
82
|
-
Fixture3d.prototype.updatePreview = function (channelValues, masterDimmerValue) {
|
|
83
|
-
var e_4, _a;
|
|
84
|
-
// Apply default settings
|
|
85
|
-
if (this.fixtureHasDimmer) {
|
|
86
|
-
this.dimmer = 0;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
this.dimmer = 1;
|
|
90
|
-
}
|
|
91
|
-
this.colorRed = 255;
|
|
92
|
-
this.colorGreen = 255;
|
|
93
|
-
this.colorBlue = 255;
|
|
94
|
-
if (!this.fixtureHasColorWheel && this.fixtureHasColor) {
|
|
95
|
-
this.colorRed = 0;
|
|
96
|
-
this.colorGreen = 0;
|
|
97
|
-
this.colorBlue = 0;
|
|
98
|
-
}
|
|
99
|
-
try {
|
|
100
|
-
for (var channelValues_1 = __values(channelValues), channelValues_1_1 = channelValues_1.next(); !channelValues_1_1.done; channelValues_1_1 = channelValues_1.next()) {
|
|
101
|
-
var channelValue = channelValues_1_1.value;
|
|
102
|
-
var channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);
|
|
103
|
-
var capability = this.getCapabilityInValue(channel, channelValue.value);
|
|
104
|
-
if (capability) {
|
|
105
|
-
switch (capability.capability.type) {
|
|
106
|
-
case FixtureCapabilityType.Intensity: {
|
|
107
|
-
var valuePercentage = void 0;
|
|
108
|
-
if (capability.capability.dmxRange.length > 0) {
|
|
109
|
-
valuePercentage =
|
|
110
|
-
(channelValue.value - capability.capability.dmxRange[0]) /
|
|
111
|
-
(capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
valuePercentage = channelValue.value / channel.maxValue;
|
|
115
|
-
}
|
|
116
|
-
this.dimmer = valuePercentage * masterDimmerValue;
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
case FixtureCapabilityType.ColorIntensity: {
|
|
120
|
-
var valuePercentage = (255 * channelValue.value) / channel.maxValue;
|
|
121
|
-
switch (capability.capability.color) {
|
|
122
|
-
case FixtureCapabilityColor.Red:
|
|
123
|
-
// Round needed for threejs
|
|
124
|
-
this.colorRed = Math.round(valuePercentage);
|
|
125
|
-
break;
|
|
126
|
-
case FixtureCapabilityColor.Green:
|
|
127
|
-
// Round needed for threejs
|
|
128
|
-
this.colorGreen = Math.round(valuePercentage);
|
|
129
|
-
break;
|
|
130
|
-
case FixtureCapabilityColor.Blue:
|
|
131
|
-
// Round needed for threejs
|
|
132
|
-
this.colorBlue = Math.round(valuePercentage);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
case FixtureCapabilityType.WheelSlot: {
|
|
138
|
-
var mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
|
|
139
|
-
if (mixedColor) {
|
|
140
|
-
this.colorRed = Math.round(mixedColor.red);
|
|
141
|
-
this.colorGreen = Math.round(mixedColor.green);
|
|
142
|
-
this.colorBlue = Math.round(mixedColor.blue);
|
|
143
|
-
}
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
151
|
-
finally {
|
|
152
|
-
try {
|
|
153
|
-
if (channelValues_1_1 && !channelValues_1_1.done && (_a = channelValues_1.return)) _a.call(channelValues_1);
|
|
154
|
-
}
|
|
155
|
-
finally { if (e_4) throw e_4.error; }
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
Fixture3d.prototype.updatePosition = function (object) {
|
|
159
|
-
// Update the position
|
|
160
|
-
switch (this.fixture.fixture.positioning) {
|
|
161
|
-
case Positioning.topFront: {
|
|
162
|
-
object.rotation.x = THREE.Math.degToRad(0);
|
|
163
|
-
object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
case Positioning.bottomFront: {
|
|
167
|
-
object.rotation.x = THREE.Math.degToRad(180);
|
|
168
|
-
object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
case Positioning.topBack: {
|
|
172
|
-
object.rotation.x = THREE.Math.degToRad(0);
|
|
173
|
-
object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
case Positioning.bottomBack: {
|
|
177
|
-
object.rotation.x = THREE.Math.degToRad(180);
|
|
178
|
-
object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
case Positioning.manual: {
|
|
182
|
-
object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);
|
|
183
|
-
object.rotation.x = THREE.Math.degToRad(this.fixture.fixture.rotationX);
|
|
184
|
-
object.rotation.y = THREE.Math.degToRad(this.fixture.fixture.rotationY);
|
|
185
|
-
object.rotation.z = THREE.Math.degToRad(this.fixture.fixture.rotationZ);
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
Fixture3d.prototype.destroy = function () {
|
|
191
|
-
this.selectedMaterial.dispose();
|
|
192
|
-
};
|
|
193
|
-
return Fixture3d;
|
|
194
|
-
}());
|
|
195
|
-
export { Fixture3d };
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Byb2NrZXRzaG93L2Rlc2lnbmVyLyIsInNvdXJjZXMiOlsibGliL3ByZXZpZXcvbW9kZWxzL2ZpeHR1cmUtM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBSS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUloRztJQW1CRSxtQkFBbUIsY0FBOEIsRUFBRSxPQUFzQixFQUFFLEtBQVU7O1FBQWxFLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCakQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQzs7WUFFSCxpREFBaUQ7WUFDakQsS0FBNEIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQTlDLElBQU0sYUFBYSxXQUFBO2dCQUN0QixJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUU7O3dCQUN6QixLQUF5QixJQUFBLG9CQUFBLFNBQUEsYUFBYSxDQUFDLFlBQVksQ0FB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QVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEUsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsMkJBQU8sR0FBUDtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLEFBeEtELElBd0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpeHR1cmUzZCB7XG4gIGZpeHR1cmU6IENhY2hlZEZpeHR1cmU7XG4gIGZpeHR1cmVIYXNEaW1tZXIgPSBmYWxzZTtcbiAgZml4dHVyZUhhc0NvbG9yV2hlZWwgPSBmYWxzZTtcbiAgZml4dHVyZUhhc0NvbG9yID0gZmFsc2U7XG5cbiAgc2NlbmU6IGFueTtcblxuICBjb2xvclJlZDogbnVtYmVyO1xuICBjb2xvckdyZWVuOiBudW1iZXI7XG4gIGNvbG9yQmx1ZTogbnVtYmVyO1xuXG4gIGRpbW1lciA9IDA7XG5cbiAgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZE1hdGVyaWFsOiBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICB0aGlzLmZpeHR1cmUgPSBmaXh0dXJlO1xuICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcblxuICAgIC8vIFRPRE8gRG9uJ3QgY3JlYXRlIGl0IGZvciBlYWNoIGZpeHR1cmUgYnV0IHBhc3MgaXQgZnJvbSB0aGUgcHJldmlldyBzZXJ2aWNlXG4gICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4ZmYwMGZmLFxuICAgICAgZW1pc3NpdmU6IDB4ZmYwMGZmLFxuICAgIH0pO1xuXG4gICAgLy8gZXZhbHVhdGUsIHZhcmlvdXMgY2FwYWJpbGl0aWVzIG9mIHRoaXMgZml4dHVyZVxuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiB0aGlzLmZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNEaW1tZXIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvcldoZWVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDYXBhYmlsaXR5SW5WYWx1ZShjaGFubmVsOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCwgdmFsdWU6IG51bWJlcik6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAodmFsdWUgPj0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdICYmIHZhbHVlIDw9IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVsxXSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGJhc2UgZml4dHVyZSB0byB0aGUgcHJldmlld1xuICB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGRlZmF1bHQgc2V0dGluZ3NcbiAgICBpZiAodGhpcy5maXh0dXJlSGFzRGltbWVyKSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGltbWVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUmVkID0gMjU1O1xuICAgIHRoaXMuY29sb3JHcmVlbiA9IDI1NTtcbiAgICB0aGlzLmNvbG9yQmx1ZSA9IDI1NTtcblxuICAgIGlmICghdGhpcy5maXh0dXJlSGFzQ29sb3JXaGVlbCAmJiB0aGlzLmZpeHR1cmVIYXNDb2xvcikge1xuICAgICAgdGhpcy5jb2xvclJlZCA9IDA7XG4gICAgICB0aGlzLmNvbG9yR3JlZW4gPSAwO1xuICAgICAgdGhpcy5jb2xvckJsdWUgPSAwO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIGNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENoYW5uZWxCeU5hbWUodGhpcy5maXh0dXJlLCBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUpO1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbCwgY2hhbm5lbFZhbHVlLnZhbHVlKTtcblxuICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eToge1xuICAgICAgICAgICAgbGV0IHZhbHVlUGVyY2VudGFnZTogbnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgKGNoYW5uZWxWYWx1ZS52YWx1ZSAtIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgL1xuICAgICAgICAgICAgICAgIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0gLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWVQZXJjZW50YWdlID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGltbWVyID0gdmFsdWVQZXJjZW50YWdlICogbWFzdGVyRGltbWVyVmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9ICgyNTUgKiBjaGFubmVsVmFsdWUudmFsdWUpIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmNvbG9yKSB7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWQ6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclJlZCA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkJsdWU6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90OiB7XG4gICAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICAgIGlmIChtaXhlZENvbG9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IucmVkKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckdyZWVuID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmdyZWVuKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IuYmx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbihvYmplY3Q6IFRIUkVFLk9iamVjdDNEKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25pbmcpIHtcbiAgICAgIGNhc2UgUG9zaXRpb25pbmcudG9wRnJvbnQ6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQoMTgwKTtcbiAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnNldCh0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblgsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWSArIDEzLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUG9zaXRpb25pbmcudG9wQmFjazoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQoMCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgLSAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLmJvdHRvbUJhY2s6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGguZGVnVG9SYWQodGhpcy5maXh0dXJlLmZpeHR1cmUucm90YXRpb25YKTtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnkgPSBUSFJFRS5NYXRoLmRlZ1RvUmFkKHRoaXMuZml4dHVyZS5maXh0dXJlLnJvdGF0aW9uWSk7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi56ID0gVEhSRUUuTWF0aC5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|