@colijnit/configurator 261.1.1 → 261.20.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/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19092 -18478
- package/fesm2022/colijnit-configurator.mjs.map +1 -0
- package/index.d.ts +3301 -0
- package/lib/components/answer-card/style/_layout.scss +3 -3
- package/lib/components/answers-slideout/style/_layout.scss +1 -0
- package/package.json +17 -13
- package/bundles/colijnit-configurator.umd.js +0 -20167
- package/bundles/colijnit-configurator.umd.js.map +0 -1
- package/colijnit-configurator.d.ts +0 -5
- package/esm2015/colijnit-configurator.js +0 -5
- package/esm2015/lib/builder.js +0 -795
- package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
- package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
- package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
- package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
- package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
- package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
- package/esm2015/lib/components/configurator/configurator.component.js +0 -133
- package/esm2015/lib/components/configurator/configurator.module.js +0 -42
- package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
- package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
- package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
- package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
- package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
- package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
- package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
- package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
- package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
- package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
- package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
- package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
- package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
- package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
- package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
- package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
- package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
- package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
- package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
- package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
- package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
- package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
- package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
- package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
- package/esm2015/lib/components/slideout/slideout.component.js +0 -83
- package/esm2015/lib/components/slideout/slideout.module.js +0 -17
- package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
- package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
- package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
- package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
- package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
- package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
- package/esm2015/lib/core/helper/variation-helper.js +0 -553
- package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
- package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
- package/esm2015/lib/directives/directives.module.js +0 -26
- package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
- package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
- package/esm2015/lib/enum/ar-feature.enum.js +0 -14
- package/esm2015/lib/enum/configuration-key.enum.js +0 -41
- package/esm2015/lib/enum/configuration-template.enum.js +0 -6
- package/esm2015/lib/enum/device-size-type.js +0 -7
- package/esm2015/lib/enum/device-tier.enum.js +0 -7
- package/esm2015/lib/enum/icon.enum.js +0 -113
- package/esm2015/lib/enum/item-type.enum.js +0 -23
- package/esm2015/lib/enum/light.enum.js +0 -9
- package/esm2015/lib/enum/navigator-type.enum.js +0 -6
- package/esm2015/lib/enum/output-encoding.enum.js +0 -9
- package/esm2015/lib/enum/result-type.enum.js +0 -21
- package/esm2015/lib/enum/scene-event.enum.js +0 -12
- package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
- package/esm2015/lib/enum/texture-type.js +0 -9
- package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
- package/esm2015/lib/enum/view-mode.enum.js +0 -7
- package/esm2015/lib/enum/xr-mode.enum.js +0 -6
- package/esm2015/lib/environments/environment.js +0 -8
- package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
- package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
- package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
- package/esm2015/lib/interfaces/changes.interface.js +0 -2
- package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
- package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
- package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
- package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
- package/esm2015/lib/interfaces/screen-size-info.js +0 -2
- package/esm2015/lib/interfaces/setting.interface.js +0 -2
- package/esm2015/lib/interfaces/texture.interface.js +0 -2
- package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
- package/esm2015/lib/model/ar-position-indicator.js +0 -18
- package/esm2015/lib/model/camera-settings.js +0 -14
- package/esm2015/lib/model/configuration-result-object.js +0 -6
- package/esm2015/lib/model/configurator-error-message.js +0 -9
- package/esm2015/lib/model/configurator-settings.js +0 -25
- package/esm2015/lib/model/custom-button.js +0 -16
- package/esm2015/lib/model/factory.js +0 -28
- package/esm2015/lib/model/icon.js +0 -112
- package/esm2015/lib/model/intersected-objects.js +0 -7
- package/esm2015/lib/model/light-preset.js +0 -73
- package/esm2015/lib/model/light-properties.js +0 -45
- package/esm2015/lib/model/material.js +0 -11
- package/esm2015/lib/model/metadata.js +0 -2
- package/esm2015/lib/model/render-parameters.js +0 -16
- package/esm2015/lib/model/setting-options.js +0 -71
- package/esm2015/lib/model/settings.js +0 -16
- package/esm2015/lib/model/shadow-properties.js +0 -10
- package/esm2015/lib/model/skin.js +0 -3
- package/esm2015/lib/model/texture.js +0 -76
- package/esm2015/lib/model/variation-settings.js +0 -54
- package/esm2015/lib/model/variation.js +0 -3
- package/esm2015/lib/model/xr-reticle.js +0 -79
- package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
- package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
- package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
- package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
- package/esm2015/lib/pipes/append.pipe.js +0 -21
- package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
- package/esm2015/lib/pipes/localize.pipe.js +0 -28
- package/esm2015/lib/pipes/pipes.module.js +0 -41
- package/esm2015/lib/pipes/prepend.pipe.js +0 -21
- package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
- package/esm2015/lib/services/app-event.service.js +0 -36
- package/esm2015/lib/services/app-initializer.service.js +0 -27
- package/esm2015/lib/services/ar.service.js +0 -844
- package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
- package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
- package/esm2015/lib/services/build-furniture.service.js +0 -169
- package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
- package/esm2015/lib/services/camera.service.js +0 -123
- package/esm2015/lib/services/configuration.service.js +0 -79
- package/esm2015/lib/services/configurator-connector.service.js +0 -830
- package/esm2015/lib/services/configurator.service.js +0 -285
- package/esm2015/lib/services/configuring.service.js +0 -119
- package/esm2015/lib/services/controls.js +0 -799
- package/esm2015/lib/services/debug.service.js +0 -43
- package/esm2015/lib/services/dictionary.service.js +0 -65
- package/esm2015/lib/services/dynamic-camera.service.js +0 -96
- package/esm2015/lib/services/floor-plane.service.js +0 -252
- package/esm2015/lib/services/font.service.js +0 -27
- package/esm2015/lib/services/google-translate.service.js +0 -79
- package/esm2015/lib/services/icon-cache.service.js +0 -44
- package/esm2015/lib/services/intersection.service.js +0 -47
- package/esm2015/lib/services/item.service.js +0 -75
- package/esm2015/lib/services/json-utils.service.js +0 -48
- package/esm2015/lib/services/light-creation.service.js +0 -35
- package/esm2015/lib/services/light-presets.service.js +0 -157
- package/esm2015/lib/services/lights.service.js +0 -146
- package/esm2015/lib/services/load-furniture-base.service.js +0 -164
- package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
- package/esm2015/lib/services/load-furniture.service.js +0 -72
- package/esm2015/lib/services/loader.service.js +0 -32
- package/esm2015/lib/services/locator.service.js +0 -11
- package/esm2015/lib/services/message-board.service.js +0 -50
- package/esm2015/lib/services/post-processing.service.js +0 -378
- package/esm2015/lib/services/product-configurator.service.js +0 -16
- package/esm2015/lib/services/progress.service.js +0 -20
- package/esm2015/lib/services/scene-event.service.js +0 -246
- package/esm2015/lib/services/scene-options.service.js +0 -24
- package/esm2015/lib/services/scene.service.js +0 -313
- package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
- package/esm2015/lib/services/settings.service.js +0 -142
- package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
- package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
- package/esm2015/lib/services/threedselector.service.js +0 -72
- package/esm2015/lib/services/utils.service.js +0 -207
- package/esm2015/lib/services/variation-cache.service.js +0 -143
- package/esm2015/lib/services/variation.service.js +0 -490
- package/esm2015/lib/services/view-mode.service.js +0 -37
- package/esm2015/lib/services/vr.service.js +0 -191
- package/esm2015/lib/services/xr.service.js +0 -294
- package/esm2015/lib/utils/asset.utils.js +0 -120
- package/esm2015/lib/utils/base-utils.js +0 -9
- package/esm2015/lib/utils/color.utils.js +0 -30
- package/esm2015/lib/utils/debug.utils.js +0 -9
- package/esm2015/lib/utils/device.utils.js +0 -25
- package/esm2015/lib/utils/file.utils.js +0 -167
- package/esm2015/lib/utils/image.utils.js +0 -61
- package/esm2015/lib/utils/json-parser.utils.js +0 -180
- package/esm2015/lib/utils/material.utils.js +0 -433
- package/esm2015/lib/utils/object.utils.js +0 -360
- package/esm2015/lib/utils/relative-position.utils.js +0 -75
- package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
- package/esm2015/lib/utils/scene-3d.utils.js +0 -213
- package/esm2015/lib/utils/scene-utils.js +0 -191
- package/esm2015/lib/utils/text-utils.js +0 -68
- package/esm2015/lib/utils/threed.utils.js +0 -281
- package/esm2015/lib/utils/variation-utils.js +0 -459
- package/esm2015/public-api.js +0 -65
- package/fesm2015/colijnit-configurator.js.map +0 -1
- package/lib/builder.d.ts +0 -83
- package/lib/components/answer-card/answer-card.component.d.ts +0 -58
- package/lib/components/answer-card/answer-card.module.d.ts +0 -11
- package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
- package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
- package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
- package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
- package/lib/components/color-filter/color-filter.component.d.ts +0 -20
- package/lib/components/color-filter/color-filter.module.d.ts +0 -8
- package/lib/components/configurator/configurator.component.d.ts +0 -37
- package/lib/components/configurator/configurator.module.d.ts +0 -12
- package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
- package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
- package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
- package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
- package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
- package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
- package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
- package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
- package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
- package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
- package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
- package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
- package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
- package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
- package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
- package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
- package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
- package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
- package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
- package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
- package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
- package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
- package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
- package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
- package/lib/components/scene-options/scene-options.component.d.ts +0 -24
- package/lib/components/scene-options/scene-options.module.d.ts +0 -11
- package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
- package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
- package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
- package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
- package/lib/components/slideout/slideout.component.d.ts +0 -22
- package/lib/components/slideout/slideout.module.d.ts +0 -7
- package/lib/components/summary-line/summary-line.component.d.ts +0 -50
- package/lib/components/summary-line/summary-line.module.d.ts +0 -11
- package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
- package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
- package/lib/components/threedselector/threedselector.component.d.ts +0 -38
- package/lib/components/threedselector/threedselector.module.d.ts +0 -10
- package/lib/core/helper/variation-helper.d.ts +0 -25
- package/lib/core/shader/floor-fade.shader.d.ts +0 -5
- package/lib/core/textures/depth-data-texture.d.ts +0 -5
- package/lib/directives/directives.module.d.ts +0 -8
- package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
- package/lib/directives/visibility-observer.directive.d.ts +0 -16
- package/lib/enum/ar-feature.enum.d.ts +0 -12
- package/lib/enum/configuration-key.enum.d.ts +0 -39
- package/lib/enum/configuration-template.enum.d.ts +0 -4
- package/lib/enum/device-size-type.d.ts +0 -5
- package/lib/enum/device-tier.enum.d.ts +0 -5
- package/lib/enum/icon.enum.d.ts +0 -111
- package/lib/enum/item-type.enum.d.ts +0 -21
- package/lib/enum/light.enum.d.ts +0 -7
- package/lib/enum/navigator-type.enum.d.ts +0 -4
- package/lib/enum/output-encoding.enum.d.ts +0 -7
- package/lib/enum/result-type.enum.d.ts +0 -19
- package/lib/enum/scene-event.enum.d.ts +0 -10
- package/lib/enum/shadow-map-type.enum.d.ts +0 -6
- package/lib/enum/texture-type.d.ts +0 -7
- package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
- package/lib/enum/view-mode.enum.d.ts +0 -5
- package/lib/enum/xr-mode.enum.d.ts +0 -4
- package/lib/environments/environment.d.ts +0 -4
- package/lib/interfaces/aa-options.interface.d.ts +0 -4
- package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
- package/lib/interfaces/ao-options.interface.d.ts +0 -18
- package/lib/interfaces/changes.interface.d.ts +0 -9
- package/lib/interfaces/configuration-data.interface.d.ts +0 -40
- package/lib/interfaces/light-preset.interface.d.ts +0 -22
- package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
- package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
- package/lib/interfaces/screen-size-info.d.ts +0 -10
- package/lib/interfaces/setting.interface.d.ts +0 -8
- package/lib/interfaces/texture.interface.d.ts +0 -44
- package/lib/interfaces/vignette-options.interface.d.ts +0 -4
- package/lib/model/ar-position-indicator.d.ts +0 -4
- package/lib/model/camera-settings.d.ts +0 -12
- package/lib/model/configuration-result-object.d.ts +0 -30
- package/lib/model/configurator-error-message.d.ts +0 -8
- package/lib/model/configurator-settings.d.ts +0 -62
- package/lib/model/custom-button.d.ts +0 -10
- package/lib/model/factory.d.ts +0 -5
- package/lib/model/icon.d.ts +0 -4
- package/lib/model/intersected-objects.d.ts +0 -6
- package/lib/model/light-preset.d.ts +0 -33
- package/lib/model/light-properties.d.ts +0 -25
- package/lib/model/material.d.ts +0 -41
- package/lib/model/metadata.d.ts +0 -78
- package/lib/model/render-parameters.d.ts +0 -12
- package/lib/model/setting-options.d.ts +0 -67
- package/lib/model/settings.d.ts +0 -10
- package/lib/model/shadow-properties.d.ts +0 -7
- package/lib/model/skin.d.ts +0 -15
- package/lib/model/texture.d.ts +0 -52
- package/lib/model/variation-settings.d.ts +0 -55
- package/lib/model/variation.d.ts +0 -11
- package/lib/model/xr-reticle.d.ts +0 -17
- package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
- package/lib/modules/render/model/ar-parameters.d.ts +0 -9
- package/lib/modules/render/model/scene-setting.d.ts +0 -13
- package/lib/modules/render/model/scene-settings.d.ts +0 -4
- package/lib/pipes/append.pipe.d.ts +0 -7
- package/lib/pipes/google-translate.pipe.d.ts +0 -11
- package/lib/pipes/localize.pipe.d.ts +0 -10
- package/lib/pipes/pipes.module.d.ts +0 -11
- package/lib/pipes/prepend.pipe.d.ts +0 -7
- package/lib/pipes/strip-html.pipe.d.ts +0 -7
- package/lib/services/app-event.service.d.ts +0 -32
- package/lib/services/app-initializer.service.d.ts +0 -14
- package/lib/services/ar.service.d.ts +0 -120
- package/lib/services/build-furniture-base.service.d.ts +0 -117
- package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
- package/lib/services/build-furniture.service.d.ts +0 -14
- package/lib/services/bundle-initialzer.service.d.ts +0 -45
- package/lib/services/camera.service.d.ts +0 -44
- package/lib/services/configuration.service.d.ts +0 -18
- package/lib/services/configurator-connector.service.d.ts +0 -140
- package/lib/services/configurator.service.d.ts +0 -62
- package/lib/services/configuring.service.d.ts +0 -46
- package/lib/services/controls.d.ts +0 -11
- package/lib/services/debug.service.d.ts +0 -16
- package/lib/services/dictionary.service.d.ts +0 -15
- package/lib/services/dynamic-camera.service.d.ts +0 -21
- package/lib/services/floor-plane.service.d.ts +0 -47
- package/lib/services/font.service.d.ts +0 -10
- package/lib/services/google-translate.service.d.ts +0 -26
- package/lib/services/icon-cache.service.d.ts +0 -21
- package/lib/services/intersection.service.d.ts +0 -11
- package/lib/services/item.service.d.ts +0 -18
- package/lib/services/json-utils.service.d.ts +0 -7
- package/lib/services/light-creation.service.d.ts +0 -9
- package/lib/services/light-presets.service.d.ts +0 -34
- package/lib/services/lights.service.d.ts +0 -34
- package/lib/services/load-furniture-base.service.d.ts +0 -37
- package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
- package/lib/services/load-furniture.service.d.ts +0 -9
- package/lib/services/loader.service.d.ts +0 -11
- package/lib/services/locator.service.d.ts +0 -7
- package/lib/services/message-board.service.d.ts +0 -18
- package/lib/services/post-processing.service.d.ts +0 -74
- package/lib/services/product-configurator.service.d.ts +0 -11
- package/lib/services/progress.service.d.ts +0 -9
- package/lib/services/scene-event.service.d.ts +0 -72
- package/lib/services/scene-options.service.d.ts +0 -11
- package/lib/services/scene.service.d.ts +0 -71
- package/lib/services/screen-size-analysis.service.d.ts +0 -32
- package/lib/services/settings.service.d.ts +0 -24
- package/lib/services/switch-build-furniture.service.d.ts +0 -21
- package/lib/services/switch-load-furniture.service.d.ts +0 -21
- package/lib/services/threedselector.service.d.ts +0 -17
- package/lib/services/utils.service.d.ts +0 -24
- package/lib/services/variation-cache.service.d.ts +0 -23
- package/lib/services/variation.service.d.ts +0 -26
- package/lib/services/view-mode.service.d.ts +0 -17
- package/lib/services/vr.service.d.ts +0 -42
- package/lib/services/xr.service.d.ts +0 -56
- package/lib/utils/asset.utils.d.ts +0 -19
- package/lib/utils/base-utils.d.ts +0 -4
- package/lib/utils/color.utils.d.ts +0 -8
- package/lib/utils/debug.utils.d.ts +0 -3
- package/lib/utils/device.utils.d.ts +0 -7
- package/lib/utils/file.utils.d.ts +0 -30
- package/lib/utils/image.utils.d.ts +0 -9
- package/lib/utils/json-parser.utils.d.ts +0 -9
- package/lib/utils/material.utils.d.ts +0 -34
- package/lib/utils/object.utils.d.ts +0 -32
- package/lib/utils/relative-position.utils.d.ts +0 -12
- package/lib/utils/rotation-helper.utils.d.ts +0 -6
- package/lib/utils/scene-3d.utils.d.ts +0 -8
- package/lib/utils/scene-utils.d.ts +0 -7
- package/lib/utils/text-utils.d.ts +0 -4
- package/lib/utils/threed.utils.d.ts +0 -20
- package/lib/utils/variation-utils.d.ts +0 -18
- package/public-api.d.ts +0 -60
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
import { BufferGeometry, CylinderGeometry, EquirectangularReflectionMapping, Float32BufferAttribute, Group, Line, LineBasicMaterial, Material, Mesh, MeshBasicMaterial, Object3D, Source, Texture, Vector2, Vector3 } from 'three';
|
|
4
|
-
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
|
|
5
|
-
export class ObjectUtils {
|
|
6
|
-
static CreateArrow(name, color, length, direction, headLength, headWidth, doubleArrow = false) {
|
|
7
|
-
const arrow = new Group();
|
|
8
|
-
const lineGeometry = new BufferGeometry();
|
|
9
|
-
lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3));
|
|
10
|
-
const line = new Line(lineGeometry, new LineBasicMaterial({ color: color, toneMapped: false }));
|
|
11
|
-
lineGeometry.rotateX(Math.PI / 2 * direction.z);
|
|
12
|
-
lineGeometry.rotateY(Math.PI / 2 * direction.y);
|
|
13
|
-
lineGeometry.rotateZ(Math.PI / 2 * direction.x);
|
|
14
|
-
const translate = new Vector3((direction.x) / 2, direction.y ? -(direction.y) / 2 : 0, -(direction.z) / 2);
|
|
15
|
-
lineGeometry.translate(translate.x, translate.y, translate.z);
|
|
16
|
-
line.name = 'arrow_line';
|
|
17
|
-
line.matrixAutoUpdate = false;
|
|
18
|
-
arrow.add(line);
|
|
19
|
-
const coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1);
|
|
20
|
-
const coneRightGeometry = coneGeometry.clone();
|
|
21
|
-
const cone = new Mesh(coneGeometry, new MeshBasicMaterial({ color: color, toneMapped: false }));
|
|
22
|
-
coneGeometry.rotateX(Math.PI / 2 * -direction.z);
|
|
23
|
-
if (direction.y) {
|
|
24
|
-
coneGeometry.rotateZ(Math.PI);
|
|
25
|
-
}
|
|
26
|
-
coneGeometry.rotateZ(Math.PI / 2 * -direction.x);
|
|
27
|
-
// coneGeometry.translate(translate.x * 2, translate.y * 2, translate.z * 2);
|
|
28
|
-
cone.name = 'arrow_cone_left';
|
|
29
|
-
cone.matrixAutoUpdate = false;
|
|
30
|
-
arrow.add(cone);
|
|
31
|
-
if (doubleArrow) {
|
|
32
|
-
const coneRight = new Mesh(coneRightGeometry, new MeshBasicMaterial({ color: color, toneMapped: false }));
|
|
33
|
-
coneRightGeometry.rotateX(Math.PI / 2 * direction.z);
|
|
34
|
-
coneRightGeometry.rotateZ(Math.PI / 2 * direction.x);
|
|
35
|
-
// coneRightGeometry.translate(-translate.x * 2, -translate.y * 2, -translate.z * 2);
|
|
36
|
-
coneRight.name = 'arrow_cone_right';
|
|
37
|
-
coneRight.matrixAutoUpdate = false;
|
|
38
|
-
arrow.add(coneRight);
|
|
39
|
-
}
|
|
40
|
-
arrow.name = name;
|
|
41
|
-
return ObjectUtils.UpdateArrowLength(arrow, length, direction, headLength, headWidth);
|
|
42
|
-
}
|
|
43
|
-
static UpdateArrowLength(arrow, length, direction, headLength, headWidth, doubleArrow = false) {
|
|
44
|
-
try {
|
|
45
|
-
const arrowLine = arrow.getObjectByName('arrow_line');
|
|
46
|
-
const scale = new Vector3(direction.x ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1, direction.y ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1, direction.z ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1);
|
|
47
|
-
arrowLine.scale.copy(scale);
|
|
48
|
-
arrowLine.updateMatrix();
|
|
49
|
-
const cone = arrow.getObjectByName('arrow_cone_left');
|
|
50
|
-
if (cone) {
|
|
51
|
-
cone.scale.set(headWidth, headLength, headWidth);
|
|
52
|
-
cone.position.x = direction.x ? length / 2 - headLength : 0;
|
|
53
|
-
cone.position.y = direction.y ? -length / 2 + headLength : 0;
|
|
54
|
-
cone.position.z = direction.z ? -length / 2 + headLength : 0;
|
|
55
|
-
cone.updateMatrix();
|
|
56
|
-
}
|
|
57
|
-
const coneRight = arrow.getObjectByName('arrow_cone_right');
|
|
58
|
-
if (coneRight) {
|
|
59
|
-
coneRight.scale.set(headWidth, headLength, headWidth);
|
|
60
|
-
coneRight.position.x = direction.x ? -length / 2 + headLength : 0;
|
|
61
|
-
coneRight.position.y = direction.y ? length / 2 - headLength : 0;
|
|
62
|
-
coneRight.position.z = direction.z ? length / 2 - headLength : 0;
|
|
63
|
-
coneRight.updateMatrix();
|
|
64
|
-
}
|
|
65
|
-
return arrow;
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
static ChildOf(obj, parentName) {
|
|
71
|
-
if (obj && obj.parent && obj.parent.name === parentName) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
else if (obj.parent) {
|
|
75
|
-
return ObjectUtils.ChildOf(obj.parent, parentName);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
static GetParentItem(element) {
|
|
82
|
-
if (!element.parent) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
if (element.parent instanceof Object3D) {
|
|
86
|
-
return element.parent;
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
return ObjectUtils.GetParentItem(element.parent);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
static GetDefaultMaterial(object) {
|
|
93
|
-
const children = object.children.filter(c => {
|
|
94
|
-
if (c instanceof Mesh) {
|
|
95
|
-
return Array.isArray(c.material) ?
|
|
96
|
-
c.material.find(m => m.name.toLowerCase().startsWith('default_')) :
|
|
97
|
-
c.material.name.toLowerCase().startsWith('default_');
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
return children.map(c => c.material)[0];
|
|
101
|
-
}
|
|
102
|
-
static SameMaterial(first, second) {
|
|
103
|
-
if (!first && !second) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
return first.hasOwnProperty('map') && second.hasOwnProperty('map') && first.map && second.map &&
|
|
107
|
-
first.map.image.src === second.map.image.src;
|
|
108
|
-
}
|
|
109
|
-
static GetChanges(firstItems, secondItems) {
|
|
110
|
-
const result = [];
|
|
111
|
-
for (let i = 0; i < secondItems.length; i++) { // check added/changed items
|
|
112
|
-
const secondItem = secondItems[i];
|
|
113
|
-
let oldPosition;
|
|
114
|
-
let oldMaterial;
|
|
115
|
-
const newPosition = new Vector3().copy(secondItem.position);
|
|
116
|
-
const newMaterial = ObjectUtils.GetDefaultMaterial(secondItem);
|
|
117
|
-
const firstItem = firstItems.find(fi => fi.name === secondItems[i].name);
|
|
118
|
-
if (firstItem) {
|
|
119
|
-
oldPosition = new Vector3().copy(firstItem.position);
|
|
120
|
-
oldMaterial = ObjectUtils.GetDefaultMaterial(firstItem);
|
|
121
|
-
}
|
|
122
|
-
if ((!oldPosition || (newPosition && !oldPosition.equals(newPosition))) || !ObjectUtils.SameMaterial(oldMaterial, newMaterial)) {
|
|
123
|
-
result.push({
|
|
124
|
-
object: secondItem,
|
|
125
|
-
name: secondItem.name,
|
|
126
|
-
oldPosition: oldPosition,
|
|
127
|
-
newPosition: newPosition,
|
|
128
|
-
oldMaterial: oldMaterial,
|
|
129
|
-
newMaterial: newMaterial
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
for (let i = 0; i < firstItems.length; i++) { // check deleted items
|
|
134
|
-
const firstItem = firstItems[i];
|
|
135
|
-
const oldPosition = new Vector3().copy(firstItem.position);
|
|
136
|
-
let newPosition;
|
|
137
|
-
const secondItem = secondItems.find(fi => fi.name === firstItems[i].name);
|
|
138
|
-
if (secondItem) {
|
|
139
|
-
newPosition = new Vector3().copy(secondItem.position);
|
|
140
|
-
}
|
|
141
|
-
if (!newPosition || (newPosition && !oldPosition.equals(newPosition))) {
|
|
142
|
-
result.push({
|
|
143
|
-
object: firstItem,
|
|
144
|
-
name: firstItem.name,
|
|
145
|
-
oldPosition: oldPosition,
|
|
146
|
-
newPosition: newPosition
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return result;
|
|
151
|
-
}
|
|
152
|
-
static GetSelectionFromSelectedObject(object) {
|
|
153
|
-
if (object) {
|
|
154
|
-
if (object.userData && object.userData.selection) {
|
|
155
|
-
return object.userData.selection;
|
|
156
|
-
}
|
|
157
|
-
else if (object.parent) {
|
|
158
|
-
return this.GetSelectionFromSelectedObject(object.parent);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
return undefined;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return undefined;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
static UpdateUvs(geo) {
|
|
169
|
-
if (geo) {
|
|
170
|
-
const pos = geo.attributes.position;
|
|
171
|
-
const b3 = new THREE.Box3().setFromBufferAttribute(pos);
|
|
172
|
-
const b3size = new THREE.Vector3();
|
|
173
|
-
b3.getSize(b3size);
|
|
174
|
-
const uv = [];
|
|
175
|
-
for (let i = 0; i < pos.count; i++) {
|
|
176
|
-
const x = pos.getX(i);
|
|
177
|
-
const y = pos.getY(i);
|
|
178
|
-
const u = (x - b3.min.x) / b3size.x;
|
|
179
|
-
const v = (y - b3.min.y) / b3size.y;
|
|
180
|
-
uv.push(u, v);
|
|
181
|
-
}
|
|
182
|
-
geo.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
static LoadHDRI(path, scene) {
|
|
186
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
187
|
-
const hdri = yield new RGBELoader().loadAsync(path);
|
|
188
|
-
hdri.mapping = EquirectangularReflectionMapping;
|
|
189
|
-
scene.environment = hdri;
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
static ProjectToPlane(points) {
|
|
193
|
-
const centroid = new Vector3();
|
|
194
|
-
points.forEach(p => centroid.add(p));
|
|
195
|
-
centroid.divideScalar(points.length);
|
|
196
|
-
const v1 = points[1].clone().sub(points[0]);
|
|
197
|
-
const v2 = points[2].clone().sub(points[0]);
|
|
198
|
-
const normal = v1.clone().cross(v2).normalize();
|
|
199
|
-
const arbitrary = Math.abs(normal.dot(new Vector3(1, 0, 0))) > 0.9
|
|
200
|
-
? new Vector3(0, 1, 0)
|
|
201
|
-
: new Vector3(1, 0, 0);
|
|
202
|
-
const u = new Vector3().crossVectors(normal, arbitrary).normalize();
|
|
203
|
-
const v = new Vector3().crossVectors(normal, u).normalize();
|
|
204
|
-
return points.map(p => {
|
|
205
|
-
const rel = p.clone().sub(centroid);
|
|
206
|
-
return new Vector2(rel.dot(u), rel.dot(v));
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
static CloneMaterial(material, deepClone = false) {
|
|
210
|
-
if (material instanceof Material) {
|
|
211
|
-
const onBeforeCompile = material.onBeforeCompile;
|
|
212
|
-
const onBeforeRender = material.onBeforeRender;
|
|
213
|
-
const clone = material.clone();
|
|
214
|
-
clone.onBeforeCompile = onBeforeCompile;
|
|
215
|
-
clone.onBeforeRender = onBeforeRender;
|
|
216
|
-
this.materialProps
|
|
217
|
-
.filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)
|
|
218
|
-
.forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));
|
|
219
|
-
return clone;
|
|
220
|
-
}
|
|
221
|
-
return material.map((m) => {
|
|
222
|
-
const onBeforeCompile = m.onBeforeCompile;
|
|
223
|
-
const onBeforeRender = m.onBeforeRender;
|
|
224
|
-
const clone = m.clone();
|
|
225
|
-
clone.onBeforeCompile = onBeforeCompile;
|
|
226
|
-
clone.onBeforeRender = onBeforeRender;
|
|
227
|
-
this.materialProps
|
|
228
|
-
.filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)
|
|
229
|
-
.forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));
|
|
230
|
-
return clone;
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* ThreeJS does not clone image property, so it stays a reference to the original image.
|
|
235
|
-
* When deepClone, this method creates a new image and copies the original image data to it.
|
|
236
|
-
* @param texture
|
|
237
|
-
* @param deepClone
|
|
238
|
-
* @constructor
|
|
239
|
-
*/
|
|
240
|
-
static CloneTexture(texture, deepClone = false) {
|
|
241
|
-
const clone = texture.clone();
|
|
242
|
-
if (!deepClone) {
|
|
243
|
-
clone.needsUpdate = true;
|
|
244
|
-
return clone;
|
|
245
|
-
}
|
|
246
|
-
if (texture.image) {
|
|
247
|
-
if (texture.image instanceof HTMLImageElement && texture.image.src) {
|
|
248
|
-
const img = texture.image;
|
|
249
|
-
const newImage = new Image();
|
|
250
|
-
newImage.src = img.src;
|
|
251
|
-
clone.source = new Source(newImage);
|
|
252
|
-
}
|
|
253
|
-
else if (texture.image instanceof HTMLCanvasElement) {
|
|
254
|
-
const canvas = texture.image;
|
|
255
|
-
const newCanvas = document.createElement('canvas');
|
|
256
|
-
newCanvas.width = canvas.width;
|
|
257
|
-
newCanvas.height = canvas.height;
|
|
258
|
-
const ctx = newCanvas.getContext('2d');
|
|
259
|
-
if (ctx) {
|
|
260
|
-
ctx.drawImage(canvas, 0, 0);
|
|
261
|
-
}
|
|
262
|
-
clone.source = new Source(newCanvas);
|
|
263
|
-
}
|
|
264
|
-
else if (texture.image.data && (texture.image.data.slice || texture.image.data instanceof ArrayBuffer)) {
|
|
265
|
-
const imgData = texture.image;
|
|
266
|
-
clone.image = Object.assign(Object.assign({}, imgData), { data: imgData.data.slice ? imgData.data.slice(0) : new Uint8Array(imgData.data).slice(0) // Deep copy the TypedArray
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
clone.needsUpdate = true;
|
|
271
|
-
return clone;
|
|
272
|
-
}
|
|
273
|
-
static CloneObject3D(source) {
|
|
274
|
-
const newObject = new Object3D();
|
|
275
|
-
source.children.forEach((child) => {
|
|
276
|
-
if (!child.visible) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
if (child instanceof Mesh) {
|
|
280
|
-
newObject.add(child.clone());
|
|
281
|
-
}
|
|
282
|
-
else if (child instanceof Object3D) {
|
|
283
|
-
const clone = ObjectUtils.CloneObject3D(child);
|
|
284
|
-
clone.position.copy(child.position);
|
|
285
|
-
clone.rotation.copy(child.rotation);
|
|
286
|
-
newObject.add(clone);
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
return newObject;
|
|
290
|
-
}
|
|
291
|
-
static DeepCloneObject3D(source) {
|
|
292
|
-
if (!source) {
|
|
293
|
-
return new Object3D();
|
|
294
|
-
}
|
|
295
|
-
const clone = source.clone();
|
|
296
|
-
clone.traverse((obj) => {
|
|
297
|
-
if (obj instanceof Mesh && obj.material) {
|
|
298
|
-
obj.material = ObjectUtils.CloneMaterial(obj.material, true);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
return clone;
|
|
302
|
-
}
|
|
303
|
-
static DisposeMaterial(material) {
|
|
304
|
-
if (!material) {
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
if (Array.isArray(material)) {
|
|
308
|
-
material.forEach(mtrl => ObjectUtils.DisposeMaterial(mtrl));
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
for (const key in material) {
|
|
312
|
-
if (material.hasOwnProperty(key)) {
|
|
313
|
-
const value = material[key];
|
|
314
|
-
if (value && value.isTexture) {
|
|
315
|
-
value.dispose();
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
material.dispose();
|
|
320
|
-
}
|
|
321
|
-
static DisposeObject(object) {
|
|
322
|
-
if (!object) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
if (object.children.length) {
|
|
326
|
-
object.children.forEach(child => this.DisposeObject(child));
|
|
327
|
-
}
|
|
328
|
-
ObjectUtils.DisposeNode(object);
|
|
329
|
-
}
|
|
330
|
-
static GetParentCustomObject(element) {
|
|
331
|
-
if (!element.parent) {
|
|
332
|
-
return null;
|
|
333
|
-
}
|
|
334
|
-
if (element.parent instanceof Object3D) {
|
|
335
|
-
return element.parent;
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
return ObjectUtils.GetParentCustomObject(element.parent);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
static DisposeNode(node) {
|
|
342
|
-
node.traverse((obj) => {
|
|
343
|
-
if (obj instanceof Mesh) {
|
|
344
|
-
if (obj.geometry) {
|
|
345
|
-
obj.geometry.dispose();
|
|
346
|
-
}
|
|
347
|
-
ObjectUtils.DisposeMaterial(obj.material);
|
|
348
|
-
}
|
|
349
|
-
if (typeof obj.dispose === 'function') {
|
|
350
|
-
// @ts-ignore
|
|
351
|
-
obj.dispose();
|
|
352
|
-
}
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
static _remapFloat(v, min0, max0, min1, max1) {
|
|
356
|
-
return min1 + (v - min0) / (max0 - min0) * (max1 - min1);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
ObjectUtils.materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvb2JqZWN0LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBRUwsY0FBYyxFQUVkLGdCQUFnQixFQUVoQixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLEtBQUssRUFDTCxJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLFFBQVEsRUFDRCxNQUFNLEVBQUUsT0FBTyxFQUN0QixPQUFPLEVBQ1AsT0FBTyxFQUNSLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE1BQU0sT0FBTyxXQUFXO0lBR2YsTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBWSxFQUFFLEtBQThCLEVBQzVDLE1BQWMsRUFDZCxTQUFrQixFQUNsQixVQUFrQixFQUNsQixTQUFpQixFQUNqQixjQUF1QixLQUFLO1FBRTVCLE1BQU0sS0FBSyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxZQUFZLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FB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LElBQVksRUFBRSxJQUFZO1FBQzFGLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7O0FBcFlNLHlCQUFhLEdBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEJveDMsXHJcbiAgQnVmZmVyR2VvbWV0cnksXHJcbiAgQ29sb3IsXHJcbiAgQ3lsaW5kZXJHZW9tZXRyeSxcclxuICBEYXRhVGV4dHVyZSxcclxuICBFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZyxcclxuICBGbG9hdDMyQnVmZmVyQXR0cmlidXRlLFxyXG4gIEdyb3VwLFxyXG4gIExpbmUsXHJcbiAgTGluZUJhc2ljTWF0ZXJpYWwsXHJcbiAgTWF0ZXJpYWwsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCxcclxuICBPYmplY3QzRCxcclxuICBTY2VuZSwgU291cmNlLCBUZXh0dXJlLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yM1xyXG59IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtSR0JFTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9SR0JFTG9hZGVyJztcclxuaW1wb3J0IHtDaGFuZ2VzSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoYW5nZXMuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RVdGlscyB7XHJcbiAgc3RhdGljIG1hdGVyaWFsUHJvcHM6IHN0cmluZ1tdID0gWydtYXAnLCAnbGlnaHRNYXAnLCAnYnVtcE1hcCcsICdub3JtYWxNYXAnLCAnc3BlY3VsYXJNYXAnLCAnZW52TWFwJywgJ2FvTWFwJywgJ3JvdWdobmVzc01hcCcsICdtZXRhbG5lc3NNYXAnXTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBDcmVhdGVBcnJvdyhcclxuICAgIG5hbWU6IHN0cmluZywgY29sb3I6IENvbG9yIHwgbnVtYmVyIHwgc3RyaW5nLFxyXG4gICAgbGVuZ3RoOiBudW1iZXIsXHJcbiAgICBkaXJlY3Rpb246IFZlY3RvcjMsXHJcbiAgICBoZWFkTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBoZWFkV2lkdGg6IG51bWJlcixcclxuICAgIGRvdWJsZUFycm93OiBib29sZWFuID0gZmFsc2UpOiBHcm91cCB7XHJcblxyXG4gICAgY29uc3QgYXJyb3c6IEdyb3VwID0gbmV3IEdyb3VwKCk7XHJcblxyXG4gICAgY29uc3QgbGluZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XHJcbiAgICBsaW5lR2VvbWV0cnkuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBGbG9hdDMyQnVmZmVyQXR0cmlidXRlKFswLCAwLCAwLCAwLCAxLCAwXSwgMykpO1xyXG4gICAgY29uc3QgbGluZSA9IG5ldyBMaW5lKGxpbmVHZW9tZXRyeSwgbmV3IExpbmVCYXNpY01hdGVyaWFsKHtjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlfSkpO1xyXG4gICAgbGluZUdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueik7XHJcbiAgICBsaW5lR2VvbWV0cnkucm90YXRlWShNYXRoLlBJIC8gMiAqIGRpcmVjdGlvbi55KTtcclxuICAgIGxpbmVHZW9tZXRyeS5yb3RhdGVaKE1hdGguUEkgLyAyICogZGlyZWN0aW9uLngpO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgIChkaXJlY3Rpb24ueCkgLyAyLFxyXG4gICAgICBkaXJlY3Rpb24ueSA/IC0oZGlyZWN0aW9uLnkpIC8gMiA6IDAsXHJcbiAgICAgIC0oZGlyZWN0aW9uLnopIC8gMlxyXG4gICAgKTtcclxuICAgIGxpbmVHZW9tZXRyeS50cmFuc2xhdGUodHJhbnNsYXRlLngsIHRyYW5zbGF0ZS55LCB0cmFuc2xhdGUueik7XHJcblxyXG4gICAgbGluZS5uYW1lID0gJ2Fycm93X2xpbmUnO1xyXG4gICAgbGluZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICBhcnJvdy5hZGQobGluZSk7XHJcblxyXG4gICAgY29uc3QgY29uZUdlb21ldHJ5ID0gbmV3IEN5bGluZGVyR2VvbWV0cnkoMCwgMC41LCAxLCA1LCAxKTtcclxuICAgIGNvbnN0IGNvbmVSaWdodEdlb21ldHJ5ID0gY29uZUdlb21ldHJ5LmNsb25lKCk7XHJcblxyXG4gICAgY29uc3QgY29uZSA9IG5ldyBNZXNoKGNvbmVHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjogY29sb3IsIHRvbmVNYXBwZWQ6IGZhbHNlfSkpO1xyXG4gICAgY29uZUdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiAtZGlyZWN0aW9uLnopO1xyXG4gICAgaWYgKGRpcmVjdGlvbi55KSB7XHJcbiAgICAgIGNvbmVHZW9tZXRyeS5yb3RhdGVaKE1hdGguUEkpO1xyXG4gICAgfVxyXG4gICAgY29uZUdlb21ldHJ5LnJvdGF0ZVooTWF0aC5QSSAvIDIgKiAtZGlyZWN0aW9uLngpO1xyXG4gICAgLy8gY29uZUdlb21ldHJ5LnRyYW5zbGF0ZSh0cmFuc2xhdGUueCAqIDIsIHRyYW5zbGF0ZS55ICogMiwgdHJhbnNsYXRlLnogKiAyKTtcclxuICAgIGNvbmUubmFtZSA9ICdhcnJvd19jb25lX2xlZnQnO1xyXG4gICAgY29uZS5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICBhcnJvdy5hZGQoY29uZSk7XHJcblxyXG4gICAgaWYgKGRvdWJsZUFycm93KSB7XHJcbiAgICAgIGNvbnN0IGNvbmVSaWdodCA9IG5ldyBNZXNoKGNvbmVSaWdodEdlb21ldHJ5LCBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe2NvbG9yOiBjb2xvciwgdG9uZU1hcHBlZDogZmFsc2V9KSk7XHJcbiAgICAgIGNvbmVSaWdodEdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueik7XHJcbiAgICAgIGNvbmVSaWdodEdlb21ldHJ5LnJvdGF0ZVooTWF0aC5QSSAvIDIgKiBkaXJlY3Rpb24ueCk7XHJcbiAgICAgIC8vIGNvbmVSaWdodEdlb21ldHJ5LnRyYW5zbGF0ZSgtdHJhbnNsYXRlLnggKiAyLCAtdHJhbnNsYXRlLnkgKiAyLCAtdHJhbnNsYXRlLnogKiAyKTtcclxuICAgICAgY29uZVJpZ2h0Lm5hbWUgPSAnYXJyb3dfY29uZV9yaWdodCc7XHJcbiAgICAgIGNvbmVSaWdodC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XHJcbiAgICAgIGFycm93LmFkZChjb25lUmlnaHQpO1xyXG4gICAgfVxyXG4gICAgYXJyb3cubmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gT2JqZWN0VXRpbHMuVXBkYXRlQXJyb3dMZW5ndGgoYXJyb3csIGxlbmd0aCwgZGlyZWN0aW9uLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBVcGRhdGVBcnJvd0xlbmd0aChhcnJvdzogR3JvdXAsIGxlbmd0aDogbnVtYmVyLCBkaXJlY3Rpb246IFZlY3RvcjMsIGhlYWRMZW5ndGg6IG51bWJlciwgaGVhZFdpZHRoOiBudW1iZXIsIGRvdWJsZUFycm93OiBib29sZWFuID0gZmFsc2UpOiBHcm91cCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBhcnJvd0xpbmU6IE9iamVjdDNEID0gYXJyb3cuZ2V0T2JqZWN0QnlOYW1lKCdhcnJvd19saW5lJyk7XHJcbiAgICAgIGNvbnN0IHNjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgICAgZGlyZWN0aW9uLnggPyBNYXRoLm1heCgwLjAwMDEsIGxlbmd0aCAtIChkb3VibGVBcnJvdyA/IGhlYWRMZW5ndGggKiAyIDogaGVhZExlbmd0aCkpIDogMSxcclxuICAgICAgICBkaXJlY3Rpb24ueSA/IE1hdGgubWF4KDAuMDAwMSwgbGVuZ3RoIC0gKGRvdWJsZUFycm93ID8gaGVhZExlbmd0aCAqIDIgOiBoZWFkTGVuZ3RoKSkgOiAxLFxyXG4gICAgICAgIGRpcmVjdGlvbi56ID8gTWF0aC5tYXgoMC4wMDAxLCBsZW5ndGggLSAoZG91YmxlQXJyb3cgPyBoZWFkTGVuZ3RoICogMiA6IGhlYWRMZW5ndGgpKSA6IDFcclxuICAgICAgKTtcclxuICAgICAgYXJyb3dMaW5lLnNjYWxlLmNvcHkoc2NhbGUpO1xyXG4gICAgICBhcnJvd0xpbmUudXBkYXRlTWF0cml4KCk7XHJcblxyXG4gICAgICBjb25zdCBjb25lOiBPYmplY3QzRCA9IGFycm93LmdldE9iamVjdEJ5TmFtZSgnYXJyb3dfY29uZV9sZWZ0Jyk7XHJcbiAgICAgIGlmIChjb25lKSB7XHJcbiAgICAgICAgY29uZS5zY2FsZS5zZXQoaGVhZFdpZHRoLCBoZWFkTGVuZ3RoLCBoZWFkV2lkdGgpO1xyXG4gICAgICAgIGNvbmUucG9zaXRpb24ueCA9IGRpcmVjdGlvbi54ID8gbGVuZ3RoIC8gMiAtIGhlYWRMZW5ndGggOiAwO1xyXG4gICAgICAgIGNvbmUucG9zaXRpb24ueSA9IGRpcmVjdGlvbi55ID8gLWxlbmd0aCAvIDIgKyBoZWFkTGVuZ3RoIDogMDtcclxuICAgICAgICBjb25lLnBvc2l0aW9uLnogPSBkaXJlY3Rpb24ueiA/IC1sZW5ndGggLyAyICsgaGVhZExlbmd0aCA6IDA7XHJcbiAgICAgICAgY29uZS51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29uZVJpZ2h0OiBPYmplY3QzRCA9IGFycm93LmdldE9iamVjdEJ5TmFtZSgnYXJyb3dfY29uZV9yaWdodCcpO1xyXG4gICAgICBpZiAoY29uZVJpZ2h0KSB7XHJcbiAgICAgICAgY29uZVJpZ2h0LnNjYWxlLnNldChoZWFkV2lkdGgsIGhlYWRMZW5ndGgsIGhlYWRXaWR0aCk7XHJcbiAgICAgICAgY29uZVJpZ2h0LnBvc2l0aW9uLnggPSBkaXJlY3Rpb24ueCA/IC1sZW5ndGggLyAyICsgaGVhZExlbmd0aCA6IDA7XHJcbiAgICAgICAgY29uZVJpZ2h0LnBvc2l0aW9uLnkgPSBkaXJlY3Rpb24ueSA/IGxlbmd0aCAvIDIgLSBoZWFkTGVuZ3RoIDogMDtcclxuICAgICAgICBjb25lUmlnaHQucG9zaXRpb24ueiA9IGRpcmVjdGlvbi56ID8gbGVuZ3RoIC8gMiAtIGhlYWRMZW5ndGggOiAwO1xyXG4gICAgICAgIGNvbmVSaWdodC51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXJyb3c7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ2hpbGRPZihvYmo6IE1lc2ggfCBPYmplY3QzRCwgcGFyZW50TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqICYmIG9iai5wYXJlbnQgJiYgb2JqLnBhcmVudC5uYW1lID09PSBwYXJlbnROYW1lKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChvYmoucGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBPYmplY3RVdGlscy5DaGlsZE9mKG9iai5wYXJlbnQsIHBhcmVudE5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRQYXJlbnRJdGVtKGVsZW1lbnQ6IGFueSk6IE9iamVjdDNEIHtcclxuICAgIGlmICghZWxlbWVudC5wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudC5wYXJlbnQgaW5zdGFuY2VvZiBPYmplY3QzRCkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbShlbGVtZW50LnBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldERlZmF1bHRNYXRlcmlhbChvYmplY3Q6IE9iamVjdDNEKTogTWF0ZXJpYWwge1xyXG4gICAgY29uc3QgY2hpbGRyZW46IE1lc2hbXSA9IDxNZXNoW10+b2JqZWN0LmNoaWxkcmVuLmZpbHRlcihjID0+IHtcclxuICAgICAgaWYgKGMgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYy5tYXRlcmlhbCkgP1xyXG4gICAgICAgICAgYy5tYXRlcmlhbC5maW5kKG0gPT4gbS5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZGVmYXVsdF8nKSkgOlxyXG4gICAgICAgICAgYy5tYXRlcmlhbC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZGVmYXVsdF8nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gPE1hdGVyaWFsPmNoaWxkcmVuLm1hcChjID0+IGMubWF0ZXJpYWwpWzBdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBTYW1lTWF0ZXJpYWwoZmlyc3Q6IE1hdGVyaWFsLCBzZWNvbmQ6IE1hdGVyaWFsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWZpcnN0ICYmICFzZWNvbmQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3QuaGFzT3duUHJvcGVydHkoJ21hcCcpICYmIHNlY29uZC5oYXNPd25Qcm9wZXJ0eSgnbWFwJykgJiYgKGZpcnN0IGFzIGFueSkubWFwICYmIChzZWNvbmQgYXMgYW55KS5tYXAgJiZcclxuICAgICAgKGZpcnN0IGFzIGFueSkubWFwLmltYWdlLnNyYyA9PT0gKHNlY29uZCBhcyBhbnkpLm1hcC5pbWFnZS5zcmM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldENoYW5nZXMoZmlyc3RJdGVtczogT2JqZWN0M0RbXSwgc2Vjb25kSXRlbXM6IE9iamVjdDNEW10pOiBhbnkge1xyXG4gICAgY29uc3QgcmVzdWx0OiBDaGFuZ2VzSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vjb25kSXRlbXMubGVuZ3RoOyBpKyspIHsgLy8gY2hlY2sgYWRkZWQvY2hhbmdlZCBpdGVtc1xyXG4gICAgICBjb25zdCBzZWNvbmRJdGVtID0gc2Vjb25kSXRlbXNbaV07XHJcbiAgICAgIGxldCBvbGRQb3NpdGlvbjtcclxuICAgICAgbGV0IG9sZE1hdGVyaWFsO1xyXG4gICAgICBjb25zdCBuZXdQb3NpdGlvbjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkuY29weShzZWNvbmRJdGVtLnBvc2l0aW9uKTtcclxuICAgICAgY29uc3QgbmV3TWF0ZXJpYWw6IE1hdGVyaWFsID0gT2JqZWN0VXRpbHMuR2V0RGVmYXVsdE1hdGVyaWFsKHNlY29uZEl0ZW0pO1xyXG4gICAgICBjb25zdCBmaXJzdEl0ZW0gPSBmaXJzdEl0ZW1zLmZpbmQoZmkgPT4gZmkubmFtZSA9PT0gc2Vjb25kSXRlbXNbaV0ubmFtZSk7XHJcbiAgICAgIGlmIChmaXJzdEl0ZW0pIHtcclxuICAgICAgICBvbGRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuY29weShmaXJzdEl0ZW0ucG9zaXRpb24pO1xyXG4gICAgICAgIG9sZE1hdGVyaWFsID0gT2JqZWN0VXRpbHMuR2V0RGVmYXVsdE1hdGVyaWFsKGZpcnN0SXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCghb2xkUG9zaXRpb24gfHwgKG5ld1Bvc2l0aW9uICYmICFvbGRQb3NpdGlvbi5lcXVhbHMobmV3UG9zaXRpb24pKSkgfHwgIU9iamVjdFV0aWxzLlNhbWVNYXRlcmlhbChvbGRNYXRlcmlhbCwgbmV3TWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgb2JqZWN0OiBzZWNvbmRJdGVtLFxyXG4gICAgICAgICAgbmFtZTogc2Vjb25kSXRlbS5uYW1lLFxyXG4gICAgICAgICAgb2xkUG9zaXRpb246IG9sZFBvc2l0aW9uLFxyXG4gICAgICAgICAgbmV3UG9zaXRpb246IG5ld1Bvc2l0aW9uLFxyXG4gICAgICAgICAgb2xkTWF0ZXJpYWw6IG9sZE1hdGVyaWFsLFxyXG4gICAgICAgICAgbmV3TWF0ZXJpYWw6IG5ld01hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RJdGVtcy5sZW5ndGg7IGkrKykgeyAvLyBjaGVjayBkZWxldGVkIGl0ZW1zXHJcbiAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbXNbaV07XHJcbiAgICAgIGNvbnN0IG9sZFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKS5jb3B5KGZpcnN0SXRlbS5wb3NpdGlvbik7XHJcbiAgICAgIGxldCBuZXdQb3NpdGlvbjtcclxuICAgICAgY29uc3Qgc2Vjb25kSXRlbSA9IHNlY29uZEl0ZW1zLmZpbmQoZmkgPT4gZmkubmFtZSA9PT0gZmlyc3RJdGVtc1tpXS5uYW1lKTtcclxuICAgICAgaWYgKHNlY29uZEl0ZW0pIHtcclxuICAgICAgICBuZXdQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuY29weShzZWNvbmRJdGVtLnBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW5ld1Bvc2l0aW9uIHx8IChuZXdQb3NpdGlvbiAmJiAhb2xkUG9zaXRpb24uZXF1YWxzKG5ld1Bvc2l0aW9uKSkpIHtcclxuICAgICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgICBvYmplY3Q6IGZpcnN0SXRlbSxcclxuICAgICAgICAgIG5hbWU6IGZpcnN0SXRlbS5uYW1lLFxyXG4gICAgICAgICAgb2xkUG9zaXRpb246IG9sZFBvc2l0aW9uLFxyXG4gICAgICAgICAgbmV3UG9zaXRpb246IG5ld1Bvc2l0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldFNlbGVjdGlvbkZyb21TZWxlY3RlZE9iamVjdChvYmplY3Q6IGFueSk6IFNlbGVjdGlvbiB7XHJcbiAgICBpZiAob2JqZWN0KSB7XHJcbiAgICAgIGlmIChvYmplY3QudXNlckRhdGEgJiYgb2JqZWN0LnVzZXJEYXRhLnNlbGVjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QudXNlckRhdGEuc2VsZWN0aW9uO1xyXG4gICAgICB9IGVsc2UgaWYgKG9iamVjdC5wYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3Qob2JqZWN0LnBhcmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgVXBkYXRlVXZzKGdlbzogQnVmZmVyR2VvbWV0cnkpOiB2b2lkIHtcclxuICAgIGlmIChnZW8pIHtcclxuICAgICAgY29uc3QgcG9zOiBhbnkgPSBnZW8uYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgY29uc3QgYjM6IEJveDMgPSBuZXcgVEhSRUUuQm94MygpLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocG9zKTtcclxuICAgICAgY29uc3QgYjNzaXplOiBWZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgYjMuZ2V0U2l6ZShiM3NpemUpO1xyXG4gICAgICBjb25zdCB1diA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcy5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgeDogbnVtYmVyID0gcG9zLmdldFgoaSk7XHJcbiAgICAgICAgY29uc3QgeTogbnVtYmVyID0gcG9zLmdldFkoaSk7XHJcbiAgICAgICAgY29uc3QgdTogbnVtYmVyID0gKHggLSBiMy5taW4ueCkgLyBiM3NpemUueDtcclxuICAgICAgICBjb25zdCB2OiBudW1iZXIgPSAoeSAtIGIzLm1pbi55KSAvIGIzc2l6ZS55O1xyXG4gICAgICAgIHV2LnB1c2godSwgdik7XHJcbiAgICAgIH1cclxuICAgICAgZ2VvLnNldEF0dHJpYnV0ZSgndXYnLCBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSh1diwgMikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhc3luYyBMb2FkSERSSShwYXRoOiBzdHJpbmcsIHNjZW5lOiBTY2VuZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaGRyaTogRGF0YVRleHR1cmUgPSBhd2FpdCBuZXcgUkdCRUxvYWRlcigpLmxvYWRBc3luYyhwYXRoKTtcclxuICAgIGhkcmkubWFwcGluZyA9IEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nO1xyXG4gICAgc2NlbmUuZW52aXJvbm1lbnQgPSBoZHJpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBQcm9qZWN0VG9QbGFuZShwb2ludHM6IFZlY3RvcjNbXSk6IFZlY3RvcjJbXSB7XHJcbiAgICBjb25zdCBjZW50cm9pZCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICBwb2ludHMuZm9yRWFjaChwID0+IGNlbnRyb2lkLmFkZChwKSk7XHJcbiAgICBjZW50cm9pZC5kaXZpZGVTY2FsYXIocG9pbnRzLmxlbmd0aCk7XHJcblxyXG4gICAgY29uc3QgdjEgPSBwb2ludHNbMV0uY2xvbmUoKS5zdWIocG9pbnRzWzBdKTtcclxuICAgIGNvbnN0IHYyID0gcG9pbnRzWzJdLmNsb25lKCkuc3ViKHBvaW50c1swXSk7XHJcbiAgICBjb25zdCBub3JtYWwgPSB2MS5jbG9uZSgpLmNyb3NzKHYyKS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICBjb25zdCBhcmJpdHJhcnkgPSBNYXRoLmFicyhub3JtYWwuZG90KG5ldyBWZWN0b3IzKDEsIDAsIDApKSkgPiAwLjlcclxuICAgICAgPyBuZXcgVmVjdG9yMygwLCAxLCAwKVxyXG4gICAgICA6IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG5cclxuICAgIGNvbnN0IHUgPSBuZXcgVmVjdG9yMygpLmNyb3NzVmVjdG9ycyhub3JtYWwsIGFyYml0cmFyeSkubm9ybWFsaXplKCk7XHJcbiAgICBjb25zdCB2ID0gbmV3IFZlY3RvcjMoKS5jcm9zc1ZlY3RvcnMobm9ybWFsLCB1KS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICByZXR1cm4gcG9pbnRzLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgcmVsID0gcC5jbG9uZSgpLnN1YihjZW50cm9pZCk7XHJcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yMihyZWwuZG90KHUpLCByZWwuZG90KHYpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbG9uZU1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCB8IE1hdGVyaWFsW10sIGRlZXBDbG9uZTogYm9vbGVhbiA9IGZhbHNlKTogTWF0ZXJpYWwgfCBNYXRlcmlhbFtdIHtcclxuICAgIGlmIChtYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSB7XHJcbiAgICAgIGNvbnN0IG9uQmVmb3JlQ29tcGlsZSA9IG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY29uc3Qgb25CZWZvcmVSZW5kZXIgPSBtYXRlcmlhbC5vbkJlZm9yZVJlbmRlcjtcclxuICAgICAgY29uc3QgY2xvbmU6IE1hdGVyaWFsID0gbWF0ZXJpYWwuY2xvbmUoKTtcclxuICAgICAgY2xvbmUub25CZWZvcmVDb21waWxlID0gb25CZWZvcmVDb21waWxlO1xyXG4gICAgICBjbG9uZS5vbkJlZm9yZVJlbmRlciA9IG9uQmVmb3JlUmVuZGVyO1xyXG4gICAgICB0aGlzLm1hdGVyaWFsUHJvcHNcclxuICAgICAgICAuZmlsdGVyKG1hcFR5cGUgPT4gY2xvbmVbbWFwVHlwZV0gJiYgY2xvbmVbbWFwVHlwZV0gaW5zdGFuY2VvZiBUZXh0dXJlKVxyXG4gICAgICAgIC5mb3JFYWNoKG1hcFR5cGUgPT4gY2xvbmVbbWFwVHlwZV0gPSBPYmplY3RVdGlscy5DbG9uZVRleHR1cmUoY2xvbmVbbWFwVHlwZV0sIGRlZXBDbG9uZSkpO1xyXG4gICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwubWFwKChtOiBNYXRlcmlhbCkgPT4ge1xyXG4gICAgICBjb25zdCBvbkJlZm9yZUNvbXBpbGUgPSBtLm9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY29uc3Qgb25CZWZvcmVSZW5kZXIgPSBtLm9uQmVmb3JlUmVuZGVyO1xyXG4gICAgICBjb25zdCBjbG9uZTogTWF0ZXJpYWwgPSBtLmNsb25lKCk7XHJcbiAgICAgIGNsb25lLm9uQmVmb3JlQ29tcGlsZSA9IG9uQmVmb3JlQ29tcGlsZTtcclxuICAgICAgY2xvbmUub25CZWZvcmVSZW5kZXIgPSBvbkJlZm9yZVJlbmRlcjtcclxuICAgICAgdGhpcy5tYXRlcmlhbFByb3BzXHJcbiAgICAgICAgLmZpbHRlcihtYXBUeXBlID0+IGNsb25lW21hcFR5cGVdICYmIGNsb25lW21hcFR5cGVdIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAuZm9yRWFjaChtYXBUeXBlID0+IGNsb25lW21hcFR5cGVdID0gT2JqZWN0VXRpbHMuQ2xvbmVUZXh0dXJlKGNsb25lW21hcFR5cGVdLCBkZWVwQ2xvbmUpKTtcclxuICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJlZUpTIGRvZXMgbm90IGNsb25lIGltYWdlIHByb3BlcnR5LCBzbyBpdCBzdGF5cyBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgaW1hZ2UuXHJcbiAgICogV2hlbiBkZWVwQ2xvbmUsIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgaW1hZ2UgYW5kIGNvcGllcyB0aGUgb3JpZ2luYWwgaW1hZ2UgZGF0YSB0byBpdC5cclxuICAgKiBAcGFyYW0gdGV4dHVyZVxyXG4gICAqIEBwYXJhbSBkZWVwQ2xvbmVcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIENsb25lVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlLCBkZWVwQ2xvbmU6IGJvb2xlYW4gPSBmYWxzZSk6IFRleHR1cmUge1xyXG4gICAgY29uc3QgY2xvbmU6IFRleHR1cmUgPSB0ZXh0dXJlLmNsb25lKCk7XHJcbiAgICBpZiAoIWRlZXBDbG9uZSkge1xyXG4gICAgICBjbG9uZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuICAgIGlmICh0ZXh0dXJlLmltYWdlKSB7XHJcbiAgICAgIGlmICh0ZXh0dXJlLmltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCAmJiB0ZXh0dXJlLmltYWdlLnNyYykge1xyXG4gICAgICAgIGNvbnN0IGltZzogSFRNTEltYWdlRWxlbWVudCA9IHRleHR1cmUuaW1hZ2U7XHJcbiAgICAgICAgY29uc3QgbmV3SW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBuZXdJbWFnZS5zcmMgPSBpbWcuc3JjO1xyXG4gICAgICAgIGNsb25lLnNvdXJjZSA9IG5ldyBTb3VyY2UobmV3SW1hZ2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRleHR1cmUuaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSB0ZXh0dXJlLmltYWdlO1xyXG4gICAgICAgIGNvbnN0IG5ld0NhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBuZXdDYW52YXMud2lkdGggPSBjYW52YXMud2lkdGg7XHJcbiAgICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsb25lLnNvdXJjZSA9IG5ldyBTb3VyY2UobmV3Q2FudmFzKTtcclxuICAgICAgfSBlbHNlIGlmICh0ZXh0dXJlLmltYWdlLmRhdGEgJiYgKHRleHR1cmUuaW1hZ2UuZGF0YS5zbGljZSB8fCB0ZXh0dXJlLmltYWdlLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBjb25zdCBpbWdEYXRhOiBhbnkgPSB0ZXh0dXJlLmltYWdlO1xyXG4gICAgICAgIGNsb25lLmltYWdlID0ge1xyXG4gICAgICAgICAgLi4uaW1nRGF0YSxcclxuICAgICAgICAgIGRhdGE6IGltZ0RhdGEuZGF0YS5zbGljZSA/IGltZ0RhdGEuZGF0YS5zbGljZSgwKSA6IG5ldyBVaW50OEFycmF5KGltZ0RhdGEuZGF0YSkuc2xpY2UoMCkgLy8gRGVlcCBjb3B5IHRoZSBUeXBlZEFycmF5XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2xvbmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDbG9uZU9iamVjdDNEKHNvdXJjZTogT2JqZWN0M0QpOiBPYmplY3QzRCB7XHJcbiAgICBjb25zdCBuZXdPYmplY3QgPSBuZXcgT2JqZWN0M0QoKTtcclxuICAgIHNvdXJjZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY2hpbGQudmlzaWJsZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgbmV3T2JqZWN0LmFkZChjaGlsZC5jbG9uZSgpKTtcclxuICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBPYmplY3RVdGlscy5DbG9uZU9iamVjdDNEKGNoaWxkKTtcclxuICAgICAgICBjbG9uZS5wb3NpdGlvbi5jb3B5KGNoaWxkLnBvc2l0aW9uKTtcclxuICAgICAgICBjbG9uZS5yb3RhdGlvbi5jb3B5KGNoaWxkLnJvdGF0aW9uKTtcclxuICAgICAgICBuZXdPYmplY3QuYWRkKGNsb25lKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBEZWVwQ2xvbmVPYmplY3QzRChzb3VyY2U6IE9iamVjdDNEKTogT2JqZWN0M0Qge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYmplY3QzRCgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xvbmU6IE9iamVjdDNEID0gc291cmNlLmNsb25lKCk7XHJcbiAgICBjbG9uZS50cmF2ZXJzZSgob2JqOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWVzaCAmJiBvYmoubWF0ZXJpYWwpIHtcclxuICAgICAgICBvYmoubWF0ZXJpYWwgPSBPYmplY3RVdGlscy5DbG9uZU1hdGVyaWFsKG9iai5tYXRlcmlhbCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBEaXNwb3NlTWF0ZXJpYWwobWF0ZXJpYWw6IE1hdGVyaWFsIHwgTWF0ZXJpYWxbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRlcmlhbCkpIHtcclxuICAgICAgbWF0ZXJpYWwuZm9yRWFjaChtdHJsID0+IE9iamVjdFV0aWxzLkRpc3Bvc2VNYXRlcmlhbChtdHJsKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIG1hdGVyaWFsKSB7XHJcbiAgICAgIGlmIChtYXRlcmlhbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBtYXRlcmlhbFtrZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1RleHR1cmUpIHtcclxuICAgICAgICAgIHZhbHVlLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIG1hdGVyaWFsLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRGlzcG9zZU9iamVjdChvYmplY3Q6IE9iamVjdDNEIHwgTWVzaCk6IHZvaWQge1xyXG4gICAgaWYgKCFvYmplY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iamVjdC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgb2JqZWN0LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gdGhpcy5EaXNwb3NlT2JqZWN0KGNoaWxkKSk7XHJcbiAgICB9XHJcbiAgICBPYmplY3RVdGlscy5EaXNwb3NlTm9kZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRQYXJlbnRDdXN0b21PYmplY3QoZWxlbWVudDogYW55KTogT2JqZWN0M0Qge1xyXG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChlbGVtZW50LnBhcmVudCBpbnN0YW5jZW9mIE9iamVjdDNEKSB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBPYmplY3RVdGlscy5HZXRQYXJlbnRDdXN0b21PYmplY3QoZWxlbWVudC5wYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgRGlzcG9zZU5vZGUobm9kZTogT2JqZWN0M0QgfCBNZXNoKTogdm9pZCB7XHJcbiAgICBub2RlLnRyYXZlcnNlKChvYmo6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgaWYgKG9iai5nZW9tZXRyeSkge1xyXG4gICAgICAgICAgb2JqLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKG9iai5tYXRlcmlhbCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiAob2JqIGFzIGFueSkuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBvYmouZGlzcG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9yZW1hcEZsb2F0KHY6IG51bWJlciwgbWluMDogbnVtYmVyLCBtYXgwOiBudW1iZXIsIG1pbjE6IG51bWJlciwgbWF4MTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbWluMSArICh2IC0gbWluMCkgLyAobWF4MCAtIG1pbjApICogKG1heDEgLSBtaW4xKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
export class RelativePositionUtils {
|
|
3
|
-
static SetApplicationOffset(element) {
|
|
4
|
-
if (element) {
|
|
5
|
-
const offset = RelativePositionUtils.GetElementOffset(element);
|
|
6
|
-
RelativePositionUtils.appOffsetLeft = offset.x;
|
|
7
|
-
RelativePositionUtils.appOffsetTop = offset.y;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
static GetClientMousePosition(event) {
|
|
11
|
-
if (event.hasOwnProperty('originalEvent')) {
|
|
12
|
-
event = event.originalEvent;
|
|
13
|
-
}
|
|
14
|
-
let xOffsetEvent = event.offsetX || event.layerX;
|
|
15
|
-
let yOffsetEvent = event.offsetY || event.layerY;
|
|
16
|
-
const xOffset = event.clientX - xOffsetEvent;
|
|
17
|
-
const yOffset = event.clientY - yOffsetEvent;
|
|
18
|
-
return new THREE.Vector2(event.clientX - xOffset, event.clientY - yOffset);
|
|
19
|
-
}
|
|
20
|
-
static GetClientTouchPosition(event, canvas) {
|
|
21
|
-
const touch = event.touches[0];
|
|
22
|
-
const rect = canvas.getBoundingClientRect();
|
|
23
|
-
const xOffset = touch.clientX - rect.left;
|
|
24
|
-
const yOffset = touch.clientY - rect.top;
|
|
25
|
-
return new THREE.Vector2(xOffset, yOffset);
|
|
26
|
-
}
|
|
27
|
-
static GetElementRect(element, handleAppOffset) {
|
|
28
|
-
let rect;
|
|
29
|
-
if (element) {
|
|
30
|
-
rect = element.getBoundingClientRect();
|
|
31
|
-
// edge fix
|
|
32
|
-
if (!rect.x) {
|
|
33
|
-
rect.x = rect.left;
|
|
34
|
-
}
|
|
35
|
-
if (!rect.y) {
|
|
36
|
-
rect.y = rect.top;
|
|
37
|
-
}
|
|
38
|
-
if (handleAppOffset) {
|
|
39
|
-
rect.x = rect.x - RelativePositionUtils.appOffsetLeft;
|
|
40
|
-
rect.y = rect.y - RelativePositionUtils.appOffsetTop;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return rect;
|
|
44
|
-
}
|
|
45
|
-
static GetElementOffset(element) {
|
|
46
|
-
let offsetX = 0;
|
|
47
|
-
let offsetY = 0;
|
|
48
|
-
if (element) {
|
|
49
|
-
offsetX += element.offsetLeft;
|
|
50
|
-
offsetY += element.offsetTop;
|
|
51
|
-
if (element.offsetParent) {
|
|
52
|
-
offsetX += RelativePositionUtils.GetParentLeftOffset(element.offsetParent, offsetX);
|
|
53
|
-
offsetY += RelativePositionUtils.GetParentTopOffset(element.offsetParent, offsetY);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return { x: offsetX, y: offsetY };
|
|
57
|
-
}
|
|
58
|
-
static GetParentLeftOffset(parentOffset, currentOffset) {
|
|
59
|
-
currentOffset = currentOffset + parentOffset.offsetLeft;
|
|
60
|
-
if (parentOffset.offsetParent) {
|
|
61
|
-
return RelativePositionUtils.GetParentLeftOffset(parentOffset.offsetParent, currentOffset);
|
|
62
|
-
}
|
|
63
|
-
return currentOffset;
|
|
64
|
-
}
|
|
65
|
-
static GetParentTopOffset(parentOffset, currentOffset) {
|
|
66
|
-
currentOffset = currentOffset + parentOffset.offsetTop;
|
|
67
|
-
if (parentOffset.offsetParent) {
|
|
68
|
-
return RelativePositionUtils.GetParentTopOffset(parentOffset.offsetParent, currentOffset);
|
|
69
|
-
}
|
|
70
|
-
return currentOffset;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
RelativePositionUtils.appOffsetTop = 0;
|
|
74
|
-
RelativePositionUtils.appOffsetLeft = 0;
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmUtcG9zaXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25maWd1cmF0b3Ivc3JjL2xpYi91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixNQUFNLE9BQU8scUJBQXFCO0lBS3pCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFZO1FBQzdDLElBQUksT0FBTyxFQUFFO1lBQ1gsTUFBTSxNQUFNLEdBQTJCLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZGLHFCQUFxQixDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9DLHFCQUFxQixDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUE2QjtRQUNoRSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDekMsS0FBSyxHQUFJLEtBQWEsQ0FBQyxhQUFhLENBQUM7U0FDdEM7UUFDRCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFLLEtBQWEsQ0FBQyxNQUFNLENBQUM7UUFDMUQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSyxLQUFhLENBQUMsTUFBTSxDQUFDO1FBRTFELE1BQU0sT0FBTyxHQUFXLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFXLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBRXJELE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxD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Q0FBQztBQUN6QixtQ0FBYSxHQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGFwcE9mZnNldFRvcDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgc3RhdGljIGFwcE9mZnNldExlZnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgU2V0QXBwbGljYXRpb25PZmZzZXQoZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBjb25zdCBvZmZzZXQ6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0gPSBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0RWxlbWVudE9mZnNldChlbGVtZW50KTtcclxuICAgICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldExlZnQgPSBvZmZzZXQueDtcclxuICAgICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldFRvcCA9IG9mZnNldC55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBHZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50IHwgRHJhZ0V2ZW50KTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ29yaWdpbmFsRXZlbnQnKSkge1xyXG4gICAgICBldmVudCA9IChldmVudCBhcyBhbnkpLm9yaWdpbmFsRXZlbnQ7XHJcbiAgICB9XHJcbiAgICBsZXQgeE9mZnNldEV2ZW50ID0gZXZlbnQub2Zmc2V0WCB8fCAoZXZlbnQgYXMgYW55KS5sYXllclg7XHJcbiAgICBsZXQgeU9mZnNldEV2ZW50ID0gZXZlbnQub2Zmc2V0WSB8fCAoZXZlbnQgYXMgYW55KS5sYXllclk7XHJcblxyXG4gICAgY29uc3QgeE9mZnNldDogbnVtYmVyID0gZXZlbnQuY2xpZW50WCAtIHhPZmZzZXRFdmVudDtcclxuICAgIGNvbnN0IHlPZmZzZXQ6IG51bWJlciA9IGV2ZW50LmNsaWVudFkgLSB5T2Zmc2V0RXZlbnQ7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBUSFJFRS5WZWN0b3IyKGV2ZW50LmNsaWVudFggLSB4T2Zmc2V0LCBldmVudC5jbGllbnRZIC0geU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldENsaWVudFRvdWNoUG9zaXRpb24oZXZlbnQ6IFRvdWNoRXZlbnQsIGNhbnZhczogYW55KTogVEhSRUUuVmVjdG9yMiB7XHJcbiAgICBjb25zdCB0b3VjaDogVG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHhPZmZzZXQ6IG51bWJlciA9IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQ7XHJcbiAgICBjb25zdCB5T2Zmc2V0OiBudW1iZXIgPSB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3A7XHJcbiAgICByZXR1cm4gbmV3IFRIUkVFLlZlY3RvcjIoeE9mZnNldCwgeU9mZnNldCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIEdldEVsZW1lbnRSZWN0KGVsZW1lbnQ6IGFueSwgaGFuZGxlQXBwT2Zmc2V0PzogYm9vbGVhbik6IERPTVJlY3Qge1xyXG4gICAgbGV0IHJlY3Q6IERPTVJlY3Q7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgLy8gZWRnZSBmaXhcclxuICAgICAgaWYgKCFyZWN0LngpIHtcclxuICAgICAgICByZWN0LnggPSByZWN0LmxlZnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFyZWN0LnkpIHtcclxuICAgICAgICByZWN0LnkgPSByZWN0LnRvcDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGFuZGxlQXBwT2Zmc2V0KSB7XHJcbiAgICAgICAgcmVjdC54ID0gcmVjdC54IC0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldExlZnQ7XHJcbiAgICAgICAgcmVjdC55ID0gcmVjdC55IC0gUmVsYXRpdmVQb3NpdGlvblV0aWxzLmFwcE9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRFbGVtZW50T2Zmc2V0KGVsZW1lbnQ6IGFueSk6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSB7XHJcbiAgICBsZXQgb2Zmc2V0WDogbnVtYmVyID0gMDtcclxuICAgIGxldCBvZmZzZXRZOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIG9mZnNldFggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICBvZmZzZXRZICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICBvZmZzZXRYICs9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRQYXJlbnRMZWZ0T2Zmc2V0KGVsZW1lbnQub2Zmc2V0UGFyZW50LCBvZmZzZXRYKTtcclxuICAgICAgICBvZmZzZXRZICs9IFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRQYXJlbnRUb3BPZmZzZXQoZWxlbWVudC5vZmZzZXRQYXJlbnQsIG9mZnNldFkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3g6IG9mZnNldFgsIHk6IG9mZnNldFl9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgR2V0UGFyZW50TGVmdE9mZnNldChwYXJlbnRPZmZzZXQ6IGFueSwgY3VycmVudE9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgcGFyZW50T2Zmc2V0Lm9mZnNldExlZnQ7XHJcbiAgICBpZiAocGFyZW50T2Zmc2V0Lm9mZnNldFBhcmVudCkge1xyXG4gICAgICByZXR1cm4gUmVsYXRpdmVQb3NpdGlvblV0aWxzLkdldFBhcmVudExlZnRPZmZzZXQocGFyZW50T2Zmc2V0Lm9mZnNldFBhcmVudCwgY3VycmVudE9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE9mZnNldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEdldFBhcmVudFRvcE9mZnNldChwYXJlbnRPZmZzZXQ6IGFueSwgY3VycmVudE9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgcGFyZW50T2Zmc2V0Lm9mZnNldFRvcDtcclxuICAgIGlmIChwYXJlbnRPZmZzZXQub2Zmc2V0UGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0UGFyZW50VG9wT2Zmc2V0KHBhcmVudE9mZnNldC5vZmZzZXRQYXJlbnQsIGN1cnJlbnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export class RotationHelper {
|
|
2
|
-
static CanRotateX(value) {
|
|
3
|
-
return (value & 2) === 2;
|
|
4
|
-
}
|
|
5
|
-
static CanRotateY(value) {
|
|
6
|
-
return (value & 4) === 4;
|
|
7
|
-
}
|
|
8
|
-
static CanRotateZ(value) {
|
|
9
|
-
return (value & 8) === 8;
|
|
10
|
-
}
|
|
11
|
-
static Default180(value) {
|
|
12
|
-
return (value & 1) === 1;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24taGVscGVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvcm90YXRpb24taGVscGVyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxjQUFjO0lBRWxCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUNwQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYTtRQUNwQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgUm90YXRpb25IZWxwZXIge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIENhblJvdGF0ZVgodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmIDIpID09PSAyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBDYW5Sb3RhdGVZKHZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodmFsdWUgJiA0KSA9PT0gNDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgQ2FuUm90YXRlWih2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgOCkgPT09IDg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIERlZmF1bHQxODAodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmIDEpID09PSAxO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|