Browse Source

fix: 运行成功

xzw 2 years ago
parent
commit
adda11a84e
3 changed files with 249 additions and 28 deletions
  1. 3 4
      package.json
  2. 173 19
      pnpm-lock.yaml
  3. 73 5
      service/planeCoverService.js

+ 3 - 4
package.json

@@ -13,9 +13,8 @@
     "axios": "^1.5.0",
     "body-parser": "^1.20.2",
     "express": "^4.18.2",
-    "js-base64": "^3.7.5",
-    "math.js": "^1.1.46",
-    "protobufjs": "2.0.5",
-    "three": "^0.155.0"
+    "js-base64": "^3.7.5", 
+    "protobufjs": "5.0.1",
+    "three": "^0.143.0"
   }
 }

+ 173 - 19
pnpm-lock.yaml

@@ -5,18 +5,16 @@ specifiers:
   body-parser: ^1.20.2
   express: ^4.18.2
   js-base64: ^3.7.5
-  math.js: ^1.1.46
-  protobufjs: 2.0.5
-  three: ^0.155.0
+  protobufjs: 5.0.1
+  three: ^0.143.0
 
 dependencies:
   axios: 1.5.0
   body-parser: 1.20.2
   express: 4.18.2
   js-base64: 3.7.5
-  math.js: 1.1.46
-  protobufjs: 2.0.5
-  three: 0.155.0
+  protobufjs: 5.0.1
+  three: 0.143.0
 
 packages:
 
@@ -28,6 +26,11 @@ packages:
       negotiator: 0.6.3
     dev: false
 
+  /ansi-regex/2.1.1:
+    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /array-flatten/1.1.1:
     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
     dev: false
@@ -53,6 +56,10 @@ packages:
       - debug
     dev: false
 
+  /balanced-match/1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+    dev: false
+
   /body-parser/1.20.1:
     resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -93,11 +100,18 @@ packages:
       - supports-color
     dev: false
 
-  /bytebuffer/2.3.2:
-    resolution: {integrity: sha512-BtuKDIpvYJ9Q+8BnmlFwqeFuGWtNXYTZQIB/SK9ydDGSs/Q7yX81HB545jzKqzosm9nBGyFvzbv7m5OCiB/2Cw==}
+  /brace-expansion/1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: 0.0.1
+    dev: false
+
+  /bytebuffer/5.0.1:
+    resolution: {integrity: sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==}
     engines: {node: '>=0.8'}
     dependencies:
-      long: 1.2.3
+      long: 3.2.0
     dev: false
 
   /bytes/3.1.2:
@@ -112,6 +126,24 @@ packages:
       get-intrinsic: 1.2.1
     dev: false
 
+  /camelcase/2.1.1:
+    resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
+  /cliui/3.2.0:
+    resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+      wrap-ansi: 2.1.0
+    dev: false
+
+  /code-point-at/1.1.0:
+    resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /colour/0.7.1:
     resolution: {integrity: sha512-Rel466v0EnmKPcsxHo91L4kgPs/6XF7Pu2LJNszq9lXYwi5CFWEeIiRaTX5ym7PPMdj4udDHkLSVC1//JVkZQg==}
     engines: {node: '>=0.8'}
@@ -124,6 +156,10 @@ packages:
       delayed-stream: 1.0.0
     dev: false
 
+  /concat-map/0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+    dev: false
+
   /content-disposition/0.5.4:
     resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
     engines: {node: '>= 0.6'}
@@ -156,6 +192,11 @@ packages:
       ms: 2.0.0
     dev: false
 
+  /decamelize/1.2.0:
+    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /delayed-stream/1.0.0:
     resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
     engines: {node: '>=0.4.0'}
@@ -285,6 +326,16 @@ packages:
       has-symbols: 1.0.3
     dev: false
 
+  /glob/5.0.15:
+    resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==}
+    dependencies:
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+    dev: false
+
   /has-proto/1.0.1:
     resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
     engines: {node: '>= 0.4'}
@@ -320,26 +371,48 @@ packages:
       safer-buffer: 2.1.2
     dev: false
 
+  /inflight/1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+    dev: false
+
   /inherits/2.0.4:
     resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
     dev: false
 
+  /invert-kv/1.0.0:
+    resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /ipaddr.js/1.9.1:
     resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
     engines: {node: '>= 0.10'}
     dev: false
 
+  /is-fullwidth-code-point/1.0.0:
+    resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      number-is-nan: 1.0.1
+    dev: false
+
   /js-base64/3.7.5:
     resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==}
     dev: false
 
-  /long/1.2.3:
-    resolution: {integrity: sha512-YxkH60PDK3kd27OjbFApfpBuuwEUvcFc4zBVVk33v2UC+rzydqCOY78ny4gVYbc45876+OJ2v47pnDEu89OYCA==}
-    engines: {node: '>=0.6'}
+  /lcid/1.0.0:
+    resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      invert-kv: 1.0.0
     dev: false
 
-  /math.js/1.1.46:
-    resolution: {integrity: sha512-D4DS+oENshM6xI94mhzJFkH1D0jvSHyKjNuLbki2IdGM3RZ74WQDSw8KLIMy/76JFhl7BvY1/KkJc38kOvv/6Q==}
+  /long/3.2.0:
+    resolution: {integrity: sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==}
+    engines: {node: '>=0.6'}
     dev: false
 
   /media-typer/0.3.0:
@@ -374,6 +447,12 @@ packages:
     hasBin: true
     dev: false
 
+  /minimatch/3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+    dependencies:
+      brace-expansion: 1.1.11
+    dev: false
+
   /ms/2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
     dev: false
@@ -387,6 +466,11 @@ packages:
     engines: {node: '>= 0.6'}
     dev: false
 
+  /number-is-nan/1.0.1:
+    resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /object-inspect/1.12.3:
     resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
     dev: false
@@ -398,26 +482,46 @@ packages:
       ee-first: 1.1.1
     dev: false
 
+  /once/1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+    dependencies:
+      wrappy: 1.0.2
+    dev: false
+
   /optjs/3.2.2:
     resolution: {integrity: sha512-f8lTJm4LKirX+45xsFhuRNjA4f46QVLQKfGoNH7e2AEWS+24eM4XNH4pQ8Tw2LISCIvbST/wNcLdtgvgcqVaxA==}
     dev: false
 
+  /os-locale/1.4.0:
+    resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      lcid: 1.0.0
+    dev: false
+
   /parseurl/1.3.3:
     resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
     engines: {node: '>= 0.8'}
     dev: false
 
+  /path-is-absolute/1.0.1:
+    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /path-to-regexp/0.1.7:
     resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
     dev: false
 
-  /protobufjs/2.0.5:
-    resolution: {integrity: sha512-CHi29/mmrkK9p3df84p09bdLykPFEUb9WWzO8XO5fuV4JyPkd+aSJnpAvgDYS3BgNsTz5ff11s56LL02h11ypQ==}
+  /protobufjs/5.0.1:
+    resolution: {integrity: sha512-qyjAxPqPS9G79Rj8eQcuxjk2XkqrJyQDUArBw59/d3uNxZSG8xH6py6u0PEyKYbnIsUN5iFM8HHERt0YZUz7NA==}
     engines: {node: '>=0.8'}
     hasBin: true
     dependencies:
       ascli: 1.0.1
-      bytebuffer: 2.3.2
+      bytebuffer: 5.0.1
+      glob: 5.0.15
+      yargs: 3.32.0
     dev: false
 
   /proxy-addr/2.0.7:
@@ -522,8 +626,24 @@ packages:
     engines: {node: '>= 0.8'}
     dev: false
 
-  /three/0.155.0:
-    resolution: {integrity: sha512-sNgCYmDijnIqkD/bMfk+1pHg3YzsxW7V2ChpuP6HCQ8NiZr3RufsXQr8M3SSUMjW4hG+sUk7YbyuY0DncaDTJQ==}
+  /string-width/1.0.2:
+    resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      code-point-at: 1.1.0
+      is-fullwidth-code-point: 1.0.0
+      strip-ansi: 3.0.1
+    dev: false
+
+  /strip-ansi/3.0.1:
+    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      ansi-regex: 2.1.1
+    dev: false
+
+  /three/0.143.0:
+    resolution: {integrity: sha512-oKcAGYHhJ46TGEuHjodo2n6TY2R6lbvrkp+feKZxqsUL/WkH7GKKaeu6RHeyb2Xjfk2dPLRKLsOP0KM2VgT8Zg==}
     dev: false
 
   /toidentifier/1.0.1:
@@ -553,3 +673,37 @@ packages:
     resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
     engines: {node: '>= 0.8'}
     dev: false
+
+  /window-size/0.1.4:
+    resolution: {integrity: sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==}
+    engines: {node: '>= 0.10.0'}
+    hasBin: true
+    dev: false
+
+  /wrap-ansi/2.1.0:
+    resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+    dev: false
+
+  /wrappy/1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+    dev: false
+
+  /y18n/3.2.2:
+    resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==}
+    dev: false
+
+  /yargs/3.32.0:
+    resolution: {integrity: sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==}
+    dependencies:
+      camelcase: 2.1.1
+      cliui: 3.2.0
+      decamelize: 1.2.0
+      os-locale: 1.4.0
+      string-width: 1.0.2
+      window-size: 0.1.4
+      y18n: 3.2.2
+    dev: false

+ 73 - 5
service/planeCoverService.js

@@ -1,9 +1,18 @@
-import math from 'math.js'
-import * as three from 'three'
+ 
+
+import * as THREE from 'three'
 import { Base64 } from 'js-base64'
 import dcodeIO from 'protobufjs'
 import axios from 'axios'
 
+import Decompress from './util/Decompress.js'
+import Process from './util/Process.js'
+import Model from './util/Model.js'
+
+import Chunks from './util/Chunks.js' 
+
+import PanoBoxFrame from './PanoBoxFrame.js'
+
 
 const domain = `https://4dkk.4dage.com`;
 const getModelBlob = async (url) => {
@@ -22,6 +31,7 @@ const getModelBlob = async (url) => {
   }
 }
 
+ 
 
 /**
  * @param sceneNum 场景码
@@ -40,9 +50,67 @@ const getModelBlob = async (url) => {
     }]
     @returns 返回三维立方体box
  */
+
+function addToModel(chunks, player) {
+    if (0 === chunks.length) {
+        logger.warn('No geometry found for model, loading faux geometry, disabling outside mode')
+   
+        var chunk = new Chunk({
+            geometry: new THREE.PlaneBufferGeometry(5, 5, 1, 1),
+        })
+        chunk.material.visible = !1
+        chunk.rotateX(-Math.PI / 2)
+        chunk.geometry.computeBoundingBox()
+        chunks = [chunk]
+    }
+    chunks.forEach(function (mesh) { 
+        var floorIndex = Chunks.parseFloor(mesh.name)
+        player.model.addChunk(floorIndex, mesh)
+    })
+    player.model.floors.sort() 
+}
+
+
+
+function outputJson(boxCenvert, sceneNum, player){
+  let json = {
+    sceneNum, 
+    boxes:boxCenvert.boxes.map(e=> e.toJson()),
+    boundingBox: {min:player.model.boundingBox.min.toArray(),max:player.model.boundingBox.max.toArray()}
+  }
+  
+  return json
+}
+
 export const planeCover = async ({sceneNum, imgBoxsList}) => {
-  const modelBlob = await getModelBlob(`/scene_view_data/${sceneNum}/images/vision.modeldata`)
+  const player = {
+    model : new Model(), 
+  } 
+  const panoBlob = await getModelBlob(`/scene_view_data/${sceneNum}/images/vision.modeldata`)
   const damBlob = await getModelBlob(`/scene_view_data/${sceneNum}/images/dacf7dfa24ae47fab8fcebfe4dc41ab9_50k.dam`)
 
-  return [];
-}
+  var sweepLocations = Decompress.decompressModeldata(panoBlob)
+  var modeldata = Process.visionModeldata(sweepLocations,  player.model.panos) 
+  const panos = Process.panos(modeldata, player.model) 
+  
+  var meshdata = Decompress.decompressMesh(damBlob) 
+  var chunks = Process.convertProtobufToSceneObject( meshdata, sceneNum) 
+  addToModel(chunks, player)
+  player.model.build()
+
+
+  console.log(player.model) 
+  console.log(imgBoxsList)
+
+
+
+
+  let boxCenvert = new PanoBoxFrame(player, true, imgBoxsList) 
+  console.log(boxCenvert.boxes)
+
+  
+
+  return outputJson(boxCenvert, sceneNum, player);
+}
+
+