123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
-
- import * as THREE from 'three'
- 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 math from './util/math.js'
- import PanoBoxFrame from './PanoBoxFrame.js'
- const domain = `https://4dkk.4dage.com`;
- const getModelBlob = async (url) => {
- const data = await axios({
- url: `${domain}${url}`,
- responseType: 'arraybuffer',
- method: 'GET'
- });
- if (data.status !== 200) {
- throw "无法获取场景数据,请确认场景码是否正确"
- } else if (!data.data) {
- throw "场景数据为空,请联系相关人员"
- } else {
- return data.data;
- }
- }
-
- /**
- * @param sceneNum 场景码
- * @param imgBoxsList 全景图shapes平面盒子数据格式:
- * [{
- "id":9703,
- "version":"4dage_1.0.0",
- "flag":null,
- "shapes":[{
- score: 0.5,
- color: [],
- bbox: [],
- label: "",
- category:"cabinet"
- }]
- }]
- @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.boxesSolid.map(e=> e.toJson()),
- boundingBox: {
- min:math.invertVisionVector(boxCenvert.safeBound.min).toArray(),
- max:math.invertVisionVector(boxCenvert.safeBound.max).toArray()
- }
- }
-
- return json
- }
- export const planeCover = async ({sceneNum, imgBoxsList}) => {
- 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`)
- 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.boxesSolid)
-
- return outputJson(boxCenvert, sceneNum, player);
- }
-
|