diff --git a/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/data/shop-hall-survey-data-1.json b/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/data/shop-hall-survey-data-1.json index f442a384..c8223692 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/data/shop-hall-survey-data-1.json +++ b/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/data/shop-hall-survey-data-1.json @@ -12,13 +12,55 @@ "multiply": 7.7 }, "objects": [ + { "type": "rotSprite", + "relRotSpriteId": "fRwV2h", + "url": "/shelves-v5-store/rotSprite/fRwV2h/c-ada61/pano_$2.webp", + "urlSmall": "/shelves-v5-store/rotSprite/fRwV2h/c-ada61/pano_$2.webp", + "urlThumb": "/shelves-v5-store/rotSprie/fRwV2h/c-ada61/pano_00.webp", + "rsFrames": 36, + "rsClockwise": true, + "rsFirstRotY": -30, + "rsWidth": 5.8, + "rsHeight": 3.8, + "rsCenterY": 0.26, + "rsPlaceRotateY": 180, "position": { + "x": -4.5, + "y": 0, + "z": -2 + }, + "rotation": { "x": 0, "y": 0, "z": 0 }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + + { + "type": "rotSprite", + "relRotSpriteId": "fRwV2h", + "url": "/shelves-v5-store/rotSprite/fRwV2h/c-ada61/pano_$2.webp", + "urlSmall": "/shelves-v5-store/rotSprite/fRwV2h/c-ada61/pano_$2.webp", + "urlThumb": "/shelves-v5-store/rotSprie/fRwV2h/c-ada61/pano_00.webp", + "rsFrames": 36, + "rsClockwise": true, + "rsFirstRotY": -30, + "rsWidth": 5.8, + "rsHeight": 3.8, + "rsCenterY": 0.26, + "rsPlaceRotateY": 180, + "position": { + "x": 2, + "y": 0, + "z": -10 + }, "rotation": { "x": 0, "y": 0, diff --git a/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/rotSprites-mock-data.js b/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/rotSprites-mock-data.js index 8ed3dddb..5cc34c78 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/rotSprites-mock-data.js +++ b/src/views/Creative/3d/crossyo/shelves-vue-demo/api/mock-data/rotSprites-mock-data.js @@ -5,10 +5,29 @@ export const rotSprites = reactive({ list: [ { id: 'fRwV2h', - name: "xx", - url: `${api.storePrefix}/rotSprites/fRwV2h/seq1`, - urlSmall: `${api.storePrefix}/rotSprites/fRwV2h/seq1-small`, - urlThumb: `${api.storePrefix}/rotSpries/fRwV2h/seq1-t.png`, + name: "c-ada6l", + url: `${api.storePrefix}/rotSprite/fRwV2h/c-ada61/pano_$2.webp`, + urlSmall: `${api.storePrefix}/rotSprite/fRwV2h/c-ada61/pano_$2.webp`, + urlThumb: `${api.storePrefix}/rotSprie/fRwV2h/c-ada61/pano_00.webp`, + rsFrames: 36, + rsClockwise: true, + rsFirstRotY: -30, + rsWidth: 5.8, // 5m*1200/1034 + rsHeight: 3.8, // 800/1200 + rsCenterY: .26, // 214/800 + }, + { + id: 'LR2fN8', + name: "c-cba", + url: `${api.storePrefix}/rotSprite/LR2fN8/c-cba/pano_$2.webp`, + urlSmall: `${api.storePrefix}/rotSprite/LR2fN8/c-cba/pano_$2.webp`, + urlThumb: `${api.storePrefix}/rotSprie/LR2fN8/c-cba/pano_00.webp`, + rsFrames: 36, + rsClockwise: true, + rsFirstRotY: -30, + rsWidth: 4.78, // 4.6m*1200/1155 + rsHeight: 3.19, // 800/1200 + rsCenterY: .27, // 218/800 }, ] }) \ No newline at end of file diff --git a/src/views/Creative/3d/crossyo/shelves-vue-demo/index.vue b/src/views/Creative/3d/crossyo/shelves-vue-demo/index.vue index fd9b9c5c..e7cc2c68 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue-demo/index.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue-demo/index.vue @@ -24,13 +24,283 @@ body { /* Non-prefixed version, currently supported by Chrome, Edge, Opera and Firefox */ /* font-family: "Microsoft YaHei"; */ - font-family: monospace; + /* font-family: monospace; */ + font-family: "Microsoft YaHei"; +} + +/* Works on Firefox */ +* { + scrollbar-width: thin; + scrollbar-color: #ECECEC rgba(0, 0, 0, 0); +} + +/* Works on Chrome, Edge, and Safari */ +*::-webkit-scrollbar { + width: 4px; + height: 4px; + background: rgba(0, 0, 0, 0); + border-radius: 0; +} + +/* *::-webkit-scrollbar-track { + } */ + +*::-webkit-scrollbar-thumb { + width: 4px; + height: 4px; + background: #ECECEC; + border-radius: 0; +} + +/* Code for Firefox */ +::-moz-selection { + color: #fff; + background: #70B936; +} + +/* Code for Chrome, Edge, and Safari */ +::selection { + color: #fff; + background: #70B936; } #app { margin: 0px; } +.yo-scrollbar { + display: grid; + flex-wrap: wrap; + gap: 25px; + padding: 25px; + overflow-y: auto; + grid-template-columns: repeat(1, 1fr); +} + +.yo-scrollbar2 { + display: flex; + flex-flow: column; + /* gap: 25px; */ + padding: 25px; + overflow-y: auto; +} + +.yo-content { + display: flex; + flex-flow: column; + gap: 25px; + padding-top: 25px; +} + +.yo-thumb { + display: inline-block; + width: auto; + height: 130px; + /* color: #70B936; */ + background-color: rgba(245, 245, 245, 0.6); + border: none; + box-sizing: border-box; + border-radius: 10px; + margin: 0; + text-align: center; +} + +.yo-thumb:hover, +.yo-thumb:focus { + border: none; + cursor: pointer; + transform: scale(1.05); +} + +.yo-thumb:active { + border: none; + cursor: pointer; + transform: scale(0.95); +} + +.yo-thumb img { + width: 100%; + height: 100%; + border-radius: 10px; +} + +.yo-obj-fit-cover { + object-fit: cover; +} + +.yo-obj-fit-contain { + object-fit: contain; +} + +.ant-input { + color: #434343; +} + +.ant-input-affix-wrapper { + color: #434343; + border-color: #DFE0E3; + background: #FEFFFE; + border-radius: 6px; + padding-left: 4px; +} + +.ant-input-affix-wrapper:hover { + border-color: #70B936; +} + +.ant-input-affix-wrapper img { + width: 24px; +} + +.ant-input-affix-wrapper-focused { + box-shadow: none; +} + +.ant-input-affix-wrapper .ant-input-prefix, +.ant-input-affix-wrapper .ant-input-suffix { + color: #7E7E7E; + font-size: 12px; +} + +.ant-select-selection-item{ + background-color: red; +} + +.ant-slider-rail { + height: 6px; + background: #ECECEC; + border-radius: 3px; +} + +.ant-slider-track { + height: 6px; + background: #7EC04A; + border-radius: 3px; +} + +.ant-slider-handle { + width: 20px; + height: 20px; + margin-top: -7px; + background: #7EC04A; + border: 4px solid #DFF4D0; +} + +.ant-slider-handle:focus { + border-color: #DFF4D0; + box-shadow: none; +} + +.ant-slider-handle.ant-tooltip-open { + border-color: #DFF4D0; +} + +.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) { + border-color: #DFF4D0; +} + +.ant-slider-step { + height: 6px; +} + +.ant-slider:hover .ant-slider-rail { + background: #ECECEC; +} + +.ant-slider:hover .ant-slider-track { + background: #7EC04A; +} + +.ant-tooltip-inner { + color: #fff; + background: #808080; + border-radius: 2px; + font-size: 12px; + line-height: 18px; + box-shadow: none; +} + +.ant-radio-button-wrapper { + color: #434343; + border: none; + background: #f9f9f9; +} + +.ant-radio-button-wrapper:hover { + color: #7EC04A; + background: #f9f9f9; +} + +/* .ant-radio-button-wrapper:active { + color: #7EC04A; + background: #f9f9f9; +} */ + +.ant-radio-button-wrapper:first-child { + border: none; + border-radius: 6px 0 0 6px; +} + +.ant-radio-button-wrapper:last-child { + border: none; + border-radius: 0 6px 6px 0; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + color: #ffffff; + background: #7EC04A; + border: none; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + color: #ffffff; + background: #7EC04A; + border: none; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within { + box-shadow: none; +} + +.ant-radio-button-wrapper:not(:first-child)::before { + background: none; +} + +.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before { + background: none; +} + +.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before { + background: none; +} + +.ant-divider { + color: #F5F5F5; + margin: 0; +} + +.empty1 { + font-size: 14px; + font-weight: 400; + letter-spacing: 2px; + color: #434343; + text-align: center; +} + +.yo-title-s16 { + font-size: 16px; + font-weight: 600; + letter-spacing: 2px; + color: #434343; +} + +.yo-title-s14 { + font-size: 14px; + font-weight: 400; + letter-spacing: 2px; + color: #434343; +} + .yo-icon img { width: 100%; height: 100%; @@ -120,7 +390,8 @@ body { padding-right: 24px; } -.el-input-number--small .el-input-number__decrease, .el-input-number--small .el-input-number__increase { +.el-input-number--small .el-input-number__decrease, +.el-input-number--small .el-input-number__increase { width: 16px; font-size: 11px; } @@ -146,5 +417,4 @@ body { } /* antdv */ - \ No newline at end of file diff --git a/src/views/Creative/3d/crossyo/shelves-vue-demo/view/ShopEditorDemo.vue b/src/views/Creative/3d/crossyo/shelves-vue-demo/view/ShopEditorDemo.vue index f7e47fb0..66469f23 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue-demo/view/ShopEditorDemo.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue-demo/view/ShopEditorDemo.vue @@ -44,7 +44,7 @@ - + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.png b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.png new file mode 100644 index 00000000..fff8d626 Binary files /dev/null and b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.png differ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.svg new file mode 100644 index 00000000..34481a7e --- /dev/null +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/cube.svg @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.png b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.png new file mode 100644 index 00000000..4444c690 Binary files /dev/null and b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.png differ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.svg new file mode 100644 index 00000000..1c2f055c --- /dev/null +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/home.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/image.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/image.svg index 22ae023f..7a494ab8 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/image.svg +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/image.svg @@ -2,25 +2,29 @@ + width="460px" height="260px" viewBox="0 0 460 260" enable-background="new 0 0 460 260" xml:space="preserve"> + - - - + + - - + + - + C221.296,143.149,235.586,129.319,249.626,115.249z"/> + +上传图片 diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.png b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.png index 3f473074..96168b2c 100644 Binary files a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.png and b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.png differ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.svg index b0708b7c..d0a4ba08 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.svg +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/item.svg @@ -4,17 +4,14 @@ - - - + + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.png b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.png new file mode 100644 index 00000000..74831a64 Binary files /dev/null and b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.png differ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.svg new file mode 100644 index 00000000..f77b2b48 --- /dev/null +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/search.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.png b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.png index 96168b2c..3f473074 100644 Binary files a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.png and b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.png differ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.svg b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.svg index d0a4ba08..b0708b7c 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.svg +++ b/src/views/Creative/3d/crossyo/shelves-vue/asset/icon2/ware.svg @@ -4,14 +4,17 @@ - - + + + diff --git a/src/views/Creative/3d/crossyo/shelves-vue/components/comp/Vec3Comp.vue b/src/views/Creative/3d/crossyo/shelves-vue/components/comp/Vec3Comp.vue index bad089c7..37793d0e 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/components/comp/Vec3Comp.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue/components/comp/Vec3Comp.vue @@ -1,18 +1,20 @@ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/SceneShopEditor.vue b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/SceneShopEditor.vue index 416b0fc6..83af905c 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/SceneShopEditor.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/SceneShopEditor.vue @@ -3,7 +3,7 @@
- + + + + + 移动 + 旋转 + 缩放 + +
- + + + + 全景 + 环绕 +
- --> \ No newline at end of file diff --git a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListShelf.vue b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListShelf.vue index 189d5c04..3f5c74d8 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListShelf.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListShelf.vue @@ -1,20 +1,26 @@ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListWare.vue b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListWare.vue index edb4f4ae..67d1e0db 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListWare.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabListWare.vue @@ -1,20 +1,27 @@ diff --git a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabPropCellWare.vue b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabPropCellWare.vue index 7a227af0..0e03e441 100644 --- a/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabPropCellWare.vue +++ b/src/views/Creative/3d/crossyo/shelves-vue/components/editor/TabPropCellWare.vue @@ -1,28 +1,22 @@ diff --git a/src/views/Creative/Creation.vue b/src/views/Creative/Creation.vue index 2c1baa71..bf41d95b 100644 --- a/src/views/Creative/Creation.vue +++ b/src/views/Creative/Creation.vue @@ -30,6 +30,8 @@ onMounted(async () => { \ No newline at end of file diff --git a/src/views/Creative/components/Create3D.constant.js b/src/views/Creative/components/Create3D.constant.js new file mode 100644 index 00000000..e5bb7712 --- /dev/null +++ b/src/views/Creative/components/Create3D.constant.js @@ -0,0 +1,945 @@ +export const CREATIVE_TYPE = { + THREE_D: 1, + RING_360: 2, + MODEL_3D: 3, +}; + +export const CREATIVE_TYPE_S = [ + { + type: CREATIVE_TYPE.THREE_D, + name: "3D虚拟门店" + }, + { + type: CREATIVE_TYPE.RING_360, + name: "3D环物" + }, + { + type: CREATIVE_TYPE.MODEL_3D, + name: "3D商品模型" + }, +]; + + +const factorys = [ + { + type: CREATIVE_TYPE.THREE_D, + build: (data) => { + return { + "planetid": "scene1", + "name": "场景1", + + "arrangementId": "bsld2da4", + "relShopId": "sllqkj4l", + "panorama": { + "url": "", + "urlSmall": "", + "urlThumb": "", + "urlDepth": "", + "urlShelfExr": "", + "rotationY": 0, + "multiply": 3 + }, + "shelves": [ + { + "name": "货架1", + "planetid": "shelf1", + + "id": "shelf1", + "url": "", + "urlThumb": "", + "hideWhenSurvey": true, + "cells": [ + + { + "name": "0-1", + "box": { + "position": { + "x": -0.6093719155636137, + "y": 1.1925115714503842, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.029369916622918046, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "0-2", + "box": { + "position": { + "x": -0.18520626992561548, + "y": 1.1908614160723439, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.03174731410176801, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "0-3", + "box": { + "position": { + "x": 0.2287325535366465, + "y": 1.1892382329257407, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.028571714546698213, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "0-4", + "box": { + "position": { + "x": 0.661393068886308, + "y": 1.1909523674363642, + "z": 0.4537964589333506 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.03136253199426353, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "1-1", + "box": { + "position": { + "x": -0.605500512913119, + "y": 0.8538858659191146, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.0027324557304382324, + "y": -0.03184773059511403, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.1499999999999999, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "1-2", + "box": { + "position": { + "x": -0.18658027999214435, + "y": 0.8512643658064176, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": 0, + "y": -0.02759083972388149, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.1499999999999999, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "1-3", + "box": { + "position": { + "x": 0.2230628973331703, + "y": 0.8511807287232012, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.005585700273513794, + "y": -0.032213962561231047, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.1499999999999999, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "1-4", + "box": { + "position": { + "x": 0.6551478924840007, + "y": 0.8483097259524031, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.02673691703609271, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "2-1", + "box": { + "position": { + "x": -0.60433011332925, + "y": 0.5125224579062782, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.0027324557304382324, + "y": -0.034508354476310954, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "2-2", + "box": { + "position": { + "x": -0.1914175066620415, + "y": 0.5095275839341008, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": 0, + "y": -0.027170852492222397, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "2-3", + "box": { + "position": { + "x": 0.22360906333448538, + "y": 0.5101818344822482, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.005585700273513794, + "y": -0.030842453533999448, + "z": 0.1743204391002655 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "2-4", + "box": { + "position": { + "x": 0.6482247451401058, + "y": 0.504394091002413, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.02471250348374021, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "3-1", + "box": { + "position": { + "x": -0.6134215690979794, + "y": 0.1945505440235138, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.0027324557304382324, + "y": -0.024228371171756358, + "z": 0.1846828854084015 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "3-2", + "box": { + "position": { + "x": -0.19111044416229633, + "y": 0.1945505440235138, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": 0, + "y": -0.021009267483951266, + "z": 0.1846828854084015 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "3-3", + "box": { + "position": { + "x": 0.21581759477578777, + "y": 0.1945505440235138, + "z": 0.45017966628074646 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "size": { + "x": 0.37358155846595764, + "y": 0.225911445915699, + "z": 0.21794167160987854 + }, + "child": { + "sign": { + "position": { + "x": -0.005585700273513794, + "y": -0.020448554878266023, + "z": 0.1846828854084015 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 0.7393795847892761, + "y": 0.05661093816161156, + "z": 0.05661093816161156 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15000000000000002, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + }, + { + "name": "3-4", + "box": { + "position": { + "x": 0.6432047193626257, + "y": 0.19147498005043284, + "z": 0.45 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "size": { + "x": 0.3736, + "y": 0.2259, + "z": 0.2179 + }, + "child": { + "sign": { + "position": { + "x": -0.006, + "y": -0.013996807328698846, + "z": 0.1847 + }, + "rotation": { + "x": 0, + "y": 0, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + } + }, + "logo": { + "position": { + "x": 0, + "y": 0.15, + "z": 0 + } + } + } + }, + "pileNumber": 2, + "pileRotationY": 0 + } + ], + "position": { + "x": 2.5193034425825944, + "y": -1.0605054800098004, + "z": 4.5102810375396984e-17 + }, + "rotation": { + "x": 0, + "y": -1.5707963267948966, + "z": 0 + }, + "scale": { + "x": 1, + "y": 1, + "z": 1 + }, + + "wares": [] + } + ] + } + } + }, + { + type: CREATIVE_TYPE.RING_360, + build: (data) => { + + } + }, + { + type: CREATIVE_TYPE.MODEL_3D, + build: (data) => { + + } + }, +]; + +export const buildData = (data) => { + + var factory = factorys.find(x => x.type == data.type); + + if (!factory) throw new Error("Create3D.constant: 未找到素材数据构造方法"); + + return factory.build(data); +}; diff --git a/src/views/Creative/components/Create3D.vue b/src/views/Creative/components/Create3D.vue new file mode 100644 index 00000000..29d1765d --- /dev/null +++ b/src/views/Creative/components/Create3D.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/src/views/Creative/components/Header.vue b/src/views/Creative/components/Header.vue deleted file mode 100644 index d49a3d3f..00000000 --- a/src/views/Creative/components/Header.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Creative/lib/shelves.module.js b/src/views/Creative/lib/shelves.module.js index 96f15249..1fe35a7d 100644 --- a/src/views/Creative/lib/shelves.module.js +++ b/src/views/Creative/lib/shelves.module.js @@ -403,6 +403,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src-kutsi/crossyo/kutsi/util/frame/ViewTransformDetector.js": +/*!*********************************************************************!*\ + !*** ./src-kutsi/crossyo/kutsi/util/frame/ViewTransformDetector.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ViewTransformDetector\": () => (/* binding */ ViewTransformDetector)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\n// #20220212, for smart-farm\r\n// #20220626 ObserveCameraHelper -> ViewTransformDetector\r\n// #20221216 shelves add useTarget = false\r\nclass ViewTransformDetector {\r\n\r\n constructor(deltaRatio = 1 / 1000, useTarget = true) {\r\n\r\n this.deltaRatio_ = deltaRatio\r\n this.use_target_ = useTarget\r\n\r\n this.prev_pos_ = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3()\r\n this.prev_tgt_ = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3()\r\n\r\n this.prev_pos_1_ = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3()\r\n this.prev_tgt_1_ = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3()\r\n }\r\n\r\n roundVector3__(vec3, dist) {\r\n return new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(Math.round(vec3.x / dist), Math.round(vec3.y / dist), Math.round(vec3.z / dist))\r\n }\r\n\r\n // 通知订阅\r\n // update(viewer, ) {\r\n // }\r\n\r\n // 计算返回\r\n updateResult(viewer) {\r\n\r\n let result = null\r\n\r\n let controls = viewer.controls_\r\n // let position = controls.object.getWorldPosition(new Vector3())\r\n let position = controls.object.position\r\n let target = controls.target\r\n // let dist = new Vector3().subVectors(position, target).length()\r\n let dist = viewer.controls_distance_.value\r\n\r\n // controls\r\n {\r\n\r\n let pos_1 = null\r\n let tgt_1 = null\r\n let delta = 0\r\n\r\n if (this.deltaRatio_ > 0) {\r\n\r\n delta = dist * this.deltaRatio_\r\n\r\n pos_1 = this.roundVector3__(position, delta)\r\n tgt_1 = this.use_target_ ? this.roundVector3__(target, delta) : null\r\n\r\n } else {\r\n\r\n pos_1 = position.clone()\r\n tgt_1 = this.use_target_ ? target.clone() : null\r\n\r\n }\r\n\r\n if (this.use_target_) {\r\n if (!pos_1.equals(this.prev_pos_1_) || !tgt_1.equals(this.prev_tgt_1_)) {\r\n result = {\r\n delta,\r\n position,\r\n target,\r\n dist,\r\n }\r\n\r\n this.prev_pos_1_ = pos_1\r\n this.prev_tgt_1_ = tgt_1\r\n }\r\n } else {\r\n if (!pos_1.equals(this.prev_pos_1_)) {\r\n result = {\r\n delta,\r\n position,\r\n // target,\r\n // dist,\r\n }\r\n\r\n this.prev_pos_1_ = pos_1\r\n // this.prev_tgt_1_ = tgt_1\r\n }\r\n }\r\n\r\n }\r\n\r\n return result\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src-kutsi/crossyo/kutsi/util/frame/ViewTransformDetector.js?"); + +/***/ }), + /***/ "./src-kutsi/crossyo/kutsi/util/frame/caches.js": /*!******************************************************!*\ !*** ./src-kutsi/crossyo/kutsi/util/frame/caches.js ***! @@ -421,7 +432,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BaseShelve\": () => (/* binding */ BaseShelve),\n/* harmony export */ \"CELL_HIERARCHY\": () => (/* binding */ CELL_HIERARCHY),\n/* harmony export */ \"HIERARCHY_TYPE\": () => (/* binding */ HIERARCHY_TYPE),\n/* harmony export */ \"parse_v3_cells_from_v1_shelf_model_\": () => (/* binding */ parse_v3_cells_from_v1_shelf_model_)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_CommoditiesCache__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/CommoditiesCache */ \"./src/crossyo/shelves/common/CommoditiesCache.js\");\n/* harmony import */ var _common_TexturesCache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/TexturesCache */ \"./src/crossyo/shelves/common/TexturesCache.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst HIERARCHY_TYPE = {\r\n STANDALONE: 1,\r\n INHERITED: 2,\r\n}\r\n\r\nconst CELL_HIERARCHY = HIERARCHY_TYPE.INHERITED\r\n\r\nclass BaseShelve {\r\n\r\n constructor(viewer) {\r\n\r\n this.viewer_ = viewer\r\n this.commodities_cache_ = new _common_CommoditiesCache__WEBPACK_IMPORTED_MODULE_0__.CommoditiesCache(viewer)\r\n this.textures_cache_ = new _common_TexturesCache__WEBPACK_IMPORTED_MODULE_1__.TexturesCache(viewer)\r\n }\r\n\r\n get_texture_url_(texture) {\r\n if (texture) {\r\n return _common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile ? texture.urlSmall : texture.url\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n get_commodity_url_(commodity) {\r\n if (!_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile) {\r\n return commodity.url\r\n } else { // mobile\r\n return commodity.urlSmall || commodity.url \r\n }\r\n }\r\n\r\n removeWareFromCell(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n let c_o3d__ = ext.get_c_o3d__ ? ext.get_c_o3d__() : null\r\n if (c_o3d__) {\r\n\r\n if (!ext.origin_o3d_url__\r\n && !ext.origin_tex_url__\r\n ) {\r\n console.log('SAME!!')\r\n return\r\n } else {\r\n console.log('REMOVE PREV!!' /*, commodity.url*/, ext.origin_o3d_url__)\r\n // remove previous!\r\n // ext.$c_o3d__.removeFromParent()\r\n // ext.$c_o3d__ = null\r\n\r\n c_o3d__.removeFromParent()\r\n\r\n ext.origin_o3d_url__ = null\r\n ext.$origin_o3d__ = null\r\n ext.origin_tex_url__ = null\r\n ext.$origin_tex__ = null\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n addWareToCell(ware, cell) {\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n let commodity = ware.commodity\r\n let texture = ware.texture // maybe null!\r\n \r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n let c_o3d__ = ext.get_c_o3d__ ? ext.get_c_o3d__() : null\r\n if (c_o3d__) {\r\n\r\n if (this.get_commodity_url_(commodity) == ext.origin_o3d_url__\r\n && this.get_texture_url_(texture) == ext.origin_tex_url__\r\n ) {\r\n console.log('SAME!!')\r\n return\r\n } else {\r\n console.log('REMOVE PREV!!', this.get_commodity_url_(commodity), ext.origin_o3d_url__)\r\n // remove previous!\r\n // ext.$c_o3d__.removeFromParent()\r\n // ext.$c_o3d__ = null\r\n\r\n c_o3d__.removeFromParent()\r\n\r\n ext.origin_o3d_url__ = null\r\n ext.$origin_o3d__ = null\r\n ext.origin_tex_url__ = null\r\n ext.$origin_tex__ = null\r\n }\r\n\r\n }\r\n\r\n this.commodities_cache_.find(this.get_commodity_url_(commodity)).then(o3d_nt => {\r\n this.textures_cache_.find(texture).then(tex => {\r\n\r\n ext.$origin_tex__ = tex\r\n ext.origin_tex_url__ = this.get_texture_url_(texture)\r\n\r\n let o3d = o3d_nt.clone()\r\n\r\n o3d.name = o3d_nt.name + '-mat'\r\n if (o3d.material) {\r\n o3d.material = o3d.material.clone()\r\n if (tex) {\r\n o3d.material.map = tex\r\n }\r\n } else { // #20220729, mesh in children\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n c.material = c.material.clone() // case 自己上传的独特商品\r\n if (tex) {\r\n console.warn('#20220729, un confirmed path, 291G9J81LO1!')\r\n c.material.map = tex\r\n }\r\n }\r\n })\r\n }\r\n\r\n // ext.$origin_o3d__ = o3d\r\n ext.get_origin_o3d__ = () => {\r\n return o3d\r\n }\r\n ext.origin_o3d_url__ = this.get_commodity_url_(commodity)\r\n // container!\r\n let c_o3d = new three__WEBPACK_IMPORTED_MODULE_3__.Object3D()\r\n c_o3d.name = 'cell__'\r\n // ext.$c_o3d__ = c_o3d\r\n ext.get_c_o3d__ = () => {\r\n return c_o3d\r\n }\r\n\r\n let box = cell.box\r\n c_o3d.position.set(box.position.x, box.position.y, box.position.z)\r\n c_o3d.rotation.set(box.rotation.x, box.rotation.y, box.rotation.z)\r\n this.viewer_.mesh_shelf__.add(c_o3d)\r\n\r\n // console.log(this.viewer_.mesh_shelf__)\r\n\r\n this.update_cell_pileNumber_(cell)\r\n\r\n resolve()\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n\r\n })\r\n\r\n\r\n }\r\n\r\n // with pile rotation y\r\n update_cell_pileNumber_(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n if (ext.get_c_o3d__) {\r\n\r\n let c_o3d__ = ext.get_c_o3d__()\r\n if (c_o3d__) {\r\n\r\n let old_number = c_o3d__.children.length\r\n let new_number = cell.pileNumber\r\n\r\n // console.log('update_pile_number', old_number, new_number)\r\n\r\n if (old_number != new_number) {\r\n c_o3d__.clear()\r\n\r\n let exto = ext.get_origin_o3d__()\r\n\r\n let size = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.box3_except_shadow)(exto).getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let sw = size.x\r\n\r\n if (cell.pileNumber == 6) { // temp for v3.5\r\n\r\n let w = sw * (3 - 1)\r\n for (let i = 0; i < new_number; i++) {\r\n\r\n let co = exto.clone()\r\n co.name = exto.name + '-' + i\r\n\r\n if (i < 3) {\r\n co.position.x = i * sw - w / 2\r\n co.position.z = sw / 2\r\n } else {\r\n co.position.x = (i - 3) * sw - w / 2\r\n co.position.z = - sw / 2\r\n }\r\n c_o3d__.add(co)\r\n co.rotation.y = cell.pileRotationY * Math.PI / 180\r\n\r\n\r\n // console.log('#2', exto, co)\r\n\r\n }\r\n\r\n } else {\r\n\r\n let w = sw * (new_number - 1)\r\n for (let i = 0; i < new_number; i++) {\r\n\r\n let co = exto.clone()\r\n co.name = exto.name + '-' + i\r\n\r\n co.position.x = i * sw - w / 2\r\n c_o3d__.add(co)\r\n co.rotation.y = cell.pileRotationY * Math.PI / 180\r\n\r\n // console.log('#2', exto, co)\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n } else {\r\n console.warn('sk324kFdfkP34k;ls3k!')\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n update_cell_pileRotationY_(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n\r\n if (ext.get_c_o3d__) {\r\n\r\n let c_o3d__ = ext.get_c_o3d__()\r\n if (c_o3d__) {\r\n\r\n // console.log('update_pileRotationY', ext.$c_o3d__, cell.pileRotationY)\r\n c_o3d__.children.forEach(c => {\r\n c.rotation.y = cell.pileRotationY * Math.PI / 180\r\n })\r\n\r\n } else {\r\n console.warn('UIH4329HJPmk023lKQb!')\r\n }\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n dispose() {\r\n this.commodities_cache_.dispose()\r\n this.textures_cache_.dispose()\r\n }\r\n\r\n}\r\n\r\n\r\n// TEMP for v1 to v3, 解些老的数据,并且生成新的cells数据,copy to store/shelves 列表中\r\nconst parse_v3_cells_from_v1_shelf_model_ = o3d => {\r\n\r\n console.log('## parse_v3_cells_from_v1_shelf_model_')\r\n\r\n let boxes = []\r\n let signs = []\r\n o3d.traverse(c => {\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n // console.log(c)\r\n boxes.push(c)\r\n } else if (/^sign-\\d-\\d/.test(c.name)) {\r\n // console.log(c)\r\n signs.push(c)\r\n }\r\n })\r\n if (boxes.length != signs.length) {\r\n console.warn('boxes len != signs len')\r\n return\r\n }\r\n boxes.sort((a, b) => {\r\n return a.name.localeCompare(b.name)\r\n })\r\n signs.sort((a, b) => {\r\n return a.name.localeCompare(b.name)\r\n })\r\n\r\n // console.log(boxes, signs)\r\n\r\n let to_box_scale_ = (t, box) => {\r\n // console.log('box', box, box.geometry.boundingBox, box.geometry.boundingBox.getSize(new Vector3()))\r\n t.size = box.geometry.boundingBox.getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n // console.log(t)\r\n return t\r\n }\r\n\r\n let cells = []\r\n for (let i = 0; i < boxes.length; i++) {\r\n let box = boxes[i]\r\n let sign = signs[i]\r\n\r\n // let bbx1 = box.geometry.boundingBox\r\n // bbx1.applyMatrix4(box.matrix)\r\n\r\n let cell = {\r\n name: box.name.substr(4),\r\n // 底面中心\r\n box: to_box_scale_((0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(box), box),\r\n }\r\n\r\n if (CELL_HIERARCHY == HIERARCHY_TYPE.STANDALONE) {\r\n // 中心\r\n cell.sign = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(sign)\r\n cell.sign.position.z += .01\r\n cell.logo = { // #20220611\r\n position: {\r\n x: box.position.x,\r\n y: box.position.y + .15,\r\n z: box.position.z\r\n }\r\n }\r\n } else if (CELL_HIERARCHY == HIERARCHY_TYPE.INHERITED) {\r\n\r\n let t_sign = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(sign)\r\n t_sign.position.x -= cell.box.position.x\r\n t_sign.position.y -= cell.box.position.y\r\n t_sign.position.z -= cell.box.position.z\r\n t_sign.position.z += .01\r\n\r\n t_sign.rotation.x = t_sign.rotation.y = t_sign.rotation.z = 0\r\n\r\n cell.box.child = {\r\n sign: t_sign,\r\n logo: { // #20220611\r\n position: {\r\n x: box.position.x - cell.box.position.x,\r\n y: box.position.y + .15 - cell.box.position.y,\r\n z: box.position.z - cell.box.position.z,\r\n },\r\n },\r\n }\r\n\r\n }\r\n\r\n cells.push(cell)\r\n }\r\n\r\n // KLUDGE 记录数据\r\n // console.log('copy to ../shelves-vue-demo/store/shelf?_cells.json')\r\n console.log('cells', JSON.stringify(cells))\r\n\r\n return cells\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/BaseShelve.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BaseShelve\": () => (/* binding */ BaseShelve),\n/* harmony export */ \"CELL_HIERARCHY\": () => (/* binding */ CELL_HIERARCHY),\n/* harmony export */ \"HIERARCHY_TYPE\": () => (/* binding */ HIERARCHY_TYPE),\n/* harmony export */ \"parse_v3_cells_from_v1_shelf_model_\": () => (/* binding */ parse_v3_cells_from_v1_shelf_model_)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_CommoditiesCache__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/CommoditiesCache */ \"./src/crossyo/shelves/common/CommoditiesCache.js\");\n/* harmony import */ var _common_TexturesCache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/TexturesCache */ \"./src/crossyo/shelves/common/TexturesCache.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst HIERARCHY_TYPE = {\r\n STANDALONE: 1,\r\n INHERITED: 2,\r\n}\r\n\r\nconst CELL_HIERARCHY = HIERARCHY_TYPE.INHERITED\r\n\r\nclass BaseShelve {\r\n\r\n constructor(viewer) {\r\n\r\n this.viewer_ = viewer\r\n this.commodities_cache_ = new _common_CommoditiesCache__WEBPACK_IMPORTED_MODULE_0__.CommoditiesCache(viewer)\r\n this.textures_cache_ = new _common_TexturesCache__WEBPACK_IMPORTED_MODULE_1__.TexturesCache(viewer)\r\n }\r\n\r\n get_texture_url_(texture) {\r\n if (texture) {\r\n return _common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile ? texture.urlSmall : texture.url\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n get_commodity_url_(commodity) {\r\n if (!_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile) {\r\n return commodity.url\r\n } else { // mobile\r\n return commodity.urlSmall || commodity.url \r\n }\r\n }\r\n\r\n removeWareFromCell(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n let c_o3d__ = ext.get_c_o3d__ ? ext.get_c_o3d__() : null\r\n if (c_o3d__) {\r\n\r\n if (!ext.origin_o3d_url__\r\n && !ext.origin_tex_url__\r\n ) {\r\n console.log('SAME!!')\r\n return\r\n } else {\r\n console.log('REMOVE PREV!!' /*, commodity.url*/, ext.origin_o3d_url__)\r\n // remove previous!\r\n // ext.$c_o3d__.removeFromParent()\r\n // ext.$c_o3d__ = null\r\n\r\n c_o3d__.removeFromParent()\r\n\r\n ext.origin_o3d_url__ = null\r\n ext.$origin_o3d__ = null\r\n ext.origin_tex_url__ = null\r\n ext.$origin_tex__ = null\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n addWareToCell(ware, cell) {\r\n\r\n return new Promise((resolve, reject) => {\r\n\r\n let commodity = ware.commodity\r\n let texture = ware.texture // maybe null!\r\n \r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n let c_o3d__ = ext.get_c_o3d__ ? ext.get_c_o3d__() : null\r\n if (c_o3d__) {\r\n\r\n if (this.get_commodity_url_(commodity) == ext.origin_o3d_url__\r\n && this.get_texture_url_(texture) == ext.origin_tex_url__\r\n ) {\r\n console.log('SAME!!')\r\n return\r\n } else {\r\n console.log('REMOVE PREV!!', this.get_commodity_url_(commodity), ext.origin_o3d_url__)\r\n // remove previous!\r\n // ext.$c_o3d__.removeFromParent()\r\n // ext.$c_o3d__ = null\r\n\r\n c_o3d__.removeFromParent()\r\n\r\n ext.origin_o3d_url__ = null\r\n ext.$origin_o3d__ = null\r\n ext.origin_tex_url__ = null\r\n ext.$origin_tex__ = null\r\n }\r\n\r\n }\r\n\r\n this.commodities_cache_.find(this.get_commodity_url_(commodity)).then(o3d_nt => {\r\n this.textures_cache_.find(texture).then(tex => {\r\n\r\n ext.$origin_tex__ = tex\r\n ext.origin_tex_url__ = this.get_texture_url_(texture)\r\n\r\n let o3d = o3d_nt.clone()\r\n\r\n o3d.name = o3d_nt.name + '-mat'\r\n if (o3d.material) {\r\n o3d.material = o3d.material.clone()\r\n if (tex) {\r\n o3d.material.map = tex\r\n }\r\n } else { // #20220729, mesh in children\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n c.material = c.material.clone() // case 自己上传的独特商品\r\n if (tex) {\r\n console.warn('#20220729, un confirmed path, 291G9J81LO1!')\r\n c.material.map = tex\r\n }\r\n }\r\n })\r\n }\r\n\r\n // ext.$origin_o3d__ = o3d\r\n ext.get_origin_o3d__ = () => {\r\n return o3d\r\n }\r\n ext.origin_o3d_url__ = this.get_commodity_url_(commodity)\r\n // container!\r\n let c_o3d = new three__WEBPACK_IMPORTED_MODULE_3__.Object3D()\r\n c_o3d.name = 'cell__'\r\n // ext.$c_o3d__ = c_o3d\r\n ext.get_c_o3d__ = () => {\r\n return c_o3d\r\n }\r\n\r\n let box = cell.box\r\n c_o3d.position.set(box.position.x, box.position.y, box.position.z)\r\n c_o3d.rotation.set(box.rotation.x, box.rotation.y, box.rotation.z)\r\n this.viewer_.mesh_shelf__.add(c_o3d)\r\n\r\n // console.log('## add', o3d, c_o3d, this.viewer_.mesh_shelf__)\r\n\r\n this.update_cell_pileNumber_(cell)\r\n\r\n resolve()\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n\r\n })\r\n\r\n\r\n }\r\n\r\n // with pile rotation y\r\n update_cell_pileNumber_(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n if (ext.get_c_o3d__) {\r\n\r\n let c_o3d__ = ext.get_c_o3d__()\r\n if (c_o3d__) {\r\n\r\n let old_number = c_o3d__.children.length\r\n let new_number = cell.pileNumber\r\n\r\n console.log('update_pile_number', old_number, new_number)\r\n\r\n if (old_number != new_number) {\r\n c_o3d__.clear()\r\n\r\n let exto = ext.get_origin_o3d__()\r\n\r\n let size = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.box3_except_shadow)(exto).getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let sw = size.x\r\n\r\n if (cell.pileNumber == 6) { // temp for v3.5\r\n\r\n let w = sw * (3 - 1)\r\n for (let i = 0; i < new_number; i++) {\r\n\r\n let co = exto.clone()\r\n co.name = exto.name + '-' + i\r\n\r\n if (i < 3) {\r\n co.position.x = i * sw - w / 2\r\n co.position.z = sw / 2\r\n } else {\r\n co.position.x = (i - 3) * sw - w / 2\r\n co.position.z = - sw / 2\r\n }\r\n c_o3d__.add(co)\r\n co.rotation.y = cell.pileRotationY * Math.PI / 180\r\n\r\n\r\n // console.log('#2', exto, co)\r\n\r\n }\r\n\r\n } else {\r\n\r\n let w = sw * (new_number - 1)\r\n for (let i = 0; i < new_number; i++) {\r\n\r\n let co = exto.clone()\r\n co.name = exto.name + '-' + i\r\n\r\n co.position.x = i * sw - w / 2\r\n c_o3d__.add(co)\r\n co.rotation.y = cell.pileRotationY * Math.PI / 180\r\n\r\n // console.log('#2', exto, co)\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n } else {\r\n console.warn('sk324kFdfkP34k;ls3k!')\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n update_cell_pileRotationY_(cell) {\r\n\r\n let ext = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.use_ext)(cell)\r\n\r\n if (ext.get_c_o3d__) {\r\n\r\n let c_o3d__ = ext.get_c_o3d__()\r\n if (c_o3d__) {\r\n\r\n // console.log('update_pileRotationY', ext.$c_o3d__, cell.pileRotationY)\r\n c_o3d__.children.forEach(c => {\r\n c.rotation.y = cell.pileRotationY * Math.PI / 180\r\n })\r\n\r\n } else {\r\n console.warn('UIH4329HJPmk023lKQb!')\r\n }\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n dispose() {\r\n this.commodities_cache_.dispose()\r\n this.textures_cache_.dispose()\r\n }\r\n\r\n}\r\n\r\n\r\n// TEMP for v1 to v3, 解些老的数据,并且生成新的cells数据,copy to store/shelves 列表中\r\nconst parse_v3_cells_from_v1_shelf_model_ = o3d => {\r\n\r\n console.log('## parse_v3_cells_from_v1_shelf_model_')\r\n\r\n let boxes = []\r\n let signs = []\r\n o3d.traverse(c => {\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n // console.log(c)\r\n boxes.push(c)\r\n } else if (/^sign-\\d-\\d/.test(c.name)) {\r\n // console.log(c)\r\n signs.push(c)\r\n }\r\n })\r\n if (boxes.length != signs.length) {\r\n console.warn('boxes len != signs len')\r\n return\r\n }\r\n boxes.sort((a, b) => {\r\n return a.name.localeCompare(b.name)\r\n })\r\n signs.sort((a, b) => {\r\n return a.name.localeCompare(b.name)\r\n })\r\n\r\n // console.log(boxes, signs)\r\n\r\n let to_box_scale_ = (t, box) => {\r\n // console.log('box', box, box.geometry.boundingBox, box.geometry.boundingBox.getSize(new Vector3()))\r\n t.size = box.geometry.boundingBox.getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n // console.log(t)\r\n return t\r\n }\r\n\r\n let cells = []\r\n for (let i = 0; i < boxes.length; i++) {\r\n let box = boxes[i]\r\n let sign = signs[i]\r\n\r\n // let bbx1 = box.geometry.boundingBox\r\n // bbx1.applyMatrix4(box.matrix)\r\n\r\n let cell = {\r\n name: box.name.substr(4),\r\n // 底面中心\r\n box: to_box_scale_((0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(box), box),\r\n }\r\n\r\n if (CELL_HIERARCHY == HIERARCHY_TYPE.STANDALONE) {\r\n // 中心\r\n cell.sign = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(sign)\r\n cell.sign.position.z += .01\r\n cell.logo = { // #20220611\r\n position: {\r\n x: box.position.x,\r\n y: box.position.y + .15,\r\n z: box.position.z\r\n }\r\n }\r\n } else if (CELL_HIERARCHY == HIERARCHY_TYPE.INHERITED) {\r\n\r\n let t_sign = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.to_transform)(sign)\r\n t_sign.position.x -= cell.box.position.x\r\n t_sign.position.y -= cell.box.position.y\r\n t_sign.position.z -= cell.box.position.z\r\n t_sign.position.z += .01\r\n\r\n t_sign.rotation.x = t_sign.rotation.y = t_sign.rotation.z = 0\r\n\r\n cell.box.child = {\r\n sign: t_sign,\r\n logo: { // #20220611\r\n position: {\r\n x: box.position.x - cell.box.position.x,\r\n y: box.position.y + .15 - cell.box.position.y,\r\n z: box.position.z - cell.box.position.z,\r\n },\r\n },\r\n }\r\n\r\n }\r\n\r\n cells.push(cell)\r\n }\r\n\r\n // KLUDGE 记录数据\r\n // console.log('copy to ../shelves-vue-demo/store/shelf?_cells.json')\r\n console.log('cells', JSON.stringify(cells))\r\n\r\n return cells\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/BaseShelve.js?"); /***/ }), @@ -454,7 +465,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TexturesCache\": () => (/* binding */ TexturesCache)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\nclass TexturesCache {\r\n\r\n constructor(view) {\r\n this.view_ = view\r\n this.cache_ = {} // url -> {tex}\r\n }\r\n\r\n find(texture) {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (texture) {\r\n\r\n let t_url = texture.url\r\n let f = this.cache_[t_url]\r\n if (f) {\r\n if (f.tex != null) {\r\n resolve(f.tex)\r\n } else {\r\n f.waits_.push(() => {\r\n resolve()\r\n })\r\n }\r\n } else {\r\n\r\n f = { tex: null, waits_: [] }\r\n this.cache_[t_url] = f\r\n\r\n new three__WEBPACK_IMPORTED_MODULE_0__.TextureLoader().load(t_url, tex => {\r\n tex.flipY = false\r\n tex.encoding = three__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding // #20220719, v3.3 fix\r\n f.tex = tex\r\n f.waits_.forEach(fi => {\r\n fi()\r\n })\r\n resolve(f.tex)\r\n }, undefined, err => {\r\n reject(err)\r\n })\r\n\r\n }\r\n\r\n } else {\r\n resolve(null) // type == 1, texture 可能为null\r\n }\r\n\r\n\r\n })\r\n }\r\n\r\n dispose() {\r\n Object.values(this.cache_).forEach(c => {\r\n if (c.tex) {\r\n c.tex.dispose()\r\n }\r\n })\r\n // console.log('dispose texture')\r\n }\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/TexturesCache.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TexturesCache\": () => (/* binding */ TexturesCache)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\nclass TexturesCache {\r\n\r\n constructor(view) {\r\n this.view_ = view\r\n this.cache_ = {} // url -> {tex}\r\n }\r\n\r\n find(texture) {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (texture) {\r\n\r\n let t_url = texture.url\r\n let f = this.cache_[t_url]\r\n if (f) {\r\n if (f.tex != null) {\r\n resolve(f.tex)\r\n } else {\r\n f.waits_.push(() => {\r\n resolve()\r\n })\r\n }\r\n } else {\r\n\r\n f = { tex: null, waits_: [] }\r\n this.cache_[t_url] = f\r\n\r\n new three__WEBPACK_IMPORTED_MODULE_0__.TextureLoader().load(t_url, tex => {\r\n tex.flipY = false\r\n tex.encoding = three__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding // #20220719, v3.3 fix\r\n f.tex = tex\r\n f.waits_.forEach(fi => {\r\n fi()\r\n })\r\n resolve(f.tex)\r\n }, undefined, err => {\r\n reject(err)\r\n })\r\n\r\n }\r\n\r\n } else {\r\n resolve(null) // type == 1, texture 可能为null\r\n }\r\n\r\n\r\n })\r\n }\r\n\r\n dispose() {\r\n Object.values(this.cache_).forEach(c => {\r\n if (c.tex) {\r\n c.tex.dispose()\r\n }\r\n })\r\n // console.log('dispose texture cache')\r\n }\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/TexturesCache.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/common/TexturesCacheSp.js": +/*!*******************************************************!*\ + !*** ./src/crossyo/shelves/common/TexturesCacheSp.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TexturesCacheSp\": () => (/* binding */ TexturesCacheSp)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\n// 策略可能不同于TextureCache\r\nclass TexturesCacheSp {\r\n\r\n constructor(view) {\r\n this.view_ = view\r\n this.cache_ = {} // url -> {tex}\r\n }\r\n\r\n find(texture) {\r\n return new Promise((resolve, reject) => {\r\n\r\n if (texture) {\r\n\r\n let t_url = texture.url\r\n let f = this.cache_[t_url]\r\n if (f) {\r\n if (f.tex != null) {\r\n resolve(f.tex)\r\n } else {\r\n f.waits_.push(() => {\r\n resolve()\r\n })\r\n }\r\n } else {\r\n\r\n f = { tex: null, waits_: [] }\r\n this.cache_[t_url] = f\r\n\r\n new three__WEBPACK_IMPORTED_MODULE_0__.TextureLoader().load(t_url, tex => {\r\n // tex.flipY = false\r\n tex.encoding = three__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding // #20220719, v3.3 fix\r\n f.tex = tex\r\n f.waits_.forEach(fi => {\r\n fi()\r\n })\r\n resolve(f.tex)\r\n }, undefined, err => {\r\n reject(err)\r\n })\r\n\r\n }\r\n\r\n } else {\r\n resolve(null) // type == 1, texture 可能为null\r\n }\r\n\r\n\r\n })\r\n }\r\n\r\n dispose() {\r\n Object.values(this.cache_).forEach(c => {\r\n if (c.tex) {\r\n c.tex.dispose()\r\n }\r\n })\r\n // console.log('dispose texture cache')\r\n }\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/TexturesCacheSp.js?"); /***/ }), @@ -476,7 +498,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"box3_except_shadow\": () => (/* binding */ box3_except_shadow),\n/* harmony export */ \"clone_except_ext\": () => (/* binding */ clone_except_ext),\n/* harmony export */ \"get_is_hall_\": () => (/* binding */ get_is_hall_),\n/* harmony export */ \"get_shelf_0_\": () => (/* binding */ get_shelf_0_),\n/* harmony export */ \"isMobile\": () => (/* binding */ isMobile),\n/* harmony export */ \"text_price_\": () => (/* binding */ text_price_),\n/* harmony export */ \"to_transform\": () => (/* binding */ to_transform),\n/* harmony export */ \"use_ext\": () => (/* binding */ use_ext),\n/* harmony export */ \"write_transform\": () => (/* binding */ write_transform),\n/* harmony export */ \"write_transform_cell_box\": () => (/* binding */ write_transform_cell_box),\n/* harmony export */ \"write_transform_cell_box_inherited\": () => (/* binding */ write_transform_cell_box_inherited),\n/* harmony export */ \"write_transform_cell_logo\": () => (/* binding */ write_transform_cell_logo),\n/* harmony export */ \"write_transform_cell_sign\": () => (/* binding */ write_transform_cell_sign)\n/* harmony export */ });\n/* harmony import */ var mobile_detect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mobile-detect */ \"./node_modules/_mobile-detect@1.4.5@mobile-detect/mobile-detect.js\");\n/* harmony import */ var mobile_detect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mobile_detect__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\n\r\n\r\nconst mobileDetect = new (mobile_detect__WEBPACK_IMPORTED_MODULE_0___default())(window.navigator.userAgent)\r\nconst isMobile = mobileDetect.mobile() != null\r\n\r\nconst to_transform = o3d => {\r\n return {\r\n position: o3d.position,\r\n rotation: {\r\n x: o3d.rotation.x,\r\n y: o3d.rotation.y,\r\n z: o3d.rotation.z\r\n },\r\n scale: o3d.scale,\r\n }\r\n}\r\n\r\n// 使得vue可以更新\r\nconst write_transform = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n obj.scale.x = o3d.scale.x\r\n obj.scale.y = o3d.scale.y\r\n obj.scale.z = o3d.scale.z\r\n\r\n}\r\n\r\nconst write_transform_cell_box = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n obj.size.x = o3d.scale.x\r\n obj.size.y = o3d.scale.y\r\n obj.size.z = o3d.scale.z\r\n\r\n}\r\n\r\nconst write_transform_cell_box_inherited = (o3d, obj) => {\r\n\r\n if (o3d.grp_hit_cell_) { // group\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n } else if (o3d.parent.grp_hit_cell_) { // box mesh\r\n\r\n obj.size.x = o3d.scale.x\r\n obj.size.y = o3d.scale.y\r\n obj.size.z = o3d.scale.z\r\n // console.log('xx size', obj.size)\r\n\r\n } else {\r\n console.log('xx xx')\r\n }\r\n\r\n}\r\n\r\n\r\nconst write_transform_cell_sign = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n}\r\n\r\nconst write_transform_cell_logo = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n}\r\n\r\nconst box3_except_shadow = o3d => {\r\n let bb_c = null\r\n o3d.traverse(c => {\r\n if (c.isMesh && !(/\\w-shadow$/.test(c.name))) {\r\n // console.log(c.name)\r\n if (bb_c == null) {\r\n bb_c = new three__WEBPACK_IMPORTED_MODULE_1__.Box3().copy(c.geometry.boundingBox)\r\n } else {\r\n bb_c = bb_c.union(c.geometry.boundingBox)\r\n }\r\n }\r\n })\r\n return bb_c\r\n}\r\n\r\nconst use_ext = o => {\r\n if (!o.ext__) {\r\n o.ext__ = {}\r\n }\r\n return o.ext__\r\n}\r\n\r\nconst clone_except_ext = o => {\r\n return JSON.parse(JSON.stringify(o, (k, v) => {\r\n if (k == 'ext__') {\r\n return undefined\r\n } else {\r\n return v\r\n }\r\n }))\r\n}\r\n\r\nconst text_price_ = v => ` ¥${parseFloat(v).toFixed(2)}`\r\n\r\nconst get_shelf_0_ = shopData => (shopData && shopData.shelves && shopData.shelves.length) ? shopData.shelves[0] : null\r\n\r\nconst get_is_hall_ = shopData => (shopData && shopData.type == 'hall') ? true : false\r\n\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/util.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"activePropName_to_activeEditModeName\": () => (/* binding */ activePropName_to_activeEditModeName),\n/* harmony export */ \"append_default_shop_data_\": () => (/* binding */ append_default_shop_data_),\n/* harmony export */ \"apply_transform\": () => (/* binding */ apply_transform),\n/* harmony export */ \"box3_except_shadow\": () => (/* binding */ box3_except_shadow),\n/* harmony export */ \"clone_except_ext\": () => (/* binding */ clone_except_ext),\n/* harmony export */ \"get_is_hall_\": () => (/* binding */ get_is_hall_),\n/* harmony export */ \"get_shelf_0_\": () => (/* binding */ get_shelf_0_),\n/* harmony export */ \"isMobile\": () => (/* binding */ isMobile),\n/* harmony export */ \"text_price_\": () => (/* binding */ text_price_),\n/* harmony export */ \"to_transform\": () => (/* binding */ to_transform),\n/* harmony export */ \"use_ext\": () => (/* binding */ use_ext),\n/* harmony export */ \"write_transform\": () => (/* binding */ write_transform),\n/* harmony export */ \"write_transform_cell_box\": () => (/* binding */ write_transform_cell_box),\n/* harmony export */ \"write_transform_cell_box_inherited\": () => (/* binding */ write_transform_cell_box_inherited),\n/* harmony export */ \"write_transform_cell_logo\": () => (/* binding */ write_transform_cell_logo),\n/* harmony export */ \"write_transform_cell_sign\": () => (/* binding */ write_transform_cell_sign)\n/* harmony export */ });\n/* harmony import */ var mobile_detect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mobile-detect */ \"./node_modules/_mobile-detect@1.4.5@mobile-detect/mobile-detect.js\");\n/* harmony import */ var mobile_detect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mobile_detect__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n\r\n\r\n\r\nconst mobileDetect = new (mobile_detect__WEBPACK_IMPORTED_MODULE_0___default())(window.navigator.userAgent)\r\nconst isMobile = mobileDetect.mobile() != null\r\n\r\nconst to_transform = o3d => {\r\n return {\r\n position: o3d.position,\r\n rotation: {\r\n x: o3d.rotation.x,\r\n y: o3d.rotation.y,\r\n z: o3d.rotation.z\r\n },\r\n scale: o3d.scale,\r\n }\r\n}\r\n\r\nconst apply_transform = (o3d, obj) => {\r\n\r\n let p = obj.position\r\n o3d.position.set(p.x, p.y, p.z)\r\n\r\n let r = obj.rotation\r\n o3d.rotation.set(r.x, r.y, r.z)\r\n\r\n let s = obj.scale\r\n o3d.scale.set(s.x, s.y, s.z)\r\n\r\n}\r\n\r\n// 使得vue可以更新\r\nconst write_transform = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n obj.scale.x = o3d.scale.x\r\n obj.scale.y = o3d.scale.y\r\n obj.scale.z = o3d.scale.z\r\n\r\n}\r\n\r\nconst write_transform_cell_box = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n obj.size.x = o3d.scale.x\r\n obj.size.y = o3d.scale.y\r\n obj.size.z = o3d.scale.z\r\n\r\n}\r\n\r\nconst write_transform_cell_box_inherited = (o3d, obj) => {\r\n\r\n if (o3d.grp_hit_cell_) { // group\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n } else if (o3d.parent.grp_hit_cell_) { // box mesh\r\n\r\n obj.size.x = o3d.scale.x\r\n obj.size.y = o3d.scale.y\r\n obj.size.z = o3d.scale.z\r\n // console.log('xx size', obj.size)\r\n\r\n } else {\r\n console.log('xx xx')\r\n }\r\n\r\n}\r\n\r\n\r\nconst write_transform_cell_sign = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n\r\n obj.rotation.x = o3d.rotation.x\r\n obj.rotation.y = o3d.rotation.y\r\n obj.rotation.z = o3d.rotation.z\r\n\r\n}\r\n\r\nconst write_transform_cell_logo = (o3d, obj) => {\r\n\r\n obj.position.x = o3d.position.x\r\n obj.position.y = o3d.position.y\r\n obj.position.z = o3d.position.z\r\n}\r\n\r\nconst box3_except_shadow = o3d => {\r\n let bb_c = null\r\n o3d.traverse(c => {\r\n if (c.isMesh && !(/\\w-shadow$/.test(c.name))) {\r\n // console.log(c.name)\r\n if (bb_c == null) {\r\n bb_c = new three__WEBPACK_IMPORTED_MODULE_1__.Box3().copy(c.geometry.boundingBox)\r\n } else {\r\n bb_c = bb_c.union(c.geometry.boundingBox)\r\n }\r\n }\r\n })\r\n return bb_c\r\n}\r\n\r\nconst use_ext = o => {\r\n if (!o.ext__) {\r\n o.ext__ = {}\r\n }\r\n return o.ext__\r\n}\r\n\r\nconst clone_except_ext = o => {\r\n return JSON.parse(JSON.stringify(o, (k, v) => {\r\n if (k == 'ext__') {\r\n return undefined\r\n } else {\r\n return v\r\n }\r\n }))\r\n}\r\n\r\nconst text_price_ = v => ` ¥${parseFloat(v).toFixed(2)}`\r\n\r\nconst get_shelf_0_ = shopData => (shopData && shopData.shelves && shopData.shelves.length) ? shopData.shelves[0] : null\r\n\r\nconst get_is_hall_ = shopData => (shopData && shopData.type == 'hall') ? true : false\r\n\r\nconst map_prop_edit = {\r\n 'panorama': 'panorama',\r\n 'shelf': 'trans-obj',\r\n 'ware': 'pick-cell',\r\n}\r\n\r\nconst activePropName_to_activeEditModeName = n => {\r\n let ret = map_prop_edit[n]\r\n return ret ? ret : 'nop'\r\n}\r\n\r\nconst append_default_shop_data_ = d => {\r\n console.log('append default shop data', d)\r\n\r\n // #20221219, 合并arrangement造成缺少默認值\r\n\r\n d.shelves.forEach(shelf=>{\r\n shelf.cells.forEach(cell=>{\r\n if (!cell.hasOwnProperty('pileNumber')) {\r\n cell.pileNumber = 2\r\n }\r\n if (!cell.hasOwnProperty('pileRotationY')) {\r\n cell.pileRotationY = 0\r\n }\r\n })\r\n })\r\n\r\n return d\r\n}\r\n\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/common/util.js?"); /***/ }), @@ -487,7 +509,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BaseEditor\": () => (/* binding */ BaseEditor)\n/* harmony export */ });\n/* harmony import */ var _viewer_HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../viewer/HallShelvesViewer */ \"./src/crossyo/shelves/viewer/HallShelvesViewer.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_prefab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/prefab */ \"./src/crossyo/shelves/common/prefab.js\");\n/* harmony import */ var kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! kutsi/util/SceneUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nclass BaseEditor extends _viewer_HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__.HallShelvesViewer {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n\r\n this.use_grid__ = true\r\n this.isViewer__ = false\r\n\r\n this.active_selected_o3d__ = null\r\n\r\n // this.active_selected_box__.visible = false\r\n\r\n this.rel_prop_ = this.is_hall__ ? 'hall' : 'panorama'\r\n // panorama|hall, shelf, ware, schema\r\n }\r\n\r\n beginLoadSpecs() {\r\n let arr = super.beginLoadSpecs()\r\n arr.push({\r\n func: 'setupCustomization', param: {\r\n onDoing: next => {\r\n this.prefab__ = _common_prefab__WEBPACK_IMPORTED_MODULE_1__.prefab.setup(next)\r\n }\r\n }\r\n })\r\n return arr\r\n }\r\n\r\n active_selected_(o3d) {\r\n\r\n if (!this.active_selected_box__) {\r\n this.active_selected_box__ = new three__WEBPACK_IMPORTED_MODULE_3__.Object3D()\r\n this.active_selected_box__.add(new three__WEBPACK_IMPORTED_MODULE_3__.Box3Helper(new three__WEBPACK_IMPORTED_MODULE_3__.Box3()))\r\n this.scene_.add(this.active_selected_box__)\r\n }\r\n\r\n // console.log('active_selected_', o3d)\r\n\r\n this.active_selected_o3d__ = o3d\r\n if (o3d) {\r\n this.active_selected_box__.visible = true\r\n\r\n // { // global \r\n // let box = new Box3().expandByObject(o3d)\r\n // this.active_selected_box__.box = box\r\n // this.active_selected_box__.updateMatrixWorld(true)\r\n // }\r\n\r\n { // local, #20220620\r\n let box = (0,kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_2__.local_box3)(o3d)\r\n if (box) {\r\n this.active_selected_box__.children[0].box = box\r\n o3d.updateWorldMatrix(true, false)\r\n o3d.matrixWorld.decompose(\r\n this.active_selected_box__.position,\r\n this.active_selected_box__.quaternion,\r\n this.active_selected_box__.scale\r\n )\r\n }\r\n }\r\n\r\n\r\n } else {\r\n this.active_selected_box__.visible = false\r\n }\r\n\r\n }\r\n\r\n // #20221215\r\n relProp(v) {\r\n\r\n console.log('rel prop:', v)\r\n }\r\n\r\n}\r\n\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/BaseEditor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BaseEditor\": () => (/* binding */ BaseEditor)\n/* harmony export */ });\n/* harmony import */ var _viewer_HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../viewer/HallShelvesViewer */ \"./src/crossyo/shelves/viewer/HallShelvesViewer.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_prefab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/prefab */ \"./src/crossyo/shelves/common/prefab.js\");\n/* harmony import */ var kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! kutsi/util/SceneUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneUtil.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nclass BaseEditor extends _viewer_HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__.HallShelvesViewer {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n\r\n this.use_grid__ = true\r\n this.isViewer__ = false\r\n\r\n this.active_selected_o3d__ = null\r\n\r\n // this.active_selected_box__.visible = false\r\n\r\n }\r\n\r\n beginLoadSpecs() {\r\n\r\n let arr = super.beginLoadSpecs()\r\n arr.push({\r\n func: 'setupCustomization', param: {\r\n onDoing: next => {\r\n this.prefab__ = _common_prefab__WEBPACK_IMPORTED_MODULE_1__.prefab.setup(next)\r\n }\r\n }\r\n })\r\n return arr\r\n }\r\n\r\n active_selected_(o3d) {\r\n\r\n if (!this.active_selected_box__) {\r\n this.active_selected_box__ = new three__WEBPACK_IMPORTED_MODULE_3__.Object3D()\r\n this.active_selected_box__.add(new three__WEBPACK_IMPORTED_MODULE_3__.Box3Helper(new three__WEBPACK_IMPORTED_MODULE_3__.Box3()))\r\n this.scene_.add(this.active_selected_box__)\r\n }\r\n\r\n // console.log('active_selected_', o3d)\r\n\r\n this.active_selected_o3d__ = o3d\r\n if (o3d) {\r\n this.active_selected_box__.visible = true\r\n\r\n // { // global \r\n // let box = new Box3().expandByObject(o3d)\r\n // this.active_selected_box__.box = box\r\n // this.active_selected_box__.updateMatrixWorld(true)\r\n // }\r\n\r\n { // local, #20220620\r\n let box = (0,kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_2__.local_box3)(o3d)\r\n if (box) {\r\n this.active_selected_box__.children[0].box = box\r\n o3d.updateWorldMatrix(true, false)\r\n o3d.matrixWorld.decompose(\r\n this.active_selected_box__.position,\r\n this.active_selected_box__.quaternion,\r\n this.active_selected_box__.scale\r\n )\r\n }\r\n }\r\n\r\n\r\n } else {\r\n this.active_selected_box__.visible = false\r\n }\r\n\r\n }\r\n\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/BaseEditor.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/editor/EditModeEditor.js": +/*!******************************************************!*\ + !*** ./src/crossyo/shelves/editor/EditModeEditor.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EditModeEditor\": () => (/* binding */ EditModeEditor)\n/* harmony export */ });\n/* harmony import */ var _BaseEditor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseEditor */ \"./src/crossyo/shelves/editor/BaseEditor.js\");\n/* harmony import */ var _editmode_NopEditMode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editmode/NopEditMode */ \"./src/crossyo/shelves/editor/editmode/NopEditMode.js\");\n/* harmony import */ var _editmode_PanoramaEditMode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editmode/PanoramaEditMode */ \"./src/crossyo/shelves/editor/editmode/PanoramaEditMode.js\");\n/* harmony import */ var _editmode_TransObjEditMode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./editmode/TransObjEditMode */ \"./src/crossyo/shelves/editor/editmode/TransObjEditMode.js\");\n/* harmony import */ var _editmode_PickCellEditMode__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editmode/PickCellEditMode */ \"./src/crossyo/shelves/editor/editmode/PickCellEditMode.js\");\n\r\n\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst edit_mode_class_ = {\r\n 'nop':_editmode_NopEditMode__WEBPACK_IMPORTED_MODULE_1__.NopEditMode,\r\n 'panorama': _editmode_PanoramaEditMode__WEBPACK_IMPORTED_MODULE_2__.PanoramaEditMode,\r\n 'trans-obj': _editmode_TransObjEditMode__WEBPACK_IMPORTED_MODULE_3__.TransObjEditMode,\r\n 'pick-cell': _editmode_PickCellEditMode__WEBPACK_IMPORTED_MODULE_4__.PickCellEditMode,\r\n}\r\n\r\nconst create_edit_mode_by_name_ = (name, viewer) => {\r\n let clazz = edit_mode_class_[name]\r\n if (clazz) {\r\n return new clazz(viewer)\r\n } else {\r\n console.warn('## create_edit_mode_by_name_ unknow name', name)\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nclass EditModeEditor extends _BaseEditor__WEBPACK_IMPORTED_MODULE_0__.BaseEditor {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n }\r\n\r\n // beginLoadSpecs() {\r\n // return super.beginLoadSpecs()\r\n // }\r\n\r\n endLoadSpecs() {\r\n if (!this.is_hall__) {\r\n this.create_cms_for_pano_editor_()\r\n } else {\r\n this.create_cms_for_hall_editor_()\r\n }\r\n\r\n this.em__ = create_edit_mode_by_name_(this.opts_.activeEditModeName, this)\r\n this.em__.enter()\r\n }\r\n\r\n // #20221215, from activePropName: panorama, hall, shelf, ware, ..\r\n set activeEditModeName(v) {\r\n // console.log('## activeEditModeName:', v)\r\n if (this.em__.name != v) {\r\n this.em__.leave()\r\n //\r\n this.em__ = create_edit_mode_by_name_(v, this)\r\n //\r\n this.em__.enter()\r\n }\r\n }\r\n\r\n changeViewMode(mode, changeByIndirectReason = false) {\r\n if (this.em__) {\r\n this.em__.changeViewMode(mode, changeByIndirectReason)\r\n }\r\n }\r\n \r\n updateAction(action) {\r\n if (this.em__) {\r\n console.log('EME update action', action)\r\n this.em__.updateAction(action)\r\n }\r\n }\r\n\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/EditModeEditor.js?"); /***/ }), @@ -498,18 +531,62 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShopHallEditor\": () => (/* binding */ ShopHallEditor)\n/* harmony export */ });\n/* harmony import */ var _ShopPanoEditor___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ShopPanoEditor_ */ \"./src/crossyo/shelves/editor/ShopPanoEditor_.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\nclass ShopHallEditor extends _ShopPanoEditor___WEBPACK_IMPORTED_MODULE_0__.ShopPanoEditor_ {\r\n\r\n constructor(opts) {\r\n\r\n super(Object.assign(opts, {\r\n is_hall__: (0,_common_util__WEBPACK_IMPORTED_MODULE_1__.get_is_hall_)(opts.shopData),\r\n }))\r\n\r\n }\r\n\r\n\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/ShopHallEditor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShopHallEditor\": () => (/* binding */ ShopHallEditor)\n/* harmony export */ });\n/* harmony import */ var _EditModeEditor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EditModeEditor */ \"./src/crossyo/shelves/editor/EditModeEditor.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n// import { ShopPanoEditor_ } from './ShopPanoEditor_'\r\n\r\n\r\n\r\n// export class ShopHallEditor extends ShopPanoEditor_ {\r\n\r\n// constructor(opts) {\r\n\r\n// super(Object.assign(opts, {\r\n// is_hall__: get_is_hall_(opts.shopData),\r\n// }))\r\n\r\n// }\r\n\r\n// }\r\n\r\nclass ShopHallEditor extends _EditModeEditor__WEBPACK_IMPORTED_MODULE_0__.EditModeEditor {\r\n\r\n constructor(opts) {\r\n\r\n super(Object.assign(opts, {\r\n is_hall__: (0,_common_util__WEBPACK_IMPORTED_MODULE_1__.get_is_hall_)(opts.shopData),\r\n }))\r\n\r\n }\r\n\r\n commitToShopData() {\r\n // console.log('commitToShopData...')\r\n // if (this.mesh_shelf__) {\r\n // this.shopData_.scene = {\r\n // shelf: {\r\n // position: this.mesh_shelf__.position,\r\n // rotation: {\r\n // x: this.mesh_shelf__.rotation.x,\r\n // y: this.mesh_shelf__.rotation.y,\r\n // z: this.mesh_shelf__.rotation.z\r\n // },\r\n // }\r\n // }\r\n // }\r\n }\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nconst SHELF_POSITION = { x: 2.7, y: -1, z: 0 }\r\nconst SHELF_ROTATION = { x: 0, y: - Math.PI / 2, z: 0 }\r\nconst SHELF_SCALE = { x: 1, y: 1, z: 1 }\r\n\r\n// 从外部选择时添加默认值\r\n// ShopPanoEditor_.appendDefaultShelfData = shelf => {\r\nShopHallEditor.appendDefaultShelfData = shelf => {\r\n shelf.position = SHELF_POSITION\r\n shelf.rotation = SHELF_ROTATION\r\n shelf.scale = SHELF_SCALE\r\n return shelf\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/ShopHallEditor.js?"); /***/ }), -/***/ "./src/crossyo/shelves/editor/ShopPanoEditor_.js": -/*!*******************************************************!*\ - !*** ./src/crossyo/shelves/editor/ShopPanoEditor_.js ***! - \*******************************************************/ +/***/ "./src/crossyo/shelves/editor/editmode/EditModeBase.js": +/*!*************************************************************!*\ + !*** ./src/crossyo/shelves/editor/editmode/EditModeBase.js ***! + \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShopPanoEditor_\": () => (/* binding */ ShopPanoEditor_)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! three/examples/jsm/controls/TransformControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/TransformControls.js\");\n/* harmony import */ var _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/BaseShelve */ \"./src/crossyo/shelves/common/BaseShelve.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _BaseEditor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./BaseEditor */ \"./src/crossyo/shelves/editor/BaseEditor.js\");\n/* harmony import */ var _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../viewer/ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst DEBUG = false // true\r\n\r\nconst trans_axes_ = (trans, arr) => {\r\n trans.showX = arr[0]\r\n trans.showY = arr[1]\r\n trans.showZ = arr[2]\r\n}\r\n\r\nconst axes_def_ = {\r\n 'translate-shelf': trans => { trans_axes_(trans, [true, false, true]) },\r\n 'translate-box': trans => { trans_axes_(trans, [true, true, true]) },\r\n 'translate-sign': trans => { trans_axes_(trans, [true, true, true]) },\r\n 'translate-logo': trans => { trans_axes_(trans, [true, true, true]) },\r\n\r\n 'rotate-shelf': trans => { trans_axes_(trans, [false, true, false]) },\r\n 'rotate-box': trans => { trans_axes_(trans, [false, true, false]) },\r\n 'rotate-sign': trans => { trans_axes_(trans, [false, true, false]) },\r\n\r\n // resize\r\n 'scale-box': trans => { trans_axes_(trans, [true, true, true]) },\r\n}\r\n\r\nconst update_control_trans_axes__ = trans => {\r\n let mode = trans.mode\r\n let obj = trans.object\r\n let obj_type = ''\r\n if (obj.hit_) {\r\n obj_type = obj.hit_.type\r\n } else if (obj.grp_hit_cell_) {\r\n obj_type = 'box'\r\n } else if (obj.name == 'shelf__') {\r\n obj_type = 'shelf'\r\n }\r\n let key = `${mode}-${obj_type}`\r\n // console.log(key)\r\n let f = axes_def_[key]\r\n if (f) {\r\n f(trans)\r\n }\r\n\r\n if (obj_type == 'box') {\r\n if (mode == 'scale') {\r\n // console.log('scale-box', obj)\r\n if (obj.grp_hit_cell_) {\r\n let box = obj.children.filter(c => c.hit_ && c.hit_.type == 'box')[0]\r\n if (box) {\r\n trans.attach(box)\r\n }\r\n }\r\n } else {\r\n if (!obj.grp_hit_cell_ && obj.parent.grp_hit_cell_) {\r\n trans.attach(obj.parent)\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\nclass ShopPanoEditor_ extends _BaseEditor__WEBPACK_IMPORTED_MODULE_3__.BaseEditor {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n\r\n }\r\n\r\n startup() {\r\n super.startup()\r\n }\r\n\r\n endLoadSpecs() {\r\n // super.endLoadSpecs() // 不执行 viewer 的 endLoadSpecs\r\n\r\n this.create_cms_for_pano_editor_()\r\n\r\n this.after_add_shelf__()\r\n\r\n this.picker_.on('downPick', e => {\r\n // console.log('downPick', e)\r\n // if (!this.control_.enabled) {\r\n // return\r\n // }\r\n\r\n // console.log(this.control_trans__.axis)\r\n if (this.control_trans__.axis) { // control trans 优先级更高\r\n return\r\n }\r\n\r\n if (e.int0) {\r\n let object = e.int0.object\r\n let hit_ = object.hit_\r\n if (hit_.type == 'shelf') {\r\n // this.control_trans__.detach()\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(this.mesh_shelf__)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n if (DEBUG) {\r\n this.active_selected_(object)\r\n }\r\n\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n this.orbit_update_for_(object)\r\n }\r\n\r\n this.shopData_.ext__.selectedShelf = true\r\n this.shopData_.ext__.selectedCell = null\r\n\r\n } else if (hit_.type == 'box'\r\n || hit_.type == 'sign'\r\n || hit_.type == 'logo'\r\n ) {\r\n // this.control_trans__.detach()\r\n this.control_trans__.showY = true\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(object)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n\r\n this.control_trans__.mode = 'translate'\r\n if (hit_.type == 'box') {\r\n this.control_trans__.attach(object.parent) // grp cell\r\n } else {\r\n this.control_trans__.attach(object)\r\n }\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n }\r\n\r\n if (DEBUG) {\r\n this.active_selected_(object)\r\n }\r\n\r\n // console.log(hit_)\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = hit_.cell\r\n this.shopData_.ext__.selectedCellSubName = hit_.type\r\n\r\n // this.changeViewMode(VIEW_MODE.ORBIT)\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n if (hit_.type == 'box') {\r\n this.orbit_update_for_(object)\r\n } else {\r\n this.orbit_update_for_(object.parent)\r\n }\r\n }\r\n\r\n }\r\n\r\n } else {\r\n\r\n if (DEBUG) {\r\n this.active_selected_(null)\r\n }\r\n\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // this.changeViewMode(VIEW_MODE.PANORAMA)\r\n\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = null\r\n\r\n }\r\n\r\n\r\n })\r\n\r\n this.control_trans__ = new three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_0__.TransformControls(this.camera_, this.renderer_.domElement)\r\n // console.log(this.control_trans__)\r\n this.control_trans__.space = 'local'\r\n\r\n // this.control_trans__.addEventListener('change', )\r\n this.control_trans__.addEventListener('dragging-changed', e => {\r\n this.controls_.enabled = !e.value\r\n })\r\n this.control_trans__.addEventListener('objectChange', e => {\r\n // console.log(e, e.target)\r\n let obj = this.control_trans__.object\r\n if (obj == this.mesh_shelf__) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform)(obj, (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_))\r\n } else if (obj.grp_hit_cell_) { // group (translate, rotate)\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_box_inherited)(obj, obj.grp_hit_cell_.box)\r\n } else {\r\n let hit_ = obj.hit_\r\n if (hit_) {\r\n if (hit_.type == 'box') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_box)(obj, hit_.cell.box)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) { // \r\n\r\n // group / box mesh (scale) -> resize\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_box_inherited)(obj, obj.parent.grp_hit_cell_.box)\r\n\r\n }\r\n } else if (hit_.type == 'sign') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_sign)(obj, hit_.cell.sign)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_sign)(obj, hit_.cell.box.child.sign)\r\n }\r\n } else if (hit_.type == 'logo') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_logo)(obj, hit_.cell.logo)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform_cell_logo)(obj, hit_.cell.box.child.logo)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n this.scene_.add(this.control_trans__)\r\n\r\n // this.control_trans__.showY = false\r\n\r\n {\r\n this.keydown_615__ = event => {\r\n // console.log(event)\r\n if (event.keyCode == 27) {\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA)\r\n this.control_trans__.detach()\r\n }\r\n }\r\n window.addEventListener('keydown', this.keydown_615__)\r\n }\r\n\r\n\r\n this.emit('loadingCompletion')\r\n }\r\n\r\n changeViewMode(mode, changeByIndirectReason = false) {\r\n this.changeViewMode_(mode, changeByIndirectReason, () => {\r\n if (mode == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA) {\r\n // this.controls_.object.position.set(0, 0, 0)\r\n // this.controls_.target = this.DEFAULT_TARGET__\r\n this.controls_.reset()\r\n\r\n } else if (mode == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n this.controls_.target = this.DEFAULT_TARGET__\r\n if (this.control_trans__ && this.control_trans__.object) {\r\n this.orbit_update_for_(this.control_trans__.object, true)\r\n } else {\r\n this.orbit_update_for_(this.mesh_shelf__, true)\r\n }\r\n }\r\n })\r\n }\r\n\r\n updateAction(action) {\r\n\r\n // console.log('# updateAction', action)\r\n\r\n if (action.action == 'updatePanorama') {\r\n // console.log('## updatePanorama', this.shopData_)\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA, true)\r\n\r\n let tex = this.scene_.environment\r\n if (tex) {\r\n // this.scene_.background = new Color(0xeeeeee)\r\n\r\n // this.scene_.children.filter(c=>c.name == 'sys-env-sphere-')[0].removeFromParent()\r\n this.mesh_env_sphere__.removeFromParent()\r\n this.mesh_env_sphere__ = null\r\n\r\n this.scene_.environment = null\r\n tex.dispose()\r\n }\r\n\r\n if (this.shopData_.panorama) {\r\n\r\n let panorama_shelf_exr = this.shopData_.panorama.urlShelfExr\r\n let arr = [{\r\n func: 'setupEnvEquirect', param: {\r\n url: `${this.get_panorama_url_(this.shopData_.panorama)}`,\r\n onAfter: tex => {\r\n // this.scene_.background = tex\r\n\r\n let sp = new three__WEBPACK_IMPORTED_MODULE_5__.Mesh(\r\n this.geo_env_sphere__,\r\n new three__WEBPACK_IMPORTED_MODULE_5__.MeshStandardMaterial({\r\n map: tex,\r\n side: three__WEBPACK_IMPORTED_MODULE_5__.BackSide,\r\n // wireframe: true,\r\n fog: false,\r\n // displacementScale: -env_.radius * .992,\r\n // displacementMap: new TextureLoader().load(`${this.prefixAsset_}/env/equirect/${env_.code}-zdepth-1k.png`),\r\n envMap: this.w256_,\r\n // envMapIntensity: 2,\r\n })\r\n )\r\n sp.scale.set(1, 1, -1)\r\n sp.name = 'sys-env-sphere-'\r\n this.scene_.add(sp)\r\n\r\n this.mesh_env_sphere__ = sp\r\n this.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n\r\n if (!panorama_shelf_exr) {\r\n this.scene_.environment = tex\r\n }\r\n\r\n }\r\n }\r\n }]\r\n\r\n if (panorama_shelf_exr) {\r\n arr.push({\r\n func: 'setupEnvEquirect', param: {\r\n url: `${panorama_shelf_exr}`,\r\n onAfter: tex => {\r\n this.scene_.environment = tex\r\n }\r\n }\r\n })\r\n }\r\n\r\n this.build_specs__(arr).then(() => {\r\n //\r\n })\r\n\r\n } else {\r\n // remove!\r\n }\r\n } else if (action.action == 'updatePanoramaRotationY') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA, true)\r\n\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n }\r\n } else if (action.action == 'updatePanoramaMultiply') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA, true)\r\n\r\n\r\n } else if (action.action == 'updateShelf') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA, true)\r\n\r\n // remove!\r\n if (this.mesh_shelf__) {\r\n\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // \r\n\r\n // TODO dispose!\r\n\r\n this.mesh_shelf__.removeFromParent()\r\n this.mesh_shelf__ = null\r\n\r\n }\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n if (shelf0 && shelf0.url) {\r\n\r\n let shelf_url = shelf0.url\r\n this.build_specs__([{\r\n func: 'setupModelGltf', param: {\r\n path: shelf_url.substr(0, shelf_url.lastIndexOf('/')),\r\n name: shelf_url.substr(shelf_url.lastIndexOf('/')),\r\n onAfter: o3d => {\r\n\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n if (c.material.aoMap) {\r\n c.material.lightMap = c.material.aoMap\r\n // c.material.aoMap = null\r\n c.material.lightMapIntensity = .5\r\n }\r\n c.material.side = three__WEBPACK_IMPORTED_MODULE_5__.FrontSide\r\n }\r\n // 兼容 v1\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n c.visible = false\r\n }\r\n })\r\n\r\n o3d.rotation.set(0, - Math.PI / 2, 0)\r\n o3d.position.set(2.7, -1, 0)\r\n\r\n this.scene_.add(o3d)\r\n\r\n this.mesh_shelf__ = o3d\r\n\r\n // .$model__ = o3d\r\n // this.shopData_.shelf.get_model__ = () => {\r\n // return o3d\r\n // }\r\n\r\n // this.control_trans__.detach()\r\n\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(this.mesh_shelf__)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n // { // TEMP for v1 to v3, 解些老的数据,并且生成新的cells数据,copy to store/shelves 列表中\r\n // this.shopData_.shelf.cells = parse_v3_cells_from_v1_shelf_model_(o3d)\r\n // }\r\n\r\n this.after_add_shelf__()\r\n\r\n ;(0,_common_util__WEBPACK_IMPORTED_MODULE_2__.write_transform)(o3d, shelf0)\r\n\r\n }\r\n }\r\n }])\r\n\r\n } else {\r\n\r\n // remove\r\n this.control_trans__.detach()\r\n\r\n }\r\n\r\n } else if (action.action == 'deleteCell') {\r\n\r\n // console.log('delete cell', action)\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // c.hit_.type == 'box'\r\n // this.mesh_shelf__.children.filter(c => (c.hit_ && c.hit_.cell == action.cell)).forEach(c => {\r\n // // let removed = \r\n // this.picker_.spliceHit(c)\r\n // // console.log('removed', removed)\r\n // c.removeFromParent()\r\n // })\r\n\r\n let subs = action.cell.getSubs()\r\n if (subs.sign) {\r\n this.picker_.spliceHit(subs.sign)\r\n subs.sign.removeFromParent()\r\n }\r\n if (subs.logo) {\r\n this.picker_.spliceHit(subs.logo)\r\n subs.logo.removeFromParent()\r\n }\r\n this.picker_.spliceHit(subs.box)\r\n subs.box.removeFromParent()\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n shelf0.cells.splice(action.idx, 1)\r\n\r\n } else if (action.action == 'addCell') {\r\n\r\n if (!this.mesh_shelf__) {\r\n console.warn('需要首先有个货架!')\r\n return\r\n }\r\n\r\n // console.log('add cell')\r\n\r\n let bbx = new three__WEBPACK_IMPORTED_MODULE_5__.Box3().expandByObject(this.mesh_shelf__)\r\n let cnt = bbx.getCenter(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n let size = bbx.getSize(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n\r\n // this.mesh_shelf__.add()\r\n let spos = this.mesh_shelf__.position\r\n // console.log(cnt, size, spos)\r\n\r\n let cell = {\r\n name: '?-?',\r\n box: {\r\n // x 向前一些\r\n position: { x: 0, y: cnt.y + size.y / 2 - spos.y, z: .45 },\r\n scale: { x: 1, y: 1, z: 1 },\r\n rotation: { x: 0, y: 0, z: 0 },\r\n size: { x: .3736, y: .2259, z: .2179 },\r\n // child: {}\r\n },\r\n }\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n // 没有测过,有问题,目前也不用到!\r\n // cell.sign = { // 相对于 box的位置\r\n // position: { x: 1, y: 1, z: 1 },\r\n // scale: { x: 1, y: 1, z: 1 },\r\n // rotation: { x: 0, y: 0, z: 0 },\r\n // }\r\n // cell.logo = { // 相对于 box的位置\r\n // position: { x: 1, y: 1, z: 1 }\r\n // }\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n cell.box.child = {\r\n sign: {\r\n position: { x: -0.006, y: -0.064, z: 0.1847 },\r\n rotation: { x: 0, y: 0, z: 0 },\r\n scale: { x: 1, y: 1, z: 1 },\r\n },\r\n logo: {\r\n position: { x: 0, y: 0.15, z: 0 }\r\n }\r\n }\r\n }\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n shelf0.cells.push(cell)\r\n\r\n this.add_cell__(shelf0.cells[shelf0.cells.length - 1]) // 从proxy数据中取出!\r\n\r\n } else if (action.action == 'selectCell') {\r\n\r\n // console.log('select cell', action) // cell, subName\r\n\r\n let cell = action.cell\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = cell\r\n this.shopData_.ext__.selectedCellSubName = action.subName\r\n let subs = cell.getSubs()\r\n\r\n this.control_trans__.mode = 'translate'\r\n if (action.subName == 'box') {\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n this.control_trans__.attach(subs.box)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n this.control_trans__.attach(subs.box.parent)\r\n }\r\n\r\n } else if (action.subName == 'sign') {\r\n if (subs.sign) {\r\n this.control_trans__.attach(subs.sign)\r\n }\r\n } else if (action.subName == 'logo') {\r\n if (subs.logo) {\r\n this.control_trans__.attach(subs.logo)\r\n }\r\n }\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n // this.changeViewMode(VIEW_MODE.ORBIT)\r\n\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n if (action.subName == 'box') {\r\n this.orbit_update_for_(subs.box)\r\n } else if (action.subName == 'sign') {\r\n this.orbit_update_for_(subs.sign)\r\n } else if (action.subName == 'logo') {\r\n this.orbit_update_for_(subs.logo)\r\n }\r\n }\r\n\r\n } else if (action.action == 'transformTranslate') {\r\n // console.log('xx transformTranslate')\r\n this.control_trans__.mode = 'translate'\r\n update_control_trans_axes__(this.control_trans__)\r\n } else if (action.action == 'transformRotate') {\r\n // console.log('xx transformRotate')\r\n this.control_trans__.mode = 'rotate'\r\n update_control_trans_axes__(this.control_trans__)\r\n } else if (action.action == 'transformResize') {\r\n // console.log('xx transformResize')\r\n this.control_trans__.mode = 'scale'\r\n update_control_trans_axes__(this.control_trans__)\r\n }\r\n }\r\n\r\n\r\n after_add_shelf__() {\r\n\r\n this.picker_.emptyHits()\r\n\r\n if (this.mesh_shelf__) {\r\n\r\n let o3d = this.mesh_shelf__\r\n let hit_ = { type: 'shelf' }\r\n // console.log('add_hit__', o3d)\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n } else if (/^sign-\\d-\\d/.test(c.name)) {\r\n } else if (/.*-shadow$/.test(c.name)) {\r\n } else {\r\n c.hit_ = hit_\r\n this.picker_.pushHit(c)\r\n }\r\n }\r\n })\r\n\r\n // cells\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n if (!shelf0.cells) {\r\n console.warn('# after add shelf cells null, maybe error runtime path!')\r\n shelf0.cells = []\r\n }\r\n shelf0.cells.forEach(cell => {\r\n this.add_cell__(cell)\r\n })\r\n\r\n }\r\n\r\n }\r\n\r\n add_cell__(cell) {\r\n\r\n let box = cell.box\r\n // console.log('add_cell__', cell)\r\n\r\n let grp_cell = new three__WEBPACK_IMPORTED_MODULE_5__.Object3D()\r\n grp_cell.grp_hit_cell_ = cell\r\n grp_cell.position.set(box.position.x, box.position.y, box.position.z)\r\n grp_cell.rotation.set(box.rotation.x, box.rotation.y, box.rotation.z)\r\n this.mesh_shelf__.add(grp_cell)\r\n\r\n let mesh_box = this.prefab__.clone_cell_box()\r\n // mesh_box.position.set(box.position.x, box.position.y, box.position.z)\r\n mesh_box.scale.set(box.size.x, box.size.y, box.size.z)\r\n\r\n // this.mesh_shelf__.add(mesh_box)\r\n\r\n grp_cell.add(mesh_box)\r\n\r\n mesh_box.hit_ = { type: 'box', cell }\r\n this.picker_.pushHit(mesh_box)\r\n\r\n let mesh_sign = null\r\n let mesh_logo = null\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.STANDALONE) {\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_1__.HIERARCHY_TYPE.INHERITED) {\r\n {\r\n let sign = box.child.sign\r\n\r\n mesh_sign = this.prefab__.clone_sign()\r\n mesh_sign.position.set(sign.position.x, sign.position.y, sign.position.z)\r\n // console.log(JSON.stringify(sign.rotation))\r\n mesh_sign.rotation.set(sign.rotation.x, sign.rotation.y, sign.rotation.z)\r\n grp_cell.add(mesh_sign)\r\n\r\n mesh_sign.hit_ = { type: 'sign', cell }\r\n this.picker_.pushHit(mesh_sign)\r\n }\r\n //\r\n {\r\n let logo = box.child.logo\r\n\r\n // mesh_logo = new Mesh(new BoxBufferGeometry(.1, .04, .005), this.get_plastic_logo_material__())\r\n mesh_logo = this.prefab__.clone_logo()\r\n mesh_logo.position.set(logo.position.x, logo.position.y, logo.position.z)\r\n grp_cell.add(mesh_logo)\r\n\r\n mesh_logo.hit_ = { type: 'logo', cell }\r\n this.picker_.pushHit(mesh_logo)\r\n }\r\n }\r\n\r\n cell.getSubs = function () {\r\n return {\r\n box: mesh_box,\r\n sign: mesh_sign,\r\n logo: mesh_logo,\r\n }\r\n }\r\n\r\n }\r\n\r\n commitToShopData() {\r\n // console.log('commitToShopData...')\r\n // if (this.mesh_shelf__) {\r\n // this.shopData_.scene = {\r\n // shelf: {\r\n // position: this.mesh_shelf__.position,\r\n // rotation: {\r\n // x: this.mesh_shelf__.rotation.x,\r\n // y: this.mesh_shelf__.rotation.y,\r\n // z: this.mesh_shelf__.rotation.z\r\n // },\r\n // }\r\n // }\r\n // }\r\n }\r\n\r\n dispose() {\r\n window.removeEventListener('keydown', this.keydown_615__)\r\n super.dispose()\r\n }\r\n\r\n\r\n}\r\n\r\nconst SHELF_POSITION = { x: 2.7, y: -1, z: 0 }\r\nconst SHELF_ROTATION = { x: 0, y: - Math.PI / 2, z: 0 }\r\nconst SHELF_SCALE = { x: 1, y: 1, z: 1 }\r\n\r\n// 从外部选择时添加默认值\r\nShopPanoEditor_.appendDefaultShelfData = shelf => {\r\n shelf.position = SHELF_POSITION\r\n shelf.rotation = SHELF_ROTATION\r\n shelf.scale = SHELF_SCALE\r\n return shelf\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/ShopPanoEditor_.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EditModeBase\": () => (/* binding */ EditModeBase)\n/* harmony export */ });\n/* harmony import */ var _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../viewer/ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n\r\n\r\nclass EditModeBase {\r\n\r\n constructor(viewer, name) {\r\n this.viewer_ = viewer\r\n this.name_ = name\r\n }\r\n\r\n get name() {\r\n return this.name_\r\n }\r\n\r\n // proxy\r\n get viewMode__() {\r\n return this.viewer_.viewMode__\r\n }\r\n\r\n get controls_() {\r\n return this.viewer_.controls_\r\n }\r\n\r\n set mesh_shelf__(v) {\r\n this.viewer_.mesh_shelf__ = v\r\n }\r\n\r\n get mesh_shelf__() {\r\n return this.viewer_.mesh_shelf__\r\n }\r\n\r\n active_selected_(v) {\r\n this.viewer_.active_selected_(v)\r\n }\r\n\r\n build_specs__(arr) {\r\n return this.viewer_.build_specs__(arr)\r\n }\r\n\r\n orbit_update_for_(o3d, forceDeg45) {\r\n this.viewer_.orbit_update_for_(o3d, forceDeg45)\r\n }\r\n\r\n active_selected_(o3d) {\r\n this.viewer_.active_selected_(o3d)\r\n }\r\n\r\n // to be override\r\n\r\n enter() {\r\n console.log('EM enter', this.name_)\r\n\r\n let v = this.viewer_\r\n this.picker_ = v.picker_\r\n this.shopData_ = v.shopData_\r\n this.scene_ = v.scene_\r\n this.camera_ = v.camera_\r\n this.renderer_ = v.renderer_\r\n }\r\n\r\n leave() {\r\n console.log('EM leave', this.name_)\r\n }\r\n\r\n updateAction(action) { }\r\n\r\n // share by some\r\n \r\n get prefab__() {\r\n return this.viewer_.prefab__\r\n }\r\n \r\n changeViewMode(mode, changeByIndirectReason = false) {\r\n this.viewer_.changeViewMode_(mode, changeByIndirectReason, () => {\r\n if (mode == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__.VIEW_MODE.PANORAMA) {\r\n // this.controls_.object.position.set(0, 0, 0)\r\n // this.controls_.target = this.viewer_.DEFAULT_TARGET__\r\n this.controls_.reset()\r\n\r\n } else if (mode == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__.VIEW_MODE.ORBIT) {\r\n this.controls_.target = this.viewer_.DEFAULT_TARGET__\r\n if (this.control_trans__ && this.control_trans__.object) {\r\n this.orbit_update_for_(this.control_trans__.object, true)\r\n } else {\r\n this.orbit_update_for_(this.mesh_shelf__, true)\r\n }\r\n }\r\n })\r\n }\r\n\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/editmode/EditModeBase.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/editor/editmode/NopEditMode.js": +/*!************************************************************!*\ + !*** ./src/crossyo/shelves/editor/editmode/NopEditMode.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"NopEditMode\": () => (/* binding */ NopEditMode)\n/* harmony export */ });\n/* harmony import */ var _EditModeBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EditModeBase */ \"./src/crossyo/shelves/editor/editmode/EditModeBase.js\");\n\r\n\r\nclass NopEditMode extends _EditModeBase__WEBPACK_IMPORTED_MODULE_0__.EditModeBase {\r\n\r\n constructor(viewer) {\r\n super(viewer, 'nop')\r\n }\r\n\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/editmode/NopEditMode.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/editor/editmode/PanoramaEditMode.js": +/*!*****************************************************************!*\ + !*** ./src/crossyo/shelves/editor/editmode/PanoramaEditMode.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PanoramaEditMode\": () => (/* binding */ PanoramaEditMode)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _EditModeBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EditModeBase */ \"./src/crossyo/shelves/editor/editmode/EditModeBase.js\");\n/* harmony import */ var _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../viewer/ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n\r\n\r\n\r\n\r\nclass PanoramaEditMode extends _EditModeBase__WEBPACK_IMPORTED_MODULE_0__.EditModeBase {\r\n\r\n constructor(viewer) {\r\n super(viewer, 'panorama')\r\n }\r\n\r\n enter() {\r\n super.enter()\r\n let v = this.viewer_\r\n this.get_panorama_url_ = v.get_panorama_url_\r\n }\r\n\r\n leave() {\r\n\r\n\r\n super.leave()\r\n }\r\n\r\n\r\n\r\n get mesh_env_sphere__() {\r\n return this.viewer_.mesh_env_sphere__\r\n }\r\n\r\n set mesh_env_sphere__(v) {\r\n this.viewer_.mesh_env_sphere__ = v\r\n }\r\n\r\n get w256_() {\r\n return this.viewer_.w256_\r\n }\r\n\r\n get geo_env_sphere__() {\r\n return this.viewer_.geo_env_sphere__\r\n }\r\n\r\n updateAction(action) {\r\n if (action.action == 'updatePanorama') {\r\n // console.log('## updatePanorama', this.shopData_)\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_1__.VIEW_MODE.PANORAMA, true)\r\n\r\n let tex = this.scene_.environment\r\n if (tex) {\r\n // this.scene_.background = new Color(0xeeeeee)\r\n\r\n // this.scene_.children.filter(c=>c.name == 'sys-env-sphere-')[0].removeFromParent()\r\n\r\n this.mesh_env_sphere__.material.map.dispose()\r\n this.mesh_env_sphere__.removeFromParent()\r\n this.mesh_env_sphere__ = null\r\n\r\n this.scene_.environment = null\r\n tex.dispose()\r\n }\r\n\r\n if (this.shopData_.panorama) {\r\n\r\n let panorama_shelf_exr = this.shopData_.panorama.urlShelfExr\r\n let arr = [{\r\n func: 'setupEnvEquirect', param: {\r\n url: `${this.get_panorama_url_(this.shopData_.panorama)}`,\r\n onAfter: tex => {\r\n // this.scene_.background = tex\r\n // console.log('xx setup env equ', tex, this.w256_)\r\n\r\n let sp = new three__WEBPACK_IMPORTED_MODULE_2__.Mesh(\r\n this.geo_env_sphere__,\r\n new three__WEBPACK_IMPORTED_MODULE_2__.MeshStandardMaterial({\r\n map: tex,\r\n side: three__WEBPACK_IMPORTED_MODULE_2__.BackSide,\r\n // wireframe: true,\r\n fog: false,\r\n // displacementScale: -env_.radius * .992,\r\n // displacementMap: new TextureLoader().load(`${this.prefixAsset_}/env/equirect/${env_.code}-zdepth-1k.png`),\r\n envMap: this.w256_,\r\n // envMapIntensity: 2,\r\n })\r\n )\r\n sp.scale.set(1, 1, -1)\r\n sp.name = 'sys-env-sphere-'\r\n this.scene_.add(sp)\r\n\r\n this.mesh_env_sphere__ = sp\r\n this.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n\r\n if (!panorama_shelf_exr) {\r\n this.scene_.environment = tex\r\n }\r\n\r\n }\r\n }\r\n }]\r\n\r\n if (panorama_shelf_exr) {\r\n // dispose prev!\r\n arr.push({\r\n func: 'setupEnvEquirect', param: {\r\n url: `${panorama_shelf_exr}`,\r\n onAfter: tex => {\r\n this.scene_.environment = tex\r\n }\r\n }\r\n })\r\n }\r\n\r\n this.build_specs__(arr).then(() => {\r\n //\r\n })\r\n\r\n } else {\r\n // remove!\r\n }\r\n } else if (action.action == 'updatePanoramaRotationY') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_1__.VIEW_MODE.PANORAMA, true)\r\n\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n }\r\n } else if (action.action == 'updatePanoramaMultiply') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_1__.VIEW_MODE.PANORAMA, true)\r\n\r\n }\r\n\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/editmode/PanoramaEditMode.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/editor/editmode/PickCellEditMode.js": +/*!*****************************************************************!*\ + !*** ./src/crossyo/shelves/editor/editmode/PickCellEditMode.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PickCellEditMode\": () => (/* binding */ PickCellEditMode)\n/* harmony export */ });\n/* harmony import */ var _EditModeBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EditModeBase */ \"./src/crossyo/shelves/editor/editmode/EditModeBase.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/examples/jsm/controls/TransformControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/TransformControls.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _common_BaseShelve__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/BaseShelve */ \"./src/crossyo/shelves/common/BaseShelve.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nclass PickCellEditMode extends _EditModeBase__WEBPACK_IMPORTED_MODULE_0__.EditModeBase {\r\n\r\n constructor(viewer) {\r\n super(viewer, 'pick-cell')\r\n }\r\n\r\n enter() {\r\n super.enter()\r\n\r\n this.shelve_ = new _common_BaseShelve__WEBPACK_IMPORTED_MODULE_3__.BaseShelve(this.viewer_)\r\n\r\n // super.endLoadSpecs() // 不执行 viewer 的 endLoadSpecs\r\n this.after_add_shelf__()\r\n\r\n this.down_picker__ = e => {\r\n // console.log('downPick', e)\r\n // if (!this.control_.enabled) {\r\n // return\r\n // }\r\n if (e.int0) {\r\n let object = e.int0.object\r\n let hit_ = object.hit_\r\n // if (hit_.type == 'shelf') {\r\n // // this.control_trans__.detach()\r\n // this.control_trans__.attach(this.mesh_shelf__)\r\n // } \r\n if (hit_.type == 'box') {\r\n // this.control_trans__.detach()\r\n\r\n this.active_selected_(object)\r\n\r\n this.viewer_.emit('arrange.selectCell', hit_.cell)\r\n //\r\n\r\n // } else if (hit_.type == 'commodity') {\r\n // this.control_trans__.attach(object)\r\n }\r\n\r\n } else {\r\n this.active_selected_(null)\r\n this.control_trans__.detach()\r\n }\r\n }\r\n\r\n this.picker_.on('downPick', this.down_picker__)\r\n\r\n this.control_trans__ = new three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_1__.TransformControls(this.camera_, this.renderer_.domElement)\r\n // this.control_trans__.addEventListener('change', )\r\n this.control_trans__.addEventListener('dragging-changed', e => {\r\n this.controls_.enabled = !e.value\r\n })\r\n this.control_trans__.addEventListener('objectChange', e => {\r\n // console.log(e, e.target)\r\n let obj = this.control_trans__.object\r\n // if (obj == this.mesh_shelf__) {\r\n // this.shopData_.scene = {\r\n // shelf: to_transform(obj)\r\n // }\r\n // }\r\n })\r\n this.scene_.add(this.control_trans__)\r\n\r\n // console.log(this.shopData_) // 實際上是 arrangement data!\r\n {\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n if (shelf0) {\r\n let cells = shelf0.cells\r\n if (cells) {\r\n cells.filter(cell => (cell && cell.pileWare)).reduce(\r\n (p, cell) => p.then(() => this.shelve_.addWareToCell(cell.pileWare, cell)),\r\n Promise.resolve()\r\n ).then(() => {\r\n // this.emit('loadingCompletion')\r\n\r\n })\r\n return\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n updateAction(action) {\r\n\r\n // console.log('# updateAction', action)\r\n\r\n if (action.action == 'bindCellWare') {\r\n\r\n console.log('bindCellWare', this.shelve_, action)\r\n\r\n this.shelve_.addWareToCell(action.ware, action.cell)\r\n\r\n } else if (action.action == 'unbindCellWare') {\r\n\r\n this.shelve_.removeWareFromCell(action.cell)\r\n\r\n action.cell.pileWare = null\r\n\r\n } else if (action.action == 'updateCellPileNumber') {\r\n\r\n this.shelve_.update_cell_pileNumber_(action.cell)\r\n\r\n } else if (action.action == 'updateCellPileRotationY') {\r\n\r\n this.shelve_.update_cell_pileRotationY_(action.cell)\r\n\r\n }\r\n\r\n }\r\n\r\n after_add_shelf__() {\r\n\r\n this.picker_.emptyHits()\r\n\r\n if (this.mesh_shelf__) {\r\n\r\n // let o3d = this.mesh_shelf__\r\n // let hit_ = { type: 'shelf' }\r\n // // console.log('add_hit__', o3d)\r\n // o3d.traverse(c => {\r\n // if (c.isMesh) {\r\n // if (/^box-\\d-\\d/.test(c.name)) {\r\n // } else if (/^sign-\\d-\\d/.test(c.name)) {\r\n // } else if (/.*-shadow$/.test(c.name)) {\r\n // } else {\r\n // c.hit_ = hit_\r\n // this.picker_.pushHit(c)\r\n // }\r\n // }\r\n // })\r\n\r\n // cells\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_2__.get_shelf_0_)(this.shopData_)\r\n if (shelf0) {\r\n shelf0.cells.forEach(cell => {\r\n\r\n let box = cell.box\r\n // console.log(cell)\r\n let mesh_box = this.prefab__.clone_cell_box()\r\n mesh_box.position.set(box.position.x, box.position.y, box.position.z)\r\n mesh_box.rotation.set(box.rotation.x, box.rotation.y, box.rotation.z)\r\n mesh_box.scale.set(box.size.x, box.size.y, box.size.z)\r\n let mat = new three__WEBPACK_IMPORTED_MODULE_4__.MeshStandardMaterial({\r\n transparent: true,\r\n opacity: .45,\r\n // visible: false,\r\n side: three__WEBPACK_IMPORTED_MODULE_4__.BackSide,\r\n })\r\n\r\n mesh_box.material = mat\r\n this.mesh_shelf__.add(mesh_box)\r\n\r\n mesh_box.hit_ = { type: 'box', cell }\r\n this.picker_.pushHit(mesh_box)\r\n\r\n })\r\n }\r\n\r\n }\r\n\r\n }\r\n \r\n remove_cells_() {\r\n let c = this.mesh_shelf__.children\r\n for (let i = c.length - 1; i >= 0; i--) {\r\n let o = c[i]\r\n if (o.name == 'box-bottom-center') {\r\n this.mesh_shelf__.remove(o)\r\n }\r\n }\r\n console.log('## remove cells', this.mesh_shelf__)\r\n }\r\n\r\n leave() {\r\n\r\n this.picker_.off('downPick', this.down_picker__)\r\n\r\n this.active_selected_(null)\r\n\r\n this.remove_cells_()\r\n\r\n this.shelve_.dispose()\r\n\r\n super.leave()\r\n }\r\n\r\n\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/editmode/PickCellEditMode.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/editor/editmode/TransObjEditMode.js": +/*!*****************************************************************!*\ + !*** ./src/crossyo/shelves/editor/editmode/TransObjEditMode.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TransObjEditMode\": () => (/* binding */ TransObjEditMode)\n/* harmony export */ });\n/* harmony import */ var _EditModeBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EditModeBase */ \"./src/crossyo/shelves/editor/editmode/EditModeBase.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/examples/jsm/controls/TransformControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/TransformControls.js\");\n/* harmony import */ var _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/BaseShelve */ \"./src/crossyo/shelves/common/BaseShelve.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../viewer/ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nconst DEBUG = false // true\r\n\r\nconst trans_axes_ = (trans, arr) => {\r\n trans.showX = arr[0]\r\n trans.showY = arr[1]\r\n trans.showZ = arr[2]\r\n}\r\n\r\nconst axes_def_ = {\r\n 'translate-shelf': trans => { trans_axes_(trans, [true, false, true]) },\r\n 'translate-box': trans => { trans_axes_(trans, [true, true, true]) },\r\n 'translate-sign': trans => { trans_axes_(trans, [true, true, true]) },\r\n 'translate-logo': trans => { trans_axes_(trans, [true, true, true]) },\r\n\r\n 'rotate-shelf': trans => { trans_axes_(trans, [false, true, false]) },\r\n 'rotate-box': trans => { trans_axes_(trans, [false, true, false]) },\r\n 'rotate-sign': trans => { trans_axes_(trans, [false, true, false]) },\r\n\r\n // resize\r\n 'scale-box': trans => { trans_axes_(trans, [true, true, true]) },\r\n}\r\n\r\nconst update_control_trans_axes__ = trans => {\r\n let mode = trans.mode\r\n let obj = trans.object\r\n let obj_type = ''\r\n if (obj.hit_) {\r\n obj_type = obj.hit_.type\r\n } else if (obj.grp_hit_cell_) {\r\n obj_type = 'box'\r\n } else if (obj.name == 'shelf__') {\r\n obj_type = 'shelf'\r\n }\r\n let key = `${mode}-${obj_type}`\r\n // console.log(key)\r\n let f = axes_def_[key]\r\n if (f) {\r\n f(trans)\r\n }\r\n\r\n if (obj_type == 'box') {\r\n if (mode == 'scale') {\r\n // console.log('scale-box', obj)\r\n if (obj.grp_hit_cell_) {\r\n let box = obj.children.filter(c => c.hit_ && c.hit_.type == 'box')[0]\r\n if (box) {\r\n trans.attach(box)\r\n }\r\n }\r\n } else {\r\n if (!obj.grp_hit_cell_ && obj.parent.grp_hit_cell_) {\r\n trans.attach(obj.parent)\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nclass TransObjEditMode extends _EditModeBase__WEBPACK_IMPORTED_MODULE_0__.EditModeBase {\r\n\r\n constructor(viewer) {\r\n super(viewer, 'trans-obj')\r\n }\r\n\r\n enter() {\r\n super.enter()\r\n this.control_trans__ = null\r\n\r\n this.after_add_shelf__()\r\n\r\n this.down_picker__ = e => {\r\n // console.log('downPick', e)\r\n // if (!this.control_.enabled) {\r\n // return\r\n // }\r\n\r\n // console.log(this.control_trans__.axis)\r\n if (this.control_trans__.axis) { // control trans 优先级更高\r\n return\r\n }\r\n\r\n if (e.int0) {\r\n let object = e.int0.object\r\n let hit_ = object.hit_\r\n if (hit_.type == 'shelf') {\r\n // this.control_trans__.detach()\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(this.mesh_shelf__)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n if (DEBUG) {\r\n this.active_selected_(object)\r\n }\r\n\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n this.orbit_update_for_(object)\r\n }\r\n\r\n this.shopData_.ext__.selectedShelf = true\r\n this.shopData_.ext__.selectedCell = null\r\n\r\n } else if (hit_.type == 'box'\r\n || hit_.type == 'sign'\r\n || hit_.type == 'logo'\r\n ) {\r\n // this.control_trans__.detach()\r\n this.control_trans__.showY = true\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(object)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n\r\n this.control_trans__.mode = 'translate'\r\n if (hit_.type == 'box') {\r\n this.control_trans__.attach(object.parent) // grp cell\r\n } else {\r\n this.control_trans__.attach(object)\r\n }\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n }\r\n\r\n if (DEBUG) {\r\n this.active_selected_(object)\r\n }\r\n\r\n // console.log(hit_)\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = hit_.cell\r\n this.shopData_.ext__.selectedCellSubName = hit_.type\r\n\r\n // this.changeViewMode(VIEW_MODE.ORBIT)\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n if (hit_.type == 'box') {\r\n this.orbit_update_for_(object)\r\n } else {\r\n this.orbit_update_for_(object.parent)\r\n }\r\n }\r\n\r\n }\r\n\r\n } else {\r\n\r\n if (DEBUG) {\r\n this.active_selected_(null)\r\n }\r\n\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // this.changeViewMode(VIEW_MODE.PANORAMA)\r\n\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = null\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n this.picker_.on('downPick', this.down_picker__)\r\n\r\n this.control_trans__ = new three_examples_jsm_controls_TransformControls__WEBPACK_IMPORTED_MODULE_1__.TransformControls(this.camera_, this.renderer_.domElement)\r\n // console.log(this.control_trans__)\r\n this.control_trans__.space = 'local'\r\n\r\n // this.control_trans__.addEventListener('change', )\r\n this.control_trans__.addEventListener('dragging-changed', e => {\r\n this.controls_.enabled = !e.value\r\n })\r\n this.control_trans__.addEventListener('objectChange', e => {\r\n // console.log(e, e.target)\r\n let obj = this.control_trans__.object\r\n if (obj == this.mesh_shelf__) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform)(obj, (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.get_shelf_0_)(this.shopData_))\r\n } else if (obj.grp_hit_cell_) { // group (translate, rotate)\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_box_inherited)(obj, obj.grp_hit_cell_.box)\r\n } else {\r\n let hit_ = obj.hit_\r\n if (hit_) {\r\n if (hit_.type == 'box') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_box)(obj, hit_.cell.box)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) { // \r\n\r\n // group / box mesh (scale) -> resize\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_box_inherited)(obj, obj.parent.grp_hit_cell_.box)\r\n\r\n }\r\n } else if (hit_.type == 'sign') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_sign)(obj, hit_.cell.sign)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_sign)(obj, hit_.cell.box.child.sign)\r\n }\r\n } else if (hit_.type == 'logo') {\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_logo)(obj, hit_.cell.logo)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform_cell_logo)(obj, hit_.cell.box.child.logo)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n this.scene_.add(this.control_trans__)\r\n\r\n // this.control_trans__.showY = false\r\n\r\n {\r\n this.keydown_615__ = event => {\r\n // console.log(event)\r\n if (event.keyCode == 27) {\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA)\r\n this.control_trans__.detach()\r\n }\r\n }\r\n window.addEventListener('keydown', this.keydown_615__)\r\n }\r\n\r\n }\r\n\r\n updateAction(action) {\r\n\r\n // console.log('# updateAction', action)\r\n\r\n if (action.action == 'updateShelf') {\r\n\r\n this.changeViewMode(_viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.PANORAMA, true)\r\n\r\n // remove!\r\n if (this.mesh_shelf__) {\r\n\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // \r\n\r\n // TODO dispose!\r\n\r\n this.mesh_shelf__.removeFromParent()\r\n this.mesh_shelf__ = null\r\n\r\n }\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.get_shelf_0_)(this.shopData_)\r\n if (shelf0 && shelf0.url) {\r\n\r\n let shelf_url = shelf0.url\r\n this.build_specs__([{\r\n func: 'setupModelGltf', param: {\r\n path: shelf_url.substr(0, shelf_url.lastIndexOf('/')),\r\n name: shelf_url.substr(shelf_url.lastIndexOf('/')),\r\n onAfter: o3d => {\r\n\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n if (c.material.aoMap) {\r\n c.material.lightMap = c.material.aoMap\r\n // c.material.aoMap = null\r\n c.material.lightMapIntensity = .5\r\n }\r\n c.material.side = three__WEBPACK_IMPORTED_MODULE_5__.FrontSide\r\n }\r\n // 兼容 v1\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n c.visible = false\r\n }\r\n })\r\n\r\n o3d.rotation.set(0, - Math.PI / 2, 0)\r\n o3d.position.set(2.7, -1, 0)\r\n\r\n this.scene_.add(o3d)\r\n\r\n this.mesh_shelf__ = o3d\r\n\r\n // .$model__ = o3d\r\n // this.shopData_.shelf.get_model__ = () => {\r\n // return o3d\r\n // }\r\n\r\n // this.control_trans__.detach()\r\n\r\n this.control_trans__.mode = 'translate'\r\n this.control_trans__.attach(this.mesh_shelf__)\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n // { // TEMP for v1 to v3, 解些老的数据,并且生成新的cells数据,copy to store/shelves 列表中\r\n // this.shopData_.shelf.cells = parse_v3_cells_from_v1_shelf_model_(o3d)\r\n // }\r\n\r\n this.after_add_shelf__()\r\n\r\n ;(0,_common_util__WEBPACK_IMPORTED_MODULE_3__.write_transform)(o3d, shelf0)\r\n\r\n }\r\n }\r\n }])\r\n\r\n } else {\r\n\r\n // remove\r\n this.control_trans__.detach()\r\n\r\n }\r\n\r\n } else if (action.action == 'deleteCell') {\r\n\r\n // console.log('delete cell', action)\r\n this.control_trans__.detach()\r\n this.controls_.enabled = true\r\n\r\n // c.hit_.type == 'box'\r\n // this.mesh_shelf__.children.filter(c => (c.hit_ && c.hit_.cell == action.cell)).forEach(c => {\r\n // // let removed = \r\n // this.picker_.spliceHit(c)\r\n // // console.log('removed', removed)\r\n // c.removeFromParent()\r\n // })\r\n\r\n let subs = action.cell.getSubs()\r\n if (subs.sign) {\r\n this.picker_.spliceHit(subs.sign)\r\n subs.sign.removeFromParent()\r\n }\r\n if (subs.logo) {\r\n this.picker_.spliceHit(subs.logo)\r\n subs.logo.removeFromParent()\r\n }\r\n this.picker_.spliceHit(subs.box)\r\n subs.box.removeFromParent()\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.get_shelf_0_)(this.shopData_)\r\n shelf0.cells.splice(action.idx, 1)\r\n\r\n } else if (action.action == 'addCell') {\r\n\r\n if (!this.mesh_shelf__) {\r\n console.warn('需要首先有个货架!')\r\n return\r\n }\r\n\r\n // console.log('add cell')\r\n\r\n let bbx = new three__WEBPACK_IMPORTED_MODULE_5__.Box3().expandByObject(this.mesh_shelf__)\r\n let cnt = bbx.getCenter(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n let size = bbx.getSize(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n\r\n // this.mesh_shelf__.add()\r\n let spos = this.mesh_shelf__.position\r\n // console.log(cnt, size, spos)\r\n\r\n let cell = {\r\n name: '?-?',\r\n box: {\r\n // x 向前一些\r\n position: { x: 0, y: cnt.y + size.y / 2 - spos.y, z: .45 },\r\n scale: { x: 1, y: 1, z: 1 },\r\n rotation: { x: 0, y: 0, z: 0 },\r\n size: { x: .3736, y: .2259, z: .2179 },\r\n // child: {}\r\n },\r\n }\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n // 没有测过,有问题,目前也不用到!\r\n // cell.sign = { // 相对于 box的位置\r\n // position: { x: 1, y: 1, z: 1 },\r\n // scale: { x: 1, y: 1, z: 1 },\r\n // rotation: { x: 0, y: 0, z: 0 },\r\n // }\r\n // cell.logo = { // 相对于 box的位置\r\n // position: { x: 1, y: 1, z: 1 }\r\n // }\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n cell.box.child = {\r\n sign: {\r\n position: { x: -0.006, y: -0.064, z: 0.1847 },\r\n rotation: { x: 0, y: 0, z: 0 },\r\n scale: { x: 1, y: 1, z: 1 },\r\n },\r\n logo: {\r\n position: { x: 0, y: 0.15, z: 0 }\r\n }\r\n }\r\n }\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.get_shelf_0_)(this.shopData_)\r\n shelf0.cells.push(cell)\r\n\r\n this.add_cell__(shelf0.cells[shelf0.cells.length - 1]) // 从proxy数据中取出!\r\n\r\n } else if (action.action == 'selectCell') {\r\n\r\n // console.log('select cell', action) // cell, subName\r\n\r\n let cell = action.cell\r\n this.shopData_.ext__.selectedShelf = false\r\n this.shopData_.ext__.selectedCell = cell\r\n this.shopData_.ext__.selectedCellSubName = action.subName\r\n let subs = cell.getSubs()\r\n\r\n this.control_trans__.mode = 'translate'\r\n if (action.subName == 'box') {\r\n\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n this.control_trans__.attach(subs.box)\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n this.control_trans__.attach(subs.box.parent)\r\n }\r\n\r\n } else if (action.subName == 'sign') {\r\n if (subs.sign) {\r\n this.control_trans__.attach(subs.sign)\r\n }\r\n } else if (action.subName == 'logo') {\r\n if (subs.logo) {\r\n this.control_trans__.attach(subs.logo)\r\n }\r\n }\r\n update_control_trans_axes__(this.control_trans__)\r\n\r\n // this.changeViewMode(VIEW_MODE.ORBIT)\r\n\r\n if (this.viewMode__ == _viewer_ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_4__.VIEW_MODE.ORBIT) {\r\n if (action.subName == 'box') {\r\n this.orbit_update_for_(subs.box)\r\n } else if (action.subName == 'sign') {\r\n this.orbit_update_for_(subs.sign)\r\n } else if (action.subName == 'logo') {\r\n this.orbit_update_for_(subs.logo)\r\n }\r\n }\r\n\r\n } else if (action.action == 'transformTranslate') {\r\n // console.log('xx transformTranslate')\r\n this.control_trans__.mode = 'translate'\r\n update_control_trans_axes__(this.control_trans__)\r\n } else if (action.action == 'transformRotate') {\r\n // console.log('xx transformRotate')\r\n this.control_trans__.mode = 'rotate'\r\n update_control_trans_axes__(this.control_trans__)\r\n } else if (action.action == 'transformResize') {\r\n // console.log('xx transformResize')\r\n this.control_trans__.mode = 'scale'\r\n update_control_trans_axes__(this.control_trans__)\r\n }\r\n }\r\n\r\n\r\n after_add_shelf__() {\r\n\r\n this.picker_.emptyHits()\r\n\r\n if (this.mesh_shelf__) {\r\n\r\n let o3d = this.mesh_shelf__\r\n let hit_ = { type: 'shelf' }\r\n // console.log('add_hit__', o3d)\r\n o3d.traverse(c => {\r\n if (c.isMesh) {\r\n if (/^box-\\d-\\d/.test(c.name)) {\r\n } else if (/^sign-\\d-\\d/.test(c.name)) {\r\n } else if (/.*-shadow$/.test(c.name)) {\r\n } else {\r\n c.hit_ = hit_\r\n this.picker_.pushHit(c)\r\n }\r\n }\r\n })\r\n\r\n // cells\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_3__.get_shelf_0_)(this.shopData_)\r\n if (!shelf0.cells) {\r\n console.warn('# after add shelf cells null, maybe error runtime path!')\r\n shelf0.cells = []\r\n }\r\n shelf0.cells.forEach(cell => {\r\n this.add_cell__(cell)\r\n })\r\n\r\n }\r\n\r\n }\r\n\r\n add_cell__(cell) {\r\n\r\n let box = cell.box\r\n // console.log('add_cell__', cell)\r\n\r\n let grp_cell = new three__WEBPACK_IMPORTED_MODULE_5__.Object3D()\r\n grp_cell.name = 'grp-cell-'\r\n grp_cell.grp_hit_cell_ = cell\r\n grp_cell.position.set(box.position.x, box.position.y, box.position.z)\r\n grp_cell.rotation.set(box.rotation.x, box.rotation.y, box.rotation.z)\r\n this.mesh_shelf__.add(grp_cell)\r\n\r\n let mesh_box = this.prefab__.clone_cell_box()\r\n // mesh_box.position.set(box.position.x, box.position.y, box.position.z)\r\n mesh_box.scale.set(box.size.x, box.size.y, box.size.z)\r\n\r\n // this.mesh_shelf__.add(mesh_box)\r\n\r\n grp_cell.add(mesh_box)\r\n\r\n mesh_box.hit_ = { type: 'box', cell }\r\n this.picker_.pushHit(mesh_box)\r\n\r\n let mesh_sign = null\r\n let mesh_logo = null\r\n if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.STANDALONE) {\r\n } else if (_common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.CELL_HIERARCHY == _common_BaseShelve__WEBPACK_IMPORTED_MODULE_2__.HIERARCHY_TYPE.INHERITED) {\r\n {\r\n let sign = box.child.sign\r\n\r\n mesh_sign = this.prefab__.clone_sign()\r\n mesh_sign.position.set(sign.position.x, sign.position.y, sign.position.z)\r\n // console.log(JSON.stringify(sign.rotation))\r\n mesh_sign.rotation.set(sign.rotation.x, sign.rotation.y, sign.rotation.z)\r\n grp_cell.add(mesh_sign)\r\n\r\n mesh_sign.hit_ = { type: 'sign', cell }\r\n this.picker_.pushHit(mesh_sign)\r\n }\r\n //\r\n {\r\n let logo = box.child.logo\r\n\r\n // mesh_logo = new Mesh(new BoxBufferGeometry(.1, .04, .005), this.get_plastic_logo_material__())\r\n mesh_logo = this.prefab__.clone_logo()\r\n mesh_logo.position.set(logo.position.x, logo.position.y, logo.position.z)\r\n grp_cell.add(mesh_logo)\r\n\r\n mesh_logo.hit_ = { type: 'logo', cell }\r\n this.picker_.pushHit(mesh_logo)\r\n }\r\n }\r\n\r\n cell.getSubs = function () {\r\n return {\r\n box: mesh_box,\r\n sign: mesh_sign,\r\n logo: mesh_logo,\r\n }\r\n }\r\n\r\n }\r\n \r\n remove_cells_() {\r\n let c = this.mesh_shelf__.children\r\n for (let i = c.length - 1; i >= 0; i--) {\r\n let o = c[i]\r\n if (o.name == 'grp-cell-') {\r\n this.mesh_shelf__.remove(o)\r\n }\r\n }\r\n // console.log('## after remove cells', this.mesh_shelf__)\r\n }\r\n\r\n leave() {\r\n\r\n window.removeEventListener('keydown', this.keydown_615__)\r\n this.control_trans__.detach()\r\n this.scene_.remove(this.control_trans__)\r\n this.picker_.off('downPick', this.down_picker__)\r\n\r\n this.remove_cells_()\r\n\r\n super.leave()\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/editor/editmode/TransObjEditMode.js?"); /***/ }), @@ -520,7 +597,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Previewer\": () => (/* reexport safe */ _previewer_Previewer__WEBPACK_IMPORTED_MODULE_1__.Previewer),\n/* harmony export */ \"ShopEditor\": () => (/* reexport safe */ _editor_ShopHallEditor__WEBPACK_IMPORTED_MODULE_3__.ShopHallEditor),\n/* harmony export */ \"ShopSurveyViewer\": () => (/* reexport safe */ _viewer_ShopHallSurveyViewer__WEBPACK_IMPORTED_MODULE_2__.ShopHallSurveyViewer),\n/* harmony export */ \"clone_except_ext\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.clone_except_ext),\n/* harmony export */ \"get_is_hall_\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.get_is_hall_),\n/* harmony export */ \"get_shelf_0_\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.get_shelf_0_),\n/* harmony export */ \"isMobile\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.isMobile),\n/* harmony export */ \"use_ext\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.use_ext)\n/* harmony export */ });\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _previewer_Previewer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./previewer/Previewer */ \"./src/crossyo/shelves/previewer/Previewer.js\");\n/* harmony import */ var _viewer_ShopHallSurveyViewer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./viewer/ShopHallSurveyViewer */ \"./src/crossyo/shelves/viewer/ShopHallSurveyViewer.js\");\n/* harmony import */ var _editor_ShopHallEditor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./editor/ShopHallEditor */ \"./src/crossyo/shelves/editor/ShopHallEditor.js\");\n\r\n\r\n\r\n// import { ShopPanoSurveyViewer_ } from './viewer/ShopPanoSurveyViewer_'\r\n\r\n// import { ShopPanoEditor_ } from './editor/ShopPanoEditor_'\r\n\r\n\r\n// import { GUI } from 'three/examples/jsm/libs//lil-gui.module.min'\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/lib.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Previewer\": () => (/* reexport safe */ _previewer_Previewer__WEBPACK_IMPORTED_MODULE_1__.Previewer),\n/* harmony export */ \"ShopEditor\": () => (/* reexport safe */ _editor_ShopHallEditor__WEBPACK_IMPORTED_MODULE_3__.ShopHallEditor),\n/* harmony export */ \"ShopSurveyViewer\": () => (/* reexport safe */ _viewer_ShopHallSurveyViewer__WEBPACK_IMPORTED_MODULE_2__.ShopHallSurveyViewer),\n/* harmony export */ \"activePropName_to_activeEditModeName\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.activePropName_to_activeEditModeName),\n/* harmony export */ \"append_default_shop_data_\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.append_default_shop_data_),\n/* harmony export */ \"clone_except_ext\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.clone_except_ext),\n/* harmony export */ \"get_is_hall_\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.get_is_hall_),\n/* harmony export */ \"get_shelf_0_\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.get_shelf_0_),\n/* harmony export */ \"isMobile\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.isMobile),\n/* harmony export */ \"use_ext\": () => (/* reexport safe */ _common_util__WEBPACK_IMPORTED_MODULE_0__.use_ext)\n/* harmony export */ });\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _previewer_Previewer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./previewer/Previewer */ \"./src/crossyo/shelves/previewer/Previewer.js\");\n/* harmony import */ var _viewer_ShopHallSurveyViewer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./viewer/ShopHallSurveyViewer */ \"./src/crossyo/shelves/viewer/ShopHallSurveyViewer.js\");\n/* harmony import */ var _editor_ShopHallEditor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./editor/ShopHallEditor */ \"./src/crossyo/shelves/editor/ShopHallEditor.js\");\n\r\n\r\n\r\n// import { ShopPanoSurveyViewer_ } from './viewer/ShopPanoSurveyViewer_'\r\n\r\n// import { ShopPanoEditor_ } from './editor/ShopPanoEditor_'\r\n\r\n\r\n// import { GUI } from 'three/examples/jsm/libs//lil-gui.module.min'\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/lib.js?"); /***/ }), @@ -535,6 +612,39 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/crossyo/shelves/si/SiBase.js": +/*!******************************************!*\ + !*** ./src/crossyo/shelves/si/SiBase.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SiBase\": () => (/* binding */ SiBase)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\nclass SiBase extends three__WEBPACK_IMPORTED_MODULE_1__.Object3D {\r\n\r\n constructor() {\r\n super()\r\n }\r\n\r\n load_data_(d) {\r\n // console.log('## load_data_', JSON.parse(JSON.stringify(d)))\r\n (0,_common_util__WEBPACK_IMPORTED_MODULE_0__.apply_transform)(this, d)\r\n // console.log(this.position)\r\n this.data_ = d\r\n }\r\n\r\n dispose() {\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/si/SiBase.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/si/SiObjects.js": +/*!*********************************************!*\ + !*** ./src/crossyo/shelves/si/SiObjects.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SiObjects\": () => (/* binding */ SiObjects)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _common_TexturesCacheSp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/TexturesCacheSp */ \"./src/crossyo/shelves/common/TexturesCacheSp.js\");\n/* harmony import */ var _SiRotSprite__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SiRotSprite */ \"./src/crossyo/shelves/si/SiRotSprite.js\");\n\r\n\r\n\r\n\r\nclass SiObjects extends three__WEBPACK_IMPORTED_MODULE_2__.Object3D {\r\n\r\n constructor(viewer) {\r\n super()\r\n this.viewer_ = viewer\r\n this.objects__ = null\r\n this.tex_sp_cache_ = new _common_TexturesCacheSp__WEBPACK_IMPORTED_MODULE_0__.TexturesCacheSp(viewer)\r\n }\r\n\r\n attach_specs_for_load_(objects, arr) {\r\n this.objects__ = objects\r\n\r\n // console.log('## attach_specs_for_load_', this.objects__)\r\n\r\n arr.push({\r\n func: 'setupCustomization', param: {\r\n onDoing: next => {\r\n\r\n this.setup_()\r\n\r\n next()\r\n }\r\n }\r\n })\r\n\r\n\r\n\r\n }\r\n\r\n setup_() {\r\n\r\n this.objects__.forEach(obj => {\r\n\r\n let rs = new _SiRotSprite__WEBPACK_IMPORTED_MODULE_1__.SiRotSprite()\r\n rs.load_data_(obj, this.viewer_, this.tex_sp_cache_)\r\n\r\n this.add(rs)\r\n\r\n })\r\n\r\n this.viewer_.scene_.add(this)\r\n\r\n // let axes = new AxesHelper()\r\n // axes.position.set(0,.1,0)\r\n // this.viewer_.scene_.add(axes)\r\n\r\n }\r\n\r\n dispose() {\r\n this.children.forEach(c => {\r\n c.dispose()\r\n })\r\n this.tex_sp_cache_.dispose()\r\n }\r\n\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/si/SiObjects.js?"); + +/***/ }), + +/***/ "./src/crossyo/shelves/si/SiRotSprite.js": +/*!***********************************************!*\ + !*** ./src/crossyo/shelves/si/SiRotSprite.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SiRotSprite\": () => (/* binding */ SiRotSprite),\n/* harmony export */ \"parseRotSpriteUrl\": () => (/* binding */ parseRotSpriteUrl)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var _SiBase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SiBase */ \"./src/crossyo/shelves/si/SiBase.js\");\n\r\n\r\n\r\nclass XSpriteMaterial extends three__WEBPACK_IMPORTED_MODULE_1__.MeshBasicMaterial {\r\n\r\n constructor(param) {\r\n super(param)\r\n // console.log(this.map)\r\n }\r\n\r\n onBeforeCompile(shaderObject, renderer) {\r\n // console.log(shaderObject.vertexShader)\r\n // console.log(shaderObject.fragmentShader)\r\n\r\n\r\n }\r\n}\r\n\r\nconst parseRotSpriteUrl = (url, idx = 0) => {\r\n return url.replace('$2', (1000 + idx).toString().substring(2))\r\n}\r\n\r\nlet geo_plane__ = null\r\nconst get_geo_plane_ = () => {\r\n if (!geo_plane__) {\r\n geo_plane__ = new three__WEBPACK_IMPORTED_MODULE_1__.PlaneGeometry()\r\n }\r\n return geo_plane__\r\n}\r\n\r\nclass SiRotSprite extends _SiBase__WEBPACK_IMPORTED_MODULE_0__.SiBase {\r\n\r\n constructor() {\r\n super()\r\n }\r\n\r\n load_data_(d, viewer, tex_sp_cache) {\r\n super.load_data_(d)\r\n this.viewer_ = viewer\r\n this.tex_sp_cache_ = tex_sp_cache\r\n this.setup_()\r\n }\r\n\r\n setup_() {\r\n // let axes = new AxesHelper()\r\n // axes.position.set(0, .1, 0)\r\n // this.add(axes)\r\n\r\n let d = this.data_\r\n // console.log('## rot sp data_', d)\r\n\r\n let step_angle_ = Math.PI * 2 / d.rsFrames\r\n let half_step_angle_ = step_angle_ / 2\r\n\r\n let geo = get_geo_plane_()\r\n this.mat__ = new XSpriteMaterial({\r\n transparent: true,\r\n })\r\n let sp = new three__WEBPACK_IMPORTED_MODULE_1__.Mesh(geo, this.mat__)\r\n sp.position.set(0, d.rsCenterY * d.rsHeight, 0)\r\n // sp.center.set(.5, d.rsCenterY)\r\n sp.scale.set(d.rsWidth, d.rsHeight, 1)\r\n this.add(sp)\r\n\r\n //\r\n let prev_i_a_ = -1\r\n this.on_update_ = e => {\r\n // console.log(e.position)\r\n\r\n // this.position\r\n\r\n let angle = Math.atan2(e.position.x - this.position.x, e.position.z - this.position.z)\r\n let frame_angle = angle\r\n if (d.rsClockwise) {\r\n frame_angle = -angle\r\n }\r\n\r\n let f_a = frame_angle / step_angle_ + half_step_angle_\r\n let i_a = Math.floor(f_a)\r\n if (i_a < 0) {\r\n i_a += d.rsFrames\r\n }\r\n\r\n // let m_a = f_a - i_a\r\n // console.log(angle, i_a, m_a)\r\n\r\n if (i_a != prev_i_a_) {\r\n prev_i_a_ = i_a\r\n\r\n // console.log(i_a)\r\n this.update_by_eye_(i_a)\r\n\r\n // this.rotation.set(0, angle, 0) // 不连续\r\n }\r\n\r\n this.rotation.set(0, angle, 0) // 连续\r\n\r\n }\r\n this.on_update_({\r\n position: this.viewer_.camera_.position.clone()\r\n })\r\n\r\n this.viewer_.on('roughViewChanged', this.on_update_)\r\n }\r\n\r\n\r\n update_by_eye_(i_a) {\r\n let d = this.data_\r\n let url = parseRotSpriteUrl(d.url, i_a)\r\n\r\n this.tex_sp_cache_.find({url}).then(tex=>{\r\n this.mat__.map = tex\r\n this.mat__.needsUpdate = true\r\n })\r\n\r\n }\r\n\r\n dispose() {\r\n // console.log('SiRotSprite dispose')\r\n this.viewer_.off('roughViewChanged', this.on_update_)\r\n\r\n }\r\n\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/si/SiRotSprite.js?"); + +/***/ }), + /***/ "./src/crossyo/shelves/viewer/BehaviorQueue.js": /*!*****************************************************!*\ !*** ./src/crossyo/shelves/viewer/BehaviorQueue.js ***! @@ -553,7 +663,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HallShelvesViewer\": () => (/* binding */ HallShelvesViewer)\n/* harmony export */ });\n/* harmony import */ var kutsi_floor_deco_controls_MovementConstrainFPSControls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kutsi-floor-deco/controls/MovementConstrainFPSControls */ \"./src-kutsi-floor-deco/crossyo/kutsi/controls/MovementConstrainFPSControls.js\");\n/* harmony import */ var kutsi_floor_deco_controls_WASDDirectionMovement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! kutsi-floor-deco/controls/WASDDirectionMovement */ \"./src-kutsi-floor-deco/crossyo/kutsi/controls/WASDDirectionMovement.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _ShelvesViewer___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ShelvesViewer_ */ \"./src/crossyo/shelves/viewer/ShelvesViewer_.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n// -----------------------------------------------------------------------------\r\n\r\n\r\n\r\n// import { SpaceMeshConstrain } from \"kutsi-floor-deco/controls/SpaceMeshConstrain\"\r\n\r\n\r\n\r\nclass FPSa extends kutsi_floor_deco_controls_MovementConstrainFPSControls__WEBPACK_IMPORTED_MODULE_0__.MovementConstrainFPSControls {\r\n\r\n\tconstructor(object, domElement) {\r\n\t\tsuper(object, domElement)\r\n\t\tthis.movement_ = new kutsi_floor_deco_controls_WASDDirectionMovement__WEBPACK_IMPORTED_MODULE_1__.WASDDirectionMovement(this, {\r\n\t\t\tuseKeyboard: !_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile,\r\n\t\t\tuseMouse: !_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile,\r\n\t\t})\r\n\t\tthis.movement_.speedScale = 1 / 32\r\n\t\t// this.constrain_ = \r\n\t}\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\n\r\n\r\n\r\n\r\nclass HallShelvesViewer extends _ShelvesViewer___WEBPACK_IMPORTED_MODULE_3__.ShelvesViewer_ {\r\n\r\n\tconstructor(opts) {\r\n\t\tsuper(opts)\r\n\t\tthis.is_hall__ = opts.is_hall__\r\n\t}\r\n\r\n\tspecs_item_cust_controls_(arr) {\r\n\t\tif (!this.is_hall__) {\r\n\t\t\tsuper.specs_item_cust_controls_(arr)\r\n\t\t} else {\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\t\tonDoing: next => {\r\n\r\n\t\t\t\t\t\t// this.camera_.position.set(0, 1.5, -4)\r\n\t\t\t\t\t\t// this.camera_.lookAt(0, 1.5, 0)\r\n\r\n\t\t\t\t\t\tthis.camera_.position.set(1.97, 1.50, -2.52)\r\n\t\t\t\t\t\tthis.camera_.lookAt(1.23, 1.50, -1.86)\r\n\r\n\t\t\t\t\t\tthis.changeControls(\r\n\t\t\t\t\t\t\tnew FPSa(this.camera_, this.renderer_.domElement)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\tthis.controls_.enabled = true\r\n\t\t\t\t\t\tnext()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tspecs_shop_data_base_(arr) {\r\n\t\tif (!this.is_hall__) {\r\n\t\t\tsuper.specs_shop_data_base_(arr)\r\n\t\t} else {\r\n\t\t\tif (this.shopData_ && this.shopData_.hall) {\r\n\r\n\t\t\t\tlet hall = this.shopData_.hall\r\n\r\n\t\t\t\tif (hall.urlEnvExr) {\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\t\t\turl: hall.urlEnvExr,\r\n\t\t\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\t\t\t\tonDoing: next => {\r\n\t\t\t\t\t\t\t\tthis.scene_.environment = this.w256_\r\n\t\t\t\t\t\t\t\tnext()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// arr.push({\r\n\t\t\t\t// \tfunc: 'setupEnvironment', param: {\r\n\t\t\t\t// \t\tdebug: true,\r\n\t\t\t\t// \t\t// skyType: 0,\r\n\t\t\t\t// \t\t// toneMapping: this.theme_.toneMapping,\r\n\t\t\t\t// \t\t// exposure: this.theme_.exposure,\r\n\t\t\t\t// \t}\r\n\t\t\t\t// })\r\n\r\n\t\t\t\t// console.log('## hall', this.shopData_.hall)\r\n\r\n\t\t\t\tlet hall_url = hall.url\r\n\t\t\t\tarr.push({\r\n\t\t\t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t\t\t\t\tpath: hall_url.substr(0, hall_url.lastIndexOf('/')),\r\n\t\t\t\t\t\tname: hall_url.substr(hall_url.lastIndexOf('/')),\r\n\t\t\t\t\t\tonAfter: o3d => {\r\n\r\n\t\t\t\t\t\t\to3d.traverse(c => {\r\n\t\t\t\t\t\t\t\tif (c.isMesh) {\r\n\t\t\t\t\t\t\t\t\tlet mat = c.material\r\n\t\t\t\t\t\t\t\t\tmat.side = three__WEBPACK_IMPORTED_MODULE_4__.FrontSide\r\n\r\n\t\t\t\t\t\t\t\t\tif (mat.aoMap) {\r\n\t\t\t\t\t\t\t\t\t\t// {// use as diffuse\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.aoMap = null\r\n\t\t\t\t\t\t\t\t\t\t// \tc.geometry.attributes.uv = c.geometry.attributes.uv2\r\n\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t// {// use as lightmap\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.lightMap = mat.aoMap\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.aoMap = null\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.map = null\r\n\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t{// use only ao, means bake diffuse to ao\r\n\t\t\t\t\t\t\t\t\t\t\tmat.map = null\r\n\t\t\t\t\t\t\t\t\t\t\t// mat.aoMapIntensity = 1.3 // 通透,但是噪点多\r\n\t\t\t\t\t\t\t\t\t\t\t// mat.aoMapIntensity = 1.07\r\n\t\t\t\t\t\t\t\t\t\t\tmat.envMapIntensity = 5.7\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tmat.envMapIntensity = hall.multiply\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t{// ao to diffuse\r\n\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// console.log(mat)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\tthis.scene_.add(o3d)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t// arr.push({\r\n\t\t\t\t// \tfunc: 'setupLight', param: {\r\n\t\t\t\t// \t\taoMax: 2,\r\n\t\t\t\t// \t\tlightMax: 2,\r\n\t\t\t\t// \t\tenvMax: 4,\r\n\t\t\t\t// \t}\r\n\t\t\t\t// })\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tdoJoystick(e) {\r\n\t\t// console.log(e)\r\n\t\tlet mov = this.controls_.movement_\r\n\t\tif (mov) {\r\n\t\t\tmov.forward = mov.backward = mov.left = mov.right = false\r\n\t\t\t// if (e.direction) {\r\n\t\t\t// mov[e.direction.toLowerCase()] = true\r\n\t\t\t// }\r\n\r\n\t\t\t// e -> x, y, speed, angle\r\n\t\t\tlet dxy = Math.abs(e.x) - Math.abs(e.y)\r\n\t\t\tif (dxy > 0) { // x 移动\r\n\t\t\t\tif (e.x < 0) {\r\n\t\t\t\t\tmov.left = true\r\n\t\t\t\t} else { // > 0\r\n\t\t\t\t\tmov.right = true\r\n\t\t\t\t}\r\n\t\t\t} else if (dxy < 0) { // y 移动\r\n\t\t\t\tif (e.y < 0) {\r\n\t\t\t\t\tmov.forward = true\r\n\t\t\t\t} else { // > 0\r\n\t\t\t\t\tmov.backward = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/HallShelvesViewer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HallShelvesViewer\": () => (/* binding */ HallShelvesViewer)\n/* harmony export */ });\n/* harmony import */ var kutsi_floor_deco_controls_MovementConstrainFPSControls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kutsi-floor-deco/controls/MovementConstrainFPSControls */ \"./src-kutsi-floor-deco/crossyo/kutsi/controls/MovementConstrainFPSControls.js\");\n/* harmony import */ var kutsi_floor_deco_controls_WASDDirectionMovement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! kutsi-floor-deco/controls/WASDDirectionMovement */ \"./src-kutsi-floor-deco/crossyo/kutsi/controls/WASDDirectionMovement.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _ShelvesViewer___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ShelvesViewer_ */ \"./src/crossyo/shelves/viewer/ShelvesViewer_.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n\r\n// -----------------------------------------------------------------------------\r\n\r\n\r\n\r\n// import { SpaceMeshConstrain } from \"kutsi-floor-deco/controls/SpaceMeshConstrain\"\r\n\r\n\r\n\r\nclass FPSa extends kutsi_floor_deco_controls_MovementConstrainFPSControls__WEBPACK_IMPORTED_MODULE_0__.MovementConstrainFPSControls {\r\n\r\n\tconstructor(object, domElement) {\r\n\t\tsuper(object, domElement)\r\n\t\tthis.movement_ = new kutsi_floor_deco_controls_WASDDirectionMovement__WEBPACK_IMPORTED_MODULE_1__.WASDDirectionMovement(this, {\r\n\t\t\tuseKeyboard: !_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile,\r\n\t\t\tuseMouse: !_common_util__WEBPACK_IMPORTED_MODULE_2__.isMobile,\r\n\t\t})\r\n\t\tthis.movement_.speedScale = 1 / 32\r\n\t\t// this.constrain_ = \r\n\t}\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\n\r\n\r\n\r\n\r\nclass HallShelvesViewer extends _ShelvesViewer___WEBPACK_IMPORTED_MODULE_3__.ShelvesViewer_ {\r\n\r\n\tconstructor(opts) {\r\n\t\tsuper(opts)\r\n\t\tthis.is_hall__ = opts.is_hall__\r\n\t}\r\n\r\n\tspecs_item_cust_controls_(arr) {\r\n\t\tif (!this.is_hall__) {\r\n\t\t\tsuper.specs_item_cust_controls_(arr)\r\n\t\t} else {\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\t\tonDoing: next => {\r\n\r\n\t\t\t\t\t\t// this.camera_.position.set(0, 1.5, -4)\r\n\t\t\t\t\t\t// this.camera_.lookAt(0, 1.5, 0)\r\n\r\n\t\t\t\t\t\tthis.camera_.position.set(1.97, 1.50, -2.52)\r\n\t\t\t\t\t\tthis.camera_.lookAt(1.23, 1.50, -1.86)\r\n\r\n\t\t\t\t\t\tthis.changeControls(\r\n\t\t\t\t\t\t\tnew FPSa(this.camera_, this.renderer_.domElement)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\tthis.controls_.enabled = true\r\n\t\t\t\t\t\tnext()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tspecs_shop_data_base_(arr) {\r\n\t\tif (!this.is_hall__) {\r\n\t\t\tsuper.specs_shop_data_base_(arr)\r\n\t\t} else {\r\n\t\t\tif (this.shopData_ && this.shopData_.hall) {\r\n\r\n\t\t\t\tlet hall = this.shopData_.hall\r\n\r\n\t\t\t\tif (hall.urlEnvExr) {\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\t\t\turl: hall.urlEnvExr,\r\n\t\t\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\t\t\t\tonDoing: next => {\r\n\t\t\t\t\t\t\t\tthis.scene_.environment = this.w256_\r\n\t\t\t\t\t\t\t\tnext()\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// arr.push({\r\n\t\t\t\t// \tfunc: 'setupEnvironment', param: {\r\n\t\t\t\t// \t\tdebug: true,\r\n\t\t\t\t// \t\t// skyType: 0,\r\n\t\t\t\t// \t\t// toneMapping: this.theme_.toneMapping,\r\n\t\t\t\t// \t\t// exposure: this.theme_.exposure,\r\n\t\t\t\t// \t}\r\n\t\t\t\t// })\r\n\r\n\t\t\t\t// console.log('## hall', this.shopData_.hall)\r\n\r\n\t\t\t\tlet hall_url = hall.url\r\n\t\t\t\tarr.push({\r\n\t\t\t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t\t\t\t\tpath: hall_url.substr(0, hall_url.lastIndexOf('/')),\r\n\t\t\t\t\t\tname: hall_url.substr(hall_url.lastIndexOf('/')),\r\n\t\t\t\t\t\tonAfter: o3d => {\r\n\r\n\t\t\t\t\t\t\to3d.traverse(c => {\r\n\t\t\t\t\t\t\t\tif (c.isMesh) {\r\n\t\t\t\t\t\t\t\t\tlet mat = c.material\r\n\t\t\t\t\t\t\t\t\tmat.side = three__WEBPACK_IMPORTED_MODULE_4__.FrontSide\r\n\r\n\t\t\t\t\t\t\t\t\tif (mat.aoMap) {\r\n\t\t\t\t\t\t\t\t\t\t// {// use as diffuse\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.aoMap = null\r\n\t\t\t\t\t\t\t\t\t\t// \tc.geometry.attributes.uv = c.geometry.attributes.uv2\r\n\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t// {// use as lightmap\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.lightMap = mat.aoMap\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.aoMap = null\r\n\t\t\t\t\t\t\t\t\t\t// \tmat.map = null\r\n\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t{// use only ao, means bake diffuse to ao\r\n\t\t\t\t\t\t\t\t\t\t\tmat.map = null\r\n\t\t\t\t\t\t\t\t\t\t\t// mat.aoMapIntensity = 1.3 // 通透,但是噪点多\r\n\t\t\t\t\t\t\t\t\t\t\t// mat.aoMapIntensity = 1.07\r\n\t\t\t\t\t\t\t\t\t\t\t// mat.envMapIntensity = 5.7\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tmat.envMapIntensity = hall.multiply\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t{// ao to diffuse\r\n\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// console.log(mat)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\tthis.scene_.add(o3d)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t// arr.push({\r\n\t\t\t\t// \tfunc: 'setupLight', param: {\r\n\t\t\t\t// \t\taoMax: 2,\r\n\t\t\t\t// \t\tlightMax: 2,\r\n\t\t\t\t// \t\tenvMax: 8,\r\n\t\t\t\t// \t}\r\n\t\t\t\t// })\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tdoJoystick(e) {\r\n\t\t// console.log(e)\r\n\t\tlet mov = this.controls_.movement_\r\n\t\tif (mov) {\r\n\t\t\tmov.forward = mov.backward = mov.left = mov.right = false\r\n\t\t\t// if (e.direction) {\r\n\t\t\t// mov[e.direction.toLowerCase()] = true\r\n\t\t\t// }\r\n\r\n\t\t\t// e -> x, y, speed, angle\r\n\t\t\tlet dxy = Math.abs(e.x) - Math.abs(e.y)\r\n\t\t\tif (dxy > 0) { // x 移动\r\n\t\t\t\tif (e.x < 0) {\r\n\t\t\t\t\tmov.left = true\r\n\t\t\t\t} else { // > 0\r\n\t\t\t\t\tmov.right = true\r\n\t\t\t\t}\r\n\t\t\t} else if (dxy < 0) { // y 移动\r\n\t\t\t\tif (e.y < 0) {\r\n\t\t\t\t\tmov.forward = true\r\n\t\t\t\t} else { // > 0\r\n\t\t\t\t\tmov.backward = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/HallShelvesViewer.js?"); /***/ }), @@ -564,7 +674,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShelvesViewer_\": () => (/* binding */ ShelvesViewer_)\n/* harmony export */ });\n/* harmony import */ var _ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n/* harmony import */ var kutsi_util_BuilderEx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! kutsi/util/BuilderEx */ \"./src-kutsi/crossyo/kutsi/util/BuilderEx.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var kutsi_shelves_controls_ElasticFreeLookControls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! kutsi-shelves/controls/ElasticFreeLookControls */ \"./src-kutsi-shelves/crossyo/kutsi/controls/ElasticFreeLookControls.js\");\n/* harmony import */ var kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! kutsi/util/SceneUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneUtil.js\");\n/* harmony import */ var kutsi_util_SceneTuningUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! kutsi/util/SceneTuningUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneTuningUtil.js\");\n/* harmony import */ var _assets_white_256_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../assets/white-256.png */ \"./src/crossyo/shelves/assets/white-256.png\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\n// import { DropTableGeometry } from 'kutsi/geometry/DropTableGeometry'\r\n\r\n\r\n\r\n\r\n\r\n// import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'\r\n// import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls'\r\n\r\n\r\n\r\n\r\n// import { SiObjects } from \"../common/SiObjects\"\r\n\r\nconst try_mixin_two_fov_ = cam => {\r\n\tif (!cam.hasOwnProperty('aspectFov')) {\r\n\r\n\t\tcam.aspectFov_ = cam.fov\r\n\t\tcam.zoomFov_ = 1\r\n\t\tObject.defineProperty(cam, 'aspectFov', {\r\n\t\t\tset(v) {\r\n\t\t\t\tthis.aspectFov_ = v\r\n\t\t\t\tthis.fov = this.aspectFov_ * this.zoomFov_\r\n\t\t\t\t// console.log('update after aspectFov', this.fov)\r\n\t\t\t},\r\n\t\t\tget() {\r\n\t\t\t\treturn this.aspectFov_\r\n\t\t\t}\r\n\t\t})\r\n\t\tObject.defineProperty(cam, 'zoomFov', {\r\n\t\t\tset(v) {\r\n\t\t\t\tthis.zoomFov_ = v\r\n\t\t\t\tthis.fov = this.aspectFov_ * this.zoomFov_\r\n\t\t\t\t// console.log('update after zoomFov', this.fov)\r\n\t\t\t\tthis.updateProjectionMatrix()\r\n\t\t\t},\r\n\t\t\tget() {\r\n\t\t\t\treturn this.zoomFov_\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t}\r\n}\r\n\r\nconst SPHERE_RADIUS = 13.65\r\nconst SPHERE_DEBUG = false // normal\r\n// const SPHERE_DEBUG = true // orbit show depth!\r\n\r\nclass ShelvesViewer_ extends _ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__.ViewModeBaseViewer {\r\n\r\n\tconstructor(opts) {\r\n\r\n\t\tsuper(Object.assign({\r\n\t\t\ttrend: {\r\n\t\t\t\thdr: true,\r\n\t\t\t},\r\n\t\t\tpicker: {\r\n\t\t\t\tuseHitsArray: true,\r\n\t\t\t},\r\n\t\t\t// manually_start_animate: true, // for loading\r\n\t\t\t// clzControls: MapControls,\r\n\t\t\tfov0: 55,\r\n\r\n\t\t\tclzBuilder: kutsi_util_BuilderEx__WEBPACK_IMPORTED_MODULE_1__.BuilderEx,\r\n\r\n\t\t\t// v2\r\n\t\t\t// assets: {\r\n\t\t\t// \tenv1: assets_env1,\r\n\t\t\t// }\r\n\r\n\t\t}, opts))\r\n\r\n\t\t// {//window aspect ratio!\r\n\t\t// \t// if (window.innerWidth / window.innerHeight < 1) {\r\n\t\t// \t// \tthis.opts_.fov0 = 75\r\n\t\t// \t// }\r\n\t\t// }\r\n\r\n\t\t// console.log('this.opts_', this.opts_)\r\n\r\n\t\tthis.shopData_ = this.opts_.shopData\r\n\r\n\t\tthis.isViewer__ = true\r\n\r\n\t\t// this.objects__ = new SiObjects(this)\r\n\r\n\t}\r\n\r\n\tresize_() {\r\n\t\tsuper.resize_()\r\n\t\t// this.size_\r\n\r\n\t\ttry_mixin_two_fov_(this.camera_)\r\n\r\n\t\t// .5 -> 75\r\n\t\t// 2 -> 50\r\n\t\tlet aspect = this.size_.w / this.size_.h\r\n\t\tlet fov = three__WEBPACK_IMPORTED_MODULE_7__.MathUtils.lerp(75, 50, three__WEBPACK_IMPORTED_MODULE_7__.MathUtils.smoothstep(aspect, .5, 2))\r\n\t\t// console.log('\\t', aspect, fov)\r\n\r\n\t\t// this.camera_.fov = fov\r\n\t\tthis.camera_.aspectFov = fov\r\n\t\t// this.camera_.aspectFov = 75 // for snapshot!\r\n\t\tthis.camera_.updateProjectionMatrix()\r\n\r\n\t}\r\n\r\n\tstartup() {\r\n\t\tsuper.startup()\r\n\t\t// this.controls_.enablePan = true\r\n\t\tthis.scene_.background = new three__WEBPACK_IMPORTED_MODULE_7__.Color(0xefefef)\r\n\t}\r\n\r\n\tbeginLoadSpecs() {\r\n\r\n\t\tlet arr = super.beginLoadSpecs()\r\n\r\n\t\tthis.geo_env_sphere__ = new three__WEBPACK_IMPORTED_MODULE_7__.SphereBufferGeometry(SPHERE_RADIUS, 256, 256)\r\n\t\t// this.geo_env_sphere__ = new SphereBufferGeometry(SPHERE_RADIUS, 512, 512)\r\n\t\tthis.mesh_env_sphere__ = null\r\n\r\n\t\tthis.cart_plane_ = new three__WEBPACK_IMPORTED_MODULE_7__.Plane(new three__WEBPACK_IMPORTED_MODULE_7__.Vector3(-1, 0, 0), 2)\r\n\t\tthis.mesh_shelf__ = null\r\n\r\n\t\t// {// debug\r\n\t\t// \tthis.dump_keydown_after__ = () => {\r\n\t\t// \t\tconsole.log('shelf', this.mesh_shelf__)\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tarr.push({\r\n\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\turl: _assets_white_256_png__WEBPACK_IMPORTED_MODULE_5__,\r\n\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\tthis.w256_ = tex\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// this.DEFAULT_TARGET__ = new Vector3(0.1, -0.01, 0.00)\r\n\t\t// this.DEFAULT_TARGET__ = new Vector3(2.37, -0.41, 0.00)\r\n\t\tthis.DEFAULT_TARGET__ = new three__WEBPACK_IMPORTED_MODULE_7__.Vector3(2.37, -0.31, 0.00)\r\n\r\n\t\tthis.specs_item_cust_controls_(arr)\r\n\r\n\t\tthis.specs_shop_data_base_(arr)\r\n\r\n\t\tlet shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_6__.get_shelf_0_)(this.shopData_)\r\n\t\tif (shelf0) {\r\n\r\n\t\t\tlet shelf_url = shelf0.url\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t\t\t\tpath: shelf_url.substr(0, shelf_url.lastIndexOf('/')),\r\n\t\t\t\t\tname: shelf_url.substr(shelf_url.lastIndexOf('/')),\r\n\t\t\t\t\t// predefinedModel: (() => {\r\n\t\t\t\t\t// \tlet def = {\r\n\t\t\t\t\t// \t\tobjects_isolate_material: true,\r\n\t\t\t\t\t// \t\tmaps: {\r\n\t\t\t\t\t// \t\t\t'm1': { url: 'model/ao-2to1k-s4096/shelves_Bake1_CyclesBake_AO.png' }\r\n\t\t\t\t\t// \t\t},\r\n\t\t\t\t\t// \t\tobjects: {\r\n\t\t\t\t\t// \t\t\t'shelves': {\r\n\t\t\t\t\t// \t\t\t\tlightMap: 'm1'\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t// \t}\r\n\t\t\t\t\t// \treturn def\r\n\t\t\t\t\t// })(),\r\n\t\t\t\t\tonAfter: o3d => {\r\n\r\n\t\t\t\t\t\to3d.traverse(c => {\r\n\t\t\t\t\t\t\tif (c.isMesh) {\r\n\t\t\t\t\t\t\t\tif (c.material.aoMap) {\r\n\t\t\t\t\t\t\t\t\tc.material.lightMap = c.material.aoMap\r\n\t\t\t\t\t\t\t\t\t// c.material.aoMap = null\r\n\t\t\t\t\t\t\t\t\tc.material.lightMapIntensity = .5\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tc.material.side = three__WEBPACK_IMPORTED_MODULE_7__.FrontSide\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (/^box-\\d-\\d/.test(c.name)) {\r\n\t\t\t\t\t\t\t\tc.visible = false\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\tif (shelf0.position && shelf0.rotation) {\r\n\r\n\t\t\t\t\t\t\to3d.position.set(shelf0.position.x, shelf0.position.y, shelf0.position.z)\r\n\t\t\t\t\t\t\to3d.rotation.set(shelf0.rotation.x, shelf0.rotation.y, shelf0.rotation.z)\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\to3d.rotation.set(0, - Math.PI / 2, 0)\r\n\t\t\t\t\t\t\to3d.position.set(2.7, -1, 0)\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.scene_.add(o3d)\r\n\r\n\t\t\t\t\t\to3d.name = 'shelf__'\r\n\t\t\t\t\t\tthis.mesh_shelf__ = o3d\r\n\r\n\t\t\t\t\t\t// .$model__ = o3d\r\n\t\t\t\t\t\tshelf0.get_model__ = () => {\r\n\t\t\t\t\t\t\treturn o3d\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// dump_o3d(o3d)\r\n\t\t\t\t\t\t// can-2, box-2, pillow-2\r\n\r\n\t\t\t\t\t\t// create_sample_balls(balls => {\r\n\t\t\t\t\t\t// \tballs.position.set(2, -.25, 0)\r\n\t\t\t\t\t\t// \tthis.scene_.add(balls)\r\n\t\t\t\t\t\t// })\r\n\r\n\t\t\t\t\t\t// create_env_ball(ball => {\r\n\t\t\t\t\t\t// \tball.position.set(2, -.25, 0)\r\n\t\t\t\t\t\t// \tthis.scene_.add(ball)\r\n\t\t\t\t\t\t// })\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\t// TODO 新建\r\n\t\t}\r\n\r\n\t\t// if (this.shopData_ && this.shopData_.commodities) {\r\n\r\n\t\t// \tthis.shopData_.commodities.forEach(mod => {\r\n\t\t// \t\tlet mod_url = mod.url\r\n\t\t// \t\tarr.push({\r\n\t\t// \t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t// \t\t\t\tpath: mod_url.substr(0, mod_url.lastIndexOf('/')),\r\n\t\t// \t\t\t\tname: mod_url.substr(mod_url.lastIndexOf('/')),\r\n\t\t// \t\t\t\tonAfter: o3d => {\r\n\t\t// \t\t\t\t\to3d.traverse(c => {\r\n\t\t// \t\t\t\t\t\tif (c.isMesh) {\r\n\t\t// \t\t\t\t\t\t\tc.material.envMapIntensity = this.shopData_.panorama.multiply\r\n\t\t// \t\t\t\t\t\t\tc.material.side = FrontSide\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t})\r\n\t\t// \t\t\t\t\tif (!o3d.isMesh && o3d.children.length == 1) {\r\n\t\t// \t\t\t\t\t\t// 单个mesh, 需要导出时apply transform\r\n\t\t// \t\t\t\t\t\tmod.get_model__ = () => {\r\n\t\t// \t\t\t\t\t\t\treturn o3d.children[0]\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t} else {\r\n\t\t// \t\t\t\t\t\tmod.get_model__ = () => {\r\n\t\t// \t\t\t\t\t\t\treturn o3d\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t}\r\n\t\t// \t\t\t\t},\r\n\t\t// \t\t\t},\r\n\t\t// \t\t})\r\n\t\t// \t})\r\n\r\n\t\t// } else {\r\n\t\t// \t// TODO 新建\r\n\t\t// }\r\n\r\n\t\t// if (this.shopData_ && this.shopData_.objects) {\r\n\t\t// \tthis.objects__.load_from_specs_(this.shopData_.objects, arr)\r\n\t\t// }\r\n\r\n\t\tif (this.use_grid__) {\r\n\r\n\t\t\tlet grid = new three__WEBPACK_IMPORTED_MODULE_7__.GridHelper(4, 8)\r\n\t\t\t// grid.position.set(0, -5, 0)\r\n\t\t\tgrid.position.set(0, -1, 0)\r\n\t\t\tthis.scene_.add(grid)\r\n\r\n\t\t\t// let box = new Mesh(\r\n\t\t\t// \tnew BoxBufferGeometry(1.5, 1.5, .5),\r\n\t\t\t// \tnew MeshStandardMaterial({\r\n\t\t\t// \t\twireframe: true,\r\n\t\t\t// \t})\r\n\t\t\t// )\r\n\t\t\t// box.rotation.set(0, Math.PI / 2, 0)\r\n\t\t\t// box.position.set(2.25, -.25, 0)\r\n\t\t\t// this.scene_.add(box)\r\n\r\n\t\t}\r\n\r\n\t\t// cart plane !\r\n\r\n\r\n\t\treturn arr\r\n\t}\r\n\r\n\t// @can be override\r\n\tspecs_item_cust_controls_(arr) {\r\n\r\n\t\tarr.push({\r\n\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\tonDoing: next => {\r\n\r\n\t\t\t\t\t// this.scene_.fog = new Fog(this.theme_.fogColor, 400, 800)\r\n\r\n\t\t\t\t\t// this.controls_.minPolarAngle = 0\r\n\t\t\t\t\t// this.controls_.maxPolarAngle = Math.PI * .67\r\n\t\t\t\t\t// this.controls_.maxDistance = 400\r\n\r\n\t\t\t\t\t// this.scene_.add(new AxesHelper(10))\r\n\r\n\t\t\t\t\tlet target = this.DEFAULT_TARGET__\r\n\r\n\t\t\t\t\tif (SPHERE_DEBUG) { // debug\r\n\t\t\t\t\t\tthis.updateViewerLookat({\r\n\t\t\t\t\t\t\tposition: new three__WEBPACK_IMPORTED_MODULE_7__.Vector3(-1, 0.1, 0.00),\r\n\t\t\t\t\t\t\ttarget: new three__WEBPACK_IMPORTED_MODULE_7__.Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\tforceUpdateNearFar: true,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tthis.controls_.enablePan = true\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.changeControls(\r\n\t\t\t\t\t\t\t// new FreeLookControls\r\n\t\t\t\t\t\t\tnew kutsi_shelves_controls_ElasticFreeLookControls__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\r\n\t\t\t\t\t\t\t\t(this.camera_, this.renderer_.domElement, {\r\n\t\t\t\t\t\t\t\t\tlookDirection: -1,\r\n\t\t\t\t\t\t\t\t\telasticDirection: target,\r\n\t\t\t\t\t\t\t\t\tzoomResetFunction: e => {\r\n\t\t\t\t\t\t\t\t\t\treturn e.object.zoomFov\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tzoomFunction: e => {\r\n\t\t\t\t\t\t\t\t\t\te.object.zoomFov = e.zoom2\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tzoomMin: .5,\r\n\t\t\t\t\t\t\t\t\tzoomMax: 1,\r\n\t\t\t\t\t\t\t\t}))\r\n\r\n\t\t\t\t\t\tthis.updateViewerLookat({\r\n\t\t\t\t\t\t\t// position: new Vector3(-0.1, 0.01, 0.00),\r\n\t\t\t\t\t\t\t// target: new Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\tposition: new three__WEBPACK_IMPORTED_MODULE_7__.Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tforceUpdateNearFar: true,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnext()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\r\n\t}\r\n\r\n\tspecs_shop_data_base_(arr) {\r\n\r\n\t\tif (this.shopData_ && this.shopData_.panorama) {\r\n\r\n\t\t\t// if (this.shopData_.panorama.urlEnv) {\r\n\t\t\t// \tarr.push({\r\n\t\t\t// \t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t// \t\t\turl: `${this.shopData_.panorama.url}`,\r\n\t\t\t// \t\t\tonAfter: tex => {\r\n\t\t\t// \t\t\t\tthis.scene_.background = tex\r\n\t\t\t// \t\t\t\t// this.scene_.environment = tex\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t}\r\n\t\t\t// \t})\r\n\t\t\t// \tarr.push({\r\n\t\t\t// \t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t// \t\t\turl: `${this.shopData_.panorama.urlEnv}`,\r\n\t\t\t// \t\t\tonAfter: tex => {\r\n\t\t\t// \t\t\t\t// this.scene_.background = tex\r\n\t\t\t// \t\t\t\tthis.scene_.environment = tex\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t}\r\n\t\t\t// \t})\r\n\r\n\t\t\t// } else {\r\n\r\n\t\t\tlet panorama_shelf_exr = this.shopData_.panorama.urlShelfExr\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\turl: `${this.get_panorama_url_(this.shopData_.panorama)}`,\r\n\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t// this.scene_.background = tex\r\n\t\t\t\t\t\t// for rotationY\r\n\r\n\t\t\t\t\t\tlet sp = new three__WEBPACK_IMPORTED_MODULE_7__.Mesh(\r\n\t\t\t\t\t\t\t// new SphereBufferGeometry(20, 256, 256),\r\n\t\t\t\t\t\t\tthis.geo_env_sphere__,\r\n\t\t\t\t\t\t\tnew three__WEBPACK_IMPORTED_MODULE_7__.MeshStandardMaterial({\r\n\t\t\t\t\t\t\t\tmap: tex,\r\n\t\t\t\t\t\t\t\tside: three__WEBPACK_IMPORTED_MODULE_7__.BackSide,\r\n\t\t\t\t\t\t\t\t// wireframe: true,\r\n\t\t\t\t\t\t\t\tfog: false,\r\n\t\t\t\t\t\t\t\t// displacementScale: -env_.radius * .992,\r\n\t\t\t\t\t\t\t\t// displacementMap: new TextureLoader().load(`${this.prefixAsset_}/env/equirect/${env_.code}-zdepth-1k.png`),\r\n\t\t\t\t\t\t\t\tdisplacementScale: - SPHERE_RADIUS,\r\n\t\t\t\t\t\t\t\tdisplacementMap: new three__WEBPACK_IMPORTED_MODULE_7__.TextureLoader().load(`${this.shopData_.panorama.urlDepth}`),\r\n\t\t\t\t\t\t\t\tenvMap: this.w256_,\r\n\t\t\t\t\t\t\t\t// envMapIntensity: 2,\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\tsp.scale.set(1, 1, -1)\r\n\t\t\t\t\t\tsp.name = 'sys-env-sphere-'\r\n\t\t\t\t\t\tthis.scene_.add(sp)\r\n\r\n\t\t\t\t\t\tthis.mesh_env_sphere__ = sp\r\n\t\t\t\t\t\tthis.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n\r\n\t\t\t\t\t\tif (!panorama_shelf_exr) {\r\n\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tif (panorama_shelf_exr) {\r\n\t\t\t\tarr.push({\r\n\t\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\t\turl: `${panorama_shelf_exr}`,\r\n\t\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// }\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// TODO 新增时\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tget_panorama_url_(panorama) {\r\n\t\tif (this.isViewer__) {\r\n\t\t\treturn _common_util__WEBPACK_IMPORTED_MODULE_6__.isMobile ? panorama.urlSmall : panorama.url\r\n\t\t} else {\r\n\t\t\treturn panorama.urlSmall // 編輯器頻繁dispose,減少開銷\r\n\t\t}\r\n\t}\r\n\r\n\tdispose() {\r\n\t\tsuper.dispose()\r\n\t\tconsole.log('viewer dispose!')\r\n\t}\r\n\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ShelvesViewer_.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShelvesViewer_\": () => (/* binding */ ShelvesViewer_)\n/* harmony export */ });\n/* harmony import */ var _ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ViewModeBaseViewer */ \"./src/crossyo/shelves/viewer/ViewModeBaseViewer.js\");\n/* harmony import */ var kutsi_util_BuilderEx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! kutsi/util/BuilderEx */ \"./src-kutsi/crossyo/kutsi/util/BuilderEx.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var kutsi_shelves_controls_ElasticFreeLookControls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! kutsi-shelves/controls/ElasticFreeLookControls */ \"./src-kutsi-shelves/crossyo/kutsi/controls/ElasticFreeLookControls.js\");\n/* harmony import */ var kutsi_util_SceneUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! kutsi/util/SceneUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneUtil.js\");\n/* harmony import */ var kutsi_util_SceneTuningUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! kutsi/util/SceneTuningUtil */ \"./src-kutsi/crossyo/kutsi/util/SceneTuningUtil.js\");\n/* harmony import */ var _assets_white_256_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../assets/white-256.png */ \"./src/crossyo/shelves/assets/white-256.png\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n/* harmony import */ var _si_SiObjects__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../si/SiObjects */ \"./src/crossyo/shelves/si/SiObjects.js\");\n/* harmony import */ var kutsi_util_frame_ViewTransformDetector__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! kutsi/util/frame/ViewTransformDetector */ \"./src-kutsi/crossyo/kutsi/util/frame/ViewTransformDetector.js\");\n\r\n\r\n\r\n\r\n\r\n// import { DropTableGeometry } from 'kutsi/geometry/DropTableGeometry'\r\n\r\n\r\n\r\n\r\n\r\n// import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'\r\n// import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls'\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nconst try_mixin_two_fov_ = cam => {\r\n\tif (!cam.hasOwnProperty('aspectFov')) {\r\n\r\n\t\tcam.aspectFov_ = cam.fov\r\n\t\tcam.zoomFov_ = 1\r\n\t\tObject.defineProperty(cam, 'aspectFov', {\r\n\t\t\tset(v) {\r\n\t\t\t\tthis.aspectFov_ = v\r\n\t\t\t\tthis.fov = this.aspectFov_ * this.zoomFov_\r\n\t\t\t\t// console.log('update after aspectFov', this.fov)\r\n\t\t\t},\r\n\t\t\tget() {\r\n\t\t\t\treturn this.aspectFov_\r\n\t\t\t}\r\n\t\t})\r\n\t\tObject.defineProperty(cam, 'zoomFov', {\r\n\t\t\tset(v) {\r\n\t\t\t\tthis.zoomFov_ = v\r\n\t\t\t\tthis.fov = this.aspectFov_ * this.zoomFov_\r\n\t\t\t\t// console.log('update after zoomFov', this.fov)\r\n\t\t\t\tthis.updateProjectionMatrix()\r\n\t\t\t},\r\n\t\t\tget() {\r\n\t\t\t\treturn this.zoomFov_\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t}\r\n}\r\n\r\nconst SPHERE_RADIUS = 13.65\r\nconst SPHERE_DEBUG = false // normal\r\n// const SPHERE_DEBUG = true // orbit show depth!\r\n\r\nclass ShelvesViewer_ extends _ViewModeBaseViewer__WEBPACK_IMPORTED_MODULE_0__.ViewModeBaseViewer {\r\n\r\n\tconstructor(opts) {\r\n\r\n\t\tsuper(Object.assign({\r\n\t\t\ttrend: {\r\n\t\t\t\thdr: true,\r\n\t\t\t},\r\n\t\t\tpicker: {\r\n\t\t\t\tuseHitsArray: true,\r\n\t\t\t},\r\n\t\t\t// manually_start_animate: true, // for loading\r\n\t\t\t// clzControls: MapControls,\r\n\t\t\tfov0: 55,\r\n\r\n\t\t\tclzBuilder: kutsi_util_BuilderEx__WEBPACK_IMPORTED_MODULE_1__.BuilderEx,\r\n\r\n\t\t\t// v2\r\n\t\t\t// assets: {\r\n\t\t\t// \tenv1: assets_env1,\r\n\t\t\t// }\r\n\r\n\t\t}, opts))\r\n\r\n\t\t// {//window aspect ratio!\r\n\t\t// \t// if (window.innerWidth / window.innerHeight < 1) {\r\n\t\t// \t// \tthis.opts_.fov0 = 75\r\n\t\t// \t// }\r\n\t\t// }\r\n\r\n\t\t// console.log('this.opts_', this.opts_)\r\n\r\n\t\tthis.shopData_ = this.opts_.shopData\r\n\r\n\t\tthis.isViewer__ = true\r\n\r\n\t\tthis.objects__ = new _si_SiObjects__WEBPACK_IMPORTED_MODULE_7__.SiObjects(this)\r\n\r\n\t\t// default 1 / 1000\r\n\t\tthis.observe_vtd_ = new kutsi_util_frame_ViewTransformDetector__WEBPACK_IMPORTED_MODULE_8__.ViewTransformDetector(1 / 100, false)\r\n\r\n\t}\r\n\r\n\tresize_() {\r\n\t\tsuper.resize_()\r\n\t\t// this.size_\r\n\r\n\t\ttry_mixin_two_fov_(this.camera_)\r\n\r\n\t\t// .5 -> 75\r\n\t\t// 2 -> 50\r\n\t\tlet aspect = this.size_.w / this.size_.h\r\n\t\tlet fov = three__WEBPACK_IMPORTED_MODULE_9__.MathUtils.lerp(75, 50, three__WEBPACK_IMPORTED_MODULE_9__.MathUtils.smoothstep(aspect, .5, 2))\r\n\t\t// console.log('\\t', aspect, fov)\r\n\r\n\t\t// this.camera_.fov = fov\r\n\t\tthis.camera_.aspectFov = fov\r\n\t\t// this.camera_.aspectFov = 75 // for snapshot!\r\n\t\tthis.camera_.updateProjectionMatrix()\r\n\r\n\t}\r\n\r\n\tstartup() {\r\n\t\tsuper.startup()\r\n\t\t// this.controls_.enablePan = true\r\n\t\tthis.scene_.background = new three__WEBPACK_IMPORTED_MODULE_9__.Color(0xefefef)\r\n\t}\r\n\r\n\tbeginLoadSpecs() {\r\n\r\n\t\tlet arr = super.beginLoadSpecs()\r\n\r\n\t\tthis.geo_env_sphere__ = new three__WEBPACK_IMPORTED_MODULE_9__.SphereBufferGeometry(SPHERE_RADIUS, 256, 256)\r\n\t\t// this.geo_env_sphere__ = new SphereBufferGeometry(SPHERE_RADIUS, 512, 512)\r\n\t\tthis.mesh_env_sphere__ = null\r\n\r\n\t\tthis.cart_plane_ = new three__WEBPACK_IMPORTED_MODULE_9__.Plane(new three__WEBPACK_IMPORTED_MODULE_9__.Vector3(-1, 0, 0), 2)\r\n\t\tthis.mesh_shelf__ = null\r\n\r\n\t\t// {// debug\r\n\t\t// \tthis.dump_keydown_after__ = () => {\r\n\t\t// \t\tconsole.log('shelf', this.mesh_shelf__)\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tarr.push({\r\n\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\turl: _assets_white_256_png__WEBPACK_IMPORTED_MODULE_5__,\r\n\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\tthis.w256_ = tex\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// this.DEFAULT_TARGET__ = new Vector3(0.1, -0.01, 0.00)\r\n\t\t// this.DEFAULT_TARGET__ = new Vector3(2.37, -0.41, 0.00)\r\n\t\tthis.DEFAULT_TARGET__ = new three__WEBPACK_IMPORTED_MODULE_9__.Vector3(2.37, -0.31, 0.00)\r\n\r\n\t\tthis.specs_item_cust_controls_(arr)\r\n\r\n\t\tthis.specs_shop_data_base_(arr)\r\n\r\n\t\tlet shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_6__.get_shelf_0_)(this.shopData_)\r\n\t\tif (shelf0) {\r\n\r\n\t\t\tlet shelf_url = shelf0.url\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t\t\t\tpath: shelf_url.substr(0, shelf_url.lastIndexOf('/')),\r\n\t\t\t\t\tname: shelf_url.substr(shelf_url.lastIndexOf('/')),\r\n\t\t\t\t\t// predefinedModel: (() => {\r\n\t\t\t\t\t// \tlet def = {\r\n\t\t\t\t\t// \t\tobjects_isolate_material: true,\r\n\t\t\t\t\t// \t\tmaps: {\r\n\t\t\t\t\t// \t\t\t'm1': { url: 'model/ao-2to1k-s4096/shelves_Bake1_CyclesBake_AO.png' }\r\n\t\t\t\t\t// \t\t},\r\n\t\t\t\t\t// \t\tobjects: {\r\n\t\t\t\t\t// \t\t\t'shelves': {\r\n\t\t\t\t\t// \t\t\t\tlightMap: 'm1'\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t// \t}\r\n\t\t\t\t\t// \treturn def\r\n\t\t\t\t\t// })(),\r\n\t\t\t\t\tonAfter: o3d => {\r\n\r\n\t\t\t\t\t\to3d.traverse(c => {\r\n\t\t\t\t\t\t\tif (c.isMesh) {\r\n\t\t\t\t\t\t\t\tif (c.material.aoMap) {\r\n\t\t\t\t\t\t\t\t\tc.material.lightMap = c.material.aoMap\r\n\t\t\t\t\t\t\t\t\t// c.material.aoMap = null\r\n\t\t\t\t\t\t\t\t\tc.material.lightMapIntensity = .5\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tc.material.side = three__WEBPACK_IMPORTED_MODULE_9__.FrontSide\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (/^box-\\d-\\d/.test(c.name)) {\r\n\t\t\t\t\t\t\t\tc.visible = false\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\tif (shelf0.position && shelf0.rotation) {\r\n\r\n\t\t\t\t\t\t\to3d.position.set(shelf0.position.x, shelf0.position.y, shelf0.position.z)\r\n\t\t\t\t\t\t\to3d.rotation.set(shelf0.rotation.x, shelf0.rotation.y, shelf0.rotation.z)\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\to3d.rotation.set(0, - Math.PI / 2, 0)\r\n\t\t\t\t\t\t\to3d.position.set(2.7, -1, 0)\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.scene_.add(o3d)\r\n\r\n\t\t\t\t\t\to3d.name = 'shelf__'\r\n\t\t\t\t\t\tthis.mesh_shelf__ = o3d\r\n\r\n\t\t\t\t\t\t// .$model__ = o3d\r\n\t\t\t\t\t\tshelf0.get_model__ = () => {\r\n\t\t\t\t\t\t\treturn o3d\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// dump_o3d(o3d)\r\n\t\t\t\t\t\t// can-2, box-2, pillow-2\r\n\r\n\t\t\t\t\t\t// create_sample_balls(balls => {\r\n\t\t\t\t\t\t// \tballs.position.set(2, -.25, 0)\r\n\t\t\t\t\t\t// \tthis.scene_.add(balls)\r\n\t\t\t\t\t\t// })\r\n\r\n\t\t\t\t\t\t// create_env_ball(ball => {\r\n\t\t\t\t\t\t// \tball.position.set(2, -.25, 0)\r\n\t\t\t\t\t\t// \tthis.scene_.add(ball)\r\n\t\t\t\t\t\t// })\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t} else {\r\n\t\t\t// TODO 新建\r\n\t\t}\r\n\r\n\t\t// if (this.shopData_ && this.shopData_.commodities) {\r\n\r\n\t\t// \tthis.shopData_.commodities.forEach(mod => {\r\n\t\t// \t\tlet mod_url = mod.url\r\n\t\t// \t\tarr.push({\r\n\t\t// \t\t\tfunc: 'setupModelGltf', param: {\r\n\t\t// \t\t\t\tpath: mod_url.substr(0, mod_url.lastIndexOf('/')),\r\n\t\t// \t\t\t\tname: mod_url.substr(mod_url.lastIndexOf('/')),\r\n\t\t// \t\t\t\tonAfter: o3d => {\r\n\t\t// \t\t\t\t\to3d.traverse(c => {\r\n\t\t// \t\t\t\t\t\tif (c.isMesh) {\r\n\t\t// \t\t\t\t\t\t\tc.material.envMapIntensity = this.shopData_.panorama.multiply\r\n\t\t// \t\t\t\t\t\t\tc.material.side = FrontSide\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t})\r\n\t\t// \t\t\t\t\tif (!o3d.isMesh && o3d.children.length == 1) {\r\n\t\t// \t\t\t\t\t\t// 单个mesh, 需要导出时apply transform\r\n\t\t// \t\t\t\t\t\tmod.get_model__ = () => {\r\n\t\t// \t\t\t\t\t\t\treturn o3d.children[0]\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t} else {\r\n\t\t// \t\t\t\t\t\tmod.get_model__ = () => {\r\n\t\t// \t\t\t\t\t\t\treturn o3d\r\n\t\t// \t\t\t\t\t\t}\r\n\t\t// \t\t\t\t\t}\r\n\t\t// \t\t\t\t},\r\n\t\t// \t\t\t},\r\n\t\t// \t\t})\r\n\t\t// \t})\r\n\r\n\t\t// } else {\r\n\t\t// \t// TODO 新建\r\n\t\t// }\r\n\r\n\t\tif (this.shopData_ && this.shopData_.objects) {\r\n\t\t\tthis.objects__.attach_specs_for_load_(this.shopData_.objects, arr)\r\n\t\t}\r\n\r\n\t\tif (this.use_grid__) {\r\n\r\n\t\t\tlet grid = new three__WEBPACK_IMPORTED_MODULE_9__.GridHelper(4, 8)\r\n\t\t\t// grid.position.set(0, -5, 0)\r\n\t\t\tgrid.position.set(0, -1, 0)\r\n\t\t\tthis.scene_.add(grid)\r\n\r\n\t\t\t// let box = new Mesh(\r\n\t\t\t// \tnew BoxBufferGeometry(1.5, 1.5, .5),\r\n\t\t\t// \tnew MeshStandardMaterial({\r\n\t\t\t// \t\twireframe: true,\r\n\t\t\t// \t})\r\n\t\t\t// )\r\n\t\t\t// box.rotation.set(0, Math.PI / 2, 0)\r\n\t\t\t// box.position.set(2.25, -.25, 0)\r\n\t\t\t// this.scene_.add(box)\r\n\r\n\t\t}\r\n\r\n\t\t// cart plane !\r\n\r\n\r\n\t\treturn arr\r\n\t}\r\n\r\n\t// @can be override\r\n\tspecs_item_cust_controls_(arr) {\r\n\r\n\t\tarr.push({\r\n\t\t\tfunc: 'setupCustomization', param: {\r\n\t\t\t\tonDoing: next => {\r\n\r\n\t\t\t\t\t// this.scene_.fog = new Fog(this.theme_.fogColor, 400, 800)\r\n\r\n\t\t\t\t\t// this.controls_.minPolarAngle = 0\r\n\t\t\t\t\t// this.controls_.maxPolarAngle = Math.PI * .67\r\n\t\t\t\t\t// this.controls_.maxDistance = 400\r\n\r\n\t\t\t\t\t// this.scene_.add(new AxesHelper(10))\r\n\r\n\t\t\t\t\tlet target = this.DEFAULT_TARGET__\r\n\r\n\t\t\t\t\tif (SPHERE_DEBUG) { // debug\r\n\t\t\t\t\t\tthis.updateViewerLookat({\r\n\t\t\t\t\t\t\tposition: new three__WEBPACK_IMPORTED_MODULE_9__.Vector3(-1, 0.1, 0.00),\r\n\t\t\t\t\t\t\ttarget: new three__WEBPACK_IMPORTED_MODULE_9__.Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\tforceUpdateNearFar: true,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tthis.controls_.enablePan = true\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.changeControls(\r\n\t\t\t\t\t\t\t// new FreeLookControls\r\n\t\t\t\t\t\t\tnew kutsi_shelves_controls_ElasticFreeLookControls__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\r\n\t\t\t\t\t\t\t\t(this.camera_, this.renderer_.domElement, {\r\n\t\t\t\t\t\t\t\t\tlookDirection: -1,\r\n\t\t\t\t\t\t\t\t\telasticDirection: target,\r\n\t\t\t\t\t\t\t\t\tzoomResetFunction: e => {\r\n\t\t\t\t\t\t\t\t\t\treturn e.object.zoomFov\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tzoomFunction: e => {\r\n\t\t\t\t\t\t\t\t\t\te.object.zoomFov = e.zoom2\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tzoomMin: .5,\r\n\t\t\t\t\t\t\t\t\tzoomMax: 1,\r\n\t\t\t\t\t\t\t\t}))\r\n\r\n\t\t\t\t\t\tthis.updateViewerLookat({\r\n\t\t\t\t\t\t\t// position: new Vector3(-0.1, 0.01, 0.00),\r\n\t\t\t\t\t\t\t// target: new Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\tposition: new three__WEBPACK_IMPORTED_MODULE_9__.Vector3(0.00, 0.00, 0.00),\r\n\t\t\t\t\t\t\ttarget,\r\n\t\t\t\t\t\t\tforceUpdateNearFar: true,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnext()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\r\n\t}\r\n\r\n\tspecs_shop_data_base_(arr) {\r\n\r\n\t\tif (this.shopData_ && this.shopData_.panorama) {\r\n\r\n\t\t\t// if (this.shopData_.panorama.urlEnv) {\r\n\t\t\t// \tarr.push({\r\n\t\t\t// \t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t// \t\t\turl: `${this.shopData_.panorama.url}`,\r\n\t\t\t// \t\t\tonAfter: tex => {\r\n\t\t\t// \t\t\t\tthis.scene_.background = tex\r\n\t\t\t// \t\t\t\t// this.scene_.environment = tex\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t}\r\n\t\t\t// \t})\r\n\t\t\t// \tarr.push({\r\n\t\t\t// \t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t// \t\t\turl: `${this.shopData_.panorama.urlEnv}`,\r\n\t\t\t// \t\t\tonAfter: tex => {\r\n\t\t\t// \t\t\t\t// this.scene_.background = tex\r\n\t\t\t// \t\t\t\tthis.scene_.environment = tex\r\n\t\t\t// \t\t\t}\r\n\t\t\t// \t\t}\r\n\t\t\t// \t})\r\n\r\n\t\t\t// } else {\r\n\r\n\t\t\tlet panorama_shelf_exr = this.shopData_.panorama.urlShelfExr\r\n\t\t\tarr.push({\r\n\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\turl: `${this.get_panorama_url_(this.shopData_.panorama)}`,\r\n\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t// this.scene_.background = tex\r\n\t\t\t\t\t\t// for rotationY\r\n\r\n\t\t\t\t\t\tlet sp = new three__WEBPACK_IMPORTED_MODULE_9__.Mesh(\r\n\t\t\t\t\t\t\t// new SphereBufferGeometry(20, 256, 256),\r\n\t\t\t\t\t\t\tthis.geo_env_sphere__,\r\n\t\t\t\t\t\t\tnew three__WEBPACK_IMPORTED_MODULE_9__.MeshStandardMaterial({\r\n\t\t\t\t\t\t\t\tmap: tex,\r\n\t\t\t\t\t\t\t\tside: three__WEBPACK_IMPORTED_MODULE_9__.BackSide,\r\n\t\t\t\t\t\t\t\t// wireframe: true,\r\n\t\t\t\t\t\t\t\tfog: false,\r\n\t\t\t\t\t\t\t\t// displacementScale: -env_.radius * .992,\r\n\t\t\t\t\t\t\t\t// displacementMap: new TextureLoader().load(`${this.prefixAsset_}/env/equirect/${env_.code}-zdepth-1k.png`),\r\n\t\t\t\t\t\t\t\tdisplacementScale: - SPHERE_RADIUS,\r\n\t\t\t\t\t\t\t\tdisplacementMap: new three__WEBPACK_IMPORTED_MODULE_9__.TextureLoader().load(`${this.shopData_.panorama.urlDepth}`),\r\n\t\t\t\t\t\t\t\tenvMap: this.w256_,\r\n\t\t\t\t\t\t\t\t// envMapIntensity: 2,\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t\tsp.scale.set(1, 1, -1)\r\n\t\t\t\t\t\tsp.name = 'sys-env-sphere-'\r\n\t\t\t\t\t\tthis.scene_.add(sp)\r\n\r\n\t\t\t\t\t\tthis.mesh_env_sphere__ = sp\r\n\t\t\t\t\t\tthis.mesh_env_sphere__.rotation.y = this.shopData_.panorama.rotationY * Math.PI / 180\r\n\r\n\t\t\t\t\t\tif (!panorama_shelf_exr) {\r\n\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tif (panorama_shelf_exr) {\r\n\t\t\t\tarr.push({\r\n\t\t\t\t\tfunc: 'setupEnvEquirect', param: {\r\n\t\t\t\t\t\turl: `${panorama_shelf_exr}`,\r\n\t\t\t\t\t\tonAfter: tex => {\r\n\t\t\t\t\t\t\tthis.scene_.environment = tex\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// }\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// TODO 新增时\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tget_panorama_url_(panorama) {\r\n\t\tif (this.isViewer__) {\r\n\t\t\treturn _common_util__WEBPACK_IMPORTED_MODULE_6__.isMobile ? panorama.urlSmall : panorama.url\r\n\t\t} else {\r\n\t\t\treturn panorama.urlSmall // 編輯器頻繁dispose,減少開銷\r\n\t\t}\r\n\t}\r\n\r\n\tbefore_render_(time, delta) {\r\n\t\tsuper.before_render_(time, delta)\r\n\r\n\t\tlet result = this.observe_vtd_.updateResult(this)\r\n\t\tif (result) {\r\n\t\t\t// console.log(data) \r\n\t\t\tthis.emit('roughViewChanged', result)\r\n\t\t}\r\n\t}\r\n\r\n\tdispose() {\r\n\t\tif (this.objects__) {\r\n\t\t\tthis.objects__.dispose()\r\n\t\t}\r\n\t\tsuper.dispose()\r\n\t\tconsole.log('viewer dispose!')\r\n\t}\r\n\r\n}\r\n\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ShelvesViewer_.js?"); /***/ }), @@ -586,7 +696,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShopPanoSurveyViewer_\": () => (/* binding */ ShopPanoSurveyViewer_)\n/* harmony export */ });\n/* harmony import */ var _HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HallShelvesViewer */ \"./src/crossyo/shelves/viewer/HallShelvesViewer.js\");\n/* harmony import */ var _common_SurveyShelve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/SurveyShelve */ \"./src/crossyo/shelves/common/SurveyShelve.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/examples/jsm/controls/OrbitControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/OrbitControls.js\");\n/* harmony import */ var kutsi_shelves_controls_FreeLookControls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! kutsi-shelves/controls/FreeLookControls */ \"./src-kutsi-shelves/crossyo/kutsi/controls/FreeLookControls.js\");\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! gsap */ \"./node_modules/_gsap@3.11.3@gsap/index.js\");\n/* harmony import */ var _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BehaviorQueue */ \"./src/crossyo/shelves/viewer/BehaviorQueue.js\");\n/* harmony import */ var kutsi_shelves_pp_FrostFar_pp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! kutsi-shelves/pp/FrostFar_pp */ \"./src-kutsi-shelves/crossyo/kutsi/pp/FrostFar_pp.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// const AUTO_ROTATION = true\r\nconst AUTO_ROTATION = false // manually rotation\r\n\r\nclass ManuallyRotationControls {\r\n\r\n constructor({ scene, domElement, focusTarget, behavior }) {\r\n this.scene_ = scene\r\n let fake_cam = new three__WEBPACK_IMPORTED_MODULE_5__.PerspectiveCamera()\r\n this.fake_cam_ = fake_cam\r\n this.behavior_ = behavior\r\n\r\n // USE HELPER!\r\n // this.helper_ = new CameraHelper(fake_cam)\r\n\r\n this.scene_.add(this.helper_)\r\n this.controls_ = new three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_2__.OrbitControls(fake_cam, domElement)\r\n // this.controls_.autoRotate = true\r\n this.controls_.enableDamping = true\r\n this.controls_.enablePan = false\r\n // this.controls_.noPan = true // Trackball\r\n\r\n this.controls_.minPolarAngle = Math.PI / 6\r\n this.controls_.maxPolarAngle = Math.PI * 5 / 6\r\n\r\n this.controls_.minDistance = .1\r\n this.controls_.maxDistance = .4\r\n\r\n this.focusTarget_ = focusTarget\r\n\r\n let tgt = this.focusTarget_.position.clone()\r\n this.controls_.target = tgt\r\n fake_cam.position.copy(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(0, 0, -.2).add(tgt))\r\n\r\n this.enabled_ = true\r\n\r\n }\r\n\r\n get enabled() {\r\n return this.enabled_\r\n }\r\n\r\n set enabled(v) {\r\n this.enabled_ = v\r\n this.controls_.enabled = v\r\n }\r\n\r\n // set rotY(v) {\r\n // console.log('### ManuallyRotationControls set rotY', v)\r\n // }\r\n\r\n update(delta) {\r\n if (!this.enabled_) return\r\n this.controls_.update(delta)\r\n let p1 = this.fake_cam_.position\r\n let p0 = this.controls_.target\r\n\r\n let dz = p1.z - p0.z\r\n let dx = p1.x - p0.x\r\n\r\n let xz = Math.sqrt(dz * dz + dx * dx)\r\n\r\n let dist = new three__WEBPACK_IMPORTED_MODULE_5__.Vector3().subVectors(p1, p0).lengthSq()\r\n // console.log(dist) .0\r\n\r\n // .04 1\r\n // .1 \r\n\r\n let s = 1 / Math.sqrt(Math.max(.01, Math.min(dist, .16)) / .04)\r\n\r\n // this.focusTarget_.rotation.set(0, Math.PI / 2 + Math.atan2(dz, dx), Math.atan2(p1.y - p0.y, xz), 'XYZ')\r\n let rz = Math.PI / 2 + Math.atan2(dz, dx) // 左右\r\n let ry = Math.atan2(p1.y - p0.y, xz) // 上下\r\n this.focusTarget_.rotation.set(0, rz, ry, 'XZY')\r\n this.focusTarget_.scale.set(s, s, s)\r\n\r\n let srz = Math.round(rz * 100) / 100\r\n let sry = Math.round(ry * 100) / 100\r\n\r\n this.behavior_.idle_controls_update_(srz, sry, delta)\r\n\r\n }\r\n\r\n reset() {\r\n this.focusTarget_.rotation.set(0, 0, 0, 'XYZ')\r\n this.focusTarget_.scale.set(1, 1, 1)\r\n }\r\n\r\n dispose() {\r\n this.reset()\r\n if (this.helper_) {\r\n this.scene_.remove(this.helper_)\r\n }\r\n this.controls_.dispose()\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\nclass ShopPanoSurveyViewer_ extends _HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__.HallShelvesViewer {\r\n\r\n constructor(opts) {\r\n super(Object.assign(opts, {\r\n clzPostProcessing: kutsi_shelves_pp_FrostFar_pp__WEBPACK_IMPORTED_MODULE_6__.FrostFar_pp\r\n }))\r\n\r\n this.flyAnimation_ = true\r\n }\r\n\r\n startup() {\r\n super.startup()\r\n this.renderer_.pp_.no_pass_use_frost_ = false// true // default true, if clearly load process, set to false\r\n // this.renderer_.pp_.grayTend = .33 // 如果采用饱和\r\n this.renderer_.pp_.grayTend = .75 // 如果需要失去更多细节\r\n\r\n // this.frostFarScene = true\r\n }\r\n\r\n endLoadSpecs() {\r\n\r\n // super.endLoadSpecs()\r\n // local controller!\r\n\r\n // console.log(this.opts_.shopData.shelf)\r\n // SUSPENSION 参考hall, 目前hall结构不一定会含有shelf\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_7__.get_shelf_0_)(this.shopData_)\r\n\r\n this.behavior_ = new _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorQueue({\r\n viewer: this,\r\n surveyId: this.opts_.surveyId,\r\n // shelfId: this.opts_.shopData.shelf ? this.opts_.shopData.shelf.id : null, // #20221021 之后补充,之前数据没有shelf.id\r\n shelfId: shelf0 ? shelf0.id : null,\r\n })\r\n\r\n this.shelve_ = new _common_SurveyShelve__WEBPACK_IMPORTED_MODULE_1__.SurveyShelve(this)\r\n // console.log('MESH SHELF', this.mesh_shelf__)\r\n if (shelf0 && shelf0.hideWhenSurvey) {\r\n // console.log(this.shopData_.shelf)\r\n this.mesh_shelf__.children.filter(c => c.isMesh).forEach(c => c.visible = false)\r\n }\r\n\r\n this.world_space_ = new three__WEBPACK_IMPORTED_MODULE_5__.Object3D()\r\n this.scene_.add(this.world_space_)\r\n\r\n this.hold_ = null\r\n this.hold_null_cd_ = 0 // TEMP\r\n this.cart_ = null\r\n this.picker_.on('downUpPick', e => {\r\n // console.log('downUpPick', e)\r\n\r\n if (this.opt_keepHold__) {\r\n return\r\n }\r\n\r\n this.to_hold_(e)\r\n\r\n })\r\n\r\n this.emit('loadingCompletion')\r\n\r\n }\r\n\r\n to_hold_(e) {\r\n\r\n if (this.hold_null_cd_ > 0) return // TEMP\r\n if (this.hold_ == null) {\r\n if (e.int0) {\r\n // e.int0.object -> Mesh\r\n let m0 = e.int0.object\r\n let m = m0.hit_.targetObject__ // v3.3 #20220730\r\n // console.log(m0, m)\r\n if (m) {\r\n // back_to_shelf_()\r\n\r\n this.controls_.enabled = false\r\n\r\n let mParent = m.parent\r\n this.hold_ = {\r\n // o3d: m,\r\n get_parent_cell() {\r\n return mParent\r\n },\r\n get_o3d() {\r\n return m\r\n },\r\n // position: m.position.clone(),\r\n localPosition: m.position.clone(),\r\n localRotationY: m.rotation.y,\r\n data: m0.hit_,\r\n init_time_: -1, // for rot!\r\n }\r\n\r\n // console.log(this.hold_.get_o3d())\r\n\r\n // m.position.set(.35, 0, 0)\r\n // fly to\r\n\r\n // zoomFov t\t sx\t\tdy\r\n // 1 \t\t0\t 1\t\t0\r\n // .5\t\t1\t 1.5\t\t-0.15\r\n\r\n let t = 2 - this.camera_.zoomFov * 2\r\n\r\n let sx = three__WEBPACK_IMPORTED_MODULE_5__.MathUtils.lerp(1, 1.5, t)\r\n // let dy = MathUtils.lerp(0, -.015, t)\r\n\r\n // let dy = -.1\r\n let dy = -.05 // 视点居中\r\n\r\n // console.log('zoomFov', this.camera_.zoomFov, t, sx, dy)\r\n\r\n // console.log('## survey viewer gsap to')\r\n\r\n this.world_space_.scale.set(1, 1, 1)\r\n this.world_space_.rotation.set(0, 0, 0, 'XYZ')\r\n this.world_space_.position.set(.35 * sx, dy, 0) // #20220930, 设为hold中心一致\r\n this.world_space_.attach(m)\r\n gsap__WEBPACK_IMPORTED_MODULE_8__[\"default\"].to(m.position, {\r\n // x: .35 * sx,\r\n // y: dy,\r\n // z: 0,\r\n\r\n x: 0,\r\n y: - .1, // TODO 物体高度的一半\r\n z: 0,\r\n\r\n duration: this.flyAnimation_ ? .4 : 0,\r\n onComplete: () => {\r\n // console.log('## hold', this.hold_)\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.HOLD,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n if (AUTO_ROTATION) {\r\n\r\n } else {\r\n\r\n // const USE_FREELOOK = true\r\n const USE_FREELOOK = false\r\n if (USE_FREELOOK) {\r\n\r\n this.hold_controls_ = new kutsi_shelves_controls_FreeLookControls__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.hold_.get_o3d(), this.renderer_.domElement, {\r\n lookDirection: -1,\r\n lookSpeed: 2,\r\n })\r\n this.hold_controls_.target = new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(1, 0, 0).add(this.hold_.get_o3d().position)\r\n\r\n } else {\r\n\r\n this.hold_controls_ = new ManuallyRotationControls({\r\n scene: this.scene_,\r\n domElement: this.renderer_.domElement,\r\n focusTarget: this.world_space_,\r\n behavior: this.behavior_,\r\n })\r\n if (this.require_hold_controls_opts_) {\r\n if (this.require_hold_controls_opts_.hasOwnProperty('enabled')) {\r\n this.hold_controls_.enabled = this.require_hold_controls_opts_.enabled\r\n }\r\n // if (this.require_hold_controls_opts_.hasOwnProperty('rotY')) {\r\n // this.hold_controls_.rotY = this.require_hold_controls_opts_.rotY\r\n // }\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n })\r\n //\r\n\r\n this.emit('hold', this.hold_)\r\n this.hold_null_cd_ = .5 // TEMP\r\n }\r\n }\r\n\r\n } else { // 有 hold\r\n let hold_to_shelf = false\r\n if (e.int0) {// 点中,但不是自己\r\n // e.int0.object -> Mesh\r\n let m0 = e.int0.object\r\n let m = m0.hit_.targetObject__ // v3.3 #20220730\r\n if (this.hold_.get_o3d() != m) {\r\n hold_to_shelf = true\r\n }\r\n } else {\r\n // 没有点中\r\n hold_to_shelf = true\r\n }\r\n\r\n if (hold_to_shelf) {\r\n this.emit('from_scene_hold_to_shelf')\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n before_update_(time, delta) {\r\n // super.before_update_(time, delta)\r\n if (AUTO_ROTATION) {\r\n if (this.hold_) {\r\n if (this.hold_.init_time_ == -1) {\r\n this.hold_.init_time_ = time\r\n }\r\n this.hold_.get_o3d().rotation.set(0, time - this.hold_.init_time_ - Math.PI / 2, 0)\r\n }\r\n\r\n\r\n } else {\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.update(delta)\r\n }\r\n\r\n }\r\n\r\n if (this.hold_null_cd_ > 0) {\r\n this.hold_null_cd_ -= delta\r\n // console.log(this.hold_null_cd_)\r\n }\r\n\r\n // if (this.test_shelf_move__) {\r\n // this.test_shelf_move__.position.z = Math.sin(time)\r\n // }\r\n }\r\n\r\n set elCart(el) {\r\n // console.log('## set elCart', el)\r\n this.el_cart_ = el\r\n }\r\n\r\n calc_cart_target_() {\r\n // console.log('## calc_cart_target_', this.el_cart_, this.cart_plane_)\r\n if (this.el_cart_ && this.cart_plane_) {\r\n\r\n let rect0 = this.renderer_.domElement.getBoundingClientRect()\r\n let rect1 = this.el_cart_.getBoundingClientRect()\r\n\r\n // console.log('update_cart_target_',\r\n // \t// this.el_cart_.getClientRects(),\r\n // \trect0,\r\n // \trect1,\r\n // \tthis.cart_plane_)\r\n\r\n let wpos = new three__WEBPACK_IMPORTED_MODULE_5__.Vector2(\r\n rect1.x + rect1.width / 2 - rect0.x,\r\n rect1.y + rect1.height / 2 - rect0.y\r\n )\r\n\r\n let vpos = new three__WEBPACK_IMPORTED_MODULE_5__.Vector2(\r\n (wpos.x / rect0.width) * 2 - 1,\r\n -(wpos.y / rect0.height) * 2 + 1\r\n )\r\n\r\n // console.log(wpos, vpos)\r\n\r\n let rc = new three__WEBPACK_IMPORTED_MODULE_5__.Raycaster()\r\n rc.setFromCamera(vpos, this.camera_)\r\n return rc.ray.intersectPlane(this.cart_plane_, new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n\r\n }\r\n\r\n return new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(2, -.55, 1.55) // fall back\r\n }\r\n\r\n // 布置货架内容\r\n arrange(page) {\r\n // console.log(this.shelve_, page)\r\n\r\n this.cart_ = null\r\n if (this.hold_) {// #20220611, 清除前一次可能的hold\r\n let o3d = this.hold_.get_o3d()\r\n o3d.removeFromParent()\r\n }\r\n this.hold_release_()\r\n\r\n return this.shelve_.arrange(page)\r\n }\r\n\r\n action(actionName) {\r\n // console.log('## viewer action', actionName)\r\n if (actionName == 'hold_to_shelf') { // 由按钮激活,改为由场景来操作\r\n if (this.hold_) {\r\n\r\n // this.hold_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.hold_.o3d.position.copy(this.hold_.position)\r\n\r\n // world to local\r\n let o3d = this.hold_.get_o3d()\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.reset()\r\n }\r\n this.hold_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.hold_.localRotationY, 0)\r\n o3d.position.copy(this.hold_.localPosition)\r\n\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.PUT_BACK,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n // this.hold_ = null\r\n this.hold_release_()\r\n }\r\n\r\n } else if (actionName == 'hold_to_cart') {\r\n if (this.hold_) {\r\n\r\n if (this.cart_) { // prev\r\n // this.cart_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.cart_.o3d.position.copy(this.cart_.position)\r\n\r\n // world to local\r\n let o3d = this.cart_.get_o3d()\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.reset()\r\n }\r\n this.cart_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.cart_.localRotationY, 0)\r\n o3d.position.copy(this.cart_.localPosition)\r\n\r\n }\r\n\r\n {\r\n this.cart_ = this.hold_\r\n }\r\n\r\n let tgt = this.calc_cart_target_()\r\n gsap__WEBPACK_IMPORTED_MODULE_8__[\"default\"].to(this.cart_.get_o3d().position, {\r\n x: tgt.x,\r\n y: tgt.y,\r\n z: tgt.z,\r\n duration: this.flyAnimation_ ? .4 : 0,\r\n onComplete: () => {\r\n\r\n // this.cart_.o3d.position.set(2, -1, 0) // for debug\r\n this.cart_.get_o3d().position.set(2 - 100, -1 - 100, - 100)\r\n\r\n }\r\n })\r\n\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.PUT_CART,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n // this.hold_ = null\r\n this.hold_release_()\r\n\r\n }\r\n\r\n } else if (actionName == 'try_cart_to_shelf') {\r\n if (this.cart_) {\r\n // this.cart_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.cart_.o3d.position.copy(this.cart_.position)\r\n\r\n // world to local\r\n let o3d = this.cart_.get_o3d()\r\n\r\n this.cart_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.cart_.localRotationY, 0)\r\n o3d.position.copy(this.cart_.localPosition)\r\n\r\n this.cart_ = null\r\n }\r\n }\r\n\r\n }\r\n\r\n hold_release_() {\r\n if (this.hold_controls_) {\r\n this.hold_controls_.dispose()\r\n this.hold_controls_ = null\r\n }\r\n if (this.hold_) {\r\n this.hold_ = null\r\n }\r\n this.controls_.enabled = true\r\n }\r\n\r\n // #20221130\r\n flush_behavior() {\r\n if (this.behavior_) {\r\n this.behavior_.flush()\r\n }\r\n }\r\n\r\n dispose() {\r\n super.dispose()\r\n }\r\n\r\n // #20221018, hold\r\n // #20221115, frostFarScene, #20221122, 改为整体状态切换\r\n hold({ wareId, keepHold = false/*, frostFarScene = false*/, freezeRotY = NaN }) {\r\n // console.log('hold..', wareId, keepHold)\r\n if (wareId) {\r\n\r\n let arr = this.picker_.hits_.arr\r\n let f_mesh = null\r\n for (let i in arr) {\r\n let mesh = arr[i]\r\n if (mesh.hit_.surveyWare.id == wareId) {\r\n f_mesh = mesh\r\n break\r\n }\r\n }\r\n // console.log(wareId, arr.length, f_mesh)\r\n if (f_mesh) {\r\n this.to_hold_({\r\n int0: {\r\n object: f_mesh\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n this.opt_keepHold__ = keepHold\r\n\r\n freezeRotY = parseFloat(freezeRotY)\r\n if (!isNaN(freezeRotY)) {\r\n // console.log('## survey viewer freezeRotY', freezeRotY, this.world_space_)\r\n this.require_hold_controls_opts_ = {\r\n enabled: false,\r\n // rotY: freezeRotY / 180 * Math.PI,\r\n }\r\n this.world_space_.children.forEach(c => {\r\n c.rotation.y += freezeRotY / 180 * Math.PI\r\n })\r\n }\r\n\r\n }\r\n\r\n // #20221030\r\n moveToCart({ wareId }) {\r\n\r\n\r\n\r\n }\r\n\r\n // #20221122\r\n get frostFarScene() {\r\n return this.renderer_.pp_.usePass\r\n }\r\n\r\n set frostFarScene(v) {\r\n if (v != this.frostFarScene) {\r\n console.log('### set frostFarScene', v)\r\n let pp = this.renderer_.pp_\r\n if (v) {\r\n pp.beginPass(() => {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length - 1; i++) {\r\n sc[i].visible = true\r\n }\r\n sc[sc.length - 1].visible = false\r\n }, () => {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length - 1; i++) {\r\n sc[i].visible = false\r\n }\r\n sc[sc.length - 1].visible = true\r\n })\r\n } else {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length; i++) {\r\n sc[i].visible = true\r\n }\r\n pp.endPass()\r\n }\r\n }\r\n }\r\n\r\n // #20221123\r\n get flyAnimation() {\r\n return this.flyAnimation_\r\n }\r\n\r\n set flyAnimation(v) {\r\n if (v != this.flyAnimation_) {\r\n this.flyAnimation_ = v\r\n // console.log('set flyAnimation', v)\r\n }\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ShopPanoSurveyViewer_.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShopPanoSurveyViewer_\": () => (/* binding */ ShopPanoSurveyViewer_)\n/* harmony export */ });\n/* harmony import */ var _HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HallShelvesViewer */ \"./src/crossyo/shelves/viewer/HallShelvesViewer.js\");\n/* harmony import */ var _common_SurveyShelve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/SurveyShelve */ \"./src/crossyo/shelves/common/SurveyShelve.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/examples/jsm/controls/OrbitControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/OrbitControls.js\");\n/* harmony import */ var kutsi_shelves_controls_FreeLookControls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! kutsi-shelves/controls/FreeLookControls */ \"./src-kutsi-shelves/crossyo/kutsi/controls/FreeLookControls.js\");\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! gsap */ \"./node_modules/_gsap@3.11.3@gsap/index.js\");\n/* harmony import */ var _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./BehaviorQueue */ \"./src/crossyo/shelves/viewer/BehaviorQueue.js\");\n/* harmony import */ var kutsi_shelves_pp_FrostFar_pp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! kutsi-shelves/pp/FrostFar_pp */ \"./src-kutsi-shelves/crossyo/kutsi/pp/FrostFar_pp.js\");\n/* harmony import */ var _common_util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../common/util */ \"./src/crossyo/shelves/common/util.js\");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// const AUTO_ROTATION = true\r\nconst AUTO_ROTATION = false // manually rotation\r\n\r\nclass ManuallyRotationControls {\r\n\r\n constructor({ scene, domElement, focusTarget, behavior }) {\r\n this.scene_ = scene\r\n let fake_cam = new three__WEBPACK_IMPORTED_MODULE_5__.PerspectiveCamera()\r\n this.fake_cam_ = fake_cam\r\n this.behavior_ = behavior\r\n\r\n // USE HELPER!\r\n // this.helper_ = new CameraHelper(fake_cam)\r\n\r\n this.scene_.add(this.helper_)\r\n this.controls_ = new three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_2__.OrbitControls(fake_cam, domElement)\r\n // this.controls_.autoRotate = true\r\n this.controls_.enableDamping = true\r\n this.controls_.enablePan = false\r\n // this.controls_.noPan = true // Trackball\r\n\r\n this.controls_.minPolarAngle = Math.PI / 6\r\n this.controls_.maxPolarAngle = Math.PI * 5 / 6\r\n\r\n this.controls_.minDistance = .1\r\n this.controls_.maxDistance = .4\r\n\r\n this.focusTarget_ = focusTarget\r\n\r\n let tgt = this.focusTarget_.position.clone()\r\n this.controls_.target = tgt\r\n fake_cam.position.copy(new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(0, 0, -.2).add(tgt))\r\n\r\n this.enabled_ = true\r\n\r\n }\r\n\r\n get enabled() {\r\n return this.enabled_\r\n }\r\n\r\n set enabled(v) {\r\n this.enabled_ = v\r\n this.controls_.enabled = v\r\n }\r\n\r\n // set rotY(v) {\r\n // console.log('### ManuallyRotationControls set rotY', v)\r\n // }\r\n\r\n update(delta) {\r\n if (!this.enabled_) return\r\n this.controls_.update(delta)\r\n let p1 = this.fake_cam_.position\r\n let p0 = this.controls_.target\r\n\r\n let dz = p1.z - p0.z\r\n let dx = p1.x - p0.x\r\n\r\n let xz = Math.sqrt(dz * dz + dx * dx)\r\n\r\n let dist = new three__WEBPACK_IMPORTED_MODULE_5__.Vector3().subVectors(p1, p0).lengthSq()\r\n // console.log(dist) .0\r\n\r\n // .04 1\r\n // .1 \r\n\r\n let s = 1 / Math.sqrt(Math.max(.01, Math.min(dist, .16)) / .04)\r\n\r\n // this.focusTarget_.rotation.set(0, Math.PI / 2 + Math.atan2(dz, dx), Math.atan2(p1.y - p0.y, xz), 'XYZ')\r\n let rz = Math.PI / 2 + Math.atan2(dz, dx) // 左右\r\n let ry = Math.atan2(p1.y - p0.y, xz) // 上下\r\n this.focusTarget_.rotation.set(0, rz, ry, 'XZY')\r\n this.focusTarget_.scale.set(s, s, s)\r\n\r\n let srz = Math.round(rz * 100) / 100\r\n let sry = Math.round(ry * 100) / 100\r\n\r\n this.behavior_.idle_controls_update_(srz, sry, delta)\r\n\r\n }\r\n\r\n reset() {\r\n this.focusTarget_.rotation.set(0, 0, 0, 'XYZ')\r\n this.focusTarget_.scale.set(1, 1, 1)\r\n }\r\n\r\n dispose() {\r\n this.reset()\r\n if (this.helper_) {\r\n this.scene_.remove(this.helper_)\r\n }\r\n this.controls_.dispose()\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\nclass ShopPanoSurveyViewer_ extends _HallShelvesViewer__WEBPACK_IMPORTED_MODULE_0__.HallShelvesViewer {\r\n\r\n constructor(opts) {\r\n super(Object.assign(opts, {\r\n clzPostProcessing: kutsi_shelves_pp_FrostFar_pp__WEBPACK_IMPORTED_MODULE_6__.FrostFar_pp\r\n }))\r\n\r\n this.flyAnimation_ = true\r\n }\r\n\r\n startup() {\r\n super.startup()\r\n this.renderer_.pp_.no_pass_use_frost_ = false// true // default true, if clearly load process, set to false\r\n // this.renderer_.pp_.grayTend = .33 // 如果采用饱和\r\n this.renderer_.pp_.grayTend = .75 // 如果需要失去更多细节\r\n\r\n // this.frostFarScene = true\r\n }\r\n\r\n endLoadSpecs() {\r\n\r\n // super.endLoadSpecs()\r\n // local controller!\r\n\r\n // console.log(this.opts_.shopData.shelf)\r\n // SUSPENSION 参考hall, 目前hall结构不一定会含有shelf\r\n\r\n let shelf0 = (0,_common_util__WEBPACK_IMPORTED_MODULE_7__.get_shelf_0_)(this.shopData_)\r\n\r\n this.behavior_ = new _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorQueue({\r\n viewer: this,\r\n surveyId: this.opts_.surveyId,\r\n // shelfId: this.opts_.shopData.shelf ? this.opts_.shopData.shelf.id : null, // #20221021 之后补充,之前数据没有shelf.id\r\n shelfId: shelf0 ? shelf0.id : null,\r\n })\r\n\r\n this.shelve_ = new _common_SurveyShelve__WEBPACK_IMPORTED_MODULE_1__.SurveyShelve(this)\r\n // console.log('MESH SHELF', this.mesh_shelf__)\r\n if (shelf0 && shelf0.hideWhenSurvey) {\r\n // console.log(this.shopData_.shelf)\r\n this.mesh_shelf__.children.filter(c => c.isMesh).forEach(c => c.visible = false)\r\n }\r\n\r\n this.world_space_ = new three__WEBPACK_IMPORTED_MODULE_5__.Object3D()\r\n this.scene_.add(this.world_space_)\r\n\r\n this.hold_ = null\r\n this.hold_null_cd_ = 0 // TEMP\r\n this.cart_ = null\r\n this.picker_.on('downUpPick', e => {\r\n // console.log('downUpPick', e)\r\n\r\n if (this.opt_keepHold__) {\r\n return\r\n }\r\n\r\n this.to_hold_(e)\r\n\r\n })\r\n\r\n this.emit('loadingCompletion')\r\n\r\n }\r\n\r\n to_hold_(e) {\r\n\r\n if (this.hold_null_cd_ > 0) return // TEMP\r\n if (this.hold_ == null) {\r\n if (e.int0) {\r\n // e.int0.object -> Mesh\r\n let m0 = e.int0.object\r\n let m = m0.hit_.targetObject__ // v3.3 #20220730\r\n // console.log(m0, m)\r\n if (m) {\r\n // back_to_shelf_()\r\n\r\n this.controls_.enabled = false\r\n\r\n let mParent = m.parent\r\n this.hold_ = {\r\n // o3d: m,\r\n get_parent_cell() {\r\n return mParent\r\n },\r\n get_o3d() {\r\n return m\r\n },\r\n // position: m.position.clone(),\r\n localPosition: m.position.clone(),\r\n localRotationY: m.rotation.y,\r\n data: m0.hit_,\r\n init_time_: -1, // for rot!\r\n }\r\n\r\n // console.log(this.hold_.get_o3d())\r\n\r\n // m.position.set(.35, 0, 0)\r\n // fly to\r\n\r\n // zoomFov t\t sx\t\tdy\r\n // 1 \t\t0\t 1\t\t0\r\n // .5\t\t1\t 1.5\t\t-0.15\r\n\r\n let t = 2 - this.camera_.zoomFov * 2\r\n\r\n let sx = three__WEBPACK_IMPORTED_MODULE_5__.MathUtils.lerp(1, 1.5, t)\r\n // let dy = MathUtils.lerp(0, -.015, t)\r\n\r\n // let dy = -.1\r\n let dy = -.05 // 视点居中\r\n\r\n // console.log('zoomFov', this.camera_.zoomFov, t, sx, dy)\r\n\r\n // console.log('## survey viewer gsap to')\r\n\r\n this.world_space_.scale.set(1, 1, 1)\r\n this.world_space_.rotation.set(0, 0, 0, 'XYZ')\r\n this.world_space_.position.set(.35 * sx, dy, 0) // #20220930, 设为hold中心一致\r\n this.world_space_.attach(m)\r\n gsap__WEBPACK_IMPORTED_MODULE_8__[\"default\"].to(m.position, {\r\n // x: .35 * sx,\r\n // y: dy,\r\n // z: 0,\r\n\r\n x: 0,\r\n y: - .1, // TODO 物体高度的一半\r\n z: 0,\r\n\r\n duration: this.flyAnimation_ ? .4 : 0,\r\n onComplete: () => {\r\n // console.log('## hold', this.hold_)\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.HOLD,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n if (AUTO_ROTATION) {\r\n\r\n } else {\r\n\r\n // const USE_FREELOOK = true\r\n const USE_FREELOOK = false\r\n if (USE_FREELOOK) {\r\n\r\n this.hold_controls_ = new kutsi_shelves_controls_FreeLookControls__WEBPACK_IMPORTED_MODULE_3__[\"default\"](this.hold_.get_o3d(), this.renderer_.domElement, {\r\n lookDirection: -1,\r\n lookSpeed: 2,\r\n })\r\n this.hold_controls_.target = new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(1, 0, 0).add(this.hold_.get_o3d().position)\r\n\r\n } else {\r\n\r\n this.hold_controls_ = new ManuallyRotationControls({\r\n scene: this.scene_,\r\n domElement: this.renderer_.domElement,\r\n focusTarget: this.world_space_,\r\n behavior: this.behavior_,\r\n })\r\n if (this.require_hold_controls_opts_) {\r\n if (this.require_hold_controls_opts_.hasOwnProperty('enabled')) {\r\n this.hold_controls_.enabled = this.require_hold_controls_opts_.enabled\r\n }\r\n // if (this.require_hold_controls_opts_.hasOwnProperty('rotY')) {\r\n // this.hold_controls_.rotY = this.require_hold_controls_opts_.rotY\r\n // }\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n })\r\n //\r\n\r\n this.emit('hold', this.hold_)\r\n this.hold_null_cd_ = .5 // TEMP\r\n }\r\n }\r\n\r\n } else { // 有 hold\r\n let hold_to_shelf = false\r\n if (e.int0) {// 点中,但不是自己\r\n // e.int0.object -> Mesh\r\n let m0 = e.int0.object\r\n let m = m0.hit_.targetObject__ // v3.3 #20220730\r\n if (this.hold_.get_o3d() != m) {\r\n hold_to_shelf = true\r\n }\r\n } else {\r\n // 没有点中\r\n hold_to_shelf = true\r\n }\r\n\r\n if (hold_to_shelf) {\r\n this.emit('from_scene_hold_to_shelf')\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n before_update_(time, delta) {\r\n // super.before_update_(time, delta)\r\n if (AUTO_ROTATION) {\r\n if (this.hold_) {\r\n if (this.hold_.init_time_ == -1) {\r\n this.hold_.init_time_ = time\r\n }\r\n this.hold_.get_o3d().rotation.set(0, time - this.hold_.init_time_ - Math.PI / 2, 0)\r\n }\r\n\r\n\r\n } else {\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.update(delta)\r\n }\r\n\r\n }\r\n\r\n if (this.hold_null_cd_ > 0) {\r\n this.hold_null_cd_ -= delta\r\n // console.log(this.hold_null_cd_)\r\n }\r\n\r\n // if (this.test_shelf_move__) {\r\n // this.test_shelf_move__.position.z = Math.sin(time)\r\n // }\r\n }\r\n\r\n set elCart(el) {\r\n // console.log('## set elCart', el)\r\n this.el_cart_ = el\r\n }\r\n\r\n calc_cart_target_() {\r\n // console.log('## calc_cart_target_', this.el_cart_, this.cart_plane_)\r\n if (this.el_cart_ && this.cart_plane_) {\r\n\r\n let rect0 = this.renderer_.domElement.getBoundingClientRect()\r\n let rect1 = this.el_cart_.getBoundingClientRect()\r\n\r\n // console.log('update_cart_target_',\r\n // \t// this.el_cart_.getClientRects(),\r\n // \trect0,\r\n // \trect1,\r\n // \tthis.cart_plane_)\r\n\r\n let wpos = new three__WEBPACK_IMPORTED_MODULE_5__.Vector2(\r\n rect1.x + rect1.width / 2 - rect0.x,\r\n rect1.y + rect1.height / 2 - rect0.y\r\n )\r\n\r\n let vpos = new three__WEBPACK_IMPORTED_MODULE_5__.Vector2(\r\n (wpos.x / rect0.width) * 2 - 1,\r\n -(wpos.y / rect0.height) * 2 + 1\r\n )\r\n\r\n // console.log(wpos, vpos)\r\n\r\n let rc = new three__WEBPACK_IMPORTED_MODULE_5__.Raycaster()\r\n rc.setFromCamera(vpos, this.camera_)\r\n return rc.ray.intersectPlane(this.cart_plane_, new three__WEBPACK_IMPORTED_MODULE_5__.Vector3())\r\n\r\n }\r\n\r\n return new three__WEBPACK_IMPORTED_MODULE_5__.Vector3(2, -.55, 1.55) // fall back\r\n }\r\n\r\n // 布置货架内容\r\n arrange(page) {\r\n // console.log(this.shelve_, page)\r\n\r\n this.cart_ = null\r\n if (this.hold_) {// #20220611, 清除前一次可能的hold\r\n let o3d = this.hold_.get_o3d()\r\n o3d.removeFromParent()\r\n }\r\n this.hold_release_()\r\n\r\n return this.shelve_.arrange(page)\r\n }\r\n\r\n action(actionName) {\r\n // console.log('## viewer action', actionName)\r\n if (actionName == 'hold_to_shelf') { // 由按钮激活,改为由场景来操作\r\n if (this.hold_) {\r\n\r\n // this.hold_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.hold_.o3d.position.copy(this.hold_.position)\r\n\r\n // world to local\r\n let o3d = this.hold_.get_o3d()\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.reset()\r\n }\r\n this.hold_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.hold_.localRotationY, 0)\r\n o3d.position.copy(this.hold_.localPosition)\r\n\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.PUT_BACK,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n // this.hold_ = null\r\n this.hold_release_()\r\n }\r\n\r\n } else if (actionName == 'hold_to_cart') {\r\n if (this.hold_) {\r\n\r\n if (this.cart_) { // prev\r\n // this.cart_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.cart_.o3d.position.copy(this.cart_.position)\r\n\r\n // world to local\r\n let o3d = this.cart_.get_o3d()\r\n\r\n if (this.hold_controls_) {\r\n this.hold_controls_.reset()\r\n }\r\n this.cart_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.cart_.localRotationY, 0)\r\n o3d.position.copy(this.cart_.localPosition)\r\n\r\n }\r\n\r\n {\r\n this.cart_ = this.hold_\r\n }\r\n\r\n let tgt = this.calc_cart_target_()\r\n gsap__WEBPACK_IMPORTED_MODULE_8__[\"default\"].to(this.cart_.get_o3d().position, {\r\n x: tgt.x,\r\n y: tgt.y,\r\n z: tgt.z,\r\n duration: this.flyAnimation_ ? .4 : 0,\r\n onComplete: () => {\r\n\r\n // this.cart_.o3d.position.set(2, -1, 0) // for debug\r\n this.cart_.get_o3d().position.set(2 - 100, -1 - 100, - 100)\r\n\r\n }\r\n })\r\n\r\n this.behavior_.push({\r\n action: _BehaviorQueue__WEBPACK_IMPORTED_MODULE_4__.BehaviorAction.PUT_CART,\r\n wareId: this.hold_.data.surveyWare.id,\r\n })\r\n\r\n // this.hold_ = null\r\n this.hold_release_()\r\n\r\n }\r\n\r\n } else if (actionName == 'try_cart_to_shelf') {\r\n if (this.cart_) {\r\n // this.cart_.o3d.rotation.set(0, - Math.PI / 2, 0)\r\n // this.cart_.o3d.position.copy(this.cart_.position)\r\n\r\n // world to local\r\n let o3d = this.cart_.get_o3d()\r\n\r\n this.cart_.get_parent_cell().attach(o3d)\r\n\r\n o3d.rotation.set(0, this.cart_.localRotationY, 0)\r\n o3d.position.copy(this.cart_.localPosition)\r\n\r\n this.cart_ = null\r\n }\r\n }\r\n\r\n }\r\n\r\n hold_release_() {\r\n if (this.hold_controls_) {\r\n this.hold_controls_.dispose()\r\n this.hold_controls_ = null\r\n }\r\n if (this.hold_) {\r\n this.hold_ = null\r\n }\r\n this.controls_.enabled = true\r\n }\r\n\r\n // #20221130\r\n flush_behavior() {\r\n if (this.behavior_) {\r\n this.behavior_.flush()\r\n }\r\n }\r\n\r\n dispose() {\r\n if (this.shelve_) {\r\n this.shelve_.dispose()\r\n }\r\n super.dispose()\r\n }\r\n\r\n // #20221018, hold\r\n // #20221115, frostFarScene, #20221122, 改为整体状态切换\r\n hold({ wareId, keepHold = false/*, frostFarScene = false*/, freezeRotY = NaN }) {\r\n // console.log('hold..', wareId, keepHold)\r\n if (wareId) {\r\n\r\n let arr = this.picker_.hits_.arr\r\n let f_mesh = null\r\n for (let i in arr) {\r\n let mesh = arr[i]\r\n if (mesh.hit_.surveyWare.id == wareId) {\r\n f_mesh = mesh\r\n break\r\n }\r\n }\r\n // console.log(wareId, arr.length, f_mesh)\r\n if (f_mesh) {\r\n this.to_hold_({\r\n int0: {\r\n object: f_mesh\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n this.opt_keepHold__ = keepHold\r\n\r\n freezeRotY = parseFloat(freezeRotY)\r\n if (!isNaN(freezeRotY)) {\r\n // console.log('## survey viewer freezeRotY', freezeRotY, this.world_space_)\r\n this.require_hold_controls_opts_ = {\r\n enabled: false,\r\n // rotY: freezeRotY / 180 * Math.PI,\r\n }\r\n this.world_space_.children.forEach(c => {\r\n c.rotation.y += freezeRotY / 180 * Math.PI\r\n })\r\n }\r\n\r\n }\r\n\r\n // #20221030\r\n moveToCart({ wareId }) {\r\n\r\n\r\n\r\n }\r\n\r\n // #20221122\r\n get frostFarScene() {\r\n return this.renderer_.pp_.usePass\r\n }\r\n\r\n set frostFarScene(v) {\r\n if (v != this.frostFarScene) {\r\n console.log('### set frostFarScene', v)\r\n let pp = this.renderer_.pp_\r\n if (v) {\r\n pp.beginPass(() => {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length - 1; i++) {\r\n sc[i].visible = true\r\n }\r\n sc[sc.length - 1].visible = false\r\n }, () => {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length - 1; i++) {\r\n sc[i].visible = false\r\n }\r\n sc[sc.length - 1].visible = true\r\n })\r\n } else {\r\n let sc = this.scene_.children\r\n for (let i = 0; i < sc.length; i++) {\r\n sc[i].visible = true\r\n }\r\n pp.endPass()\r\n }\r\n }\r\n }\r\n\r\n // #20221123\r\n get flyAnimation() {\r\n return this.flyAnimation_\r\n }\r\n\r\n set flyAnimation(v) {\r\n if (v != this.flyAnimation_) {\r\n this.flyAnimation_ = v\r\n // console.log('set flyAnimation', v)\r\n }\r\n }\r\n\r\n}\r\n\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ShopPanoSurveyViewer_.js?"); /***/ }), @@ -597,7 +707,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TARGET_FAR\": () => (/* binding */ TARGET_FAR),\n/* harmony export */ \"TARGET_NEAR\": () => (/* binding */ TARGET_NEAR),\n/* harmony export */ \"VIEW_MODE\": () => (/* binding */ VIEW_MODE),\n/* harmony export */ \"ViewModeBaseViewer\": () => (/* binding */ ViewModeBaseViewer)\n/* harmony export */ });\n/* harmony import */ var kutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kutsi/BaseViewer */ \"./src-kutsi/crossyo/kutsi/BaseViewer.js\");\n/* harmony import */ var three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/examples/jsm/controls/OrbitControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/OrbitControls.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_libs_lil_gui_module_min__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/examples/jsm/libs/lil-gui.module.min */ \"./node_modules/_three@0.139.2@three/examples/jsm/libs/lil-gui.module.min.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nkutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__.registerClass.GUI = three_examples_jsm_libs_lil_gui_module_min__WEBPACK_IMPORTED_MODULE_2__.GUI\r\n\r\nconst VIEW_MODE = {\r\n PANORAMA: 1,\r\n ORBIT: 2,\r\n\r\n FPS: 3, // for v5 hall\r\n}\r\n\r\nconst TARGET_NEAR = .75 // controls 可以 x .25\r\nconst TARGET_FAR = 2 // controls 可以 x 4 \r\n\r\n\r\nclass ViewModeBaseViewer extends kutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n\r\n this.viewMode__ = VIEW_MODE.PANORAMA\r\n }\r\n\r\n get viewMode() {\r\n return this.viewMode__\r\n }\r\n\r\n create_cms_for_pano_editor_() {\r\n\r\n this.cms_ = {\r\n lookAt: { controls: this.controls_ },\r\n orbit: { controls: null }\r\n }\r\n // this.cms_.orbit.controls.enabled = false\r\n console.log('## this.cms_ for pano editor', this.cms_)\r\n }\r\n\r\n create_cms_for_hall_editor_() {\r\n\r\n this.cms_ = {\r\n fps: { controls: this.controls_ },\r\n orbit: { controls: null }\r\n }\r\n // this.cms_.orbit.controls.enabled = false\r\n console.log('## this.cms_ for hall editor', this.cms_)\r\n }\r\n\r\n changeViewMode_(mode, changeByIndirectReason = false, onCompletion = null) {\r\n if (this.change_view_mode_working__) {\r\n return\r\n }\r\n if (mode != this.viewMode__) {\r\n this.change_view_mode_working__ = true\r\n if (this.viewMode__ == VIEW_MODE.PANORAMA) {\r\n // pano -> orbit\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.visible = false\r\n }\r\n\r\n // fly\r\n this.controls_.enabled = false\r\n if (!this.cms_.orbit.controls) {\r\n let controls = new three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_1__.OrbitControls(this.camera_, this.renderer_.domElement)\r\n controls.minDistance = TARGET_NEAR * .25\r\n controls.maxDistance = TARGET_FAR * 4\r\n this.cms_.orbit.controls = controls\r\n }\r\n this.controls_ = this.cms_.orbit.controls\r\n\r\n this.change_view_mode_working__ = false\r\n this.viewMode__ = mode\r\n\r\n this.controls_.enabled = true\r\n this.emit('viewModeChanged', mode)\r\n if (onCompletion != null) {\r\n onCompletion()\r\n }\r\n\r\n } else {\r\n // orbit -> pano\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.visible = true\r\n }\r\n\r\n // fly\r\n this.controls_.enabled = false\r\n this.controls_ = this.cms_.lookAt.controls\r\n\r\n this.change_view_mode_working__ = false\r\n this.viewMode__ = mode\r\n\r\n this.controls_.enabled = true\r\n this.emit('viewModeChanged', mode)\r\n if (onCompletion != null) {\r\n onCompletion()\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n orbit_update_for_(o3d, forceDeg45 = false) {\r\n let dir = null\r\n if (forceDeg45) {\r\n dir = new three__WEBPACK_IMPORTED_MODULE_3__.Vector3(-2, 1, 1).normalize()\r\n } else {\r\n dir = new three__WEBPACK_IMPORTED_MODULE_3__.Vector3().subVectors(this.controls_.object.position, this.controls_.target).normalize()\r\n }\r\n\r\n let bbx = new three__WEBPACK_IMPORTED_MODULE_3__.Box3().expandByObject(o3d)\r\n let target = bbx.getCenter(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let size = bbx.getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let len = Math.min(Math.max(TARGET_NEAR, size.length() * 2), TARGET_FAR)\r\n\r\n // this.controls_.object.position.copy(dir.multiplyScalar(len).add(target))\r\n // this.controls_.target.copy(target)\r\n\r\n this.flyTo({\r\n target,\r\n position: dir.multiplyScalar(len).add(target),\r\n duration: .2,\r\n }, () => {\r\n })\r\n }\r\n\r\n dispose() {\r\n super.dispose()\r\n\r\n // this.cms_.lookAt.controls.dispose()\r\n // if (this.cms_.orbit.controls) {\r\n // this.cms_.orbit.controls.dispose()\r\n // }\r\n\r\n if (this.cms_) {\r\n Object.values(this.cms_).forEach(o => {\r\n if (o.controls) {\r\n // console.log('@@ dispose controls', o.controls)\r\n o.controls.dispose()\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ViewModeBaseViewer.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TARGET_FAR\": () => (/* binding */ TARGET_FAR),\n/* harmony export */ \"TARGET_NEAR\": () => (/* binding */ TARGET_NEAR),\n/* harmony export */ \"VIEW_MODE\": () => (/* binding */ VIEW_MODE),\n/* harmony export */ \"ViewModeBaseViewer\": () => (/* binding */ ViewModeBaseViewer)\n/* harmony export */ });\n/* harmony import */ var kutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kutsi/BaseViewer */ \"./src-kutsi/crossyo/kutsi/BaseViewer.js\");\n/* harmony import */ var three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three/examples/jsm/controls/OrbitControls */ \"./node_modules/_three@0.139.2@three/examples/jsm/controls/OrbitControls.js\");\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! three */ \"./node_modules/_three@0.139.2@three/build/three.module.js\");\n/* harmony import */ var three_examples_jsm_libs_lil_gui_module_min__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three/examples/jsm/libs/lil-gui.module.min */ \"./node_modules/_three@0.139.2@three/examples/jsm/libs/lil-gui.module.min.js\");\n\r\n\r\n\r\n\r\n\r\n\r\nkutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__.registerClass.GUI = three_examples_jsm_libs_lil_gui_module_min__WEBPACK_IMPORTED_MODULE_2__.GUI\r\n\r\nconst VIEW_MODE = {\r\n PANORAMA: 1,\r\n ORBIT: 2,\r\n\r\n FPS: 3, // for v5 hall\r\n}\r\n\r\nconst TARGET_NEAR = .75 // controls 可以 x .25\r\nconst TARGET_FAR = 2 // controls 可以 x 4 \r\n\r\n\r\nclass ViewModeBaseViewer extends kutsi_BaseViewer__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\r\n\r\n constructor(opts) {\r\n super(opts)\r\n\r\n this.viewMode__ = VIEW_MODE.PANORAMA\r\n }\r\n\r\n get viewMode() {\r\n return this.viewMode__\r\n }\r\n\r\n create_cms_for_pano_editor_() {\r\n\r\n this.cms_ = {\r\n lookAt: { controls: this.controls_ },\r\n orbit: { controls: null }\r\n }\r\n // this.cms_.orbit.controls.enabled = false\r\n console.log('## this.cms_ for pano editor', this.cms_)\r\n }\r\n\r\n create_cms_for_hall_editor_() {\r\n\r\n this.cms_ = {\r\n fps: { controls: this.controls_ },\r\n orbit: { controls: null }\r\n }\r\n // this.cms_.orbit.controls.enabled = false\r\n console.log('## this.cms_ for hall editor', this.cms_)\r\n }\r\n\r\n changeViewMode_(mode, changeByIndirectReason = false, onCompletion = null) {\r\n if (this.change_view_mode_working__) {\r\n return\r\n }\r\n if (mode != this.viewMode__) {\r\n this.change_view_mode_working__ = true\r\n \r\n if (this.viewMode__ == VIEW_MODE.PANORAMA) {\r\n // pano -> orbit\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.visible = false\r\n }\r\n\r\n // fly\r\n this.controls_.enabled = false\r\n if (!this.cms_.orbit.controls) {\r\n let controls = new three_examples_jsm_controls_OrbitControls__WEBPACK_IMPORTED_MODULE_1__.OrbitControls(this.camera_, this.renderer_.domElement)\r\n controls.minDistance = TARGET_NEAR * .25\r\n controls.maxDistance = TARGET_FAR * 4\r\n this.cms_.orbit.controls = controls\r\n }\r\n this.controls_ = this.cms_.orbit.controls\r\n\r\n this.change_view_mode_working__ = false\r\n this.viewMode__ = mode\r\n\r\n this.controls_.enabled = true\r\n this.emit('viewModeChanged', mode)\r\n if (onCompletion != null) {\r\n onCompletion()\r\n }\r\n\r\n } else {\r\n // orbit -> pano\r\n if (this.mesh_env_sphere__) {\r\n this.mesh_env_sphere__.visible = true\r\n }\r\n\r\n // fly\r\n this.controls_.enabled = false\r\n this.controls_ = this.cms_.lookAt.controls\r\n\r\n this.change_view_mode_working__ = false\r\n this.viewMode__ = mode\r\n\r\n this.controls_.enabled = true\r\n this.emit('viewModeChanged', mode)\r\n if (onCompletion != null) {\r\n onCompletion()\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n orbit_update_for_(o3d, forceDeg45 = false) {\r\n let dir = null\r\n if (forceDeg45) {\r\n dir = new three__WEBPACK_IMPORTED_MODULE_3__.Vector3(-2, 1, 1).normalize()\r\n } else {\r\n dir = new three__WEBPACK_IMPORTED_MODULE_3__.Vector3().subVectors(this.controls_.object.position, this.controls_.target).normalize()\r\n }\r\n\r\n let bbx = new three__WEBPACK_IMPORTED_MODULE_3__.Box3().expandByObject(o3d)\r\n let target = bbx.getCenter(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let size = bbx.getSize(new three__WEBPACK_IMPORTED_MODULE_3__.Vector3())\r\n let len = Math.min(Math.max(TARGET_NEAR, size.length() * 2), TARGET_FAR)\r\n\r\n // this.controls_.object.position.copy(dir.multiplyScalar(len).add(target))\r\n // this.controls_.target.copy(target)\r\n\r\n this.flyTo({\r\n target,\r\n position: dir.multiplyScalar(len).add(target),\r\n duration: .2,\r\n }, () => {\r\n })\r\n }\r\n\r\n dispose() {\r\n super.dispose()\r\n\r\n // this.cms_.lookAt.controls.dispose()\r\n // if (this.cms_.orbit.controls) {\r\n // this.cms_.orbit.controls.dispose()\r\n // }\r\n\r\n if (this.cms_) {\r\n Object.values(this.cms_).forEach(o => {\r\n if (o.controls) {\r\n // console.log('@@ dispose controls', o.controls)\r\n o.controls.dispose()\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n}\n\n//# sourceURL=webpack://shelves/./src/crossyo/shelves/viewer/ViewModeBaseViewer.js?"); /***/ }), diff --git a/src/views/Creative/utils.default.scss b/src/views/Creative/utils.default.scss new file mode 100644 index 00000000..a920a7a5 --- /dev/null +++ b/src/views/Creative/utils.default.scss @@ -0,0 +1,387 @@ + +/* Works on Firefox */ +* { + scrollbar-width: thin; + scrollbar-color: #ECECEC rgba(0, 0, 0, 0); +} + +/* Works on Chrome, Edge, and Safari */ +*::-webkit-scrollbar { + width: 4px; + height: 4px; + background: rgba(0, 0, 0, 0); + border-radius: 0; +} + +/* *::-webkit-scrollbar-track { +} */ + +*::-webkit-scrollbar-thumb { + width: 4px; + height: 4px; + background: #ECECEC; + border-radius: 0; +} + +/* Code for Firefox */ +::-moz-selection { +color: #fff; +background: #70B936; +} + +/* Code for Chrome, Edge, and Safari */ +::selection { +color: #fff; +background: #70B936; +} + +#app { + margin: 0px; +} + +.yo-scrollbar { + display: flex; + flex-flow: column; + flex-wrap: wrap; + gap: 25px; + padding: 25px; + overflow-y: auto; + grid-template-columns: repeat(1, 1fr); +} + +.yo-scrollbar2 { + display: flex; + flex-flow: column; + /* gap: 25px; */ + padding: 25px; + overflow-y: auto; +} + +.yo-content { + display: flex; + flex-flow: column; + gap: 25px; + padding-top: 25px; +} + +.yo-thumb { + display: inline-block; + width: auto; + height: 130px; + /* color: #70B936; */ + background-color: rgba(245, 245, 245, 0.6); + border: none; + box-sizing: border-box; + border-radius: 10px; + margin: 0; + text-align: center; +} + +.yo-thumb:hover, +.yo-thumb:focus { + border: none; + cursor: pointer; + transform: scale(1.05); +} + +.yo-thumb:active { + border: none; + cursor: pointer; + transform: scale(0.95); +} + +.yo-thumb img { + width: 100%; + height: 100%; + border-radius: 10px; +} + +.yo-obj-fit-cover { + object-fit: cover; +} + +.yo-obj-fit-contain { + object-fit: contain; +} + +.ant-input { + color: #434343; +} + +.ant-input-affix-wrapper { + color: #434343; + border-color: #DFE0E3; + background: #FEFFFE; + border-radius: 6px; + padding-left: 4px; +} + +.ant-input-affix-wrapper:hover { + border-color: #70B936; +} + +.ant-input-affix-wrapper img { + width: 24px; +} + +.ant-input-affix-wrapper-focused { + box-shadow: none; +} + +.ant-input-affix-wrapper .ant-input-prefix, +.ant-input-affix-wrapper .ant-input-suffix { + color: #7E7E7E; + font-size: 12px; +} + +.ant-slider-rail { + height: 6px; + background: #ECECEC; + border-radius: 3px; +} + +.ant-slider-track { + height: 6px; + background: #7EC04A; + border-radius: 3px; +} + +.ant-slider-handle { + width: 20px; + height: 20px; + margin-top: -7px; + background: #7EC04A; + border: 4px solid #DFF4D0; +} + +.ant-slider-handle:focus { + border-color: #DFF4D0; + box-shadow: none; +} + +.ant-slider-handle.ant-tooltip-open { + border-color: #DFF4D0; +} + +.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) { + border-color: #DFF4D0; +} + +.ant-slider-step { + height: 6px; +} + +.ant-slider:hover .ant-slider-rail { + background: #ECECEC; +} + +.ant-slider:hover .ant-slider-track { + background: #7EC04A; +} + +.ant-tooltip-inner { + color: #fff; + background: #808080; + border-radius: 2px; + font-size: 12px; + line-height: 18px; + box-shadow: none; +} + +.ant-radio-button-wrapper { + color: #434343; + border: none; + background: #f9f9f9; +} + +.ant-radio-button-wrapper:hover { + color: #7EC04A; + background: #f9f9f9; +} + +/* .ant-radio-button-wrapper:active { + color: #7EC04A; + background: #f9f9f9; +} */ + +.ant-radio-button-wrapper:first-child { + border: none; + border-radius: 6px 0 0 6px; +} + +.ant-radio-button-wrapper:last-child { + border: none; + border-radius: 0 6px 6px 0; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + color: #ffffff; + background: #7EC04A; + border: none; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + color: #ffffff; + background: #7EC04A; + border: none; +} + +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within { + box-shadow: none; +} + +.ant-radio-button-wrapper:not(:first-child)::before { + background: none; +} + +.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before { + background: none; +} + +.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before { + background: none; +} + +.ant-divider { + color: #F5F5F5; + margin: 0; +} + +.empty1 { + font-size: 14px; + font-weight: 400; + letter-spacing: 2px; + color: #434343; + text-align: center; +} + +.yo-title-s16 { + font-size: 16px; + font-weight: 600; + letter-spacing: 2px; + color: #434343; +} + +.yo-title-s14 { + font-size: 14px; + font-weight: 400; + letter-spacing: 2px; + color: #434343; +} + +.yo-icon img { + width: 100%; + height: 100%; +} + +/* element plus */ + +.el-button { + min-width: 88px; +} + +.el-button--small { + font-size: 11px; +} + +.el-scrollbar__bar.is-vertical { + width: 4px; + top: 0; +} + +.el-scrollbar__bar { + right: 0; + bottom: 0; + border-radius: 0; +} + +.el-dialog__headerbtn { + font-size: 20px; +} + +.el-dialog__footer { + text-align: center; +} + +.dialog-footer button:first-child { + margin-right: 40px; +} + +.el-collapse { + border: none; + background: none; +} + +.el-collapse-item__header { + border: none; + background: none; + font-weight: 600; + font-size: 11px; +} + +.el-collapse-item__wrap { + border: none; + background: none; +} + +.el-collapse-item__content { + font-size: 11px; +} + +.el-slider { + height: 24px; + --el-slider-border-radius: 3px; + --el-slider-height: 1px; + --el-slider-button-size: 10px; + --el-slider-button-wrapper-size: 8px; + --el-slider-button-wrapper-offset: -8px; +} + +.el-slider__button { + border: solid 1px var(--el-slider-main-bg-color); +} + +.el-slider__bar { + background: none; +} + +.el-input.is-disabled .el-input__wrapper { + background-color: #ffffff; +} + +.yo-special-input .yo-input-small .el-input__wrapper { + padding: 1px 16px 1px 8px; +} + +.el-input-number.is-controls-right .el-input__wrapper { + padding-left: 8px; + padding-right: 24px; +} + +.el-input-number--small .el-input-number__decrease, +.el-input-number--small .el-input-number__increase { + width: 16px; + font-size: 11px; +} + +.yo-input-number-small { + width: 56px; +} + +.yo-input-small { + font-size: 11px; + height: 24px; +} + +.yo-line { + width: 100%; + height: 1px; + background-color: #efefef; +} + +.yo-v-gap { + width: 100%; + height: 8px; +} + +/* antdv */ \ No newline at end of file