@colijnit/configurator 260.1.2 → 261.1.1
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/bundles/colijnit-configurator.umd.js +18067 -1889
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/colijnit-configurator.d.ts +2 -6
- package/esm2015/colijnit-configurator.js +2 -7
- package/esm2015/lib/builder.js +795 -0
- package/esm2015/lib/components/answer-card/answer-card.component.js +313 -0
- package/esm2015/lib/components/answer-card/answer-card.module.js +50 -0
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +182 -0
- package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +34 -0
- package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +490 -0
- package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +61 -0
- package/esm2015/lib/components/color-filter/color-filter.component.js +59 -0
- package/esm2015/lib/components/color-filter/color-filter.module.js +26 -0
- package/esm2015/lib/components/configurator/configurator.component.js +133 -0
- package/esm2015/lib/components/configurator/configurator.module.js +42 -0
- package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +222 -0
- package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +48 -0
- package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +82 -0
- package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +163 -0
- package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +49 -0
- package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +33 -0
- package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +60 -0
- package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +17 -0
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +46 -0
- package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +26 -0
- package/esm2015/lib/components/element-buttons/element-buttons.component.js +168 -0
- package/esm2015/lib/components/element-buttons/element-buttons.module.js +30 -0
- package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +186 -0
- package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +34 -0
- package/esm2015/lib/components/image-zoom/image-zoom.component.js +61 -0
- package/esm2015/lib/components/image-zoom/image-zoom.module.js +30 -0
- package/esm2015/lib/components/lite-selector/lite-selector.component.js +206 -0
- package/esm2015/lib/components/lite-selector/lite-selector.module.js +34 -0
- package/esm2015/lib/components/product-configurator/product-configurator.component.js +184 -0
- package/esm2015/lib/components/product-configurator/product-configurator.module.js +72 -0
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +237 -0
- package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +38 -0
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +284 -0
- package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +42 -0
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +72 -0
- package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +34 -0
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +82 -0
- package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +30 -0
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +80 -0
- package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +34 -0
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +93 -0
- package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +34 -0
- package/esm2015/lib/components/progress-bar/progress-bar.component.js +55 -0
- package/esm2015/lib/components/progress-bar/progress-bar.module.js +29 -0
- package/esm2015/lib/components/scene-options/scene-options.component.js +164 -0
- package/esm2015/lib/components/scene-options/scene-options.module.js +38 -0
- package/esm2015/lib/components/selections-summary/selections-summary.component.js +163 -0
- package/esm2015/lib/components/selections-summary/selections-summary.module.js +45 -0
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +171 -0
- package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +34 -0
- package/esm2015/lib/components/slideout/slideout.component.js +83 -0
- package/esm2015/lib/components/slideout/slideout.module.js +17 -0
- package/esm2015/lib/components/summary-line/summary-line.component.js +273 -0
- package/esm2015/lib/components/summary-line/summary-line.module.js +44 -0
- package/esm2015/lib/components/tag-filter/tag-filter.component.js +39 -0
- package/esm2015/lib/components/tag-filter/tag-filter.module.js +21 -0
- package/esm2015/lib/components/threedselector/threedselector.component.js +155 -0
- package/esm2015/lib/components/threedselector/threedselector.module.js +34 -0
- package/esm2015/lib/core/helper/variation-helper.js +553 -0
- package/esm2015/lib/core/shader/floor-fade.shader.js +33 -0
- package/esm2015/lib/core/textures/depth-data-texture.js +19 -0
- package/esm2015/lib/directives/directives.module.js +26 -0
- package/esm2015/lib/directives/visibility-observer-master.directive.js +53 -0
- package/esm2015/lib/directives/visibility-observer.directive.js +54 -0
- package/esm2015/lib/enum/ar-feature.enum.js +14 -0
- package/esm2015/lib/enum/configuration-key.enum.js +41 -0
- package/esm2015/lib/enum/configuration-template.enum.js +6 -0
- package/esm2015/lib/enum/device-size-type.js +7 -0
- package/esm2015/lib/enum/device-tier.enum.js +7 -0
- package/esm2015/lib/enum/icon.enum.js +113 -0
- package/esm2015/lib/enum/item-type.enum.js +23 -0
- package/esm2015/lib/enum/light.enum.js +9 -0
- package/esm2015/lib/enum/navigator-type.enum.js +6 -0
- package/esm2015/lib/enum/output-encoding.enum.js +9 -0
- package/esm2015/lib/enum/result-type.enum.js +21 -0
- package/esm2015/lib/enum/scene-event.enum.js +12 -0
- package/esm2015/lib/enum/shadow-map-type.enum.js +8 -0
- package/esm2015/lib/enum/texture-type.js +9 -0
- package/esm2015/lib/enum/tone-mapping-local.enum.js +12 -0
- package/esm2015/lib/enum/view-mode.enum.js +7 -0
- package/esm2015/lib/enum/xr-mode.enum.js +6 -0
- package/esm2015/lib/environments/environment.js +8 -0
- package/esm2015/lib/interfaces/aa-options.interface.js +2 -0
- package/esm2015/lib/interfaces/adjustable-element.interface.js +2 -0
- package/esm2015/lib/interfaces/ao-options.interface.js +2 -0
- package/esm2015/lib/interfaces/changes.interface.js +2 -0
- package/esm2015/lib/interfaces/configuration-data.interface.js +2 -0
- package/esm2015/lib/interfaces/light-preset.interface.js +2 -0
- package/esm2015/lib/interfaces/post-processing-setting.interface.js +2 -0
- package/esm2015/lib/interfaces/scene-option-button.interface.js +6 -0
- package/esm2015/lib/interfaces/screen-size-info.js +2 -0
- package/esm2015/lib/interfaces/setting.interface.js +2 -0
- package/esm2015/lib/interfaces/texture.interface.js +2 -0
- package/esm2015/lib/interfaces/vignette-options.interface.js +2 -0
- package/esm2015/lib/model/ar-position-indicator.js +18 -0
- package/esm2015/lib/model/camera-settings.js +14 -0
- package/esm2015/lib/model/configuration-result-object.js +6 -0
- package/esm2015/lib/model/configurator-error-message.js +9 -0
- package/esm2015/lib/model/configurator-settings.js +25 -0
- package/esm2015/lib/model/custom-button.js +16 -0
- package/esm2015/lib/model/factory.js +28 -0
- package/esm2015/lib/model/icon.js +112 -0
- package/esm2015/lib/model/intersected-objects.js +7 -0
- package/esm2015/lib/model/light-preset.js +73 -0
- package/esm2015/lib/model/light-properties.js +45 -0
- package/esm2015/lib/model/material.js +11 -0
- package/esm2015/lib/model/metadata.js +2 -0
- package/esm2015/lib/model/render-parameters.js +16 -0
- package/esm2015/lib/model/setting-options.js +71 -0
- package/esm2015/lib/model/settings.js +16 -0
- package/esm2015/lib/model/shadow-properties.js +10 -0
- package/esm2015/lib/model/skin.js +3 -0
- package/esm2015/lib/model/texture.js +76 -0
- package/esm2015/lib/model/variation-settings.js +54 -0
- package/esm2015/lib/model/variation.js +3 -0
- package/esm2015/lib/model/xr-reticle.js +79 -0
- package/esm2015/lib/modules/render/enum/scene-type.enum.js +6 -0
- package/esm2015/lib/modules/render/model/ar-parameters.js +12 -0
- package/esm2015/lib/modules/render/model/scene-setting.js +6 -0
- package/esm2015/lib/modules/render/model/scene-settings.js +3 -0
- package/esm2015/lib/pipes/append.pipe.js +21 -0
- package/esm2015/lib/pipes/google-translate.pipe.js +21 -0
- package/esm2015/lib/pipes/localize.pipe.js +28 -0
- package/esm2015/lib/pipes/pipes.module.js +41 -0
- package/esm2015/lib/pipes/prepend.pipe.js +21 -0
- package/esm2015/lib/pipes/strip-html.pipe.js +17 -0
- package/esm2015/lib/services/app-event.service.js +36 -0
- package/esm2015/lib/services/app-initializer.service.js +27 -0
- package/esm2015/lib/services/ar.service.js +844 -0
- package/esm2015/lib/services/build-furniture-base.service.js +1181 -0
- package/esm2015/lib/services/build-furniture-without-scene.service.js +86 -0
- package/esm2015/lib/services/build-furniture.service.js +169 -0
- package/esm2015/lib/services/bundle-initialzer.service.js +113 -0
- package/esm2015/lib/services/camera.service.js +123 -0
- package/esm2015/lib/services/configuration.service.js +79 -0
- package/esm2015/lib/services/configurator-connector.service.js +830 -0
- package/esm2015/lib/services/configurator.service.js +285 -0
- package/esm2015/lib/services/configuring.service.js +119 -0
- package/esm2015/lib/services/controls.js +799 -0
- package/esm2015/lib/services/debug.service.js +43 -0
- package/esm2015/lib/services/dictionary.service.js +65 -0
- package/esm2015/lib/services/dynamic-camera.service.js +96 -0
- package/esm2015/lib/services/floor-plane.service.js +252 -0
- package/esm2015/lib/services/font.service.js +27 -0
- package/esm2015/lib/services/google-translate.service.js +79 -0
- package/esm2015/lib/services/icon-cache.service.js +44 -0
- package/esm2015/lib/services/intersection.service.js +47 -0
- package/esm2015/lib/services/item.service.js +75 -0
- package/esm2015/lib/services/json-utils.service.js +48 -0
- package/esm2015/lib/services/light-creation.service.js +35 -0
- package/esm2015/lib/services/light-presets.service.js +157 -0
- package/esm2015/lib/services/lights.service.js +146 -0
- package/esm2015/lib/services/load-furniture-base.service.js +164 -0
- package/esm2015/lib/services/load-furniture-without-scene.service.js +45 -0
- package/esm2015/lib/services/load-furniture.service.js +72 -0
- package/esm2015/lib/services/loader.service.js +32 -0
- package/esm2015/lib/services/locator.service.js +11 -0
- package/esm2015/lib/services/message-board.service.js +50 -0
- package/esm2015/lib/services/post-processing.service.js +378 -0
- package/esm2015/lib/services/product-configurator.service.js +16 -0
- package/esm2015/lib/services/progress.service.js +20 -0
- package/esm2015/lib/services/scene-event.service.js +246 -0
- package/esm2015/lib/services/scene-options.service.js +24 -0
- package/esm2015/lib/services/scene.service.js +313 -0
- package/esm2015/lib/services/screen-size-analysis.service.js +97 -0
- package/esm2015/lib/services/settings.service.js +142 -0
- package/esm2015/lib/services/switch-build-furniture.service.js +37 -0
- package/esm2015/lib/services/switch-load-furniture.service.js +35 -0
- package/esm2015/lib/services/threedselector.service.js +72 -0
- package/esm2015/lib/services/utils.service.js +207 -0
- package/esm2015/lib/services/variation-cache.service.js +143 -0
- package/esm2015/lib/services/variation.service.js +490 -0
- package/esm2015/lib/services/view-mode.service.js +37 -0
- package/esm2015/lib/services/vr.service.js +191 -0
- package/esm2015/lib/services/xr.service.js +294 -0
- package/esm2015/lib/utils/asset.utils.js +120 -0
- package/esm2015/lib/utils/base-utils.js +9 -0
- package/esm2015/lib/utils/color.utils.js +30 -0
- package/esm2015/lib/utils/debug.utils.js +9 -0
- package/esm2015/lib/utils/device.utils.js +25 -0
- package/esm2015/lib/utils/file.utils.js +167 -0
- package/esm2015/lib/utils/image.utils.js +61 -0
- package/esm2015/lib/utils/json-parser.utils.js +180 -0
- package/esm2015/lib/utils/material.utils.js +433 -0
- package/esm2015/lib/utils/object.utils.js +360 -0
- package/esm2015/lib/utils/relative-position.utils.js +75 -0
- package/esm2015/lib/utils/rotation-helper.utils.js +15 -0
- package/esm2015/lib/utils/scene-3d.utils.js +213 -0
- package/esm2015/lib/utils/scene-utils.js +191 -0
- package/esm2015/lib/utils/text-utils.js +68 -0
- package/esm2015/lib/utils/threed.utils.js +281 -0
- package/esm2015/lib/utils/variation-utils.js +459 -0
- package/esm2015/public-api.js +65 -0
- package/fesm2015/colijnit-configurator.js +17538 -1477
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/{app → lib}/builder.d.ts +9 -1
- package/lib/components/answer-card/answer-card.component.d.ts +58 -0
- package/lib/components/answer-card/answer-card.module.d.ts +11 -0
- package/lib/components/answer-card/style/_layout.scss +88 -0
- package/lib/components/answer-card/style/_material-definition.scss +3 -0
- package/lib/components/answer-card/style/_theme.scss +67 -0
- package/lib/components/answer-card/style/material.scss +2 -0
- package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +38 -0
- package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +10 -0
- package/lib/components/answer-info-dialog/style/_layout.scss +88 -0
- package/lib/components/answer-info-dialog/style/_material-definition.scss +3 -0
- package/lib/components/answer-info-dialog/style/_theme.scss +44 -0
- package/lib/components/answer-info-dialog/style/material.scss +3 -0
- package/lib/components/answers-slideout/answers-slideout.component.d.ts +86 -0
- package/lib/components/answers-slideout/answers-slideout.module.d.ts +16 -0
- package/lib/components/answers-slideout/style/_layout.scss +198 -0
- package/lib/components/answers-slideout/style/_material-definition.scss +3 -0
- package/lib/components/answers-slideout/style/_theme.scss +54 -0
- package/lib/components/answers-slideout/style/material.scss +3 -0
- package/lib/components/color-filter/color-filter.component.d.ts +20 -0
- package/lib/components/color-filter/color-filter.module.d.ts +8 -0
- package/lib/components/color-filter/style/_layout.scss +41 -0
- package/lib/components/color-filter/style/_material-definition.scss +3 -0
- package/lib/components/color-filter/style/_theme.scss +7 -0
- package/lib/components/color-filter/style/material.scss +3 -0
- package/lib/components/configurator/configurator.component.d.ts +37 -0
- package/lib/components/configurator/configurator.module.d.ts +12 -0
- package/lib/components/configurator/style/_layout.scss +7 -0
- package/lib/components/configurator/style/_material-definition.scss +3 -0
- package/lib/components/configurator/style/_theme.scss +7 -0
- package/lib/components/configurator/style/material.scss +3 -0
- package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +30 -0
- package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +13 -0
- package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +16 -0
- package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +26 -0
- package/lib/components/configurator-dialog/style/_layout.scss +129 -0
- package/lib/components/configurator-dialog/style/_material-definition.scss +4 -0
- package/lib/components/configurator-dialog/style/_theme.scss +89 -0
- package/lib/components/configurator-dialog/style/material.scss +3 -0
- package/lib/components/configurator-loader/configurator-loader.component.d.ts +7 -0
- package/lib/components/configurator-loader/configurator-loader.module.d.ts +9 -0
- package/lib/components/configurator-loader/style/_layout.scss +72 -0
- package/lib/components/configurator-loader/style/_material-definition.scss +5 -0
- package/lib/components/configurator-loader/style/_theme.scss +26 -0
- package/lib/components/configurator-loader/style/material.scss +14 -0
- package/lib/components/configurator-scene/configurator-scene.component.d.ts +24 -0
- package/lib/components/configurator-scene/configurator-scene.module.d.ts +7 -0
- package/lib/components/configurator-scene/style/_layout.scss +22 -0
- package/lib/components/configurator-scene/style/_material-definition.scss +3 -0
- package/lib/components/configurator-scene/style/_theme.scss +7 -0
- package/lib/components/configurator-scene/style/material.scss +3 -0
- package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +7 -0
- package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +8 -0
- package/lib/components/configurator-scene-loader/style/_layout.scss +72 -0
- package/lib/components/configurator-scene-loader/style/_material-definition.scss +5 -0
- package/lib/components/configurator-scene-loader/style/_theme.scss +26 -0
- package/lib/components/configurator-scene-loader/style/material.scss +14 -0
- package/lib/components/element-buttons/element-buttons.component.d.ts +32 -0
- package/lib/components/element-buttons/element-buttons.module.d.ts +9 -0
- package/lib/components/element-buttons/style/_layout.scss +52 -0
- package/lib/components/element-buttons/style/_material-definition.scss +3 -0
- package/lib/components/element-buttons/style/_theme.scss +23 -0
- package/lib/components/element-buttons/style/material.scss +3 -0
- package/lib/components/element-toolbar/element-toolbar.component.d.ts +27 -0
- package/lib/components/element-toolbar/element-toolbar.component.scss +59 -0
- package/lib/components/element-toolbar/element-toolbar.module.d.ts +10 -0
- package/lib/components/element-toolbar/style/_layout.scss +107 -0
- package/lib/components/element-toolbar/style/_material-definition.scss +3 -0
- package/lib/components/element-toolbar/style/_theme.scss +47 -0
- package/lib/components/element-toolbar/style/material.scss +3 -0
- package/lib/components/image-zoom/image-zoom.component.d.ts +15 -0
- package/lib/components/image-zoom/image-zoom.module.d.ts +9 -0
- package/lib/components/image-zoom/style/_layout.scss +51 -0
- package/lib/components/image-zoom/style/_material-definition.scss +3 -0
- package/lib/components/image-zoom/style/_theme.scss +17 -0
- package/lib/components/image-zoom/style/material.scss +3 -0
- package/lib/components/lite-selector/lite-selector.component.d.ts +40 -0
- package/lib/components/lite-selector/lite-selector.module.d.ts +10 -0
- package/lib/components/lite-selector/style/_layout.scss +21 -0
- package/lib/components/lite-selector/style/_material-definition.scss +3 -0
- package/lib/components/lite-selector/style/_theme.scss +7 -0
- package/lib/components/lite-selector/style/material.scss +3 -0
- package/lib/components/product-configurator/product-configurator.component.d.ts +50 -0
- package/lib/components/product-configurator/product-configurator.module.d.ts +15 -0
- package/lib/components/product-configurator/style/_layout.scss +46 -0
- package/lib/components/product-configurator/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator/style/_theme.scss +22 -0
- package/lib/components/product-configurator/style/material.scss +3 -0
- package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +35 -0
- package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +11 -0
- package/lib/components/product-configurator-selector/style/_layout.scss +145 -0
- package/lib/components/product-configurator-selector/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector/style/_theme.scss +57 -0
- package/lib/components/product-configurator-selector/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +31 -0
- package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +13 -0
- package/lib/components/product-configurator-selector-option/style/_layout.scss +7 -0
- package/lib/components/product-configurator-selector-option/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option/style/_theme.scss +7 -0
- package/lib/components/product-configurator-selector-option/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +20 -0
- package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-button/style/_layout.scss +28 -0
- package/lib/components/product-configurator-selector-option-button/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-button/style/_theme.scss +33 -0
- package/lib/components/product-configurator-selector-option-button/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +20 -0
- package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_layout.scss +28 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/_theme.scss +27 -0
- package/lib/components/product-configurator-selector-option-checkbox/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +21 -0
- package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_layout.scss +34 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/_theme.scss +28 -0
- package/lib/components/product-configurator-selector-option-dropdown/style/material.scss +3 -0
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +21 -0
- package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +10 -0
- package/lib/components/product-configurator-selector-option-tile/style/_layout.scss +58 -0
- package/lib/components/product-configurator-selector-option-tile/style/_material-definition.scss +3 -0
- package/lib/components/product-configurator-selector-option-tile/style/_theme.scss +56 -0
- package/lib/components/product-configurator-selector-option-tile/style/material.scss +3 -0
- package/lib/components/progress-bar/progress-bar.component.d.ts +10 -0
- package/lib/components/progress-bar/progress-bar.component.scss +14 -0
- package/lib/components/progress-bar/progress-bar.module.d.ts +8 -0
- package/lib/components/progress-bar/style/_layout.scss +18 -0
- package/lib/components/progress-bar/style/_material-definition.scss +3 -0
- package/lib/components/progress-bar/style/_theme.scss +10 -0
- package/lib/components/progress-bar/style/material.scss +3 -0
- package/lib/components/scene-options/scene-options.component.d.ts +24 -0
- package/lib/components/scene-options/scene-options.module.d.ts +11 -0
- package/lib/components/scene-options/style/_layout.scss +52 -0
- package/lib/components/scene-options/style/_material-definition.scss +3 -0
- package/lib/components/scene-options/style/_theme.scss +7 -0
- package/lib/components/scene-options/style/material.scss +3 -0
- package/lib/components/selections-summary/selections-summary.component.d.ts +38 -0
- package/lib/components/selections-summary/selections-summary.module.d.ts +12 -0
- package/lib/components/selections-summary/style/_layout.scss +87 -0
- package/lib/components/selections-summary/style/_material-definition.scss +5 -0
- package/lib/components/selections-summary/style/_theme.scss +13 -0
- package/lib/components/selections-summary/style/material.scss +3 -0
- package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +27 -0
- package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +10 -0
- package/lib/components/selections-summary-line/style/_layout.scss +12 -0
- package/lib/components/selections-summary-line/style/_material-definition.scss +4 -0
- package/lib/components/selections-summary-line/style/_theme.scss +12 -0
- package/lib/components/selections-summary-line/style/material.scss +3 -0
- package/lib/components/slideout/slideout.component.d.ts +22 -0
- package/lib/components/slideout/slideout.module.d.ts +7 -0
- package/lib/components/slideout/style/_layout.scss +27 -0
- package/lib/components/slideout/style/_material-definition.scss +3 -0
- package/lib/components/slideout/style/_theme.scss +5 -0
- package/lib/components/slideout/style/material.scss +3 -0
- package/lib/components/summary-line/style/_layout.scss +137 -0
- package/lib/components/summary-line/style/_material-definition.scss +4 -0
- package/lib/components/summary-line/style/_theme.scss +56 -0
- package/lib/components/summary-line/style/material.scss +3 -0
- package/lib/components/summary-line/summary-line.component.d.ts +50 -0
- package/lib/components/summary-line/summary-line.module.d.ts +11 -0
- package/lib/components/tag-filter/style/_layout.scss +14 -0
- package/lib/components/tag-filter/style/_material-definition.scss +3 -0
- package/lib/components/tag-filter/style/_theme.scss +7 -0
- package/lib/components/tag-filter/style/material.scss +3 -0
- package/lib/components/tag-filter/tag-filter.component.d.ts +9 -0
- package/lib/components/tag-filter/tag-filter.module.d.ts +7 -0
- package/lib/components/threedselector/style/_layout.scss +32 -0
- package/lib/components/threedselector/style/_material-definition.scss +3 -0
- package/lib/components/threedselector/style/_theme.scss +7 -0
- package/lib/components/threedselector/style/material.scss +9 -0
- package/lib/components/threedselector/threedselector.component.d.ts +38 -0
- package/lib/components/threedselector/threedselector.module.d.ts +10 -0
- package/{helper → lib/core/helper}/variation-helper.d.ts +2 -2
- package/lib/core/shader/floor-fade.shader.d.ts +5 -0
- package/lib/core/textures/depth-data-texture.d.ts +5 -0
- package/lib/directives/directives.module.d.ts +8 -0
- package/{app → lib}/directives/visibility-observer-master.directive.d.ts +3 -0
- package/{app → lib}/directives/visibility-observer.directive.d.ts +3 -0
- package/lib/enum/ar-feature.enum.d.ts +12 -0
- package/lib/enum/configuration-key.enum.d.ts +39 -0
- package/lib/enum/configuration-template.enum.d.ts +4 -0
- package/lib/enum/device-size-type.d.ts +5 -0
- package/lib/enum/device-tier.enum.d.ts +5 -0
- package/lib/enum/icon.enum.d.ts +111 -0
- package/lib/enum/item-type.enum.d.ts +21 -0
- package/lib/enum/light.enum.d.ts +7 -0
- package/lib/enum/navigator-type.enum.d.ts +4 -0
- package/lib/enum/output-encoding.enum.d.ts +7 -0
- package/lib/enum/result-type.enum.d.ts +19 -0
- package/lib/enum/scene-event.enum.d.ts +10 -0
- package/lib/enum/shadow-map-type.enum.d.ts +6 -0
- package/lib/enum/texture-type.d.ts +7 -0
- package/lib/enum/tone-mapping-local.enum.d.ts +10 -0
- package/lib/enum/view-mode.enum.d.ts +5 -0
- package/lib/enum/xr-mode.enum.d.ts +4 -0
- package/lib/environments/environment.d.ts +4 -0
- package/lib/interfaces/aa-options.interface.d.ts +4 -0
- package/lib/interfaces/adjustable-element.interface.d.ts +5 -0
- package/lib/interfaces/ao-options.interface.d.ts +18 -0
- package/lib/interfaces/changes.interface.d.ts +9 -0
- package/lib/interfaces/configuration-data.interface.d.ts +40 -0
- package/lib/interfaces/light-preset.interface.d.ts +22 -0
- package/lib/interfaces/post-processing-setting.interface.d.ts +11 -0
- package/lib/interfaces/scene-option-button.interface.d.ts +19 -0
- package/lib/interfaces/screen-size-info.d.ts +10 -0
- package/lib/interfaces/setting.interface.d.ts +8 -0
- package/lib/interfaces/texture.interface.d.ts +44 -0
- package/lib/interfaces/vignette-options.interface.d.ts +4 -0
- package/lib/model/ar-position-indicator.d.ts +4 -0
- package/lib/model/camera-settings.d.ts +12 -0
- package/lib/model/configuration-result-object.d.ts +30 -0
- package/lib/model/configurator-error-message.d.ts +8 -0
- package/lib/model/configurator-settings.d.ts +62 -0
- package/lib/model/custom-button.d.ts +10 -0
- package/lib/model/factory.d.ts +5 -0
- package/lib/model/icon.d.ts +4 -0
- package/lib/model/intersected-objects.d.ts +6 -0
- package/lib/model/light-preset.d.ts +33 -0
- package/lib/model/light-properties.d.ts +25 -0
- package/lib/model/material.d.ts +41 -0
- package/lib/model/metadata.d.ts +78 -0
- package/lib/model/render-parameters.d.ts +12 -0
- package/lib/model/setting-options.d.ts +67 -0
- package/lib/model/settings.d.ts +10 -0
- package/lib/model/shadow-properties.d.ts +7 -0
- package/lib/model/skin.d.ts +15 -0
- package/lib/model/texture.d.ts +52 -0
- package/{model → lib/model}/variation-settings.d.ts +9 -8
- package/{model → lib/model}/variation.d.ts +2 -1
- package/lib/model/xr-reticle.d.ts +17 -0
- package/lib/modules/render/enum/scene-type.enum.d.ts +4 -0
- package/lib/modules/render/model/ar-parameters.d.ts +9 -0
- package/lib/modules/render/model/scene-setting.d.ts +13 -0
- package/lib/modules/render/model/scene-settings.d.ts +4 -0
- package/lib/pipes/append.pipe.d.ts +7 -0
- package/lib/pipes/google-translate.pipe.d.ts +11 -0
- package/lib/pipes/localize.pipe.d.ts +10 -0
- package/lib/pipes/pipes.module.d.ts +11 -0
- package/lib/pipes/prepend.pipe.d.ts +7 -0
- package/lib/pipes/strip-html.pipe.d.ts +7 -0
- package/lib/services/app-event.service.d.ts +32 -0
- package/lib/services/app-initializer.service.d.ts +14 -0
- package/lib/services/ar.service.d.ts +120 -0
- package/lib/services/build-furniture-base.service.d.ts +117 -0
- package/lib/services/build-furniture-without-scene.service.d.ts +14 -0
- package/lib/services/build-furniture.service.d.ts +14 -0
- package/lib/services/bundle-initialzer.service.d.ts +45 -0
- package/lib/services/camera.service.d.ts +44 -0
- package/lib/services/configuration.service.d.ts +18 -0
- package/lib/services/configurator-connector.service.d.ts +140 -0
- package/lib/services/configurator.service.d.ts +62 -0
- package/lib/services/configuring.service.d.ts +46 -0
- package/lib/services/controls.d.ts +11 -0
- package/lib/services/debug.service.d.ts +16 -0
- package/lib/services/dictionary.service.d.ts +15 -0
- package/lib/services/dynamic-camera.service.d.ts +21 -0
- package/lib/services/floor-plane.service.d.ts +47 -0
- package/lib/services/font.service.d.ts +10 -0
- package/lib/services/google-translate.service.d.ts +26 -0
- package/lib/services/icon-cache.service.d.ts +21 -0
- package/lib/services/intersection.service.d.ts +11 -0
- package/lib/services/item.service.d.ts +18 -0
- package/lib/services/json-utils.service.d.ts +7 -0
- package/lib/services/light-creation.service.d.ts +9 -0
- package/lib/services/light-presets.service.d.ts +34 -0
- package/lib/services/lights.service.d.ts +34 -0
- package/lib/services/load-furniture-base.service.d.ts +37 -0
- package/lib/services/load-furniture-without-scene.service.d.ts +9 -0
- package/lib/services/load-furniture.service.d.ts +9 -0
- package/lib/services/loader.service.d.ts +11 -0
- package/lib/services/locator.service.d.ts +7 -0
- package/lib/services/message-board.service.d.ts +18 -0
- package/lib/services/post-processing.service.d.ts +74 -0
- package/lib/services/product-configurator.service.d.ts +11 -0
- package/lib/services/progress.service.d.ts +9 -0
- package/lib/services/scene-event.service.d.ts +72 -0
- package/lib/services/scene-options.service.d.ts +11 -0
- package/lib/services/scene.service.d.ts +71 -0
- package/lib/services/screen-size-analysis.service.d.ts +32 -0
- package/lib/services/settings.service.d.ts +24 -0
- package/lib/services/switch-build-furniture.service.d.ts +21 -0
- package/lib/services/switch-load-furniture.service.d.ts +21 -0
- package/lib/services/threedselector.service.d.ts +17 -0
- package/lib/services/utils.service.d.ts +24 -0
- package/lib/services/variation-cache.service.d.ts +23 -0
- package/lib/services/variation.service.d.ts +26 -0
- package/lib/services/view-mode.service.d.ts +17 -0
- package/lib/services/vr.service.d.ts +42 -0
- package/lib/services/xr.service.d.ts +56 -0
- package/lib/style/_mixin.scss +9 -0
- package/lib/style/configurator-globals.scss +21 -0
- package/lib/style/template_variables.scss +37 -0
- package/lib/utils/color.utils.d.ts +8 -0
- package/lib/utils/debug.utils.d.ts +3 -0
- package/lib/utils/device.utils.d.ts +7 -0
- package/{utils → lib/utils}/file.utils.d.ts +3 -0
- package/{utils → lib/utils}/image.utils.d.ts +2 -3
- package/lib/utils/json-parser.utils.d.ts +9 -0
- package/lib/utils/material.utils.d.ts +34 -0
- package/lib/utils/object.utils.d.ts +32 -0
- package/lib/utils/relative-position.utils.d.ts +12 -0
- package/lib/utils/rotation-helper.utils.d.ts +6 -0
- package/lib/utils/scene-3d.utils.d.ts +8 -0
- package/lib/utils/text-utils.d.ts +4 -0
- package/{utils → lib/utils}/threed.utils.d.ts +7 -3
- package/{utils → lib/utils}/variation-utils.d.ts +4 -2
- package/package.json +17 -30
- package/public-api.d.ts +60 -0
- package/README.md +0 -28
- package/app/components/answers/answer/answer.component.d.ts +0 -11
- package/app/components/answers/answers.component.d.ts +0 -8
- package/app/components/answers/answers.module.d.ts +0 -2
- package/app/components/selections/selections.component.d.ts +0 -21
- package/app/components/selections/selections.module.d.ts +0 -2
- package/app/components/shared/loader/loader.component.d.ts +0 -2
- package/app/components/shared/shared.module.d.ts +0 -2
- package/app/services/configurator.service.d.ts +0 -19
- package/app/services/image-cache.service.d.ts +0 -10
- package/app/utils/object.utils.d.ts +0 -7
- package/colijnit-configurator.metadata.json +0 -1
- package/esm2015/app/builder.js +0 -706
- package/esm2015/app/components/answers/answer/answer.component.js +0 -66
- package/esm2015/app/components/answers/answers.component.js +0 -38
- package/esm2015/app/components/answers/answers.module.js +0 -27
- package/esm2015/app/components/selections/selections.component.js +0 -129
- package/esm2015/app/components/selections/selections.module.js +0 -21
- package/esm2015/app/components/shared/loader/loader.component.js +0 -22
- package/esm2015/app/components/shared/shared.module.js +0 -19
- package/esm2015/app/directives/visibility-observer-master.directive.js +0 -50
- package/esm2015/app/directives/visibility-observer.directive.js +0 -55
- package/esm2015/app/services/configurator.service.js +0 -79
- package/esm2015/app/services/image-cache.service.js +0 -63
- package/esm2015/app/utils/object.utils.js +0 -51
- package/esm2015/helper/variation-helper.js +0 -553
- package/esm2015/model/material.js +0 -11
- package/esm2015/model/variation-settings.js +0 -54
- package/esm2015/model/variation.js +0 -3
- package/esm2015/public_api.js +0 -7
- package/esm2015/utils/asset.utils.js +0 -124
- package/esm2015/utils/base-utils.js +0 -9
- package/esm2015/utils/file.utils.js +0 -142
- package/esm2015/utils/image.utils.js +0 -66
- package/esm2015/utils/object.utils.js +0 -49
- package/esm2015/utils/scene-utils.js +0 -187
- package/esm2015/utils/threed.utils.js +0 -226
- package/esm2015/utils/variation-utils.js +0 -388
- package/model/material.d.ts +0 -40
- package/public_api.d.ts +0 -6
- package/utils/object.utils.d.ts +0 -7
- /package/{utils → lib/utils}/asset.utils.d.ts +0 -0
- /package/{utils → lib/utils}/base-utils.d.ts +0 -0
- /package/{utils → lib/utils}/scene-utils.d.ts +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DebugService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.debugMessages = [];
|
|
6
|
+
this.averageRenderTime = 0;
|
|
7
|
+
this.lastTimestamp = Date.now();
|
|
8
|
+
this.measurements = [];
|
|
9
|
+
this.runTest = false;
|
|
10
|
+
}
|
|
11
|
+
addMessage(message) {
|
|
12
|
+
this.debugMessages.push(message);
|
|
13
|
+
}
|
|
14
|
+
measureRenderTime() {
|
|
15
|
+
if (this.runTest) {
|
|
16
|
+
this.measurements.push(Date.now() - this.lastTimestamp);
|
|
17
|
+
this.averageRenderTime = Math.floor(this.measurements.reduce((a, b) => a + b, 0) / this.measurements.length);
|
|
18
|
+
this.lastTimestamp = Date.now();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
resetMeasurements() {
|
|
22
|
+
this.measurements = [];
|
|
23
|
+
this.averageRenderTime = 0;
|
|
24
|
+
this.runTest = false;
|
|
25
|
+
}
|
|
26
|
+
startToggle() {
|
|
27
|
+
this.runTest = !this.runTest;
|
|
28
|
+
this.lastTimestamp = Date.now();
|
|
29
|
+
}
|
|
30
|
+
getAverageRenderTime() {
|
|
31
|
+
return this.averageRenderTime;
|
|
32
|
+
}
|
|
33
|
+
getFramesMeasuredAmount() {
|
|
34
|
+
return this.measurements.length;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
DebugService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DebugService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38
|
+
DebugService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DebugService, providedIn: 'root' });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DebugService, decorators: [{
|
|
40
|
+
type: Injectable,
|
|
41
|
+
args: [{ providedIn: 'root' }]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL2RlYnVnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHekMsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFHRSxrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUV0QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0IsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztLQWdDeEI7SUE5QlEsVUFBVSxDQUFDLE9BQWU7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDOzswR0F0Q1UsWUFBWTs4R0FBWixZQUFZLGNBREEsTUFBTTs0RkFDbEIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBEZWJ1Z1NlcnZpY2Uge1xyXG5cclxuICBkZWJ1Z01lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgYXZlcmFnZVJlbmRlclRpbWUgPSAwO1xyXG4gIHB1YmxpYyBsYXN0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICBwdWJsaWMgbWVhc3VyZW1lbnRzID0gW107XHJcbiAgcHVibGljIHJ1blRlc3QgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGFkZE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlYnVnTWVzc2FnZXMucHVzaChtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtZWFzdXJlUmVuZGVyVGltZSgpIHtcclxuICAgIGlmICh0aGlzLnJ1blRlc3QpIHtcclxuICAgICAgdGhpcy5tZWFzdXJlbWVudHMucHVzaChEYXRlLm5vdygpIC0gdGhpcy5sYXN0VGltZXN0YW1wKTtcclxuICAgICAgdGhpcy5hdmVyYWdlUmVuZGVyVGltZSA9IE1hdGguZmxvb3IodGhpcy5tZWFzdXJlbWVudHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyB0aGlzLm1lYXN1cmVtZW50cy5sZW5ndGgpO1xyXG4gICAgICB0aGlzLmxhc3RUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0TWVhc3VyZW1lbnRzKCkge1xyXG4gICAgdGhpcy5tZWFzdXJlbWVudHMgPSBbXTtcclxuICAgIHRoaXMuYXZlcmFnZVJlbmRlclRpbWUgPSAwO1xyXG4gICAgdGhpcy5ydW5UZXN0ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnRUb2dnbGUoKSB7XHJcbiAgICB0aGlzLnJ1blRlc3QgPSAhdGhpcy5ydW5UZXN0O1xyXG4gICAgdGhpcy5sYXN0VGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBdmVyYWdlUmVuZGVyVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmF2ZXJhZ2VSZW5kZXJUaW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZyYW1lc01lYXN1cmVkQW1vdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRzLmxlbmd0aDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { StringUtils } from '@colijnit/ioneconnector/build/utils/string-utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./json-utils.service";
|
|
6
|
+
export class DictionaryService {
|
|
7
|
+
constructor(_jsonUtilsService) {
|
|
8
|
+
this._jsonUtilsService = _jsonUtilsService;
|
|
9
|
+
// Some dictionary values have one or more '|~' texts in them, meant to be replaced with client-side given texts.
|
|
10
|
+
this._placeholder = '|~';
|
|
11
|
+
this._client = 'homedecorator';
|
|
12
|
+
this._language = 'NL';
|
|
13
|
+
}
|
|
14
|
+
get(key, upperCaseFirst = true, ...replacementTexts) {
|
|
15
|
+
let text = this._dictionary && this._dictionary.hasOwnProperty(key.toUpperCase()) ? this._dictionary[key.toUpperCase()] : key;
|
|
16
|
+
if (upperCaseFirst) {
|
|
17
|
+
text = text.charAt(0).toUpperCase() + text.slice(1);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
text = text.charAt(0).toLowerCase() + text.slice(1);
|
|
21
|
+
}
|
|
22
|
+
if (replacementTexts.length > 0) {
|
|
23
|
+
text = StringUtils.ReplaceOccurrencesIn(text, this._placeholder, ...replacementTexts);
|
|
24
|
+
}
|
|
25
|
+
return text ? text : key;
|
|
26
|
+
}
|
|
27
|
+
setDictionary(path, client, languageCode, additionalTranslationFile) {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
this._language = languageCode ? languageCode : this._language;
|
|
30
|
+
let dictionaryData;
|
|
31
|
+
if (additionalTranslationFile) {
|
|
32
|
+
dictionaryData = yield this._getDictionaryData(additionalTranslationFile);
|
|
33
|
+
}
|
|
34
|
+
if (!dictionaryData && client) {
|
|
35
|
+
const fileName = `${client}_${this._language.toLowerCase()}_${this._language.toUpperCase()}.json`;
|
|
36
|
+
dictionaryData = yield this._getDictionaryData(path + 'assets/' + fileName);
|
|
37
|
+
}
|
|
38
|
+
if (!client || !dictionaryData) {
|
|
39
|
+
const fileName = `${this._client}_${this._language.toLowerCase()}_${this._language.toUpperCase()}.json`;
|
|
40
|
+
dictionaryData = yield this._getDictionaryData(path + 'assets/' + fileName);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this._client = client;
|
|
44
|
+
}
|
|
45
|
+
this._dictionary = dictionaryData ? dictionaryData : this._dictionary;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
_getDictionaryData(path) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
return yield this._jsonUtilsService.readJsonFile(path, false)
|
|
51
|
+
.catch(() => {
|
|
52
|
+
return null;
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
DictionaryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DictionaryService, deps: [{ token: i1.JsonUtilsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
+
DictionaryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DictionaryService, providedIn: 'root' });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DictionaryService, decorators: [{
|
|
60
|
+
type: Injectable,
|
|
61
|
+
args: [{
|
|
62
|
+
providedIn: 'root'
|
|
63
|
+
}]
|
|
64
|
+
}], ctorParameters: function () { return [{ type: i1.JsonUtilsService }]; } });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGljdGlvbmFyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrREFBa0QsQ0FBQzs7O0FBSzdFLE1BQU0sT0FBTyxpQkFBaUI7SUFTNUIsWUFDVSxpQkFBbUM7UUFBbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQVQ3QyxpSEFBaUg7UUFDaEcsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFFckMsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUUxQixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBTXpCLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVyxFQUFFLGlCQUEwQixJQUFJLEVBQUUsR0FBRyxnQkFBMEI7UUFDbkYsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXRJLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7U0FDdkY7UUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVZLGFBQWEsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLFlBQW9CLEVBQUUseUJBQStCOztZQUM1RyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzlELElBQUksY0FBbUIsQ0FBQztZQUV4QixJQUFJLHlCQUF5QixFQUFFO2dCQUM3QixjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQzthQUMzRTtZQUNELElBQUksQ0FBQyxjQUFjLElBQUksTUFBTSxFQUFFO2dCQUM3QixNQUFNLFFBQVEsR0FBVyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztnQkFDMUcsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUM7YUFDN0U7WUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUM5QixNQUFNLFFBQVEsR0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7Z0JBQ2hILGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDO2FBQzdFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN4RSxDQUFDO0tBQUE7SUFFYSxrQkFBa0IsQ0FBQyxJQUFZOztZQUMzQyxPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUMxRCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7OytHQXZEVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0pzb25VdGlsc1NlcnZpY2V9IGZyb20gJy4vanNvbi11dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdHJpbmdVdGlsc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvdXRpbHMvc3RyaW5nLXV0aWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpY3Rpb25hcnlTZXJ2aWNlIHtcclxuICAvLyBTb21lIGRpY3Rpb25hcnkgdmFsdWVzIGhhdmUgb25lIG9yIG1vcmUgJ3x+JyB0ZXh0cyBpbiB0aGVtLCBtZWFudCB0byBiZSByZXBsYWNlZCB3aXRoIGNsaWVudC1zaWRlIGdpdmVuIHRleHRzLlxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnfH4nO1xyXG5cclxuICBwcml2YXRlIF9jbGllbnQgPSAnaG9tZWRlY29yYXRvcic7XHJcblxyXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gJ05MJztcclxuICBwcml2YXRlIF9kaWN0aW9uYXJ5OiB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9qc29uVXRpbHNTZXJ2aWNlOiBKc29uVXRpbHNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nLCB1cHBlckNhc2VGaXJzdDogYm9vbGVhbiA9IHRydWUsIC4uLnJlcGxhY2VtZW50VGV4dHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0aGlzLl9kaWN0aW9uYXJ5ICYmIHRoaXMuX2RpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkoa2V5LnRvVXBwZXJDYXNlKCkpID8gdGhpcy5fZGljdGlvbmFyeVtrZXkudG9VcHBlckNhc2UoKV0gOiBrZXk7XHJcblxyXG4gICAgaWYgKHVwcGVyQ2FzZUZpcnN0KSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVwbGFjZW1lbnRUZXh0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRleHQgPSBTdHJpbmdVdGlscy5SZXBsYWNlT2NjdXJyZW5jZXNJbih0ZXh0LCB0aGlzLl9wbGFjZWhvbGRlciwgLi4ucmVwbGFjZW1lbnRUZXh0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHQgPyB0ZXh0IDoga2V5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldERpY3Rpb25hcnkocGF0aDogc3RyaW5nLCBjbGllbnQ6IHN0cmluZywgbGFuZ3VhZ2VDb2RlOiBzdHJpbmcsIGFkZGl0aW9uYWxUcmFuc2xhdGlvbkZpbGU/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gbGFuZ3VhZ2VDb2RlID8gbGFuZ3VhZ2VDb2RlIDogdGhpcy5fbGFuZ3VhZ2U7XHJcbiAgICBsZXQgZGljdGlvbmFyeURhdGE6IGFueTtcclxuXHJcbiAgICBpZiAoYWRkaXRpb25hbFRyYW5zbGF0aW9uRmlsZSkge1xyXG4gICAgICBkaWN0aW9uYXJ5RGF0YSA9IGF3YWl0IHRoaXMuX2dldERpY3Rpb25hcnlEYXRhKGFkZGl0aW9uYWxUcmFuc2xhdGlvbkZpbGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFkaWN0aW9uYXJ5RGF0YSAmJiBjbGllbnQpIHtcclxuICAgICAgY29uc3QgZmlsZU5hbWU6IHN0cmluZyA9IGAke2NsaWVudH1fJHt0aGlzLl9sYW5ndWFnZS50b0xvd2VyQ2FzZSgpfV8ke3RoaXMuX2xhbmd1YWdlLnRvVXBwZXJDYXNlKCl9Lmpzb25gO1xyXG4gICAgICBkaWN0aW9uYXJ5RGF0YSA9IGF3YWl0IHRoaXMuX2dldERpY3Rpb25hcnlEYXRhKHBhdGggKyAnYXNzZXRzLycgKyBmaWxlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNsaWVudCB8fCAhZGljdGlvbmFyeURhdGEpIHtcclxuICAgICAgY29uc3QgZmlsZU5hbWU6IHN0cmluZyA9IGAke3RoaXMuX2NsaWVudH1fJHt0aGlzLl9sYW5ndWFnZS50b0xvd2VyQ2FzZSgpfV8ke3RoaXMuX2xhbmd1YWdlLnRvVXBwZXJDYXNlKCl9Lmpzb25gO1xyXG4gICAgICBkaWN0aW9uYXJ5RGF0YSA9IGF3YWl0IHRoaXMuX2dldERpY3Rpb25hcnlEYXRhKHBhdGggKyAnYXNzZXRzLycgKyBmaWxlTmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeURhdGEgPyBkaWN0aW9uYXJ5RGF0YSA6IHRoaXMuX2RpY3Rpb25hcnk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9nZXREaWN0aW9uYXJ5RGF0YShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueSB8IG51bGw+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9qc29uVXRpbHNTZXJ2aWNlLnJlYWRKc29uRmlsZShwYXRoLCBmYWxzZSlcclxuICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { FileUtils } from '../utils/file.utils';
|
|
4
|
+
import { DebugUtils } from '../utils/debug.utils';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./camera.service";
|
|
7
|
+
import * as i2 from "./scene.service";
|
|
8
|
+
import * as i3 from "./settings.service";
|
|
9
|
+
import * as i4 from "./configurator-connector.service";
|
|
10
|
+
export class DynamicCameraService {
|
|
11
|
+
constructor(_cameraService, _sceneService, _settingsService, _configuratorConnectorService) {
|
|
12
|
+
this._cameraService = _cameraService;
|
|
13
|
+
this._sceneService = _sceneService;
|
|
14
|
+
this._settingsService = _settingsService;
|
|
15
|
+
this._configuratorConnectorService = _configuratorConnectorService;
|
|
16
|
+
}
|
|
17
|
+
initCameraSettings() {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
if (!this.currentCameraSettings && this._settingsService.settings.cameraConfig) {
|
|
20
|
+
const fullPath = this._settingsService.settings.assetPath + 'assets/' + this._settingsService.settings.cameraConfig;
|
|
21
|
+
const cameraConfig = yield FileUtils.FileExists(fullPath, this._settingsService.settings.assetPath);
|
|
22
|
+
if (cameraConfig) {
|
|
23
|
+
const configFile = yield fetch(fullPath);
|
|
24
|
+
this.currentCameraSettings = yield configFile.json();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
DebugUtils.log('Camera configuration file could not be found at ' + this._settingsService.settings.cameraConfig);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
getCameraSettings() {
|
|
33
|
+
const settingsForCurrentSKU = this.currentCameraSettings
|
|
34
|
+
.find((settings) => settings.sku && settings.sku === this._configuratorConnectorService.sku);
|
|
35
|
+
const defaultCameraSettings = this.currentCameraSettings
|
|
36
|
+
.find((settings) => settings.sku === undefined);
|
|
37
|
+
return settingsForCurrentSKU ? settingsForCurrentSKU : defaultCameraSettings;
|
|
38
|
+
}
|
|
39
|
+
loadCustomCameraSettings() {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
yield this.initCameraSettings();
|
|
42
|
+
if (this.currentCameraSettings) {
|
|
43
|
+
const settings = this.getCameraSettings();
|
|
44
|
+
if (settings) {
|
|
45
|
+
this._cameraService.camera.position.set(settings.position.x, settings.position.y, settings.position.z);
|
|
46
|
+
this._cameraService.camera.rotation.set(settings.rotation.x, settings.rotation.y, settings.rotation.z);
|
|
47
|
+
this._cameraService.controls.maxAzimuthAngle = settings.maxHorizontalOrbit;
|
|
48
|
+
this._cameraService.controls.minAzimuthAngle = settings.minHorizontalOrbit;
|
|
49
|
+
this._cameraService.controls.maxPolarAngle = settings.maxVerticalOrbit;
|
|
50
|
+
this._cameraService.controls.minPolarAngle = settings.minVerticalOrbit;
|
|
51
|
+
this._cameraService.controls.maxDistance = settings.maxZoomDistance;
|
|
52
|
+
this._cameraService.controls.minDistance = settings.minZoomDistance;
|
|
53
|
+
this._cameraService.camera.updateProjectionMatrix();
|
|
54
|
+
this._cameraService.controls.update();
|
|
55
|
+
this._sceneService.needsRender = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exportCameraSettings() {
|
|
61
|
+
FileUtils.DownloadFile('camera_settings.json', JSON.stringify(this.currentCameraSettings));
|
|
62
|
+
}
|
|
63
|
+
saveSettingsToCurrentSettings(cameraSettings, asDefault) {
|
|
64
|
+
if (!this.currentCameraSettings) {
|
|
65
|
+
this.currentCameraSettings = [];
|
|
66
|
+
}
|
|
67
|
+
if (asDefault) {
|
|
68
|
+
const defaultCameraSettings = this.currentCameraSettings
|
|
69
|
+
.find((settings) => settings.sku === undefined);
|
|
70
|
+
if (defaultCameraSettings) {
|
|
71
|
+
this.currentCameraSettings.splice(this.currentCameraSettings.indexOf(defaultCameraSettings), 1, cameraSettings);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.currentCameraSettings.push(cameraSettings);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const settingsForCurrentSKU = this.currentCameraSettings
|
|
79
|
+
.find((settings) => settings.sku && settings.sku === this._configuratorConnectorService.sku);
|
|
80
|
+
cameraSettings.sku = this._configuratorConnectorService.sku;
|
|
81
|
+
if (settingsForCurrentSKU) {
|
|
82
|
+
this.currentCameraSettings.splice(this.currentCameraSettings.indexOf(settingsForCurrentSKU), 1, cameraSettings);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.currentCameraSettings.push(cameraSettings);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
DynamicCameraService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicCameraService, deps: [{ token: i1.CameraService }, { token: i2.SceneService }, { token: i3.SettingsService }, { token: i4.ConfiguratorConnectorService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
91
|
+
DynamicCameraService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicCameraService, providedIn: 'root' });
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicCameraService, decorators: [{
|
|
93
|
+
type: Injectable,
|
|
94
|
+
args: [{ providedIn: 'root' }]
|
|
95
|
+
}], ctorParameters: function () { return [{ type: i1.CameraService }, { type: i2.SceneService }, { type: i3.SettingsService }, { type: i4.ConfiguratorConnectorService }]; } });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jYW1lcmEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL2R5bmFtaWMtY2FtZXJhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBR2hELE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsWUFDVSxjQUE2QixFQUM3QixhQUEyQixFQUMzQixnQkFBaUMsRUFDakMsNkJBQTJEO1FBSDNELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsa0NBQTZCLEdBQTdCLDZCQUE2QixDQUE4QjtJQUVyRSxDQUFDO0lBRVksa0JBQWtCOztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUM5RSxNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQzVILE1BQU0sWUFBWSxHQUFZLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0csSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLE1BQU0sVUFBVSxHQUFhLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FB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QUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NhbWVyYVNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9jYW1lcmEtc2V0dGluZ3MnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4vY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tICcuLi91dGlscy9maWxlLnV0aWxzJztcclxuaW1wb3J0IHtDb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL2NvbmZpZ3VyYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7RGVidWdVdGlsc30gZnJvbSAnLi4vdXRpbHMvZGVidWcudXRpbHMnO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ2FtZXJhU2VydmljZSB7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50Q2FtZXJhU2V0dGluZ3M6IENhbWVyYVNldHRpbmdzW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlOiBDb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdENhbWVyYVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncyAmJiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuY2FtZXJhQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgJ2Fzc2V0cy8nICsgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmNhbWVyYUNvbmZpZztcclxuICAgICAgY29uc3QgY2FtZXJhQ29uZmlnOiBib29sZWFuID0gYXdhaXQgRmlsZVV0aWxzLkZpbGVFeGlzdHMoZnVsbFBhdGgsIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGgpO1xyXG4gICAgICBpZiAoY2FtZXJhQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnRmlsZTogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmdWxsUGF0aCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MgPSBhd2FpdCBjb25maWdGaWxlLmpzb24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBEZWJ1Z1V0aWxzLmxvZygnQ2FtZXJhIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQgYXQgJyArIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5jYW1lcmFDb25maWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2FtZXJhU2V0dGluZ3MoKTogQ2FtZXJhU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3NGb3JDdXJyZW50U0tVOiBDYW1lcmFTZXR0aW5ncyA9IHRoaXMuY3VycmVudENhbWVyYVNldHRpbmdzXHJcbiAgICAgIC5maW5kKChzZXR0aW5ncykgPT4gc2V0dGluZ3Muc2t1ICYmIHNldHRpbmdzLnNrdSA9PT0gdGhpcy5fY29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZS5za3UpO1xyXG4gICAgY29uc3QgZGVmYXVsdENhbWVyYVNldHRpbmdzOiBDYW1lcmFTZXR0aW5ncyA9IHRoaXMuY3VycmVudENhbWVyYVNldHRpbmdzXHJcbiAgICAgIC5maW5kKChzZXR0aW5ncykgPT4gc2V0dGluZ3Muc2t1ID09PSB1bmRlZmluZWQpO1xyXG4gICAgcmV0dXJuIHNldHRpbmdzRm9yQ3VycmVudFNLVSA/IHNldHRpbmdzRm9yQ3VycmVudFNLVSA6IGRlZmF1bHRDYW1lcmFTZXR0aW5ncztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkQ3VzdG9tQ2FtZXJhU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmluaXRDYW1lcmFTZXR0aW5ncygpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncykge1xyXG4gICAgICBjb25zdCBzZXR0aW5nczogQ2FtZXJhU2V0dGluZ3MgPSB0aGlzLmdldENhbWVyYVNldHRpbmdzKCk7XHJcbiAgICAgIGlmIChzZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLnNldChzZXR0aW5ncy5wb3NpdGlvbi54LCBzZXR0aW5ncy5wb3NpdGlvbi55LCBzZXR0aW5ncy5wb3NpdGlvbi56KTtcclxuICAgICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5yb3RhdGlvbi5zZXQoc2V0dGluZ3Mucm90YXRpb24ueCwgc2V0dGluZ3Mucm90YXRpb24ueSwgc2V0dGluZ3Mucm90YXRpb24ueik7XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy5tYXhBemltdXRoQW5nbGUgPSBzZXR0aW5ncy5tYXhIb3Jpem9udGFsT3JiaXQ7XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy5taW5BemltdXRoQW5nbGUgPSBzZXR0aW5ncy5taW5Ib3Jpem9udGFsT3JiaXQ7XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy5tYXhQb2xhckFuZ2xlID0gc2V0dGluZ3MubWF4VmVydGljYWxPcmJpdDtcclxuICAgICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNvbnRyb2xzLm1pblBvbGFyQW5nbGUgPSBzZXR0aW5ncy5taW5WZXJ0aWNhbE9yYml0O1xyXG4gICAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY29udHJvbHMubWF4RGlzdGFuY2UgPSBzZXR0aW5ncy5tYXhab29tRGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy5taW5EaXN0YW5jZSA9IHNldHRpbmdzLm1pblpvb21EaXN0YW5jZTtcclxuICAgICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jb250cm9scy51cGRhdGUoKTtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0Q2FtZXJhU2V0dGluZ3MoKTogYW55IHtcclxuICAgIEZpbGVVdGlscy5Eb3dubG9hZEZpbGUoJ2NhbWVyYV9zZXR0aW5ncy5qc29uJywgSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlU2V0dGluZ3NUb0N1cnJlbnRTZXR0aW5ncyhjYW1lcmFTZXR0aW5nczogQ2FtZXJhU2V0dGluZ3MsIGFzRGVmYXVsdDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncyA9IFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzRGVmYXVsdCkge1xyXG4gICAgICBjb25zdCBkZWZhdWx0Q2FtZXJhU2V0dGluZ3M6IENhbWVyYVNldHRpbmdzID0gdGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3NcclxuICAgICAgICAuZmluZCgoc2V0dGluZ3MpID0+IHNldHRpbmdzLnNrdSA9PT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgIGlmIChkZWZhdWx0Q2FtZXJhU2V0dGluZ3MpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncy5zcGxpY2UodGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MuaW5kZXhPZihkZWZhdWx0Q2FtZXJhU2V0dGluZ3MpLCAxLCBjYW1lcmFTZXR0aW5ncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MucHVzaChjYW1lcmFTZXR0aW5ncyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdzRm9yQ3VycmVudFNLVTogQ2FtZXJhU2V0dGluZ3MgPSB0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5nc1xyXG4gICAgICAgIC5maW5kKChzZXR0aW5ncykgPT4gc2V0dGluZ3Muc2t1ICYmIHNldHRpbmdzLnNrdSA9PT0gdGhpcy5fY29uZmlndXJhdG9yQ29ubmVjdG9yU2VydmljZS5za3UpO1xyXG4gICAgICBjYW1lcmFTZXR0aW5ncy5za3UgPSB0aGlzLl9jb25maWd1cmF0b3JDb25uZWN0b3JTZXJ2aWNlLnNrdTtcclxuXHJcbiAgICAgIGlmIChzZXR0aW5nc0ZvckN1cnJlbnRTS1UpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFTZXR0aW5ncy5zcGxpY2UodGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MuaW5kZXhPZihzZXR0aW5nc0ZvckN1cnJlbnRTS1UpLCAxLCBjYW1lcmFTZXR0aW5ncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhU2V0dGluZ3MucHVzaChjYW1lcmFTZXR0aW5ncyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Box3, Color, DoubleSide, Mesh, MeshStandardMaterial, PlaneGeometry, ShadowMaterial, Vector3 } from 'three';
|
|
3
|
+
import { MaterialUtils } from '../utils/material.utils';
|
|
4
|
+
import { isNill } from '@colijnit/configuratorapi/build/utils/function/is-nill.function';
|
|
5
|
+
import { floorFadeShader } from '../core/shader/floor-fade.shader';
|
|
6
|
+
import { Injectable } from '@angular/core';
|
|
7
|
+
import { BehaviorSubject } from 'rxjs';
|
|
8
|
+
import { ObjectUtils } from '../utils/object.utils';
|
|
9
|
+
import { TextureType } from '../enum/texture-type';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "./settings.service";
|
|
12
|
+
import * as i2 from "./scene.service";
|
|
13
|
+
import * as i3 from "./scene-options.service";
|
|
14
|
+
import * as i4 from "./bundle-initialzer.service";
|
|
15
|
+
export class FloorPlaneService {
|
|
16
|
+
constructor(_settingsService, _sceneService, _sceneOptionsService, _bundleInitializerService) {
|
|
17
|
+
this._settingsService = _settingsService;
|
|
18
|
+
this._sceneService = _sceneService;
|
|
19
|
+
this._sceneOptionsService = _sceneOptionsService;
|
|
20
|
+
this._bundleInitializerService = _bundleInitializerService;
|
|
21
|
+
this.floorPlaneCreated = new BehaviorSubject(false);
|
|
22
|
+
this._subs = [];
|
|
23
|
+
this._sceneReady = false;
|
|
24
|
+
this._texturesReady = false;
|
|
25
|
+
this._subs.push(this._sceneService.sceneInitialized.subscribe((loaded) => __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
if (loaded) {
|
|
27
|
+
this._sceneReady = true;
|
|
28
|
+
yield this.createFloorPlane();
|
|
29
|
+
}
|
|
30
|
+
})), this._bundleInitializerService.floorTexturesLoaded.subscribe((loaded) => __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
if (loaded) {
|
|
32
|
+
this._texturesReady = true;
|
|
33
|
+
yield this.createFloorPlane();
|
|
34
|
+
}
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
get floorPlane() {
|
|
38
|
+
return this._floorPlane;
|
|
39
|
+
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
this._subs.forEach(s => s.unsubscribe());
|
|
42
|
+
}
|
|
43
|
+
// Function for loading floorplane
|
|
44
|
+
createFloorPlane() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
if (this._sceneReady && this._texturesReady) {
|
|
47
|
+
this._standaloneFloors = this._bundleInitializerService.getFloorTextures();
|
|
48
|
+
const defaultFloor = this._bundleInitializerService.getFloorTexture();
|
|
49
|
+
const size = this._getStandaloneFloorSize();
|
|
50
|
+
const floorGeometry = new PlaneGeometry(size, size);
|
|
51
|
+
yield this._generateFloorPlane('white', defaultFloor, floorGeometry);
|
|
52
|
+
this._sceneService.scene.background = new Color(`#${this._settingsService.settings.standaloneSceneBackgroundColor}`);
|
|
53
|
+
this._sceneService.needsRender = true;
|
|
54
|
+
if (this._standaloneFloors && this._standaloneFloors.length > 1) {
|
|
55
|
+
this._upsertFloorButtons(defaultFloor);
|
|
56
|
+
}
|
|
57
|
+
this.floorPlaneCreated.next(true);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Function for getting center floorplane
|
|
62
|
+
getCenterFloorPlane() {
|
|
63
|
+
if (this._floorPlane) {
|
|
64
|
+
const box = new Box3().setFromObject(this._floorPlane);
|
|
65
|
+
return box.getCenter(new Vector3());
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return new Vector3(0, 0, 0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
getDimensions(scale = 1) {
|
|
72
|
+
const box = new Box3().setFromObject(this._floorPlane);
|
|
73
|
+
return {
|
|
74
|
+
x: {
|
|
75
|
+
min: box.min.x * scale,
|
|
76
|
+
max: box.max.x * scale
|
|
77
|
+
},
|
|
78
|
+
y: {
|
|
79
|
+
min: box.min.y * scale,
|
|
80
|
+
max: box.max.y * scale
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
getPlaneSize() {
|
|
85
|
+
const dim = this.getDimensions();
|
|
86
|
+
return new Vector3(dim.x.max - dim.x.min, 0, dim.y.max - dim.y.min);
|
|
87
|
+
}
|
|
88
|
+
_getStandaloneFloorSize() {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
const defaultSize = 6;
|
|
91
|
+
const opts = (_b = (_a = this._settingsService) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.options;
|
|
92
|
+
if (opts === null || opts === void 0 ? void 0 : opts.useCustomFloorSize) {
|
|
93
|
+
const s = Number(opts.customFloorSize);
|
|
94
|
+
return Number.isFinite(s) && s > 0 ? s : defaultSize;
|
|
95
|
+
}
|
|
96
|
+
return defaultSize;
|
|
97
|
+
}
|
|
98
|
+
_generateFloorPlane(color, texture, floorGeometry) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
const geometry = floorGeometry;
|
|
101
|
+
this._sceneService.needsRender = true;
|
|
102
|
+
geometry.rotateX(Math.PI / 2);
|
|
103
|
+
const floorMaterial = yield this._createFloorMaterial(color, texture);
|
|
104
|
+
const floorMesh = new Mesh(geometry, floorMaterial);
|
|
105
|
+
const floorPlane = floorMesh;
|
|
106
|
+
floorPlane.name = 'floor-plane';
|
|
107
|
+
floorPlane.receiveShadow = true;
|
|
108
|
+
floorPlane.castShadow = false;
|
|
109
|
+
const floorCenter = new Vector3(0, 0, 0);
|
|
110
|
+
floorPlane.position.set(floorCenter.x, 0.0001, floorCenter.z);
|
|
111
|
+
this._sceneService.addObject(floorPlane, false);
|
|
112
|
+
this._floorPlane = floorPlane;
|
|
113
|
+
this._sceneService.needsRender = true;
|
|
114
|
+
return floorPlane;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
_createFloorMaterial(color, texture) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const options = {
|
|
120
|
+
side: DoubleSide
|
|
121
|
+
};
|
|
122
|
+
if (color) {
|
|
123
|
+
options.color = color;
|
|
124
|
+
}
|
|
125
|
+
let floorMaterial;
|
|
126
|
+
if (texture && texture.type && texture.type === TextureType.SHADOW) {
|
|
127
|
+
floorMaterial = new ShadowMaterial(options);
|
|
128
|
+
if (texture.color) {
|
|
129
|
+
floorMaterial.color = new Color(parseInt(texture.color, 0));
|
|
130
|
+
}
|
|
131
|
+
if (texture.opacity !== null && texture.opacity !== undefined) {
|
|
132
|
+
floorMaterial.opacity = texture.opacity;
|
|
133
|
+
}
|
|
134
|
+
if (texture.transparent) {
|
|
135
|
+
floorMaterial.transparent = true;
|
|
136
|
+
}
|
|
137
|
+
if (texture.depthWrite) {
|
|
138
|
+
floorMaterial.depthWrite = true;
|
|
139
|
+
}
|
|
140
|
+
if (texture.depthTest) {
|
|
141
|
+
floorMaterial.depthTest = true;
|
|
142
|
+
}
|
|
143
|
+
if (texture.toneMapped) {
|
|
144
|
+
floorMaterial.toneMapped = true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
floorMaterial = new MeshStandardMaterial(options);
|
|
149
|
+
floorMaterial.polygonOffset = true;
|
|
150
|
+
floorMaterial.polygonOffsetFactor = 0.5;
|
|
151
|
+
floorMaterial.name = 'default_floormaterial';
|
|
152
|
+
if (texture) {
|
|
153
|
+
yield MaterialUtils.GetMaterialMaps(floorMaterial, texture);
|
|
154
|
+
// Roughness value is set to 0.8 if no value is defined, this prevents highly reflective floors
|
|
155
|
+
if (texture.color) {
|
|
156
|
+
floorMaterial.color = new Color(parseInt(texture.color, 0));
|
|
157
|
+
}
|
|
158
|
+
if (texture.emissive) {
|
|
159
|
+
floorMaterial.emissive = new Color(parseInt(texture.emissive, 0));
|
|
160
|
+
}
|
|
161
|
+
floorMaterial.roughness = !isNill(texture.roughness) ? texture.roughness : 0.8;
|
|
162
|
+
floorMaterial.metalness = !isNill(texture.metalness) ? texture.metalness : 0;
|
|
163
|
+
floorMaterial.bumpScale = !isNill(texture.bumpScale) ? texture.bumpScale : 1;
|
|
164
|
+
if (texture.mirror) {
|
|
165
|
+
floorMaterial.transparent = true;
|
|
166
|
+
floorMaterial.opacity = 1;
|
|
167
|
+
}
|
|
168
|
+
floorMaterial.needsUpdate = true;
|
|
169
|
+
}
|
|
170
|
+
floorMaterial.onBeforeCompile = floorFadeShader;
|
|
171
|
+
floorMaterial.needsUpdate = true;
|
|
172
|
+
}
|
|
173
|
+
return floorMaterial;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
_upsertFloorButtons(activeFloor) {
|
|
177
|
+
const floorButtons = [];
|
|
178
|
+
let newFloorButton;
|
|
179
|
+
this._standaloneFloors.forEach((f, index) => {
|
|
180
|
+
if (f !== activeFloor) {
|
|
181
|
+
newFloorButton = {
|
|
182
|
+
id: index,
|
|
183
|
+
elementId: `standalone_floor_${f.name}`,
|
|
184
|
+
tooltip: f.name,
|
|
185
|
+
class: 'circle',
|
|
186
|
+
show: false,
|
|
187
|
+
object: f,
|
|
188
|
+
image: this._settingsService.settings.assetPath + f.url,
|
|
189
|
+
click: (floor) => this._changeStandaloneFloor(floor)
|
|
190
|
+
};
|
|
191
|
+
floorButtons.push(newFloorButton);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const activeFloorButton = {
|
|
195
|
+
id: 10,
|
|
196
|
+
elementId: 'standalone_change_floor',
|
|
197
|
+
tooltip: 'CHANGE_FLOOR',
|
|
198
|
+
order: 8,
|
|
199
|
+
class: 'circle',
|
|
200
|
+
object: activeFloor,
|
|
201
|
+
children: floorButtons,
|
|
202
|
+
show: true,
|
|
203
|
+
image: activeFloor ? this._settingsService.settings.assetPath + activeFloor.url : ''
|
|
204
|
+
};
|
|
205
|
+
this._sceneOptionsService.updateSceneOptionButton(activeFloorButton);
|
|
206
|
+
}
|
|
207
|
+
_changeStandaloneFloor(floor) {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
// TODO floor changes texture, but the repeat is not correct
|
|
210
|
+
yield this._setFloorTexture(floor);
|
|
211
|
+
this._upsertFloorButtons(floor);
|
|
212
|
+
this._sceneService.updatePathTracer();
|
|
213
|
+
this._sceneService.needsRender = true;
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
_setFloorTexture(texture) {
|
|
217
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
218
|
+
const floorMaterial = yield this._createFloorMaterial(null, texture);
|
|
219
|
+
this._updateFloorMaterial(floorMaterial);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
_updateFloorMaterial(floorMaterial) {
|
|
223
|
+
ObjectUtils.DisposeMaterial(this._getMaterials());
|
|
224
|
+
this._setUpdatedMaterial(floorMaterial);
|
|
225
|
+
this._sceneService.needsRender = true;
|
|
226
|
+
this._sceneService.updatePathTracer();
|
|
227
|
+
}
|
|
228
|
+
_setUpdatedMaterial(material) {
|
|
229
|
+
this._floorPlane.traverse((child) => {
|
|
230
|
+
if (child instanceof Mesh) {
|
|
231
|
+
child.material = material;
|
|
232
|
+
child.material.needsUpdate = true;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
_getMaterials() {
|
|
237
|
+
const materials = [];
|
|
238
|
+
this._floorPlane.traverse((child) => {
|
|
239
|
+
if (child instanceof Mesh && child.material) {
|
|
240
|
+
materials.push(child.material);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
return materials;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
FloorPlaneService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorPlaneService, deps: [{ token: i1.SettingsService }, { token: i2.SceneService }, { token: i3.SceneOptionsService }, { token: i4.BundleInitializerService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
247
|
+
FloorPlaneService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorPlaneService, providedIn: 'root' });
|
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorPlaneService, decorators: [{
|
|
249
|
+
type: Injectable,
|
|
250
|
+
args: [{ providedIn: 'root' }]
|
|
251
|
+
}], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i2.SceneService }, { type: i3.SceneOptionsService }, { type: i4.BundleInitializerService }]; } });
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3ItcGxhbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmZpZ3VyYXRvci9zcmMvbGliL3NlcnZpY2VzL2Zsb29yLXBsYW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBQyxJQUFJLEVBQWtCLEtBQUssRUFBRSxVQUFVLEVBQVksSUFBSSxFQUFFLG9CQUFvQixFQUFZLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRXRKLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDdkYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBTWpFLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHakQsTUFBTSxPQUFPLGlCQUFpQjtJQWU1QixZQUNVLGdCQUFpQyxFQUNqQyxhQUEyQixFQUMzQixvQkFBeUMsRUFDekMseUJBQW1EO1FBSG5ELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTBCO1FBYnRELHNCQUFpQixHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUlqRixVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUUzQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3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QUFDO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUM1QyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDM0MsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OytHQXRRVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURMLE1BQU07NEZBQ2xCLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RleHR1cmV9IGZyb20gJy4uL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0JveDMsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvciwgRG91YmxlU2lkZSwgTWF0ZXJpYWwsIE1lc2gsIE1lc2hTdGFuZGFyZE1hdGVyaWFsLCBPYmplY3QzRCwgUGxhbmVHZW9tZXRyeSwgU2hhZG93TWF0ZXJpYWwsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTZXR0aW5nT3B0aW9uc30gZnJvbSAnLi4vbW9kZWwvc2V0dGluZy1vcHRpb25zJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi91dGlscy9tYXRlcmlhbC51dGlscyc7XHJcbmltcG9ydCB7aXNOaWxsfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb24nO1xyXG5pbXBvcnQge2Zsb29yRmFkZVNoYWRlcn0gZnJvbSAnLi4vY29yZS9zaGFkZXIvZmxvb3ItZmFkZS5zaGFkZXInO1xyXG5pbXBvcnQge1NjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjZW5lLW9wdGlvbi1idXR0b24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lT3B0aW9uc1NlcnZpY2V9IGZyb20gJy4vc2NlbmUtb3B0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdW5kbGVJbml0aWFsaXplclNlcnZpY2V9IGZyb20gJy4vYnVuZGxlLWluaXRpYWx6ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4uL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7VGV4dHVyZVR5cGV9IGZyb20gJy4uL2VudW0vdGV4dHVyZS10eXBlJztcclxuXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JQbGFuZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgZ2V0IGZsb29yUGxhbmUoKTogT2JqZWN0M0Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb29yUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZUNyZWF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF9zdGFuZGFsb25lRmxvb3JzOiBUZXh0dXJlW107XHJcbiAgcHJpdmF0ZSBfZmxvb3JQbGFuZTogT2JqZWN0M0Q7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc2NlbmVSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RleHR1cmVzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVPcHRpb25zU2VydmljZTogU2NlbmVPcHRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1bmRsZUluaXRpYWxpemVyU2VydmljZTogQnVuZGxlSW5pdGlhbGl6ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmVJbml0aWFsaXplZC5zdWJzY3JpYmUoYXN5bmMgKGxvYWRlZCkgPT4ge1xyXG4gICAgICAgIGlmIChsb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3NjZW5lUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVGbG9vclBsYW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fYnVuZGxlSW5pdGlhbGl6ZXJTZXJ2aWNlLmZsb29yVGV4dHVyZXNMb2FkZWQuc3Vic2NyaWJlKGFzeW5jIChsb2FkZWQpID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl90ZXh0dXJlc1JlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRmxvb3JQbGFuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gZm9yIGxvYWRpbmcgZmxvb3JwbGFuZVxyXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVGbG9vclBsYW5lKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGlmICh0aGlzLl9zY2VuZVJlYWR5ICYmIHRoaXMuX3RleHR1cmVzUmVhZHkpIHtcclxuICAgICAgdGhpcy5fc3RhbmRhbG9uZUZsb29ycyA9IHRoaXMuX2J1bmRsZUluaXRpYWxpemVyU2VydmljZS5nZXRGbG9vclRleHR1cmVzKCk7XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRGbG9vcjogVGV4dHVyZSA9IHRoaXMuX2J1bmRsZUluaXRpYWxpemVyU2VydmljZS5nZXRGbG9vclRleHR1cmUoKTtcclxuXHJcbiAgICAgIGNvbnN0IHNpemU6IG51bWJlciA9IHRoaXMuX2dldFN0YW5kYWxvbmVGbG9vclNpemUoKTtcclxuICAgICAgY29uc3QgZmxvb3JHZW9tZXRyeTogUGxhbmVHZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KHNpemUsIHNpemUpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9nZW5lcmF0ZUZsb29yUGxhbmUoJ3doaXRlJywgZGVmYXVsdEZsb29yLCBmbG9vckdlb21ldHJ5KTtcclxuXHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKGAjJHt0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3RhbmRhbG9uZVNjZW5lQmFja2dyb3VuZENvbG9yfWApO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5fc3RhbmRhbG9uZUZsb29ycyAmJiB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZGVmYXVsdEZsb29yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZsb29yUGxhbmVDcmVhdGVkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiBmb3IgZ2V0dGluZyBjZW50ZXIgZmxvb3JwbGFuZVxyXG4gIHB1YmxpYyBnZXRDZW50ZXJGbG9vclBsYW5lKCk6IFZlY3RvcjMge1xyXG4gICAgaWYgKHRoaXMuX2Zsb29yUGxhbmUpIHtcclxuICAgICAgY29uc3QgYm94OiBCb3gzID0gbmV3IEJveDMoKS5zZXRGcm9tT2JqZWN0KHRoaXMuX2Zsb29yUGxhbmUpO1xyXG4gICAgICByZXR1cm4gYm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREaW1lbnNpb25zKHNjYWxlOiBudW1iZXIgPSAxKSB7XHJcbiAgICBjb25zdCBib3g6IEJveDMgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QodGhpcy5fZmxvb3JQbGFuZSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiB7XHJcbiAgICAgICAgbWluOiBib3gubWluLnggKiBzY2FsZSxcclxuICAgICAgICBtYXg6IGJveC5tYXgueCAqIHNjYWxlXHJcbiAgICAgIH0sXHJcbiAgICAgIHk6IHtcclxuICAgICAgICBtaW46IGJveC5taW4ueSAqIHNjYWxlLFxyXG4gICAgICAgIG1heDogYm94Lm1heC55ICogc2NhbGVcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQbGFuZVNpemUoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBkaW0gPSB0aGlzLmdldERpbWVuc2lvbnMoKTtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yMyhcclxuICAgICAgZGltLngubWF4IC0gZGltLngubWluLFxyXG4gICAgICAwLFxyXG4gICAgICBkaW0ueS5tYXggLSBkaW0ueS5taW5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRTdGFuZGFsb25lRmxvb3JTaXplKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBkZWZhdWx0U2l6ZTogbnVtYmVyID0gNjtcclxuICAgIGNvbnN0IG9wdHM6IFNldHRpbmdPcHRpb25zID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlPy5zZXR0aW5ncz8ub3B0aW9ucztcclxuXHJcbiAgICBpZiAob3B0cz8udXNlQ3VzdG9tRmxvb3JTaXplKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBOdW1iZXIob3B0cy5jdXN0b21GbG9vclNpemUpO1xyXG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHMpICYmIHMgPiAwID8gcyA6IGRlZmF1bHRTaXplO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmF1bHRTaXplO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgY29sb3I6IENvbG9yIHwgc3RyaW5nIHwgbnVtYmVyLFxyXG4gICAgdGV4dHVyZT86IFRleHR1cmUsXHJcbiAgICBmbG9vckdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnlcclxuICApOiBQcm9taXNlPE9iamVjdDNEPiB7XHJcblxyXG4gICAgY29uc3QgZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5ID0gZmxvb3JHZW9tZXRyeTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICBnZW9tZXRyeS5yb3RhdGVYKE1hdGguUEkgLyAyKTtcclxuXHJcblxyXG5cclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWw6IE1lc2hTdGFuZGFyZE1hdGVyaWFsIHwgU2hhZG93TWF0ZXJpYWwgPSBhd2FpdCB0aGlzLl9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yLCB0ZXh0dXJlKTtcclxuICAgIGNvbnN0IGZsb29yTWVzaDogTWVzaCA9IG5ldyBNZXNoKGdlb21ldHJ5LCBmbG9vck1hdGVyaWFsKTtcclxuICAgIGNvbnN0IGZsb29yUGxhbmU6IE9iamVjdDNEID0gZmxvb3JNZXNoO1xyXG4gICAgZmxvb3JQbGFuZS5uYW1lID0gJ2Zsb29yLXBsYW5lJztcclxuICAgIGZsb29yUGxhbmUucmVjZWl2ZVNoYWRvdyA9IHRydWU7XHJcbiAgICBmbG9vclBsYW5lLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmbG9vckNlbnRlcjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgZmxvb3JQbGFuZS5wb3NpdGlvbi5zZXQoZmxvb3JDZW50ZXIueCwgMC4wMDAxLCBmbG9vckNlbnRlci56KTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QoZmxvb3JQbGFuZSwgZmFsc2UpO1xyXG4gICAgdGhpcy5fZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZsb29yUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yOiBDb2xvciB8IHN0cmluZyB8IG51bWJlciwgdGV4dHVyZT86IFRleHR1cmUpOiBQcm9taXNlPE1lc2hTdGFuZGFyZE1hdGVyaWFsIHwgU2hhZG93TWF0ZXJpYWw+IHtcclxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcclxuICAgICAgc2lkZTogRG91YmxlU2lkZVxyXG4gICAgfTtcclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICBvcHRpb25zLmNvbG9yID0gY29sb3I7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxldCBmbG9vck1hdGVyaWFsOiBNZXNoU3RhbmRhcmRNYXRlcmlhbCB8IFNoYWRvd01hdGVyaWFsO1xyXG4gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS50eXBlICYmIHRleHR1cmUudHlwZSA9PT0gVGV4dHVyZVR5cGUuU0hBRE9XKSB7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwgPSBuZXcgU2hhZG93TWF0ZXJpYWwob3B0aW9ucyk7XHJcbiAgICAgIGlmICh0ZXh0dXJlLmNvbG9yKSB7XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC5jb2xvciA9IG5ldyBDb2xvcihwYXJzZUludCh0ZXh0dXJlLmNvbG9yLCAwKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRleHR1cmUub3BhY2l0eSAhPT0gbnVsbCAmJiB0ZXh0dXJlLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwub3BhY2l0eSA9IHRleHR1cmUub3BhY2l0eTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGV4dHVyZS50cmFuc3BhcmVudCkge1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0ZXh0dXJlLmRlcHRoV3JpdGUpIHtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLmRlcHRoV3JpdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0ZXh0dXJlLmRlcHRoVGVzdCkge1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGV4dHVyZS50b25lTWFwcGVkKSB7XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC50b25lTWFwcGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmxvb3JNYXRlcmlhbCA9IG5ldyBNZXNoU3RhbmRhcmRNYXRlcmlhbChvcHRpb25zKTtcclxuICAgICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0ID0gdHJ1ZTtcclxuICAgICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC41O1xyXG4gICAgICBmbG9vck1hdGVyaWFsLm5hbWUgPSAnZGVmYXVsdF9mbG9vcm1hdGVyaWFsJztcclxuICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICBhd2FpdCBNYXRlcmlhbFV0aWxzLkdldE1hdGVyaWFsTWFwcyhmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgICAvLyBSb3VnaG5lc3MgdmFsdWUgaXMgc2V0IHRvIDAuOCBpZiBubyB2YWx1ZSBpcyBkZWZpbmVkLCB0aGlzIHByZXZlbnRzIGhpZ2hseSByZWZsZWN0aXZlIGZsb29yc1xyXG4gICAgICAgIGlmICh0ZXh0dXJlLmNvbG9yKSB7XHJcbiAgICAgICAgICBmbG9vck1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKHBhcnNlSW50KHRleHR1cmUuY29sb3IsIDApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRleHR1cmUuZW1pc3NpdmUpIHtcclxuICAgICAgICAgIGZsb29yTWF0ZXJpYWwuZW1pc3NpdmUgPSBuZXcgQ29sb3IocGFyc2VJbnQodGV4dHVyZS5lbWlzc2l2ZSwgMCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbG9vck1hdGVyaWFsLnJvdWdobmVzcyA9ICFpc05pbGwodGV4dHVyZS5yb3VnaG5lc3MpID8gdGV4dHVyZS5yb3VnaG5lc3MgOiAwLjg7XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC5tZXRhbG5lc3MgPSAhaXNOaWxsKHRleHR1cmUubWV0YWxuZXNzKSA/IHRleHR1cmUubWV0YWxuZXNzIDogMDtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLmJ1bXBTY2FsZSA9ICFpc05pbGwodGV4dHVyZS5idW1wU2NhbGUpID8gdGV4dHVyZS5idW1wU2NhbGUgOiAxO1xyXG5cclxuICAgICAgICBpZiAodGV4dHVyZS5taXJyb3IpIHtcclxuICAgICAgICAgIGZsb29yTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgZmxvb3JNYXRlcmlhbC5vcGFjaXR5ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZmxvb3JNYXRlcmlhbC5vbkJlZm9yZUNvbXBpbGUgPSBmbG9vckZhZGVTaGFkZXI7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZsb29yTWF0ZXJpYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cHNlcnRGbG9vckJ1dHRvbnMoYWN0aXZlRmxvb3I6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsb29yQnV0dG9uczogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2VbXSA9IFtdO1xyXG4gICAgbGV0IG5ld0Zsb29yQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZTtcclxuICAgIHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMuZm9yRWFjaCgoZiwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGYgIT09IGFjdGl2ZUZsb29yKSB7XHJcbiAgICAgICAgbmV3Rmxvb3JCdXR0b24gPSB7XHJcbiAgICAgICAgICBpZDogaW5kZXgsXHJcbiAgICAgICAgICBlbGVtZW50SWQ6IGBzdGFuZGFsb25lX2Zsb29yXyR7Zi5uYW1lfWAsXHJcbiAgICAgICAgICB0b29sdGlwOiBmLm5hbWUsXHJcbiAgICAgICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgIG9iamVjdDogZixcclxuICAgICAgICAgIGltYWdlOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgZi51cmwsXHJcbiAgICAgICAgICBjbGljazogKGZsb29yKSA9PiB0aGlzLl9jaGFuZ2VTdGFuZGFsb25lRmxvb3IoZmxvb3IpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbG9vckJ1dHRvbnMucHVzaChuZXdGbG9vckJ1dHRvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgYWN0aXZlRmxvb3JCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICBpZDogMTAsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfY2hhbmdlX2Zsb29yJyxcclxuICAgICAgdG9vbHRpcDogJ0NIQU5HRV9GTE9PUicsXHJcbiAgICAgIG9yZGVyOiA4LFxyXG4gICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgIG9iamVjdDogYWN0aXZlRmxvb3IsXHJcbiAgICAgIGNoaWxkcmVuOiBmbG9vckJ1dHRvbnMsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGltYWdlOiBhY3RpdmVGbG9vciA/IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGggKyBhY3RpdmVGbG9vci51cmwgOiAnJ1xyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oYWN0aXZlRmxvb3JCdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2hhbmdlU3RhbmRhbG9uZUZsb29yKGZsb29yOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBUT0RPIGZsb29yIGNoYW5nZXMgdGV4dHVyZSwgYnV0IHRoZSByZXBlYXQgaXMgbm90IGNvcnJlY3RcclxuICAgIGF3YWl0IHRoaXMuX3NldEZsb29yVGV4dHVyZShmbG9vcik7XHJcbiAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZmxvb3IpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zZXRGbG9vclRleHR1cmUodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZmxvb3JNYXRlcmlhbDogTWVzaFN0YW5kYXJkTWF0ZXJpYWwgfCBTaGFkb3dNYXRlcmlhbCA9IGF3YWl0IHRoaXMuX2NyZWF0ZUZsb29yTWF0ZXJpYWwobnVsbCwgdGV4dHVyZSk7XHJcbiAgICB0aGlzLl91cGRhdGVGbG9vck1hdGVyaWFsKGZsb29yTWF0ZXJpYWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRmxvb3JNYXRlcmlhbChmbG9vck1hdGVyaWFsOiBNYXRlcmlhbCk6IHZvaWQge1xyXG4gICAgT2JqZWN0VXRpbHMuRGlzcG9zZU1hdGVyaWFsKHRoaXMuX2dldE1hdGVyaWFscygpKTtcclxuICAgIHRoaXMuX3NldFVwZGF0ZWRNYXRlcmlhbChmbG9vck1hdGVyaWFsKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0VXBkYXRlZE1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZmxvb3JQbGFuZS50cmF2ZXJzZSgoY2hpbGQ6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgICBjaGlsZC5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgIGNoaWxkLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRNYXRlcmlhbHMoKTogTWF0ZXJpYWxbXSB7XHJcbiAgICBjb25zdCBtYXRlcmlhbHM6IE1hdGVyaWFsW10gPSBbXTtcclxuICAgIHRoaXMuX2Zsb29yUGxhbmUudHJhdmVyc2UoKGNoaWxkOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBNZXNoICYmIGNoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxzLnB1c2goY2hpbGQubWF0ZXJpYWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXRlcmlhbHM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|