初始化项目:添加核心代码和配置文件
5
.env
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
VITE_API_URL=http://112.19.93.197:12195/portal/api/arm/nocode/attachment/download/
|
||||||
|
VITE_API_URLs=https://zhmt.aqsh.sinopec.com/portal/api/arm/nocode/attachment/download/
|
||||||
|
|
||||||
|
|
||||||
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
20
index.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<script src="flexible.js"></script>
|
||||||
|
<script src="tween.umd.js"></script>
|
||||||
|
|
||||||
|
<title>码头可视化</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
|
||||||
|
<script type="module" src="./src/main.js"></script>
|
||||||
|
<script type="text/javascript" src="/js/EasyPlayer-pro.js"></script>
|
||||||
|
<script type="text/javascript" src="/arplayer.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
4179
package-lock.json
generated
Normal file
38
package.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "gongchang",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite --open",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
|
"@tweenjs/tween.js": "^21.0.0",
|
||||||
|
"@vueuse/core": "^13.0.0",
|
||||||
|
"axios": "^1.8.4",
|
||||||
|
"d3": "^7.9.0",
|
||||||
|
"dayjs": "^1.11.13",
|
||||||
|
"echarts": "^5.6.0",
|
||||||
|
"element-plus": "^2.3.9",
|
||||||
|
"hls.js": "^1.6.14",
|
||||||
|
"mqtt": "^5.13.2",
|
||||||
|
"pinia": "^2.3.1",
|
||||||
|
"simplex-noise": "^4.0.3",
|
||||||
|
"three": "^0.153.0",
|
||||||
|
"v-network-graph": "^0.9.21",
|
||||||
|
"vue": "^3.3.11",
|
||||||
|
"vue-amazing-ui": "^2.4.3",
|
||||||
|
"vue-router": "^4.2.4",
|
||||||
|
"vue3-seamless-scroll": "^3.0.2",
|
||||||
|
"vuex": "^4.0.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vitejs/plugin-vue": "^4.5.2",
|
||||||
|
"sass": "^1.89.0",
|
||||||
|
"sass-embedded": "^1.77.8",
|
||||||
|
"vite": "^5.0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
2501
pnpm-lock.yaml
generated
Normal file
BIN
public/1.glb
Normal file
448
public/areaConfig.json
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": 6505.858037968523,
|
||||||
|
"y": 72.99260187552187
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8550.441875729673,
|
||||||
|
"y": 156.20530970604324
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8562.032991699376,
|
||||||
|
"y": 886.5743544105324
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6424.195524125095,
|
||||||
|
"y": 599.75928050571
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "自航船锚泊区",
|
||||||
|
"color": "#00CA3D",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": 4779.166657851,
|
||||||
|
"y": 82.99827359544406
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6502.324213946638,
|
||||||
|
"y": 71.68085818256941
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6426.521380990776,
|
||||||
|
"y": 598.7978468618301
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 4667.837940983504,
|
||||||
|
"y": 542.5123358240196
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "重油船锚泊区",
|
||||||
|
"color": "#0060CA",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -449.19813083234476,
|
||||||
|
"y": 181.02826697142197
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 103.68317888575484,
|
||||||
|
"y": -140.96238922071586
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 203.98621689763024,
|
||||||
|
"y": 4.637896828752702
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -359.42402526152244,
|
||||||
|
"y": 313.7278857552419
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "高危作业区",
|
||||||
|
"color": "red",
|
||||||
|
"showEdges": false,
|
||||||
|
"alt": -4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -500.09274267235605,
|
||||||
|
"y": 201.7325590381487
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -453.24900873570346,
|
||||||
|
"y": 177.06447445925863
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -362.4882258567138,
|
||||||
|
"y": 310.8494016632361
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 203.35364299788873,
|
||||||
|
"y": 1.8017622999378773
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 101.93549305679471,
|
||||||
|
"y": -144.59299732938655
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 157.1266308010927,
|
||||||
|
"y": -171.32148846110044
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 288.25307628589815,
|
||||||
|
"y": 0.20436077044689682
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -406.7564225527914,
|
||||||
|
"y": 363.56725202646015
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "中危作业区",
|
||||||
|
"color": "orange",
|
||||||
|
"showEdges": false,
|
||||||
|
"alt": -4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -566.2209716144091,
|
||||||
|
"y": 228.29103499471393
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -500.09274267235605,
|
||||||
|
"y": 201.7325590381487
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -406.7564225527914,
|
||||||
|
"y": 363.56725202646015
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 288.25307628589815,
|
||||||
|
"y": 0.20436077044689682
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 157.1266308010927,
|
||||||
|
"y": -171.32148846110044
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 278.2106654658619,
|
||||||
|
"y": -255.83605208872115
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 436.4965564427796,
|
||||||
|
"y": 2.07620907083583
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -456.2959746487934,
|
||||||
|
"y": 420.77981459704824
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "低危作业区",
|
||||||
|
"color": "yellow",
|
||||||
|
"showEdges": false,
|
||||||
|
"alt": -4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -8479.277103638125,
|
||||||
|
"y": 4753.877969091146
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -5998.4264338671,
|
||||||
|
"y": 4010.851309547772
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4117.695787652541,
|
||||||
|
"y": 3122.5126016622557
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2988.137902074887,
|
||||||
|
"y": 2458.635156620677
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -730.0163971223337,
|
||||||
|
"y": 408.40754153077546
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -632.5473178443949,
|
||||||
|
"y": 520.0256657880573
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2873.4127834043124,
|
||||||
|
"y": 2609.6751311956696
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4021.56073767231,
|
||||||
|
"y": 3264.1076332799003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -5965.466929141426,
|
||||||
|
"y": 4159.842342939034
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -8470.57729089569,
|
||||||
|
"y": 4881.115638952584
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "左上",
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -8473.310741229125,
|
||||||
|
"y": 5103.04066308959
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -8481.285902601128,
|
||||||
|
"y": 5283.909772395511
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -7701.67282695315,
|
||||||
|
"y": 4985.573530137124
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -6165.055792281601,
|
||||||
|
"y": 4591.959487463271
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4529.032919558895,
|
||||||
|
"y": 4053.3584120469104
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2571.231643519881,
|
||||||
|
"y": 3302.5495537978445
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -232.14782339727572,
|
||||||
|
"y": 914.1398885515946
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -348.33856937649625,
|
||||||
|
"y": 777.8154500400592
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -2653.988596759583,
|
||||||
|
"y": 3166.214631881465
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -4505.151184734723,
|
||||||
|
"y": 3897.5956190512716
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -6155.124757787238,
|
||||||
|
"y": 4439.27474773048
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -7724.77019481098,
|
||||||
|
"y": 4855.752334751713
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -347.8653258693479,
|
||||||
|
"y": 778.9904396889401
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -233.39129523904202,
|
||||||
|
"y": 913.7825729469056
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 531.8300166037334,
|
||||||
|
"y": 651.5368462898651
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 3859.875139512984,
|
||||||
|
"y": 59.667903880532094
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 4788.846563444091,
|
||||||
|
"y": 67.27702964439504
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6503.929943145208,
|
||||||
|
"y": 54.86167521587345
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8548.169589302397,
|
||||||
|
"y": 145.08327633549322
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8563.501675796397,
|
||||||
|
"y": -151.2698876168729
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6538.997137265032,
|
||||||
|
"y": -152.27993224308761
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 4816.059047638755,
|
||||||
|
"y": -124.12577847531611
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 3859.296517012282,
|
||||||
|
"y": -111.89113620867829
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 498.38304866841327,
|
||||||
|
"y": 498.38304866841327
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 294.81032645065477,
|
||||||
|
"y": 544.8859275737531
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": "右下",
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": -636.7464324104818,
|
||||||
|
"y": 518.4489687930629
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -325.206340299047,
|
||||||
|
"y": 430.2934658482671
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 289.08906763815247,
|
||||||
|
"y": 117.38958764238356
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1404.027811805005,
|
||||||
|
"y": -242.18347251786952
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2304.318388406915,
|
||||||
|
"y": -176.08177435388498
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 3877.7130876758742,
|
||||||
|
"y": -219.71710119381947
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6958.226464305279,
|
||||||
|
"y": -416.50571705662117
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8549.948111318196,
|
||||||
|
"y": -749.9142632971627
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8580.030000859708,
|
||||||
|
"y": -985.5001903102589
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 6959.628947768804,
|
||||||
|
"y": -615.0024679555518
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 3871.3457373742276,
|
||||||
|
"y": -363.304259883279
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 2338.5074659922725,
|
||||||
|
"y": -315.71481891403783
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 1349.1289676648448,
|
||||||
|
"y": -420.2518808533615
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 219.7522437674809,
|
||||||
|
"y": 8.452119960422635
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -360.64450059742325,
|
||||||
|
"y": 330.5345904870157
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": -732.0498237941249,
|
||||||
|
"y": 411.48950491919027
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": 8575.741047962054,
|
||||||
|
"y": -977.471392157153
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10678.889257325827,
|
||||||
|
"y": -866.1948517592616
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12654.490808636261,
|
||||||
|
"y": -1505.3362783772473
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12765.193065900537,
|
||||||
|
"y": -1324.1127873693654
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10704.316261045858,
|
||||||
|
"y": -643.1268614239757
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8546.986695795455,
|
||||||
|
"y": -758.2989981962119
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"position": [
|
||||||
|
{
|
||||||
|
"x": 8551.078426935628,
|
||||||
|
"y": -133.27734529588162
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10629.714602979464,
|
||||||
|
"y": 315.0409815782041
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12287.491356829718,
|
||||||
|
"y": 1645.551317619105
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 12095.37206002364,
|
||||||
|
"y": 1838.6585232927118
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 10472.411424745389,
|
||||||
|
"y": 603.5769130992778
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 8535.328220769414,
|
||||||
|
"y": 131.32900820725524
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"areaName": "",
|
||||||
|
"color": "#012D77",
|
||||||
|
"showEdges": false
|
||||||
|
}
|
||||||
|
]
|
||||||
240
public/arplayer.js
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
/**
|
||||||
|
* @name arPlayer
|
||||||
|
* @desc ar配套前端js插件
|
||||||
|
* @version 1.1.0 ← 版本号已更新
|
||||||
|
* @date 2023-09-27
|
||||||
|
*/
|
||||||
|
|
||||||
|
function ARPlayer(param) {
|
||||||
|
this.$el = document.querySelector('#' + param.videoId)
|
||||||
|
this.currentBrowserHWND = 0
|
||||||
|
this.focus = false
|
||||||
|
this.visible = true
|
||||||
|
this.seq = new Date().getTime()
|
||||||
|
this.init(param)
|
||||||
|
this.SN = 'EVOAR_002'
|
||||||
|
this.randomKey = new Date().getTime()
|
||||||
|
this.heartInterval = null
|
||||||
|
this.refreshPosition = false
|
||||||
|
this.domVisible = true
|
||||||
|
this.oldOuterPosition = ''
|
||||||
|
this.oldInnerPosition = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算元素在可视区域的绝对位置
|
||||||
|
* 支持多层 iframe 嵌套(不跨域)
|
||||||
|
*/
|
||||||
|
function getPositionRect() {
|
||||||
|
let innerRect = this.$el.getBoundingClientRect()
|
||||||
|
|
||||||
|
// 添加调试日志
|
||||||
|
console.log('AR Player Element:', this.$el);
|
||||||
|
console.log('Element Rect Info:', innerRect);
|
||||||
|
|
||||||
|
// 获取当前窗口的滚动位置
|
||||||
|
let scrollTop = window.pageYOffset || document.documentElement.scrollTop
|
||||||
|
let scrollLeft = window.pageXOffset || document.documentElement.scrollLeft
|
||||||
|
|
||||||
|
// 计算相对于视口的位置
|
||||||
|
let pos = {
|
||||||
|
posX: Math.round(innerRect.left + scrollLeft),
|
||||||
|
posY: Math.round(innerRect.top + scrollTop),
|
||||||
|
width: Math.round(innerRect.width),
|
||||||
|
height: Math.round(innerRect.height)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Calculated Position:', pos);
|
||||||
|
|
||||||
|
return {
|
||||||
|
outerPosition: pos,
|
||||||
|
innerPosition: pos
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDomVisible(el) {
|
||||||
|
return el && (window.getComputedStyle(el).display !== 'none' ||
|
||||||
|
window.getComputedStyle(el).visibility !== 'hidden')
|
||||||
|
}
|
||||||
|
|
||||||
|
ARPlayer.prototype = {
|
||||||
|
init: function (param) {
|
||||||
|
let _this = this
|
||||||
|
this.param = param
|
||||||
|
if (window.arPluginWebsocket) {
|
||||||
|
window.arPluginWebsocket.close()
|
||||||
|
}
|
||||||
|
window.arPluginWebsocket = new WebSocket('ws://localhost:5878')
|
||||||
|
window.arPluginWebsocket.binaryType = 'arraybuffer'
|
||||||
|
window.arPluginWebsocket.onopen = function () {
|
||||||
|
console.log('AR WebSocket 连接成功')
|
||||||
|
_this.sendMsg('setCurrentBrowserHWND', {})
|
||||||
|
_this.heartInterval = setInterval(() => _this.heartbeat(), 30000)
|
||||||
|
}
|
||||||
|
window.arPluginWebsocket.onmessage = this.receivsMsg.bind(this)
|
||||||
|
window.arPluginWebsocket.onerror = () => console.warn('AR WebSocket 错误')
|
||||||
|
window.arPluginWebsocket.onclose = () => console.log('AR WebSocket 关闭')
|
||||||
|
},
|
||||||
|
|
||||||
|
login: function () {
|
||||||
|
this.sendMsg('login', {
|
||||||
|
browserType: 1,
|
||||||
|
userName: this.param.userName,
|
||||||
|
userPwd: this.param.userPwd,
|
||||||
|
loginPort: this.param.loginPort,
|
||||||
|
currentBrowserHWND: this.currentBrowserHWND,
|
||||||
|
loginType: 0,
|
||||||
|
memorizePwd: 0,
|
||||||
|
quitWhenWebPageClosed: 0,
|
||||||
|
randomKey: this.randomKey,
|
||||||
|
showTree: 0,
|
||||||
|
skin: 'DustyBlue'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
createCb: function () {
|
||||||
|
document.visibilityState === 'visible' ? this.showPlugin() : this.hidePlugin()
|
||||||
|
document.addEventListener('visibilitychange', this.visibilitychange.bind(this), true)
|
||||||
|
window.addEventListener('beforeunload', this.beforeUnload.bind(this))
|
||||||
|
document.addEventListener('click', this.setTopBind)
|
||||||
|
this.param.createSuccess && this.param.createSuccess()
|
||||||
|
},
|
||||||
|
|
||||||
|
visibilitychange: function () {
|
||||||
|
document.visibilityState === 'visible' ? this.showPlugin() : this.hidePlugin()
|
||||||
|
},
|
||||||
|
|
||||||
|
beforeUnload: function () {
|
||||||
|
this.logout()
|
||||||
|
window.arPluginWebsocket = null
|
||||||
|
},
|
||||||
|
|
||||||
|
heartbeat: function () {
|
||||||
|
this.sendMsg('heartbeat', {})
|
||||||
|
},
|
||||||
|
|
||||||
|
browserFocusBlur: function () {
|
||||||
|
this.sendMsg('browserFocusBlur', {
|
||||||
|
show: this.visible,
|
||||||
|
focus: this.focus
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
focusHandler: function () {
|
||||||
|
this.focus = true
|
||||||
|
this.browserFocusBlur()
|
||||||
|
},
|
||||||
|
|
||||||
|
blurHandler: function () {
|
||||||
|
this.focus = false
|
||||||
|
this.browserFocusBlur()
|
||||||
|
},
|
||||||
|
|
||||||
|
showPlugin: function () {
|
||||||
|
let { outerPosition, innerPosition } = getPositionRect.call(this)
|
||||||
|
console.log('Show Plugin with positions:', { outerPosition, innerPosition });
|
||||||
|
this.focusHandler()
|
||||||
|
this.sendMsg('showPage', {
|
||||||
|
outerPosition,
|
||||||
|
innerPosition,
|
||||||
|
pageParam: {},
|
||||||
|
paramMoz: {},
|
||||||
|
sn: this.SN
|
||||||
|
})
|
||||||
|
this.refreshPosition = true
|
||||||
|
this.handleAdjust()
|
||||||
|
},
|
||||||
|
|
||||||
|
hidePlugin: function () {
|
||||||
|
this.blurHandler()
|
||||||
|
this.sendMsg('hidePage', { sn: this.SN })
|
||||||
|
if (this.refreshTimer) {
|
||||||
|
cancelAnimationFrame(this.refreshTimer)
|
||||||
|
this.refreshTimer = null
|
||||||
|
}
|
||||||
|
this.refreshPosition = false
|
||||||
|
},
|
||||||
|
|
||||||
|
destroyPlugin: function () {
|
||||||
|
this.logout()
|
||||||
|
},
|
||||||
|
|
||||||
|
handleAdjust: function () {
|
||||||
|
let _this = this
|
||||||
|
this.refreshPos()
|
||||||
|
if (this.domVisible !== isDomVisible(this.$el)) {
|
||||||
|
this.domVisible ? this.hidePlugin() : this.showPlugin()
|
||||||
|
this.domVisible = isDomVisible(this.$el)
|
||||||
|
}
|
||||||
|
this.refreshTimer = requestAnimationFrame(() => _this.handleAdjust())
|
||||||
|
},
|
||||||
|
|
||||||
|
refreshPos: function () {
|
||||||
|
let { outerPosition, innerPosition } = getPositionRect.call(this)
|
||||||
|
let outer = JSON.stringify(outerPosition)
|
||||||
|
let inner = JSON.stringify(innerPosition)
|
||||||
|
if (this.oldOuterPosition === outer && this.oldInnerPosition === inner) return
|
||||||
|
|
||||||
|
this.oldOuterPosition = outer
|
||||||
|
this.oldInnerPosition = inner
|
||||||
|
this.sendMsg('adjustSizePosition', {
|
||||||
|
outerPosition,
|
||||||
|
innerPosition,
|
||||||
|
paramMoz: {},
|
||||||
|
sn: this.SN
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
sendMsg: function (method, params) {
|
||||||
|
window.arPluginWebsocket.send(JSON.stringify({
|
||||||
|
method,
|
||||||
|
loginIp: this.param.loginIp,
|
||||||
|
params: { ...params, seq: this.seq++ },
|
||||||
|
randomKey: this.randomKey,
|
||||||
|
userCode: this.param.userName
|
||||||
|
}))
|
||||||
|
},
|
||||||
|
|
||||||
|
logout: function () {
|
||||||
|
this.sendMsg('logout', {})
|
||||||
|
clearInterval(this.heartInterval)
|
||||||
|
this.heartInterval = null
|
||||||
|
if (this.refreshTimer) {
|
||||||
|
cancelAnimationFrame(this.refreshTimer)
|
||||||
|
this.refreshTimer = null
|
||||||
|
}
|
||||||
|
this.refreshPosition = false
|
||||||
|
},
|
||||||
|
|
||||||
|
receivsMsg: function (evt) {
|
||||||
|
let data = JSON.parse(evt.data)
|
||||||
|
switch (data.method) {
|
||||||
|
case 'notifyCurrentBrowserHWND':
|
||||||
|
this.currentBrowserHWND = data.params.hWnd
|
||||||
|
this.login()
|
||||||
|
break
|
||||||
|
case 'loginState':
|
||||||
|
case 'loginConfirmFromClient':
|
||||||
|
case 'runinfo':
|
||||||
|
if (data.loginIp === this.param.loginIp) {
|
||||||
|
if (data.params.loginResult === 0) {
|
||||||
|
this.logined = true
|
||||||
|
this.visible = document.visibilityState === 'visible'
|
||||||
|
this.createCb()
|
||||||
|
} else if (data.params.loginResult === -3) {
|
||||||
|
if (data.params.errMsg.includes('已登录')) {
|
||||||
|
this.createCb()
|
||||||
|
} else {
|
||||||
|
this.logout()
|
||||||
|
}
|
||||||
|
} else if (data.params.loginResult === -1 &&
|
||||||
|
data.params.errMsg === '登录插件客户端超时') {
|
||||||
|
this.login()
|
||||||
|
} else {
|
||||||
|
this.param.createError && this.param.createError(data.params)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/arrow.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/baseColor.jpg
Normal file
|
After Width: | Height: | Size: 172 KiB |
4
public/config/ARconfig.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{"loginIp": "10.118.2.159",
|
||||||
|
"loginPort": "443",
|
||||||
|
"userName": "duijie",
|
||||||
|
"userPwd": "Aqsh@2025"}
|
||||||
5
public/config/config.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"baseUrl":"http://112.19.93.197:12195/",
|
||||||
|
"baseUrls": "http://192.168.0.3:10405/",
|
||||||
|
"baseUrlss": "https://zhmt.aqsh.sinopec.com/"
|
||||||
|
}
|
||||||
88
public/config/configpak.json
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"map3d": {
|
||||||
|
"scene": {
|
||||||
|
"scene3DOnly": false,
|
||||||
|
"shadows": false,
|
||||||
|
"removeDblClick": true,
|
||||||
|
"sceneMode": 3,
|
||||||
|
"showSun": true,
|
||||||
|
"showMoon": false,
|
||||||
|
"showSkyBox": false,
|
||||||
|
"showSkyAtmosphere": true,
|
||||||
|
"fog": false,
|
||||||
|
"fxaa": false,
|
||||||
|
"requestRenderMode": true,
|
||||||
|
"globe": {
|
||||||
|
"enableLighting": true,
|
||||||
|
"depthTestAgainstTerrain": false,
|
||||||
|
"baseColor": "#546a53",
|
||||||
|
"showGroundAtmosphere": true
|
||||||
|
},
|
||||||
|
"contextOptions": {
|
||||||
|
"webgl": {
|
||||||
|
"preserveDrawingBuffer": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cameraController": {
|
||||||
|
"zoomFactor": 3.0,
|
||||||
|
"minimumZoomDistance": 150,
|
||||||
|
"maximumZoomDistance": 500,
|
||||||
|
"enableRotate": true,
|
||||||
|
"enableTranslate": true,
|
||||||
|
"enableTilt": true,
|
||||||
|
"enableZoom": true,
|
||||||
|
"enableCollisionDetection": true,
|
||||||
|
"minimumCollisionTerrainHeight": 15000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"control": {
|
||||||
|
"homeButton": false,
|
||||||
|
"baseLayerPicker": false,
|
||||||
|
"sceneModePicker": false,
|
||||||
|
"vrButton": false,
|
||||||
|
"fullscreenButton": false,
|
||||||
|
"navigationHelpButton": false,
|
||||||
|
"animation": false,
|
||||||
|
"timeline": false,
|
||||||
|
"infoBox": false,
|
||||||
|
"geocoder": false,
|
||||||
|
"selectionIndicator": false,
|
||||||
|
"showRenderLoopErrors": true,
|
||||||
|
"contextmenu": {
|
||||||
|
"hasDefault": true
|
||||||
|
},
|
||||||
|
"mouseDownView": true,
|
||||||
|
"zoom": {
|
||||||
|
"insertIndex": 1
|
||||||
|
},
|
||||||
|
"compass": {
|
||||||
|
"bottom": "toolbar",
|
||||||
|
"right": "5px"
|
||||||
|
},
|
||||||
|
"distanceLegend": {
|
||||||
|
"right": "100px",
|
||||||
|
"bottom": "2px"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"basemaps": [{
|
||||||
|
"name": "ArcGIS影像",
|
||||||
|
"icon": "img/basemaps/esriWorldImagery.png",
|
||||||
|
"type": "arcgis",
|
||||||
|
"layer": "img_d",
|
||||||
|
"layers": [{
|
||||||
|
"name": "底图",
|
||||||
|
"type": "xyz",
|
||||||
|
"subdomains": "123",
|
||||||
|
"minimumLevel": 16,
|
||||||
|
"maximumLevel": 16,
|
||||||
|
"forceLevel": 16
|
||||||
|
}],
|
||||||
|
"enablePickFeatures": false,
|
||||||
|
"show": true
|
||||||
|
}],
|
||||||
|
"compass": {
|
||||||
|
"bottom": "10px",
|
||||||
|
"right": "500px"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/ditu11.png
Normal file
|
After Width: | Height: | Size: 20 MiB |
BIN
public/emergency_alarm.mp3
Normal file
BIN
public/envMap.hdr
Normal file
119
public/flexible.js
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
;(function (win, lib) {
|
||||||
|
var doc = win.document;
|
||||||
|
var docEl = doc.documentElement;
|
||||||
|
var metaEl = doc.querySelector('meta[name="viewport"]');
|
||||||
|
var flexibleEl = doc.querySelector('meta[name="flexible"]');
|
||||||
|
var dpr = 0;
|
||||||
|
var scale = 0;
|
||||||
|
var tid;
|
||||||
|
var flexible = lib.flexible || (lib.flexible = {});
|
||||||
|
|
||||||
|
if (metaEl) {
|
||||||
|
console.warn('将根据已有的meta标签来设置缩放比例');
|
||||||
|
var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);
|
||||||
|
if (match) {
|
||||||
|
scale = parseFloat(match[1]);
|
||||||
|
dpr = parseInt(1 / scale);
|
||||||
|
}
|
||||||
|
} else if (flexibleEl) {
|
||||||
|
var content = flexibleEl.getAttribute('content');
|
||||||
|
if (content) {
|
||||||
|
var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
|
||||||
|
var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
|
||||||
|
if (initialDpr) {
|
||||||
|
dpr = parseFloat(initialDpr[1]);
|
||||||
|
scale = parseFloat((1 / dpr).toFixed(2));
|
||||||
|
}
|
||||||
|
if (maximumDpr) {
|
||||||
|
dpr = parseFloat(maximumDpr[1]);
|
||||||
|
scale = parseFloat((1 / dpr).toFixed(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dpr && !scale) {
|
||||||
|
var isAndroid = win.navigator.appVersion.match(/android/gi);
|
||||||
|
var isIPhone = win.navigator.appVersion.match(/iphone/gi);
|
||||||
|
var devicePixelRatio = win.devicePixelRatio;
|
||||||
|
if (isIPhone) {
|
||||||
|
// iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
|
||||||
|
if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
|
||||||
|
dpr = 3;
|
||||||
|
} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
|
||||||
|
dpr = 2;
|
||||||
|
} else {
|
||||||
|
dpr = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 其他设备下,仍旧使用1倍的方案
|
||||||
|
dpr = 1;
|
||||||
|
}
|
||||||
|
scale = 1 / dpr;
|
||||||
|
}
|
||||||
|
|
||||||
|
docEl.setAttribute('data-dpr', dpr);
|
||||||
|
if (!metaEl) {
|
||||||
|
metaEl = doc.createElement('meta');
|
||||||
|
metaEl.setAttribute('name', 'viewport');
|
||||||
|
metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
|
||||||
|
if (docEl.firstElementChild) {
|
||||||
|
docEl.firstElementChild.appendChild(metaEl);
|
||||||
|
} else {
|
||||||
|
var wrap = doc.createElement('div');
|
||||||
|
wrap.appendChild(metaEl);
|
||||||
|
doc.write(wrap.innerHTML);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshRem() {
|
||||||
|
var width = docEl.getBoundingClientRect().width;
|
||||||
|
if (width / dpr < 1580) {
|
||||||
|
width = 1580 * dpr
|
||||||
|
} else {
|
||||||
|
width = width * dpr
|
||||||
|
}
|
||||||
|
var rem = width / 10;
|
||||||
|
docEl.style.fontSize = rem + 'px';
|
||||||
|
flexible.rem = win.rem = rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
win.addEventListener('resize', function () {
|
||||||
|
clearTimeout(tid);
|
||||||
|
tid = setTimeout(refreshRem, 300);
|
||||||
|
}, false);
|
||||||
|
win.addEventListener('pageshow', function (e) {
|
||||||
|
if (e.persisted) {
|
||||||
|
clearTimeout(tid);
|
||||||
|
tid = setTimeout(refreshRem, 300);
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
if (doc.readyState === 'complete') {
|
||||||
|
doc.body.style.fontSize = 12 * dpr + 'px';
|
||||||
|
} else {
|
||||||
|
doc.addEventListener('DOMContentLoaded', function (e) {
|
||||||
|
doc.body.style.fontSize = 12 * dpr + 'px';
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
refreshRem();
|
||||||
|
|
||||||
|
flexible.dpr = win.dpr = dpr;
|
||||||
|
flexible.refreshRem = refreshRem;
|
||||||
|
flexible.rem2px = function (d) {
|
||||||
|
var val = parseFloat(d) * this.rem;
|
||||||
|
if (typeof d === 'string' && d.match(/rem$/)) {
|
||||||
|
val += 'px';
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
};
|
||||||
|
flexible.px2rem = function (d) {
|
||||||
|
var val = parseFloat(d) / this.rem;
|
||||||
|
if (typeof d === 'string' && d.match(/px$/)) {
|
||||||
|
val += 'rem';
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
})(window, window['lib'] || (window['lib'] = {}));
|
||||||
1
public/js/EasyPlayer-decode.js
Normal file
1
public/js/EasyPlayer-lib.js
Normal file
1
public/js/EasyPlayer-pro.js
Normal file
BIN
public/js/EasyPlayer-pro.wasm
Normal file
BIN
public/js/EasyPlayer-snap.wasm
Normal file
7
public/js/bootstrap.bundle.min.js
vendored
Normal file
1
public/js/bootstrap.bundle.min.js.map
Normal file
2
public/js/jquery-3.4.1.min.js
vendored
Normal file
BIN
public/lcbg.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
33
public/libs/draco/gltf/draco_decoder.js
Normal file
BIN
public/libs/draco/gltf/draco_decoder.wasm
Normal file
33
public/libs/draco/gltf/draco_encoder.js
Normal file
116
public/libs/draco/gltf/draco_wasm_wrapper.js
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(h){var n=0;return function(){return n<h.length?{done:!1,value:h[n++]}:{done:!0}}};$jscomp.arrayIterator=function(h){return{next:$jscomp.arrayIteratorImpl(h)}};$jscomp.makeIterator=function(h){var n="undefined"!=typeof Symbol&&Symbol.iterator&&h[Symbol.iterator];return n?n.call(h):$jscomp.arrayIterator(h)};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
|
||||||
|
$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.getGlobal=function(h){h=["object"==typeof globalThis&&globalThis,h,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var n=0;n<h.length;++n){var k=h[n];if(k&&k.Math==Math)return k}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
|
||||||
|
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(h,n,k){if(h==Array.prototype||h==Object.prototype)return h;h[n]=k.value;return h};$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";
|
||||||
|
var $jscomp$lookupPolyfilledValue=function(h,n){var k=$jscomp.propertyToPolyfillSymbol[n];if(null==k)return h[n];k=h[k];return void 0!==k?k:h[n]};$jscomp.polyfill=function(h,n,k,p){n&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(h,n,k,p):$jscomp.polyfillUnisolated(h,n,k,p))};
|
||||||
|
$jscomp.polyfillUnisolated=function(h,n,k,p){k=$jscomp.global;h=h.split(".");for(p=0;p<h.length-1;p++){var l=h[p];if(!(l in k))return;k=k[l]}h=h[h.length-1];p=k[h];n=n(p);n!=p&&null!=n&&$jscomp.defineProperty(k,h,{configurable:!0,writable:!0,value:n})};
|
||||||
|
$jscomp.polyfillIsolated=function(h,n,k,p){var l=h.split(".");h=1===l.length;p=l[0];p=!h&&p in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var y=0;y<l.length-1;y++){var f=l[y];if(!(f in p))return;p=p[f]}l=l[l.length-1];k=$jscomp.IS_SYMBOL_NATIVE&&"es6"===k?p[l]:null;n=n(k);null!=n&&(h?$jscomp.defineProperty($jscomp.polyfills,l,{configurable:!0,writable:!0,value:n}):n!==k&&(void 0===$jscomp.propertyToPolyfillSymbol[l]&&(k=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[l]=$jscomp.IS_SYMBOL_NATIVE?
|
||||||
|
$jscomp.global.Symbol(l):$jscomp.POLYFILL_PREFIX+k+"$"+l),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[l],{configurable:!0,writable:!0,value:n})))};
|
||||||
|
$jscomp.polyfill("Promise",function(h){function n(){this.batch_=null}function k(f){return f instanceof l?f:new l(function(q,u){q(f)})}if(h&&(!($jscomp.FORCE_POLYFILL_PROMISE||$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&"undefined"===typeof $jscomp.global.PromiseRejectionEvent)||!$jscomp.global.Promise||-1===$jscomp.global.Promise.toString().indexOf("[native code]")))return h;n.prototype.asyncExecute=function(f){if(null==this.batch_){this.batch_=[];var q=this;this.asyncExecuteFunction(function(){q.executeBatch_()})}this.batch_.push(f)};
|
||||||
|
var p=$jscomp.global.setTimeout;n.prototype.asyncExecuteFunction=function(f){p(f,0)};n.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var f=this.batch_;this.batch_=[];for(var q=0;q<f.length;++q){var u=f[q];f[q]=null;try{u()}catch(A){this.asyncThrow_(A)}}}this.batch_=null};n.prototype.asyncThrow_=function(f){this.asyncExecuteFunction(function(){throw f;})};var l=function(f){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];this.isRejectionHandled_=!1;var q=this.createResolveAndReject_();
|
||||||
|
try{f(q.resolve,q.reject)}catch(u){q.reject(u)}};l.prototype.createResolveAndReject_=function(){function f(A){return function(F){u||(u=!0,A.call(q,F))}}var q=this,u=!1;return{resolve:f(this.resolveTo_),reject:f(this.reject_)}};l.prototype.resolveTo_=function(f){if(f===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(f instanceof l)this.settleSameAsPromise_(f);else{a:switch(typeof f){case "object":var q=null!=f;break a;case "function":q=!0;break a;default:q=!1}q?this.resolveToNonPromiseObj_(f):
|
||||||
|
this.fulfill_(f)}};l.prototype.resolveToNonPromiseObj_=function(f){var q=void 0;try{q=f.then}catch(u){this.reject_(u);return}"function"==typeof q?this.settleSameAsThenable_(q,f):this.fulfill_(f)};l.prototype.reject_=function(f){this.settle_(2,f)};l.prototype.fulfill_=function(f){this.settle_(1,f)};l.prototype.settle_=function(f,q){if(0!=this.state_)throw Error("Cannot settle("+f+", "+q+"): Promise already settled in state"+this.state_);this.state_=f;this.result_=q;2===this.state_&&this.scheduleUnhandledRejectionCheck_();
|
||||||
|
this.executeOnSettledCallbacks_()};l.prototype.scheduleUnhandledRejectionCheck_=function(){var f=this;p(function(){if(f.notifyUnhandledRejection_()){var q=$jscomp.global.console;"undefined"!==typeof q&&q.error(f.result_)}},1)};l.prototype.notifyUnhandledRejection_=function(){if(this.isRejectionHandled_)return!1;var f=$jscomp.global.CustomEvent,q=$jscomp.global.Event,u=$jscomp.global.dispatchEvent;if("undefined"===typeof u)return!0;"function"===typeof f?f=new f("unhandledrejection",{cancelable:!0}):
|
||||||
|
"function"===typeof q?f=new q("unhandledrejection",{cancelable:!0}):(f=$jscomp.global.document.createEvent("CustomEvent"),f.initCustomEvent("unhandledrejection",!1,!0,f));f.promise=this;f.reason=this.result_;return u(f)};l.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var f=0;f<this.onSettledCallbacks_.length;++f)y.asyncExecute(this.onSettledCallbacks_[f]);this.onSettledCallbacks_=null}};var y=new n;l.prototype.settleSameAsPromise_=function(f){var q=this.createResolveAndReject_();
|
||||||
|
f.callWhenSettled_(q.resolve,q.reject)};l.prototype.settleSameAsThenable_=function(f,q){var u=this.createResolveAndReject_();try{f.call(q,u.resolve,u.reject)}catch(A){u.reject(A)}};l.prototype.then=function(f,q){function u(w,B){return"function"==typeof w?function(R){try{A(w(R))}catch(Z){F(Z)}}:B}var A,F,v=new l(function(w,B){A=w;F=B});this.callWhenSettled_(u(f,A),u(q,F));return v};l.prototype.catch=function(f){return this.then(void 0,f)};l.prototype.callWhenSettled_=function(f,q){function u(){switch(A.state_){case 1:f(A.result_);
|
||||||
|
break;case 2:q(A.result_);break;default:throw Error("Unexpected state: "+A.state_);}}var A=this;null==this.onSettledCallbacks_?y.asyncExecute(u):this.onSettledCallbacks_.push(u);this.isRejectionHandled_=!0};l.resolve=k;l.reject=function(f){return new l(function(q,u){u(f)})};l.race=function(f){return new l(function(q,u){for(var A=$jscomp.makeIterator(f),F=A.next();!F.done;F=A.next())k(F.value).callWhenSettled_(q,u)})};l.all=function(f){var q=$jscomp.makeIterator(f),u=q.next();return u.done?k([]):new l(function(A,
|
||||||
|
F){function v(R){return function(Z){w[R]=Z;B--;0==B&&A(w)}}var w=[],B=0;do w.push(void 0),B++,k(u.value).callWhenSettled_(v(w.length-1),F),u=q.next();while(!u.done)})};return l},"es6","es3");$jscomp.owns=function(h,n){return Object.prototype.hasOwnProperty.call(h,n)};$jscomp.assign=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.assign?Object.assign:function(h,n){for(var k=1;k<arguments.length;k++){var p=arguments[k];if(p)for(var l in p)$jscomp.owns(p,l)&&(h[l]=p[l])}return h};
|
||||||
|
$jscomp.polyfill("Object.assign",function(h){return h||$jscomp.assign},"es6","es3");$jscomp.checkStringArgs=function(h,n,k){if(null==h)throw new TypeError("The 'this' value for String.prototype."+k+" must not be null or undefined");if(n instanceof RegExp)throw new TypeError("First argument to String.prototype."+k+" must not be a regular expression");return h+""};
|
||||||
|
$jscomp.polyfill("String.prototype.startsWith",function(h){return h?h:function(n,k){var p=$jscomp.checkStringArgs(this,n,"startsWith");n+="";var l=p.length,y=n.length;k=Math.max(0,Math.min(k|0,p.length));for(var f=0;f<y&&k<l;)if(p[k++]!=n[f++])return!1;return f>=y}},"es6","es3");
|
||||||
|
$jscomp.polyfill("Array.prototype.copyWithin",function(h){function n(k){k=Number(k);return Infinity===k||-Infinity===k?k:k|0}return h?h:function(k,p,l){var y=this.length;k=n(k);p=n(p);l=void 0===l?y:n(l);k=0>k?Math.max(y+k,0):Math.min(k,y);p=0>p?Math.max(y+p,0):Math.min(p,y);l=0>l?Math.max(y+l,0):Math.min(l,y);if(k<p)for(;p<l;)p in this?this[k++]=this[p++]:(delete this[k++],p++);else for(l=Math.min(l,y+p-k),k+=l-p;l>p;)--l in this?this[--k]=this[l]:delete this[--k];return this}},"es6","es3");
|
||||||
|
$jscomp.typedArrayCopyWithin=function(h){return h?h:Array.prototype.copyWithin};$jscomp.polyfill("Int8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");
|
||||||
|
$jscomp.polyfill("Uint16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float64Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");
|
||||||
|
var DracoDecoderModule=function(){var h="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;"undefined"!==typeof __filename&&(h=h||__filename);return function(n){function k(e){return a.locateFile?a.locateFile(e,U):U+e}function p(e,b){if(e){var c=ia;var d=e+b;for(b=e;c[b]&&!(b>=d);)++b;if(16<b-e&&c.buffer&&ra)c=ra.decode(c.subarray(e,b));else{for(d="";e<b;){var g=c[e++];if(g&128){var t=c[e++]&63;if(192==(g&224))d+=String.fromCharCode((g&31)<<6|t);else{var aa=c[e++]&
|
||||||
|
63;g=224==(g&240)?(g&15)<<12|t<<6|aa:(g&7)<<18|t<<12|aa<<6|c[e++]&63;65536>g?d+=String.fromCharCode(g):(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else d+=String.fromCharCode(g)}c=d}}else c="";return c}function l(){var e=ja.buffer;a.HEAP8=W=new Int8Array(e);a.HEAP16=new Int16Array(e);a.HEAP32=ca=new Int32Array(e);a.HEAPU8=ia=new Uint8Array(e);a.HEAPU16=new Uint16Array(e);a.HEAPU32=Y=new Uint32Array(e);a.HEAPF32=new Float32Array(e);a.HEAPF64=new Float64Array(e)}function y(e){if(a.onAbort)a.onAbort(e);
|
||||||
|
e="Aborted("+e+")";da(e);sa=!0;e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.");ka(e);throw e;}function f(e){try{if(e==P&&ea)return new Uint8Array(ea);if(ma)return ma(e);throw"both async and sync fetching of the wasm failed";}catch(b){y(b)}}function q(){if(!ea&&(ta||fa)){if("function"==typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+P+"'";return e.arrayBuffer()}).catch(function(){return f(P)});
|
||||||
|
if(na)return new Promise(function(e,b){na(P,function(c){e(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return f(P)})}function u(e){for(;0<e.length;)e.shift()(a)}function A(e){this.excPtr=e;this.ptr=e-24;this.set_type=function(b){Y[this.ptr+4>>2]=b};this.get_type=function(){return Y[this.ptr+4>>2]};this.set_destructor=function(b){Y[this.ptr+8>>2]=b};this.get_destructor=function(){return Y[this.ptr+8>>2]};this.set_refcount=function(b){ca[this.ptr>>2]=b};this.set_caught=function(b){W[this.ptr+
|
||||||
|
12>>0]=b?1:0};this.get_caught=function(){return 0!=W[this.ptr+12>>0]};this.set_rethrown=function(b){W[this.ptr+13>>0]=b?1:0};this.get_rethrown=function(){return 0!=W[this.ptr+13>>0]};this.init=function(b,c){this.set_adjusted_ptr(0);this.set_type(b);this.set_destructor(c);this.set_refcount(0);this.set_caught(!1);this.set_rethrown(!1)};this.add_ref=function(){ca[this.ptr>>2]+=1};this.release_ref=function(){var b=ca[this.ptr>>2];ca[this.ptr>>2]=b-1;return 1===b};this.set_adjusted_ptr=function(b){Y[this.ptr+
|
||||||
|
16>>2]=b};this.get_adjusted_ptr=function(){return Y[this.ptr+16>>2]};this.get_exception_ptr=function(){if(ua(this.get_type()))return Y[this.excPtr>>2];var b=this.get_adjusted_ptr();return 0!==b?b:this.excPtr}}function F(){function e(){if(!la&&(la=!0,a.calledRun=!0,!sa)){va=!0;u(oa);wa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)xa.unshift(a.postRun.shift());u(xa)}}if(!(0<ba)){if(a.preRun)for("function"==
|
||||||
|
typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)ya.unshift(a.preRun.shift());u(ya);0<ba||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);e()},1)):e())}}function v(){}function w(e){return(e||v).__cache__}function B(e,b){var c=w(b),d=c[e];if(d)return d;d=Object.create((b||v).prototype);d.ptr=e;return c[e]=d}function R(e){if("string"===typeof e){for(var b=0,c=0;c<e.length;++c){var d=e.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=
|
||||||
|
d?(b+=4,++c):b+=3}b=Array(b+1);c=0;d=b.length;if(0<d){d=c+d-1;for(var g=0;g<e.length;++g){var t=e.charCodeAt(g);if(55296<=t&&57343>=t){var aa=e.charCodeAt(++g);t=65536+((t&1023)<<10)|aa&1023}if(127>=t){if(c>=d)break;b[c++]=t}else{if(2047>=t){if(c+1>=d)break;b[c++]=192|t>>6}else{if(65535>=t){if(c+2>=d)break;b[c++]=224|t>>12}else{if(c+3>=d)break;b[c++]=240|t>>18;b[c++]=128|t>>12&63}b[c++]=128|t>>6&63}b[c++]=128|t&63}}b[c]=0}e=r.alloc(b,W);r.copy(b,W,e);return e}return e}function Z(e){if("object"===
|
||||||
|
typeof e){var b=r.alloc(e,W);r.copy(e,W,b);return b}return e}function X(){throw"cannot construct a VoidPtr, no constructor in IDL";}function S(){this.ptr=za();w(S)[this.ptr]=this}function Q(){this.ptr=Aa();w(Q)[this.ptr]=this}function V(){this.ptr=Ba();w(V)[this.ptr]=this}function x(){this.ptr=Ca();w(x)[this.ptr]=this}function D(){this.ptr=Da();w(D)[this.ptr]=this}function G(){this.ptr=Ea();w(G)[this.ptr]=this}function H(){this.ptr=Fa();w(H)[this.ptr]=this}function E(){this.ptr=Ga();w(E)[this.ptr]=
|
||||||
|
this}function T(){this.ptr=Ha();w(T)[this.ptr]=this}function C(){throw"cannot construct a Status, no constructor in IDL";}function I(){this.ptr=Ia();w(I)[this.ptr]=this}function J(){this.ptr=Ja();w(J)[this.ptr]=this}function K(){this.ptr=Ka();w(K)[this.ptr]=this}function L(){this.ptr=La();w(L)[this.ptr]=this}function M(){this.ptr=Ma();w(M)[this.ptr]=this}function N(){this.ptr=Na();w(N)[this.ptr]=this}function O(){this.ptr=Oa();w(O)[this.ptr]=this}function z(){this.ptr=Pa();w(z)[this.ptr]=this}function m(){this.ptr=
|
||||||
|
Qa();w(m)[this.ptr]=this}n=void 0===n?{}:n;var a="undefined"!=typeof n?n:{},wa,ka;a.ready=new Promise(function(e,b){wa=e;ka=b});var Ra=!1,Sa=!1;a.onRuntimeInitialized=function(){Ra=!0;if(Sa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Sa=!0;if(Ra&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(e){if("string"!==typeof e)return!1;e=e.split(".");return 2>e.length||3<e.length?!1:1==e[0]&&0<=e[1]&&5>=e[1]?!0:0!=e[0]||10<
|
||||||
|
e[1]?!1:!0};var Ta=Object.assign({},a),ta="object"==typeof window,fa="function"==typeof importScripts,Ua="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,U="";if(Ua){var Va=require("fs"),pa=require("path");U=fa?pa.dirname(U)+"/":__dirname+"/";var Wa=function(e,b){e=e.startsWith("file://")?new URL(e):pa.normalize(e);return Va.readFileSync(e,b?void 0:"utf8")};var ma=function(e){e=Wa(e,!0);e.buffer||(e=new Uint8Array(e));return e};var na=function(e,
|
||||||
|
b,c){e=e.startsWith("file://")?new URL(e):pa.normalize(e);Va.readFile(e,function(d,g){d?c(d):b(g.buffer)})};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);a.inspect=function(){return"[Emscripten Module object]"}}else if(ta||fa)fa?U=self.location.href:"undefined"!=typeof document&&document.currentScript&&(U=document.currentScript.src),h&&(U=h),U=0!==U.indexOf("blob:")?U.substr(0,U.replace(/[?#].*/,"").lastIndexOf("/")+1):"",Wa=function(e){var b=new XMLHttpRequest;b.open("GET",
|
||||||
|
e,!1);b.send(null);return b.responseText},fa&&(ma=function(e){var b=new XMLHttpRequest;b.open("GET",e,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),na=function(e,b,c){var d=new XMLHttpRequest;d.open("GET",e,!0);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};a.print||console.log.bind(console);var da=a.printErr||console.warn.bind(console);Object.assign(a,Ta);Ta=null;var ea;a.wasmBinary&&
|
||||||
|
(ea=a.wasmBinary);"object"!=typeof WebAssembly&&y("no native wasm support detected");var ja,sa=!1,ra="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,W,ia,ca,Y,ya=[],oa=[],xa=[],va=!1,ba=0,qa=null,ha=null;var P="draco_decoder_gltf.wasm";P.startsWith("data:application/octet-stream;base64,")||(P=k(P));var pd=0,qd={b:function(e,b,c){(new A(e)).init(b,c);pd++;throw e;},a:function(){y("")},d:function(e,b,c){ia.copyWithin(e,b,b+c)},c:function(e){var b=ia.length;e>>>=0;if(2147483648<e)return!1;
|
||||||
|
for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,e+100663296);var g=Math;d=Math.max(e,d);g=g.min.call(g,2147483648,d+(65536-d%65536)%65536);a:{d=ja.buffer;try{ja.grow(g-d.byteLength+65535>>>16);l();var t=1;break a}catch(aa){}t=void 0}if(t)return!0}return!1}};(function(){function e(g,t){a.asm=g.exports;ja=a.asm.e;l();oa.unshift(a.asm.f);ba--;a.monitorRunDependencies&&a.monitorRunDependencies(ba);0==ba&&(null!==qa&&(clearInterval(qa),qa=null),ha&&(g=ha,ha=null,g()))}function b(g){e(g.instance)}
|
||||||
|
function c(g){return q().then(function(t){return WebAssembly.instantiate(t,d)}).then(function(t){return t}).then(g,function(t){da("failed to asynchronously prepare wasm: "+t);y(t)})}var d={a:qd};ba++;a.monitorRunDependencies&&a.monitorRunDependencies(ba);if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(g){da("Module.instantiateWasm callback failed with error: "+g),ka(g)}(function(){return ea||"function"!=typeof WebAssembly.instantiateStreaming||P.startsWith("data:application/octet-stream;base64,")||
|
||||||
|
P.startsWith("file://")||Ua||"function"!=typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(t){da("wasm streaming compile failed: "+t);da("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ka);return{}})();var Xa=a._emscripten_bind_VoidPtr___destroy___0=function(){return(Xa=a._emscripten_bind_VoidPtr___destroy___0=a.asm.h).apply(null,arguments)},za=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=
|
||||||
|
function(){return(za=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=a.asm.i).apply(null,arguments)},Ya=a._emscripten_bind_DecoderBuffer_Init_2=function(){return(Ya=a._emscripten_bind_DecoderBuffer_Init_2=a.asm.j).apply(null,arguments)},Za=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return(Za=a._emscripten_bind_DecoderBuffer___destroy___0=a.asm.k).apply(null,arguments)},Aa=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return(Aa=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=
|
||||||
|
a.asm.l).apply(null,arguments)},$a=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return($a=a._emscripten_bind_AttributeTransformData_transform_type_0=a.asm.m).apply(null,arguments)},ab=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return(ab=a._emscripten_bind_AttributeTransformData___destroy___0=a.asm.n).apply(null,arguments)},Ba=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return(Ba=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=
|
||||||
|
a.asm.o).apply(null,arguments)},bb=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return(bb=a._emscripten_bind_GeometryAttribute___destroy___0=a.asm.p).apply(null,arguments)},Ca=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return(Ca=a._emscripten_bind_PointAttribute_PointAttribute_0=a.asm.q).apply(null,arguments)},cb=a._emscripten_bind_PointAttribute_size_0=function(){return(cb=a._emscripten_bind_PointAttribute_size_0=a.asm.r).apply(null,arguments)},db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=
|
||||||
|
function(){return(db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=a.asm.s).apply(null,arguments)},eb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return(eb=a._emscripten_bind_PointAttribute_attribute_type_0=a.asm.t).apply(null,arguments)},fb=a._emscripten_bind_PointAttribute_data_type_0=function(){return(fb=a._emscripten_bind_PointAttribute_data_type_0=a.asm.u).apply(null,arguments)},gb=a._emscripten_bind_PointAttribute_num_components_0=function(){return(gb=a._emscripten_bind_PointAttribute_num_components_0=
|
||||||
|
a.asm.v).apply(null,arguments)},hb=a._emscripten_bind_PointAttribute_normalized_0=function(){return(hb=a._emscripten_bind_PointAttribute_normalized_0=a.asm.w).apply(null,arguments)},ib=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return(ib=a._emscripten_bind_PointAttribute_byte_stride_0=a.asm.x).apply(null,arguments)},jb=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return(jb=a._emscripten_bind_PointAttribute_byte_offset_0=a.asm.y).apply(null,arguments)},kb=a._emscripten_bind_PointAttribute_unique_id_0=
|
||||||
|
function(){return(kb=a._emscripten_bind_PointAttribute_unique_id_0=a.asm.z).apply(null,arguments)},lb=a._emscripten_bind_PointAttribute___destroy___0=function(){return(lb=a._emscripten_bind_PointAttribute___destroy___0=a.asm.A).apply(null,arguments)},Da=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return(Da=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=a.asm.B).apply(null,arguments)},mb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=
|
||||||
|
function(){return(mb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=a.asm.C).apply(null,arguments)},nb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return(nb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=a.asm.D).apply(null,arguments)},ob=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return(ob=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=a.asm.E).apply(null,arguments)},pb=
|
||||||
|
a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return(pb=a._emscripten_bind_AttributeQuantizationTransform_range_0=a.asm.F).apply(null,arguments)},qb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return(qb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=a.asm.G).apply(null,arguments)},Ea=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return(Ea=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=
|
||||||
|
a.asm.H).apply(null,arguments)},rb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return(rb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=a.asm.I).apply(null,arguments)},sb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return(sb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=a.asm.J).apply(null,arguments)},tb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return(tb=
|
||||||
|
a._emscripten_bind_AttributeOctahedronTransform___destroy___0=a.asm.K).apply(null,arguments)},Fa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return(Fa=a._emscripten_bind_PointCloud_PointCloud_0=a.asm.L).apply(null,arguments)},ub=a._emscripten_bind_PointCloud_num_attributes_0=function(){return(ub=a._emscripten_bind_PointCloud_num_attributes_0=a.asm.M).apply(null,arguments)},vb=a._emscripten_bind_PointCloud_num_points_0=function(){return(vb=a._emscripten_bind_PointCloud_num_points_0=a.asm.N).apply(null,
|
||||||
|
arguments)},wb=a._emscripten_bind_PointCloud___destroy___0=function(){return(wb=a._emscripten_bind_PointCloud___destroy___0=a.asm.O).apply(null,arguments)},Ga=a._emscripten_bind_Mesh_Mesh_0=function(){return(Ga=a._emscripten_bind_Mesh_Mesh_0=a.asm.P).apply(null,arguments)},xb=a._emscripten_bind_Mesh_num_faces_0=function(){return(xb=a._emscripten_bind_Mesh_num_faces_0=a.asm.Q).apply(null,arguments)},yb=a._emscripten_bind_Mesh_num_attributes_0=function(){return(yb=a._emscripten_bind_Mesh_num_attributes_0=
|
||||||
|
a.asm.R).apply(null,arguments)},zb=a._emscripten_bind_Mesh_num_points_0=function(){return(zb=a._emscripten_bind_Mesh_num_points_0=a.asm.S).apply(null,arguments)},Ab=a._emscripten_bind_Mesh___destroy___0=function(){return(Ab=a._emscripten_bind_Mesh___destroy___0=a.asm.T).apply(null,arguments)},Ha=a._emscripten_bind_Metadata_Metadata_0=function(){return(Ha=a._emscripten_bind_Metadata_Metadata_0=a.asm.U).apply(null,arguments)},Bb=a._emscripten_bind_Metadata___destroy___0=function(){return(Bb=a._emscripten_bind_Metadata___destroy___0=
|
||||||
|
a.asm.V).apply(null,arguments)},Cb=a._emscripten_bind_Status_code_0=function(){return(Cb=a._emscripten_bind_Status_code_0=a.asm.W).apply(null,arguments)},Db=a._emscripten_bind_Status_ok_0=function(){return(Db=a._emscripten_bind_Status_ok_0=a.asm.X).apply(null,arguments)},Eb=a._emscripten_bind_Status_error_msg_0=function(){return(Eb=a._emscripten_bind_Status_error_msg_0=a.asm.Y).apply(null,arguments)},Fb=a._emscripten_bind_Status___destroy___0=function(){return(Fb=a._emscripten_bind_Status___destroy___0=
|
||||||
|
a.asm.Z).apply(null,arguments)},Ia=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return(Ia=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=a.asm._).apply(null,arguments)},Gb=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return(Gb=a._emscripten_bind_DracoFloat32Array_GetValue_1=a.asm.$).apply(null,arguments)},Hb=a._emscripten_bind_DracoFloat32Array_size_0=function(){return(Hb=a._emscripten_bind_DracoFloat32Array_size_0=a.asm.aa).apply(null,arguments)},Ib=
|
||||||
|
a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return(Ib=a._emscripten_bind_DracoFloat32Array___destroy___0=a.asm.ba).apply(null,arguments)},Ja=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return(Ja=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=a.asm.ca).apply(null,arguments)},Jb=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return(Jb=a._emscripten_bind_DracoInt8Array_GetValue_1=a.asm.da).apply(null,arguments)},Kb=a._emscripten_bind_DracoInt8Array_size_0=
|
||||||
|
function(){return(Kb=a._emscripten_bind_DracoInt8Array_size_0=a.asm.ea).apply(null,arguments)},Lb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return(Lb=a._emscripten_bind_DracoInt8Array___destroy___0=a.asm.fa).apply(null,arguments)},Ka=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return(Ka=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=a.asm.ga).apply(null,arguments)},Mb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return(Mb=a._emscripten_bind_DracoUInt8Array_GetValue_1=
|
||||||
|
a.asm.ha).apply(null,arguments)},Nb=a._emscripten_bind_DracoUInt8Array_size_0=function(){return(Nb=a._emscripten_bind_DracoUInt8Array_size_0=a.asm.ia).apply(null,arguments)},Ob=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return(Ob=a._emscripten_bind_DracoUInt8Array___destroy___0=a.asm.ja).apply(null,arguments)},La=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return(La=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=a.asm.ka).apply(null,arguments)},Pb=a._emscripten_bind_DracoInt16Array_GetValue_1=
|
||||||
|
function(){return(Pb=a._emscripten_bind_DracoInt16Array_GetValue_1=a.asm.la).apply(null,arguments)},Qb=a._emscripten_bind_DracoInt16Array_size_0=function(){return(Qb=a._emscripten_bind_DracoInt16Array_size_0=a.asm.ma).apply(null,arguments)},Rb=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return(Rb=a._emscripten_bind_DracoInt16Array___destroy___0=a.asm.na).apply(null,arguments)},Ma=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return(Ma=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=
|
||||||
|
a.asm.oa).apply(null,arguments)},Sb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return(Sb=a._emscripten_bind_DracoUInt16Array_GetValue_1=a.asm.pa).apply(null,arguments)},Tb=a._emscripten_bind_DracoUInt16Array_size_0=function(){return(Tb=a._emscripten_bind_DracoUInt16Array_size_0=a.asm.qa).apply(null,arguments)},Ub=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return(Ub=a._emscripten_bind_DracoUInt16Array___destroy___0=a.asm.ra).apply(null,arguments)},Na=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=
|
||||||
|
function(){return(Na=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=a.asm.sa).apply(null,arguments)},Vb=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return(Vb=a._emscripten_bind_DracoInt32Array_GetValue_1=a.asm.ta).apply(null,arguments)},Wb=a._emscripten_bind_DracoInt32Array_size_0=function(){return(Wb=a._emscripten_bind_DracoInt32Array_size_0=a.asm.ua).apply(null,arguments)},Xb=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return(Xb=a._emscripten_bind_DracoInt32Array___destroy___0=
|
||||||
|
a.asm.va).apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return(Oa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=a.asm.wa).apply(null,arguments)},Yb=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return(Yb=a._emscripten_bind_DracoUInt32Array_GetValue_1=a.asm.xa).apply(null,arguments)},Zb=a._emscripten_bind_DracoUInt32Array_size_0=function(){return(Zb=a._emscripten_bind_DracoUInt32Array_size_0=a.asm.ya).apply(null,arguments)},$b=a._emscripten_bind_DracoUInt32Array___destroy___0=
|
||||||
|
function(){return($b=a._emscripten_bind_DracoUInt32Array___destroy___0=a.asm.za).apply(null,arguments)},Pa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return(Pa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=a.asm.Aa).apply(null,arguments)},ac=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return(ac=a._emscripten_bind_MetadataQuerier_HasEntry_2=a.asm.Ba).apply(null,arguments)},bc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return(bc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=
|
||||||
|
a.asm.Ca).apply(null,arguments)},cc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=function(){return(cc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=a.asm.Da).apply(null,arguments)},dc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return(dc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=a.asm.Ea).apply(null,arguments)},ec=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return(ec=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=a.asm.Fa).apply(null,
|
||||||
|
arguments)},fc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return(fc=a._emscripten_bind_MetadataQuerier_NumEntries_1=a.asm.Ga).apply(null,arguments)},gc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return(gc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=a.asm.Ha).apply(null,arguments)},hc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return(hc=a._emscripten_bind_MetadataQuerier___destroy___0=a.asm.Ia).apply(null,arguments)},Qa=a._emscripten_bind_Decoder_Decoder_0=
|
||||||
|
function(){return(Qa=a._emscripten_bind_Decoder_Decoder_0=a.asm.Ja).apply(null,arguments)},ic=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=function(){return(ic=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=a.asm.Ka).apply(null,arguments)},jc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=function(){return(jc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=a.asm.La).apply(null,arguments)},kc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return(kc=a._emscripten_bind_Decoder_GetAttributeId_2=
|
||||||
|
a.asm.Ma).apply(null,arguments)},lc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return(lc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=a.asm.Na).apply(null,arguments)},mc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return(mc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=a.asm.Oa).apply(null,arguments)},nc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return(nc=a._emscripten_bind_Decoder_GetAttribute_2=a.asm.Pa).apply(null,arguments)},
|
||||||
|
oc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return(oc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=a.asm.Qa).apply(null,arguments)},pc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return(pc=a._emscripten_bind_Decoder_GetMetadata_1=a.asm.Ra).apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return(qc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=a.asm.Sa).apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=
|
||||||
|
function(){return(rc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=a.asm.Ta).apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return(sc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=a.asm.Ua).apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return(tc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=a.asm.Va).apply(null,arguments)},uc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=function(){return(uc=
|
||||||
|
a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=a.asm.Wa).apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return(vc=a._emscripten_bind_Decoder_GetAttributeFloat_3=a.asm.Xa).apply(null,arguments)},wc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return(wc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=a.asm.Ya).apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return(xc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=
|
||||||
|
a.asm.Za).apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return(yc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=a.asm._a).apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return(zc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=a.asm.$a).apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return(Ac=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=
|
||||||
|
a.asm.ab).apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return(Bc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=a.asm.bb).apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return(Cc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=a.asm.cb).apply(null,arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return(Dc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=
|
||||||
|
a.asm.db).apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=function(){return(Ec=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=a.asm.eb).apply(null,arguments)},Fc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return(Fc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=a.asm.fb).apply(null,arguments)},Gc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=function(){return(Gc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=
|
||||||
|
a.asm.gb).apply(null,arguments)},Hc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return(Hc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=a.asm.hb).apply(null,arguments)},Ic=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return(Ic=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=a.asm.ib).apply(null,arguments)},Jc=a._emscripten_bind_Decoder___destroy___0=function(){return(Jc=a._emscripten_bind_Decoder___destroy___0=a.asm.jb).apply(null,arguments)},Kc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=
|
||||||
|
function(){return(Kc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=a.asm.kb).apply(null,arguments)},Lc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return(Lc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=a.asm.lb).apply(null,arguments)},Mc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return(Mc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=
|
||||||
|
a.asm.mb).apply(null,arguments)},Nc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=function(){return(Nc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=a.asm.nb).apply(null,arguments)},Oc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return(Oc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=a.asm.ob).apply(null,arguments)},Pc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return(Pc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=
|
||||||
|
a.asm.pb).apply(null,arguments)},Qc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return(Qc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=a.asm.qb).apply(null,arguments)},Rc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return(Rc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=a.asm.rb).apply(null,arguments)},Sc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return(Sc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=
|
||||||
|
a.asm.sb).apply(null,arguments)},Tc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return(Tc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=a.asm.tb).apply(null,arguments)},Uc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return(Uc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=a.asm.ub).apply(null,arguments)},Vc=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return(Vc=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=
|
||||||
|
a.asm.vb).apply(null,arguments)},Wc=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return(Wc=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=a.asm.wb).apply(null,arguments)},Xc=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return(Xc=a._emscripten_enum_draco_DataType_DT_INVALID=a.asm.xb).apply(null,arguments)},Yc=a._emscripten_enum_draco_DataType_DT_INT8=function(){return(Yc=a._emscripten_enum_draco_DataType_DT_INT8=a.asm.yb).apply(null,arguments)},Zc=
|
||||||
|
a._emscripten_enum_draco_DataType_DT_UINT8=function(){return(Zc=a._emscripten_enum_draco_DataType_DT_UINT8=a.asm.zb).apply(null,arguments)},$c=a._emscripten_enum_draco_DataType_DT_INT16=function(){return($c=a._emscripten_enum_draco_DataType_DT_INT16=a.asm.Ab).apply(null,arguments)},ad=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return(ad=a._emscripten_enum_draco_DataType_DT_UINT16=a.asm.Bb).apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return(bd=a._emscripten_enum_draco_DataType_DT_INT32=
|
||||||
|
a.asm.Cb).apply(null,arguments)},cd=a._emscripten_enum_draco_DataType_DT_UINT32=function(){return(cd=a._emscripten_enum_draco_DataType_DT_UINT32=a.asm.Db).apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_INT64=function(){return(dd=a._emscripten_enum_draco_DataType_DT_INT64=a.asm.Eb).apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return(ed=a._emscripten_enum_draco_DataType_DT_UINT64=a.asm.Fb).apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_FLOAT32=
|
||||||
|
function(){return(fd=a._emscripten_enum_draco_DataType_DT_FLOAT32=a.asm.Gb).apply(null,arguments)},gd=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return(gd=a._emscripten_enum_draco_DataType_DT_FLOAT64=a.asm.Hb).apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return(hd=a._emscripten_enum_draco_DataType_DT_BOOL=a.asm.Ib).apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return(id=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=
|
||||||
|
a.asm.Jb).apply(null,arguments)},jd=a._emscripten_enum_draco_StatusCode_OK=function(){return(jd=a._emscripten_enum_draco_StatusCode_OK=a.asm.Kb).apply(null,arguments)},kd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return(kd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=a.asm.Lb).apply(null,arguments)},ld=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return(ld=a._emscripten_enum_draco_StatusCode_IO_ERROR=a.asm.Mb).apply(null,arguments)},md=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=
|
||||||
|
function(){return(md=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=a.asm.Nb).apply(null,arguments)},nd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return(nd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=a.asm.Ob).apply(null,arguments)},od=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return(od=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=a.asm.Pb).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.Qb).apply(null,arguments)};
|
||||||
|
a._free=function(){return(a._free=a.asm.Rb).apply(null,arguments)};var ua=function(){return(ua=a.asm.Sb).apply(null,arguments)};a.___start_em_js=11660;a.___stop_em_js=11758;var la;ha=function b(){la||F();la||(ha=b)};if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();F();v.prototype=Object.create(v.prototype);v.prototype.constructor=v;v.prototype.__class__=v;v.__cache__={};a.WrapperObject=v;a.getCache=w;a.wrapPointer=B;a.castObject=function(b,
|
||||||
|
c){return B(b.ptr,c)};a.NULL=B(0);a.destroy=function(b){if(!b.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";b.__destroy__();delete w(b.__class__)[b.ptr]};a.compare=function(b,c){return b.ptr===c.ptr};a.getPointer=function(b){return b.ptr};a.getClass=function(b){return b.__class__};var r={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(r.needed){for(var b=0;b<r.temps.length;b++)a._free(r.temps[b]);r.temps.length=0;a._free(r.buffer);r.buffer=0;r.size+=
|
||||||
|
r.needed;r.needed=0}r.buffer||(r.size+=128,r.buffer=a._malloc(r.size),r.buffer||y(void 0));r.pos=0},alloc:function(b,c){r.buffer||y(void 0);b=b.length*c.BYTES_PER_ELEMENT;b=b+7&-8;r.pos+b>=r.size?(0<b||y(void 0),r.needed+=b,c=a._malloc(b),r.temps.push(c)):(c=r.buffer+r.pos,r.pos+=b);return c},copy:function(b,c,d){d>>>=0;switch(c.BYTES_PER_ELEMENT){case 2:d>>>=1;break;case 4:d>>>=2;break;case 8:d>>>=3}for(var g=0;g<b.length;g++)c[d+g]=b[g]}};X.prototype=Object.create(v.prototype);X.prototype.constructor=
|
||||||
|
X;X.prototype.__class__=X;X.__cache__={};a.VoidPtr=X;X.prototype.__destroy__=X.prototype.__destroy__=function(){Xa(this.ptr)};S.prototype=Object.create(v.prototype);S.prototype.constructor=S;S.prototype.__class__=S;S.__cache__={};a.DecoderBuffer=S;S.prototype.Init=S.prototype.Init=function(b,c){var d=this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);Ya(d,b,c)};S.prototype.__destroy__=S.prototype.__destroy__=function(){Za(this.ptr)};Q.prototype=Object.create(v.prototype);
|
||||||
|
Q.prototype.constructor=Q;Q.prototype.__class__=Q;Q.__cache__={};a.AttributeTransformData=Q;Q.prototype.transform_type=Q.prototype.transform_type=function(){return $a(this.ptr)};Q.prototype.__destroy__=Q.prototype.__destroy__=function(){ab(this.ptr)};V.prototype=Object.create(v.prototype);V.prototype.constructor=V;V.prototype.__class__=V;V.__cache__={};a.GeometryAttribute=V;V.prototype.__destroy__=V.prototype.__destroy__=function(){bb(this.ptr)};x.prototype=Object.create(v.prototype);x.prototype.constructor=
|
||||||
|
x;x.prototype.__class__=x;x.__cache__={};a.PointAttribute=x;x.prototype.size=x.prototype.size=function(){return cb(this.ptr)};x.prototype.GetAttributeTransformData=x.prototype.GetAttributeTransformData=function(){return B(db(this.ptr),Q)};x.prototype.attribute_type=x.prototype.attribute_type=function(){return eb(this.ptr)};x.prototype.data_type=x.prototype.data_type=function(){return fb(this.ptr)};x.prototype.num_components=x.prototype.num_components=function(){return gb(this.ptr)};x.prototype.normalized=
|
||||||
|
x.prototype.normalized=function(){return!!hb(this.ptr)};x.prototype.byte_stride=x.prototype.byte_stride=function(){return ib(this.ptr)};x.prototype.byte_offset=x.prototype.byte_offset=function(){return jb(this.ptr)};x.prototype.unique_id=x.prototype.unique_id=function(){return kb(this.ptr)};x.prototype.__destroy__=x.prototype.__destroy__=function(){lb(this.ptr)};D.prototype=Object.create(v.prototype);D.prototype.constructor=D;D.prototype.__class__=D;D.__cache__={};a.AttributeQuantizationTransform=
|
||||||
|
D;D.prototype.InitFromAttribute=D.prototype.InitFromAttribute=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!mb(c,b)};D.prototype.quantization_bits=D.prototype.quantization_bits=function(){return nb(this.ptr)};D.prototype.min_value=D.prototype.min_value=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return ob(c,b)};D.prototype.range=D.prototype.range=function(){return pb(this.ptr)};D.prototype.__destroy__=D.prototype.__destroy__=function(){qb(this.ptr)};G.prototype=
|
||||||
|
Object.create(v.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.AttributeOctahedronTransform=G;G.prototype.InitFromAttribute=G.prototype.InitFromAttribute=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!rb(c,b)};G.prototype.quantization_bits=G.prototype.quantization_bits=function(){return sb(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){tb(this.ptr)};H.prototype=Object.create(v.prototype);H.prototype.constructor=H;H.prototype.__class__=
|
||||||
|
H;H.__cache__={};a.PointCloud=H;H.prototype.num_attributes=H.prototype.num_attributes=function(){return ub(this.ptr)};H.prototype.num_points=H.prototype.num_points=function(){return vb(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){wb(this.ptr)};E.prototype=Object.create(v.prototype);E.prototype.constructor=E;E.prototype.__class__=E;E.__cache__={};a.Mesh=E;E.prototype.num_faces=E.prototype.num_faces=function(){return xb(this.ptr)};E.prototype.num_attributes=E.prototype.num_attributes=
|
||||||
|
function(){return yb(this.ptr)};E.prototype.num_points=E.prototype.num_points=function(){return zb(this.ptr)};E.prototype.__destroy__=E.prototype.__destroy__=function(){Ab(this.ptr)};T.prototype=Object.create(v.prototype);T.prototype.constructor=T;T.prototype.__class__=T;T.__cache__={};a.Metadata=T;T.prototype.__destroy__=T.prototype.__destroy__=function(){Bb(this.ptr)};C.prototype=Object.create(v.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Status=C;C.prototype.code=
|
||||||
|
C.prototype.code=function(){return Cb(this.ptr)};C.prototype.ok=C.prototype.ok=function(){return!!Db(this.ptr)};C.prototype.error_msg=C.prototype.error_msg=function(){return p(Eb(this.ptr))};C.prototype.__destroy__=C.prototype.__destroy__=function(){Fb(this.ptr)};I.prototype=Object.create(v.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoFloat32Array=I;I.prototype.GetValue=I.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Gb(c,
|
||||||
|
b)};I.prototype.size=I.prototype.size=function(){return Hb(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Ib(this.ptr)};J.prototype=Object.create(v.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoInt8Array=J;J.prototype.GetValue=J.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Jb(c,b)};J.prototype.size=J.prototype.size=function(){return Kb(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Lb(this.ptr)};
|
||||||
|
K.prototype=Object.create(v.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.DracoUInt8Array=K;K.prototype.GetValue=K.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Mb(c,b)};K.prototype.size=K.prototype.size=function(){return Nb(this.ptr)};K.prototype.__destroy__=K.prototype.__destroy__=function(){Ob(this.ptr)};L.prototype=Object.create(v.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt16Array=
|
||||||
|
L;L.prototype.GetValue=L.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Pb(c,b)};L.prototype.size=L.prototype.size=function(){return Qb(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){Rb(this.ptr)};M.prototype=Object.create(v.prototype);M.prototype.constructor=M;M.prototype.__class__=M;M.__cache__={};a.DracoUInt16Array=M;M.prototype.GetValue=M.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Sb(c,b)};
|
||||||
|
M.prototype.size=M.prototype.size=function(){return Tb(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){Ub(this.ptr)};N.prototype=Object.create(v.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoInt32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Vb(c,b)};N.prototype.size=N.prototype.size=function(){return Wb(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){Xb(this.ptr)};
|
||||||
|
O.prototype=Object.create(v.prototype);O.prototype.constructor=O;O.prototype.__class__=O;O.__cache__={};a.DracoUInt32Array=O;O.prototype.GetValue=O.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Yb(c,b)};O.prototype.size=O.prototype.size=function(){return Zb(this.ptr)};O.prototype.__destroy__=O.prototype.__destroy__=function(){$b(this.ptr)};z.prototype=Object.create(v.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.MetadataQuerier=
|
||||||
|
z;z.prototype.HasEntry=z.prototype.HasEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return!!ac(d,b,c)};z.prototype.GetIntEntry=z.prototype.GetIntEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return bc(d,b,c)};z.prototype.GetIntEntryArray=z.prototype.GetIntEntryArray=function(b,c,d){var g=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===
|
||||||
|
typeof c?c.ptr:R(c);d&&"object"===typeof d&&(d=d.ptr);cc(g,b,c,d)};z.prototype.GetDoubleEntry=z.prototype.GetDoubleEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return dc(d,b,c)};z.prototype.GetStringEntry=z.prototype.GetStringEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return p(ec(d,b,c))};z.prototype.NumEntries=z.prototype.NumEntries=function(b){var c=this.ptr;
|
||||||
|
b&&"object"===typeof b&&(b=b.ptr);return fc(c,b)};z.prototype.GetEntryName=z.prototype.GetEntryName=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return p(gc(d,b,c))};z.prototype.__destroy__=z.prototype.__destroy__=function(){hc(this.ptr)};m.prototype=Object.create(v.prototype);m.prototype.constructor=m;m.prototype.__class__=m;m.__cache__={};a.Decoder=m;m.prototype.DecodeArrayToPointCloud=m.prototype.DecodeArrayToPointCloud=function(b,c,d){var g=
|
||||||
|
this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return B(ic(g,b,c,d),C)};m.prototype.DecodeArrayToMesh=m.prototype.DecodeArrayToMesh=function(b,c,d){var g=this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return B(jc(g,b,c,d),C)};m.prototype.GetAttributeId=m.prototype.GetAttributeId=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&
|
||||||
|
(c=c.ptr);return kc(d,b,c)};m.prototype.GetAttributeIdByName=m.prototype.GetAttributeIdByName=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return lc(d,b,c)};m.prototype.GetAttributeIdByMetadataEntry=m.prototype.GetAttributeIdByMetadataEntry=function(b,c,d){var g=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);d=d&&"object"===typeof d?d.ptr:R(d);return mc(g,b,c,d)};m.prototype.GetAttribute=
|
||||||
|
m.prototype.GetAttribute=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(nc(d,b,c),x)};m.prototype.GetAttributeByUniqueId=m.prototype.GetAttributeByUniqueId=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(oc(d,b,c),x)};m.prototype.GetMetadata=m.prototype.GetMetadata=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return B(pc(c,b),T)};m.prototype.GetAttributeMetadata=m.prototype.GetAttributeMetadata=
|
||||||
|
function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(qc(d,b,c),T)};m.prototype.GetFaceFromMesh=m.prototype.GetFaceFromMesh=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!rc(g,b,c,d)};m.prototype.GetTriangleStripsFromMesh=m.prototype.GetTriangleStripsFromMesh=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);
|
||||||
|
return sc(d,b,c)};m.prototype.GetTrianglesUInt16Array=m.prototype.GetTrianglesUInt16Array=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!tc(g,b,c,d)};m.prototype.GetTrianglesUInt32Array=m.prototype.GetTrianglesUInt32Array=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!uc(g,b,c,d)};m.prototype.GetAttributeFloat=m.prototype.GetAttributeFloat=
|
||||||
|
function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!vc(g,b,c,d)};m.prototype.GetAttributeFloatForAllPoints=m.prototype.GetAttributeFloatForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!wc(g,b,c,d)};m.prototype.GetAttributeIntForAllPoints=m.prototype.GetAttributeIntForAllPoints=function(b,c,d){var g=this.ptr;
|
||||||
|
b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!xc(g,b,c,d)};m.prototype.GetAttributeInt8ForAllPoints=m.prototype.GetAttributeInt8ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!yc(g,b,c,d)};m.prototype.GetAttributeUInt8ForAllPoints=m.prototype.GetAttributeUInt8ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=
|
||||||
|
b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!zc(g,b,c,d)};m.prototype.GetAttributeInt16ForAllPoints=m.prototype.GetAttributeInt16ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Ac(g,b,c,d)};m.prototype.GetAttributeUInt16ForAllPoints=m.prototype.GetAttributeUInt16ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&
|
||||||
|
(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Bc(g,b,c,d)};m.prototype.GetAttributeInt32ForAllPoints=m.prototype.GetAttributeInt32ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Cc(g,b,c,d)};m.prototype.GetAttributeUInt32ForAllPoints=m.prototype.GetAttributeUInt32ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===
|
||||||
|
typeof d&&(d=d.ptr);return!!Dc(g,b,c,d)};m.prototype.GetAttributeDataArrayForAllPoints=m.prototype.GetAttributeDataArrayForAllPoints=function(b,c,d,g,t){var aa=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);g&&"object"===typeof g&&(g=g.ptr);t&&"object"===typeof t&&(t=t.ptr);return!!Ec(aa,b,c,d,g,t)};m.prototype.SkipAttributeTransform=m.prototype.SkipAttributeTransform=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);Fc(c,
|
||||||
|
b)};m.prototype.GetEncodedGeometryType_Deprecated=m.prototype.GetEncodedGeometryType_Deprecated=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Gc(c,b)};m.prototype.DecodeBufferToPointCloud=m.prototype.DecodeBufferToPointCloud=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(Hc(d,b,c),C)};m.prototype.DecodeBufferToMesh=m.prototype.DecodeBufferToMesh=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===
|
||||||
|
typeof c&&(c=c.ptr);return B(Ic(d,b,c),C)};m.prototype.__destroy__=m.prototype.__destroy__=function(){Jc(this.ptr)};(function(){function b(){a.ATTRIBUTE_INVALID_TRANSFORM=Kc();a.ATTRIBUTE_NO_TRANSFORM=Lc();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=Mc();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=Nc();a.INVALID=Oc();a.POSITION=Pc();a.NORMAL=Qc();a.COLOR=Rc();a.TEX_COORD=Sc();a.GENERIC=Tc();a.INVALID_GEOMETRY_TYPE=Uc();a.POINT_CLOUD=Vc();a.TRIANGULAR_MESH=Wc();a.DT_INVALID=Xc();a.DT_INT8=Yc();a.DT_UINT8=Zc();a.DT_INT16=
|
||||||
|
$c();a.DT_UINT16=ad();a.DT_INT32=bd();a.DT_UINT32=cd();a.DT_INT64=dd();a.DT_UINT64=ed();a.DT_FLOAT32=fd();a.DT_FLOAT64=gd();a.DT_BOOL=hd();a.DT_TYPES_COUNT=id();a.OK=jd();a.DRACO_ERROR=kd();a.IO_ERROR=ld();a.INVALID_PARAMETER=md();a.UNSUPPORTED_VERSION=nd();a.UNKNOWN_VERSION=od()}va?b():oa.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();a.Decoder.prototype.GetEncodedGeometryType=function(b){if(b.__class__&&b.__class__===a.DecoderBuffer)return a.Decoder.prototype.GetEncodedGeometryType_Deprecated(b);
|
||||||
|
if(8>b.byteLength)return a.INVALID_GEOMETRY_TYPE;switch(b[7]){case 0:return a.POINT_CLOUD;case 1:return a.TRIANGULAR_MESH;default:return a.INVALID_GEOMETRY_TYPE}};return n.ready}}();"object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule);
|
||||||
BIN
public/liucheng/apmt.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
public/liucheng/aqjc.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
public/liucheng/jiebo.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
public/liucheng/jljs.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/liucheng/jlxy.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
public/liucheng/qrka.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
public/liucheng/sbdg.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
public/liucheng/slmt.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
public/liucheng/xdzl.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/liucheng/zcjs.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/lunchuan.bin
Normal file
BIN
public/lunchuan.glb
Normal file
1
public/lunchuan.gltf
Normal file
BIN
public/lunchuan.jpg
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
public/marker/swmarker.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/marker/sxtcheck.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
public/marker/szmarker.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/marker/xfs.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
public/marker/ydmarker.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/marker/yjwz.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/marker/zihang.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/mtBg1.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
public/mtnew1.glb
Normal file
BIN
public/normal.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/sphereBack.jpg
Normal file
|
After Width: | Height: | Size: 219 KiB |
825
public/tween.umd.js
Normal file
@ -0,0 +1,825 @@
|
|||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||||
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||||
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.TWEEN = {}));
|
||||||
|
}(this, (function (exports) { 'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Ease class provides a collection of easing functions for use with tween.js.
|
||||||
|
*/
|
||||||
|
var Easing = {
|
||||||
|
Linear: {
|
||||||
|
None: function (amount) {
|
||||||
|
return amount;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Quadratic: {
|
||||||
|
In: function (amount) {
|
||||||
|
return amount * amount;
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return amount * (2 - amount);
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * amount * amount;
|
||||||
|
}
|
||||||
|
return -0.5 * (--amount * (amount - 2) - 1);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Cubic: {
|
||||||
|
In: function (amount) {
|
||||||
|
return amount * amount * amount;
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return --amount * amount * amount + 1;
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * amount * amount * amount;
|
||||||
|
}
|
||||||
|
return 0.5 * ((amount -= 2) * amount * amount + 2);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Quartic: {
|
||||||
|
In: function (amount) {
|
||||||
|
return amount * amount * amount * amount;
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return 1 - --amount * amount * amount * amount;
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * amount * amount * amount * amount;
|
||||||
|
}
|
||||||
|
return -0.5 * ((amount -= 2) * amount * amount * amount - 2);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Quintic: {
|
||||||
|
In: function (amount) {
|
||||||
|
return amount * amount * amount * amount * amount;
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return --amount * amount * amount * amount * amount + 1;
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * amount * amount * amount * amount * amount;
|
||||||
|
}
|
||||||
|
return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Sinusoidal: {
|
||||||
|
In: function (amount) {
|
||||||
|
return 1 - Math.cos((amount * Math.PI) / 2);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return Math.sin((amount * Math.PI) / 2);
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
return 0.5 * (1 - Math.cos(Math.PI * amount));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Exponential: {
|
||||||
|
In: function (amount) {
|
||||||
|
return amount === 0 ? 0 : Math.pow(1024, amount - 1);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if (amount === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (amount === 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * Math.pow(1024, amount - 1);
|
||||||
|
}
|
||||||
|
return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Circular: {
|
||||||
|
In: function (amount) {
|
||||||
|
return 1 - Math.sqrt(1 - amount * amount);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
return Math.sqrt(1 - --amount * amount);
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return -0.5 * (Math.sqrt(1 - amount * amount) - 1);
|
||||||
|
}
|
||||||
|
return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Elastic: {
|
||||||
|
In: function (amount) {
|
||||||
|
if (amount === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (amount === 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
if (amount === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (amount === 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if (amount === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (amount === 1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
amount *= 2;
|
||||||
|
if (amount < 1) {
|
||||||
|
return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);
|
||||||
|
}
|
||||||
|
return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Back: {
|
||||||
|
In: function (amount) {
|
||||||
|
var s = 1.70158;
|
||||||
|
return amount * amount * ((s + 1) * amount - s);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
var s = 1.70158;
|
||||||
|
return --amount * amount * ((s + 1) * amount + s) + 1;
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
var s = 1.70158 * 1.525;
|
||||||
|
if ((amount *= 2) < 1) {
|
||||||
|
return 0.5 * (amount * amount * ((s + 1) * amount - s));
|
||||||
|
}
|
||||||
|
return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Bounce: {
|
||||||
|
In: function (amount) {
|
||||||
|
return 1 - Easing.Bounce.Out(1 - amount);
|
||||||
|
},
|
||||||
|
Out: function (amount) {
|
||||||
|
if (amount < 1 / 2.75) {
|
||||||
|
return 7.5625 * amount * amount;
|
||||||
|
}
|
||||||
|
else if (amount < 2 / 2.75) {
|
||||||
|
return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;
|
||||||
|
}
|
||||||
|
else if (amount < 2.5 / 2.75) {
|
||||||
|
return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
InOut: function (amount) {
|
||||||
|
if (amount < 0.5) {
|
||||||
|
return Easing.Bounce.In(amount * 2) * 0.5;
|
||||||
|
}
|
||||||
|
return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var now;
|
||||||
|
// Include a performance.now polyfill.
|
||||||
|
// In node.js, use process.hrtime.
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore
|
||||||
|
if (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) {
|
||||||
|
now = function () {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore
|
||||||
|
var time = process.hrtime();
|
||||||
|
// Convert [seconds, nanoseconds] to milliseconds.
|
||||||
|
return time[0] * 1000 + time[1] / 1000000;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// In a browser, use self.performance.now if it is available.
|
||||||
|
else if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) {
|
||||||
|
// This must be bound, because directly assigning this function
|
||||||
|
// leads to an invocation exception in Chrome.
|
||||||
|
now = self.performance.now.bind(self.performance);
|
||||||
|
}
|
||||||
|
// Use Date.now if it is available.
|
||||||
|
else if (Date.now !== undefined) {
|
||||||
|
now = Date.now;
|
||||||
|
}
|
||||||
|
// Otherwise, use 'new Date().getTime()'.
|
||||||
|
else {
|
||||||
|
now = function () {
|
||||||
|
return new Date().getTime();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var now$1 = now;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controlling groups of tweens
|
||||||
|
*
|
||||||
|
* Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.
|
||||||
|
* In these cases, you may want to create your own smaller groups of tween
|
||||||
|
*/
|
||||||
|
var Group = /** @class */ (function () {
|
||||||
|
function Group() {
|
||||||
|
this._tweens = {};
|
||||||
|
this._tweensAddedDuringUpdate = {};
|
||||||
|
}
|
||||||
|
Group.prototype.getAll = function () {
|
||||||
|
var _this = this;
|
||||||
|
return Object.keys(this._tweens).map(function (tweenId) {
|
||||||
|
return _this._tweens[tweenId];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Group.prototype.removeAll = function () {
|
||||||
|
this._tweens = {};
|
||||||
|
};
|
||||||
|
Group.prototype.add = function (tween) {
|
||||||
|
this._tweens[tween.getId()] = tween;
|
||||||
|
this._tweensAddedDuringUpdate[tween.getId()] = tween;
|
||||||
|
};
|
||||||
|
Group.prototype.remove = function (tween) {
|
||||||
|
delete this._tweens[tween.getId()];
|
||||||
|
delete this._tweensAddedDuringUpdate[tween.getId()];
|
||||||
|
};
|
||||||
|
Group.prototype.update = function (time, preserve) {
|
||||||
|
if (time === void 0) { time = now$1(); }
|
||||||
|
if (preserve === void 0) { preserve = false; }
|
||||||
|
var tweenIds = Object.keys(this._tweens);
|
||||||
|
if (tweenIds.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Tweens are updated in "batches". If you add a new tween during an
|
||||||
|
// update, then the new tween will be updated in the next batch.
|
||||||
|
// If you remove a tween during an update, it may or may not be updated.
|
||||||
|
// However, if the removed tween was added during the current batch,
|
||||||
|
// then it will not be updated.
|
||||||
|
while (tweenIds.length > 0) {
|
||||||
|
this._tweensAddedDuringUpdate = {};
|
||||||
|
for (var i = 0; i < tweenIds.length; i++) {
|
||||||
|
var tween = this._tweens[tweenIds[i]];
|
||||||
|
var autoStart = !preserve;
|
||||||
|
if (tween && tween.update(time, autoStart) === false && !preserve) {
|
||||||
|
delete this._tweens[tweenIds[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tweenIds = Object.keys(this._tweensAddedDuringUpdate);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
return Group;
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
var Interpolation = {
|
||||||
|
Linear: function (v, k) {
|
||||||
|
var m = v.length - 1;
|
||||||
|
var f = m * k;
|
||||||
|
var i = Math.floor(f);
|
||||||
|
var fn = Interpolation.Utils.Linear;
|
||||||
|
if (k < 0) {
|
||||||
|
return fn(v[0], v[1], f);
|
||||||
|
}
|
||||||
|
if (k > 1) {
|
||||||
|
return fn(v[m], v[m - 1], m - f);
|
||||||
|
}
|
||||||
|
return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);
|
||||||
|
},
|
||||||
|
Bezier: function (v, k) {
|
||||||
|
var b = 0;
|
||||||
|
var n = v.length - 1;
|
||||||
|
var pw = Math.pow;
|
||||||
|
var bn = Interpolation.Utils.Bernstein;
|
||||||
|
for (var i = 0; i <= n; i++) {
|
||||||
|
b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
},
|
||||||
|
CatmullRom: function (v, k) {
|
||||||
|
var m = v.length - 1;
|
||||||
|
var f = m * k;
|
||||||
|
var i = Math.floor(f);
|
||||||
|
var fn = Interpolation.Utils.CatmullRom;
|
||||||
|
if (v[0] === v[m]) {
|
||||||
|
if (k < 0) {
|
||||||
|
i = Math.floor((f = m * (1 + k)));
|
||||||
|
}
|
||||||
|
return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (k < 0) {
|
||||||
|
return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);
|
||||||
|
}
|
||||||
|
if (k > 1) {
|
||||||
|
return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);
|
||||||
|
}
|
||||||
|
return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Utils: {
|
||||||
|
Linear: function (p0, p1, t) {
|
||||||
|
return (p1 - p0) * t + p0;
|
||||||
|
},
|
||||||
|
Bernstein: function (n, i) {
|
||||||
|
var fc = Interpolation.Utils.Factorial;
|
||||||
|
return fc(n) / fc(i) / fc(n - i);
|
||||||
|
},
|
||||||
|
Factorial: (function () {
|
||||||
|
var a = [1];
|
||||||
|
return function (n) {
|
||||||
|
var s = 1;
|
||||||
|
if (a[n]) {
|
||||||
|
return a[n];
|
||||||
|
}
|
||||||
|
for (var i = n; i > 1; i--) {
|
||||||
|
s *= i;
|
||||||
|
}
|
||||||
|
a[n] = s;
|
||||||
|
return s;
|
||||||
|
};
|
||||||
|
})(),
|
||||||
|
CatmullRom: function (p0, p1, p2, p3, t) {
|
||||||
|
var v0 = (p2 - p0) * 0.5;
|
||||||
|
var v1 = (p3 - p1) * 0.5;
|
||||||
|
var t2 = t * t;
|
||||||
|
var t3 = t * t2;
|
||||||
|
return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utils
|
||||||
|
*/
|
||||||
|
var Sequence = /** @class */ (function () {
|
||||||
|
function Sequence() {
|
||||||
|
}
|
||||||
|
Sequence.nextId = function () {
|
||||||
|
return Sequence._nextId++;
|
||||||
|
};
|
||||||
|
Sequence._nextId = 0;
|
||||||
|
return Sequence;
|
||||||
|
}());
|
||||||
|
|
||||||
|
var mainGroup = new Group();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tween.js - Licensed under the MIT license
|
||||||
|
* https://github.com/tweenjs/tween.js
|
||||||
|
* ----------------------------------------------
|
||||||
|
*
|
||||||
|
* See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.
|
||||||
|
* Thank you all, you're awesome!
|
||||||
|
*/
|
||||||
|
var Tween = /** @class */ (function () {
|
||||||
|
function Tween(_object, _group) {
|
||||||
|
if (_group === void 0) { _group = mainGroup; }
|
||||||
|
this._object = _object;
|
||||||
|
this._group = _group;
|
||||||
|
this._isPaused = false;
|
||||||
|
this._pauseStart = 0;
|
||||||
|
this._valuesStart = {};
|
||||||
|
this._valuesEnd = {};
|
||||||
|
this._valuesStartRepeat = {};
|
||||||
|
this._duration = 1000;
|
||||||
|
this._initialRepeat = 0;
|
||||||
|
this._repeat = 0;
|
||||||
|
this._yoyo = false;
|
||||||
|
this._isPlaying = false;
|
||||||
|
this._reversed = false;
|
||||||
|
this._delayTime = 0;
|
||||||
|
this._startTime = 0;
|
||||||
|
this._easingFunction = Easing.Linear.None;
|
||||||
|
this._interpolationFunction = Interpolation.Linear;
|
||||||
|
this._chainedTweens = [];
|
||||||
|
this._onStartCallbackFired = false;
|
||||||
|
this._id = Sequence.nextId();
|
||||||
|
this._isChainStopped = false;
|
||||||
|
this._goToEnd = false;
|
||||||
|
}
|
||||||
|
Tween.prototype.getId = function () {
|
||||||
|
return this._id;
|
||||||
|
};
|
||||||
|
Tween.prototype.isPlaying = function () {
|
||||||
|
return this._isPlaying;
|
||||||
|
};
|
||||||
|
Tween.prototype.isPaused = function () {
|
||||||
|
return this._isPaused;
|
||||||
|
};
|
||||||
|
Tween.prototype.to = function (properties, duration) {
|
||||||
|
// TODO? restore this, then update the 07_dynamic_to example to set fox
|
||||||
|
// tween's to on each update. That way the behavior is opt-in (there's
|
||||||
|
// currently no opt-out).
|
||||||
|
// for (const prop in properties) this._valuesEnd[prop] = properties[prop]
|
||||||
|
this._valuesEnd = Object.create(properties);
|
||||||
|
if (duration !== undefined) {
|
||||||
|
this._duration = duration;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.duration = function (d) {
|
||||||
|
this._duration = d;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.start = function (time) {
|
||||||
|
if (this._isPlaying) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line
|
||||||
|
this._group && this._group.add(this);
|
||||||
|
this._repeat = this._initialRepeat;
|
||||||
|
if (this._reversed) {
|
||||||
|
// If we were reversed (f.e. using the yoyo feature) then we need to
|
||||||
|
// flip the tween direction back to forward.
|
||||||
|
this._reversed = false;
|
||||||
|
for (var property in this._valuesStartRepeat) {
|
||||||
|
this._swapEndStartRepeatValues(property);
|
||||||
|
this._valuesStart[property] = this._valuesStartRepeat[property];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._isPlaying = true;
|
||||||
|
this._isPaused = false;
|
||||||
|
this._onStartCallbackFired = false;
|
||||||
|
this._isChainStopped = false;
|
||||||
|
this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1();
|
||||||
|
this._startTime += this._delayTime;
|
||||||
|
this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) {
|
||||||
|
for (var property in _valuesEnd) {
|
||||||
|
var startValue = _object[property];
|
||||||
|
var startValueIsArray = Array.isArray(startValue);
|
||||||
|
var propType = startValueIsArray ? 'array' : typeof startValue;
|
||||||
|
var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);
|
||||||
|
// If `to()` specifies a property that doesn't exist in the source object,
|
||||||
|
// we should not set that property in the object
|
||||||
|
if (propType === 'undefined' || propType === 'function') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Check if an Array was provided as property value
|
||||||
|
if (isInterpolationList) {
|
||||||
|
var endValues = _valuesEnd[property];
|
||||||
|
if (endValues.length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// handle an array of relative values
|
||||||
|
endValues = endValues.map(this._handleRelativeValue.bind(this, startValue));
|
||||||
|
// Create a local copy of the Array with the start value at the front
|
||||||
|
_valuesEnd[property] = [startValue].concat(endValues);
|
||||||
|
}
|
||||||
|
// handle the deepness of the values
|
||||||
|
if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {
|
||||||
|
_valuesStart[property] = startValueIsArray ? [] : {};
|
||||||
|
// eslint-disable-next-line
|
||||||
|
for (var prop in startValue) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
_valuesStart[property][prop] = startValue[prop];
|
||||||
|
}
|
||||||
|
_valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values?
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Save the starting value, but only once.
|
||||||
|
if (typeof _valuesStart[property] === 'undefined') {
|
||||||
|
_valuesStart[property] = startValue;
|
||||||
|
}
|
||||||
|
if (!startValueIsArray) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
_valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings
|
||||||
|
}
|
||||||
|
if (isInterpolationList) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
_valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_valuesStartRepeat[property] = _valuesStart[property] || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Tween.prototype.stop = function () {
|
||||||
|
if (!this._isChainStopped) {
|
||||||
|
this._isChainStopped = true;
|
||||||
|
this.stopChainedTweens();
|
||||||
|
}
|
||||||
|
if (!this._isPlaying) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line
|
||||||
|
this._group && this._group.remove(this);
|
||||||
|
this._isPlaying = false;
|
||||||
|
this._isPaused = false;
|
||||||
|
if (this._onStopCallback) {
|
||||||
|
this._onStopCallback(this._object);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.end = function () {
|
||||||
|
this._goToEnd = true;
|
||||||
|
this.update(Infinity);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.pause = function (time) {
|
||||||
|
if (time === void 0) { time = now$1(); }
|
||||||
|
if (this._isPaused || !this._isPlaying) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this._isPaused = true;
|
||||||
|
this._pauseStart = time;
|
||||||
|
// eslint-disable-next-line
|
||||||
|
this._group && this._group.remove(this);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.resume = function (time) {
|
||||||
|
if (time === void 0) { time = now$1(); }
|
||||||
|
if (!this._isPaused || !this._isPlaying) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
this._isPaused = false;
|
||||||
|
this._startTime += time - this._pauseStart;
|
||||||
|
this._pauseStart = 0;
|
||||||
|
// eslint-disable-next-line
|
||||||
|
this._group && this._group.add(this);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.stopChainedTweens = function () {
|
||||||
|
for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {
|
||||||
|
this._chainedTweens[i].stop();
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.group = function (group) {
|
||||||
|
this._group = group;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.delay = function (amount) {
|
||||||
|
this._delayTime = amount;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.repeat = function (times) {
|
||||||
|
this._initialRepeat = times;
|
||||||
|
this._repeat = times;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.repeatDelay = function (amount) {
|
||||||
|
this._repeatDelayTime = amount;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.yoyo = function (yoyo) {
|
||||||
|
this._yoyo = yoyo;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.easing = function (easingFunction) {
|
||||||
|
this._easingFunction = easingFunction;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.interpolation = function (interpolationFunction) {
|
||||||
|
this._interpolationFunction = interpolationFunction;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.chain = function () {
|
||||||
|
var tweens = [];
|
||||||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||||||
|
tweens[_i] = arguments[_i];
|
||||||
|
}
|
||||||
|
this._chainedTweens = tweens;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.onStart = function (callback) {
|
||||||
|
this._onStartCallback = callback;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.onUpdate = function (callback) {
|
||||||
|
this._onUpdateCallback = callback;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.onRepeat = function (callback) {
|
||||||
|
this._onRepeatCallback = callback;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.onComplete = function (callback) {
|
||||||
|
this._onCompleteCallback = callback;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
Tween.prototype.onStop = function (callback) {
|
||||||
|
this._onStopCallback = callback;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @returns true if the tween is still playing after the update, false
|
||||||
|
* otherwise (calling update on a paused tween still returns true because
|
||||||
|
* it is still playing, just paused).
|
||||||
|
*/
|
||||||
|
Tween.prototype.update = function (time, autoStart) {
|
||||||
|
if (time === void 0) { time = now$1(); }
|
||||||
|
if (autoStart === void 0) { autoStart = true; }
|
||||||
|
if (this._isPaused)
|
||||||
|
return true;
|
||||||
|
var property;
|
||||||
|
var elapsed;
|
||||||
|
var endTime = this._startTime + this._duration;
|
||||||
|
if (!this._goToEnd && !this._isPlaying) {
|
||||||
|
if (time > endTime)
|
||||||
|
return false;
|
||||||
|
if (autoStart)
|
||||||
|
this.start(time);
|
||||||
|
}
|
||||||
|
this._goToEnd = false;
|
||||||
|
if (time < this._startTime) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (this._onStartCallbackFired === false) {
|
||||||
|
if (this._onStartCallback) {
|
||||||
|
this._onStartCallback(this._object);
|
||||||
|
}
|
||||||
|
this._onStartCallbackFired = true;
|
||||||
|
}
|
||||||
|
elapsed = (time - this._startTime) / this._duration;
|
||||||
|
elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;
|
||||||
|
var value = this._easingFunction(elapsed);
|
||||||
|
// properties transformations
|
||||||
|
this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);
|
||||||
|
if (this._onUpdateCallback) {
|
||||||
|
this._onUpdateCallback(this._object, elapsed);
|
||||||
|
}
|
||||||
|
if (elapsed === 1) {
|
||||||
|
if (this._repeat > 0) {
|
||||||
|
if (isFinite(this._repeat)) {
|
||||||
|
this._repeat--;
|
||||||
|
}
|
||||||
|
// Reassign starting values, restart by making startTime = now
|
||||||
|
for (property in this._valuesStartRepeat) {
|
||||||
|
if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {
|
||||||
|
this._valuesStartRepeat[property] =
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);
|
||||||
|
}
|
||||||
|
if (this._yoyo) {
|
||||||
|
this._swapEndStartRepeatValues(property);
|
||||||
|
}
|
||||||
|
this._valuesStart[property] = this._valuesStartRepeat[property];
|
||||||
|
}
|
||||||
|
if (this._yoyo) {
|
||||||
|
this._reversed = !this._reversed;
|
||||||
|
}
|
||||||
|
if (this._repeatDelayTime !== undefined) {
|
||||||
|
this._startTime = time + this._repeatDelayTime;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._startTime = time + this._delayTime;
|
||||||
|
}
|
||||||
|
if (this._onRepeatCallback) {
|
||||||
|
this._onRepeatCallback(this._object);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (this._onCompleteCallback) {
|
||||||
|
this._onCompleteCallback(this._object);
|
||||||
|
}
|
||||||
|
for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {
|
||||||
|
// Make the chained tweens start exactly at the time they should,
|
||||||
|
// even if the `update()` method was called way past the duration of the tween
|
||||||
|
this._chainedTweens[i].start(this._startTime + this._duration);
|
||||||
|
}
|
||||||
|
this._isPlaying = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {
|
||||||
|
for (var property in _valuesEnd) {
|
||||||
|
// Don't update properties that do not exist in the source object
|
||||||
|
if (_valuesStart[property] === undefined) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var start = _valuesStart[property] || 0;
|
||||||
|
var end = _valuesEnd[property];
|
||||||
|
var startIsArray = Array.isArray(_object[property]);
|
||||||
|
var endIsArray = Array.isArray(end);
|
||||||
|
var isInterpolationList = !startIsArray && endIsArray;
|
||||||
|
if (isInterpolationList) {
|
||||||
|
_object[property] = this._interpolationFunction(end, value);
|
||||||
|
}
|
||||||
|
else if (typeof end === 'object' && end) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
this._updateProperties(_object[property], start, end, value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Parses relative end values with start as base (e.g.: +10, -3)
|
||||||
|
end = this._handleRelativeValue(start, end);
|
||||||
|
// Protect against non numeric properties.
|
||||||
|
if (typeof end === 'number') {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
// @ts-ignore FIXME?
|
||||||
|
_object[property] = start + (end - start) * value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Tween.prototype._handleRelativeValue = function (start, end) {
|
||||||
|
if (typeof end !== 'string') {
|
||||||
|
return end;
|
||||||
|
}
|
||||||
|
if (end.charAt(0) === '+' || end.charAt(0) === '-') {
|
||||||
|
return start + parseFloat(end);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return parseFloat(end);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Tween.prototype._swapEndStartRepeatValues = function (property) {
|
||||||
|
var tmp = this._valuesStartRepeat[property];
|
||||||
|
var endValue = this._valuesEnd[property];
|
||||||
|
if (typeof endValue === 'string') {
|
||||||
|
this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this._valuesStartRepeat[property] = this._valuesEnd[property];
|
||||||
|
}
|
||||||
|
this._valuesEnd[property] = tmp;
|
||||||
|
};
|
||||||
|
return Tween;
|
||||||
|
}());
|
||||||
|
|
||||||
|
var VERSION = '18.6.4';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tween.js - Licensed under the MIT license
|
||||||
|
* https://github.com/tweenjs/tween.js
|
||||||
|
* ----------------------------------------------
|
||||||
|
*
|
||||||
|
* See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.
|
||||||
|
* Thank you all, you're awesome!
|
||||||
|
*/
|
||||||
|
var nextId = Sequence.nextId;
|
||||||
|
/**
|
||||||
|
* Controlling groups of tweens
|
||||||
|
*
|
||||||
|
* Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.
|
||||||
|
* In these cases, you may want to create your own smaller groups of tweens.
|
||||||
|
*/
|
||||||
|
var TWEEN = mainGroup;
|
||||||
|
// This is the best way to export things in a way that's compatible with both ES
|
||||||
|
// Modules and CommonJS, without build hacks, and so as not to break the
|
||||||
|
// existing API.
|
||||||
|
// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881
|
||||||
|
var getAll = TWEEN.getAll.bind(TWEEN);
|
||||||
|
var removeAll = TWEEN.removeAll.bind(TWEEN);
|
||||||
|
var add = TWEEN.add.bind(TWEEN);
|
||||||
|
var remove = TWEEN.remove.bind(TWEEN);
|
||||||
|
var update = TWEEN.update.bind(TWEEN);
|
||||||
|
var exports$1 = {
|
||||||
|
Easing: Easing,
|
||||||
|
Group: Group,
|
||||||
|
Interpolation: Interpolation,
|
||||||
|
now: now$1,
|
||||||
|
Sequence: Sequence,
|
||||||
|
nextId: nextId,
|
||||||
|
Tween: Tween,
|
||||||
|
VERSION: VERSION,
|
||||||
|
getAll: getAll,
|
||||||
|
removeAll: removeAll,
|
||||||
|
add: add,
|
||||||
|
remove: remove,
|
||||||
|
update: update,
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.Easing = Easing;
|
||||||
|
exports.Group = Group;
|
||||||
|
exports.Interpolation = Interpolation;
|
||||||
|
exports.Sequence = Sequence;
|
||||||
|
exports.Tween = Tween;
|
||||||
|
exports.VERSION = VERSION;
|
||||||
|
exports.add = add;
|
||||||
|
exports.default = exports$1;
|
||||||
|
exports.getAll = getAll;
|
||||||
|
exports.nextId = nextId;
|
||||||
|
exports.now = now$1;
|
||||||
|
exports.remove = remove;
|
||||||
|
exports.removeAll = removeAll;
|
||||||
|
exports.update = update;
|
||||||
|
|
||||||
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
|
})));
|
||||||
BIN
public/warn.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
public/wave.jpg
Normal file
|
After Width: | Height: | Size: 811 KiB |
BIN
public/wave1.jpg
Normal file
|
After Width: | Height: | Size: 712 KiB |
BIN
public/wave2.jpg
Normal file
|
After Width: | Height: | Size: 835 KiB |
11
src/App.vue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<script setup>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<router-view></router-view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
BIN
src/Three/1.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
852
src/Three/Twin.js
Normal file
@ -0,0 +1,852 @@
|
|||||||
|
import * as THREE from 'three';
|
||||||
|
import Stats from 'three/examples/jsm/libs/stats.module.js';
|
||||||
|
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
|
||||||
|
import TWEEN from '@tweenjs/tween.js';
|
||||||
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
||||||
|
import {
|
||||||
|
CSS2DRenderer,
|
||||||
|
CSS2DObject,
|
||||||
|
} from 'three/examples/jsm/renderers/CSS2DRenderer.js';
|
||||||
|
import {
|
||||||
|
CSS3DRenderer,
|
||||||
|
CSS3DObject,
|
||||||
|
CSS3DSprite,
|
||||||
|
} from 'three/examples/jsm/renderers/CSS3DRenderer.js';
|
||||||
|
/* 边缘高亮发光相关 */
|
||||||
|
|
||||||
|
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
|
||||||
|
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
|
||||||
|
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';
|
||||||
|
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
|
||||||
|
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';
|
||||||
|
/* 边缘高亮发光相关结束 */
|
||||||
|
import { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js';
|
||||||
|
import { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js';
|
||||||
|
import { GammaCorrectionShader } from 'three/examples/jsm/shaders/GammaCorrectionShader.js';
|
||||||
|
import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';
|
||||||
|
|
||||||
|
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
||||||
|
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';
|
||||||
|
|
||||||
|
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
|
||||||
|
|
||||||
|
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
|
|
||||||
|
import { twinStore } from '../store/index.js';
|
||||||
|
import { init } from './firemat.js';
|
||||||
|
import { createExplosion } from './boom.js';
|
||||||
|
|
||||||
|
const store = twinStore();
|
||||||
|
|
||||||
|
const { BoatInfoPopupVisible, markerPannelData, VideoBoxvisible, VideoBoxPannelData } =
|
||||||
|
storeToRefs(store);
|
||||||
|
// // 引入threejs镜头光晕扩展库
|
||||||
|
// import {
|
||||||
|
// Lensflare,
|
||||||
|
// LensflareElement
|
||||||
|
// } from 'three/addons/objects/Lensflare.js';
|
||||||
|
|
||||||
|
export default class Twin {
|
||||||
|
constructor(params) {
|
||||||
|
const {
|
||||||
|
cameraPosition = new THREE.Vector3(100, 100, 100),
|
||||||
|
cameraTarget = new THREE.Vector3(0, 0, 0),
|
||||||
|
statsBool = true,
|
||||||
|
guiBool = false,
|
||||||
|
addVisiblePoint = false,
|
||||||
|
left = 0,
|
||||||
|
top = 0,
|
||||||
|
} = params;
|
||||||
|
|
||||||
|
this.left = left;
|
||||||
|
this.top = top;
|
||||||
|
this.addVisiblePoint = addVisiblePoint;
|
||||||
|
const width = window.innerWidth - this.left; //计算canvas画布当前宽度
|
||||||
|
const height = window.innerHeight - this.top; //计算canvas画布当前高度
|
||||||
|
|
||||||
|
// 场景
|
||||||
|
this.scene = new THREE.Scene();
|
||||||
|
// 相机
|
||||||
|
const camera = new THREE.PerspectiveCamera(60, width / height, 1, 500000);
|
||||||
|
camera.position.copy(cameraPosition);
|
||||||
|
this.cameraPosition0 = camera.position.clone();
|
||||||
|
// "x": ,
|
||||||
|
|
||||||
|
camera.lookAt(0, 0, 0);
|
||||||
|
// camera.lookAt(6505.858037968523, 72.99260187552187, 0);
|
||||||
|
|
||||||
|
this.camera = camera;
|
||||||
|
// 渲染器
|
||||||
|
this.renderer = new THREE.WebGLRenderer({
|
||||||
|
antialias: true,
|
||||||
|
logarithmicDepthBuffer: true,
|
||||||
|
});
|
||||||
|
this.renderer.setPixelRatio(window.devicePixelRatio);
|
||||||
|
this.renderer.setSize(width, height);
|
||||||
|
|
||||||
|
document.body.appendChild(this.renderer.domElement);
|
||||||
|
// canvas画布布局定位
|
||||||
|
this.renderer.domElement.style.position = 'absolute';
|
||||||
|
this.renderer.domElement.style.top = this.top + 'px';
|
||||||
|
this.renderer.domElement.style.left = this.left + 'px';
|
||||||
|
this.renderer.domElement.style.zIndex = '-1'; //注意与其他HTML元素叠加关系
|
||||||
|
|
||||||
|
// OrbitControls相机控件:旋转缩放操作
|
||||||
|
this.orbitControls = new OrbitControls(this.camera, this.renderer.domElement);
|
||||||
|
this.orbitControls.enablePan = true; //禁止右键拖拽
|
||||||
|
this.orbitControls.maxPolarAngle = (Math.PI / 2) * 0.8; //限制上下旋转范围 不看到底部
|
||||||
|
this.orbitControls.target.copy(cameraTarget);
|
||||||
|
this.orbitControls.update();
|
||||||
|
// 设置最大缩放距离
|
||||||
|
|
||||||
|
this.cameraTarget0 = cameraTarget;
|
||||||
|
|
||||||
|
this.orbitControls.addEventListener('change', () => {
|
||||||
|
if (this.orbitControls.target.y < 0) {
|
||||||
|
this.orbitControls.target.y = 0;
|
||||||
|
this.orbitControls.update();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 限制缩放等级
|
||||||
|
this.orbitControls.minDistance = 1; // 设置最小缩放距离
|
||||||
|
this.orbitControls.maxDistance = 2000; // 设置最大缩放距离
|
||||||
|
const dracoLoader = new DRACOLoader();
|
||||||
|
// DRACOLoader依赖的多个js文件在public下的libs文件中
|
||||||
|
dracoLoader.setDecoderPath('./libs/draco/gltf/');
|
||||||
|
this.gltfLoader = new GLTFLoader(); //创建一个GLTF加载器
|
||||||
|
this.FBXLoader = new FBXLoader(); //创建一个GLTF加载器
|
||||||
|
|
||||||
|
this.gltfLoader.setDRACOLoader(dracoLoader);
|
||||||
|
|
||||||
|
//.model属性用于存放gltf加载的模型
|
||||||
|
this.model = new THREE.Group();
|
||||||
|
|
||||||
|
this.scene.add(this.model);
|
||||||
|
|
||||||
|
// CSS2渲染器CSS2DRenderer
|
||||||
|
const css2DRenderer = new CSS2DRenderer();
|
||||||
|
css2DRenderer.setSize(width, height);
|
||||||
|
css2DRenderer.domElement.style.position = 'absolute';
|
||||||
|
// 相对标签原位置位置偏移大小
|
||||||
|
css2DRenderer.domElement.style.top = '0px';
|
||||||
|
css2DRenderer.domElement.style.left = '0px';
|
||||||
|
// //设置.pointerEvents=none,以免模型标签HTML元素遮挡鼠标选择场景模型
|
||||||
|
css2DRenderer.domElement.style.pointerEvents = 'none';
|
||||||
|
document.body.appendChild(css2DRenderer.domElement);
|
||||||
|
this.css2DRenderer = css2DRenderer;
|
||||||
|
|
||||||
|
// CSS3渲染器CSS3DRenderer
|
||||||
|
const css3DRenderer = new CSS3DRenderer();
|
||||||
|
css3DRenderer.setSize(width, height);
|
||||||
|
css3DRenderer.domElement.style.position = 'absolute';
|
||||||
|
// 相对标签原位置位置偏移大小
|
||||||
|
css3DRenderer.domElement.style.top = '0px';
|
||||||
|
css3DRenderer.domElement.style.left = '0px';
|
||||||
|
// //设置.pointerEvents=none,以免模型标签HTML元素遮挡鼠标选择场景模型
|
||||||
|
css3DRenderer.domElement.style.pointerEvents = 'none';
|
||||||
|
document.body.appendChild(css3DRenderer.domElement);
|
||||||
|
this.css3DRenderer = css3DRenderer;
|
||||||
|
|
||||||
|
this.initResize(); // 监听窗口时间,更新Cavnas画布相关尺寸
|
||||||
|
// this.initEnvMap(); //设置环境贴图
|
||||||
|
this.addEffectComposer(width, height);
|
||||||
|
if (statsBool) {
|
||||||
|
//性能监视器stats.js,显示帧率
|
||||||
|
this.stats = new Stats();
|
||||||
|
document.body.appendChild(this.stats.dom);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (guiBool) {
|
||||||
|
this.gui = new GUI();
|
||||||
|
this.gui.domElement.style.right = '0px';
|
||||||
|
this.gui.domElement.style.width = '300px';
|
||||||
|
}
|
||||||
|
|
||||||
|
this.directionalLight = new THREE.DirectionalLight(0xffffff);
|
||||||
|
}
|
||||||
|
addFire(coordinate) {
|
||||||
|
const fire = init(this.scene, coordinate);
|
||||||
|
|
||||||
|
return fire;
|
||||||
|
}
|
||||||
|
addboom(coordinate) {
|
||||||
|
const boom = createExplosion(this.scene, coordinate);
|
||||||
|
return boom;
|
||||||
|
}
|
||||||
|
addEffectComposer(width, height) {
|
||||||
|
// 后处理
|
||||||
|
this.composer = new EffectComposer(this.renderer);
|
||||||
|
const renderPass = new RenderPass(this.scene, this.camera);
|
||||||
|
this.composer.addPass(renderPass);
|
||||||
|
|
||||||
|
this.FXAAPass = new ShaderPass(FXAAShader); //抗锯齿通道
|
||||||
|
this.FXAAPass.uniforms['resolution'].value.set(1 / width, 1 / height);
|
||||||
|
const gammaCorrection = new ShaderPass(GammaCorrectionShader);
|
||||||
|
this.composer.addPass(gammaCorrection);
|
||||||
|
// 高亮发光描边通道
|
||||||
|
const outlinePass = new OutlinePass(
|
||||||
|
new THREE.Vector2(width, height),
|
||||||
|
this.scene,
|
||||||
|
this.camera
|
||||||
|
);
|
||||||
|
// outlinePass.selectedObjects = [];
|
||||||
|
outlinePass.visibleEdgeColor.set(0xf4e6b2); //模型描边颜色,默认白色
|
||||||
|
outlinePass.edgeThickness = 2.0; //轮廓边缘描边厚度
|
||||||
|
outlinePass.edgeStrength = 3; //边缘发光强度,数值大,更亮一些
|
||||||
|
outlinePass.pulsePeriod = 0; //模型闪烁频率控制,默认0不闪烁
|
||||||
|
|
||||||
|
outlinePass.hiddenEdgeColor.set(0xf4e6b2); // 不可见边缘的颜色
|
||||||
|
|
||||||
|
this.composer.addPass(outlinePass);
|
||||||
|
//加上 FXAA 后,整个画面会立刻柔和、清晰一些。
|
||||||
|
this.composer.addPass(this.FXAAPass);
|
||||||
|
|
||||||
|
this.outlinePass = outlinePass;
|
||||||
|
}
|
||||||
|
initResize() {
|
||||||
|
// 监听窗口时间,更新Cavnas画布相关尺寸
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
//重新计算canvas画布当前宽高度
|
||||||
|
const width = window.innerWidth - this.left;
|
||||||
|
const height = window.innerHeight - this.top;
|
||||||
|
this.camera.aspect = width / height; //相机
|
||||||
|
this.camera.updateProjectionMatrix();
|
||||||
|
this.renderer.setSize(width, height); //渲染器
|
||||||
|
// 后处理
|
||||||
|
this.composer.setSize(width, height);
|
||||||
|
this.outlinePass.resolution.set(width, height);
|
||||||
|
this.FXAAPass.uniforms['resolution'].value.set(1 / width, 1 / height);
|
||||||
|
// CSS渲染器
|
||||||
|
this.css2DRenderer.setSize(width, height);
|
||||||
|
this.css3DRenderer.setSize(width, height);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建射线投射器
|
||||||
|
const raycaster = new THREE.Raycaster();
|
||||||
|
const mouse = new THREE.Vector2();
|
||||||
|
const points = []; // 存储所有添加的小球
|
||||||
|
// 设置事件监听器
|
||||||
|
// window.addEventListener('click', (event) => {
|
||||||
|
// // 获取鼠标点击位置,转换为标准化设备坐标(-1到1)
|
||||||
|
// mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
|
||||||
|
// mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
||||||
|
// raycaster.setFromCamera(mouse, this.camera);
|
||||||
|
|
||||||
|
// // 通过射线投射获取交点(假设场景中有地球或类似的对象)
|
||||||
|
// var intersects = raycaster.intersectObjects(this.scene.children, true); // yourObject 替换为你要点击的物体
|
||||||
|
|
||||||
|
// if (intersects.length > 0) {
|
||||||
|
// const clickedObject = intersects[0].object;
|
||||||
|
// // console.log(intersects, '点击到的对象');
|
||||||
|
// if (clickedObject && clickedObject instanceof THREE.Sprite) {
|
||||||
|
// if (clickedObject.userData.type == 'camera') {
|
||||||
|
// VideoBoxvisible.value = true;
|
||||||
|
// VideoBoxPannelData.value = clickedObject.userData;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// console.log('点击到了一个 Sprite:', clickedObject);
|
||||||
|
// this.renderer.domElement.style.cursor = 'pointer';
|
||||||
|
// BoatInfoPopupVisible.value = true;
|
||||||
|
// markerPannelData.value = clickedObject.userData;
|
||||||
|
// } else {
|
||||||
|
// this.renderer.domElement.style.cursor = 'default';
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // if (this.addVisiblePoint) {
|
||||||
|
|
||||||
|
// var point = intersects[0].point; // 获取交点
|
||||||
|
|
||||||
|
// // 添加一个可视化的小球;
|
||||||
|
// const sphereGeometry = new THREE.SphereGeometry(5, 16, 16); // 半径 5
|
||||||
|
// const sphereMaterial = new THREE.MeshBasicMaterial({
|
||||||
|
// color: 0xff0000,
|
||||||
|
// }); // 红色
|
||||||
|
// const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
|
||||||
|
|
||||||
|
// sphere.position.copy(point); // 设置小球位置
|
||||||
|
// this.scene.add(sphere); // 添加到场景
|
||||||
|
// points.push(sphere); // 存储小球对象
|
||||||
|
// console.log(points.map((v) => v.position));
|
||||||
|
// }
|
||||||
|
// // }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// 监听 ** 右键点击 ** ,撤销上一个点
|
||||||
|
window.addEventListener('contextmenu', (event) => {
|
||||||
|
event.preventDefault(); // 阻止默认右键菜单
|
||||||
|
|
||||||
|
if (points.length > 0) {
|
||||||
|
const lastPoint = points.pop(); // 取出最后一个点
|
||||||
|
this.scene.remove(lastPoint); // 从场景中移除
|
||||||
|
console.log('撤销一个点');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.renderer.domElement.addEventListener('mousemove', (event) => {
|
||||||
|
// 获取鼠标点击位置,转换为标准化设备坐标(-1到1)
|
||||||
|
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
|
||||||
|
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
||||||
|
raycaster.setFromCamera(mouse, this.camera);
|
||||||
|
|
||||||
|
// 通过射线投射获取交点(假设场景中有地球或类似的对象)
|
||||||
|
var intersects = raycaster.intersectObjects(this.scene.children, true); // yourObject 替换为你要点击的物体
|
||||||
|
|
||||||
|
if (intersects.length > 0) {
|
||||||
|
const clickedObject = intersects[0].object;
|
||||||
|
// console.log(intersects, '点击到的对象');
|
||||||
|
if (clickedObject && clickedObject instanceof THREE.Sprite) {
|
||||||
|
// console.log('hover到了一个 Sprite:', clickedObject);
|
||||||
|
this.renderer.domElement.style.cursor = 'pointer';
|
||||||
|
} else {
|
||||||
|
this.renderer.domElement.style.cursor = 'default';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
addRectAreaLight() {
|
||||||
|
// 确保渲染器支持光照
|
||||||
|
this.renderer.physicallyCorrectLights = true; // 确保开启物理正确的光照
|
||||||
|
this.renderer.toneMapping = THREE.ACESFilmicToneMapping; // 启用 ACES 色调映射,适配 HDR
|
||||||
|
this.renderer.outputEncoding = THREE.sRGBEncoding; // 确保渲染输出正确编码
|
||||||
|
RectAreaLightUniformsLib.init();
|
||||||
|
// 创建矩形光源,模拟条形光源
|
||||||
|
const rectLight = new THREE.RectAreaLight(0xfffba7, 500, 40, 4); // 颜色、强度、大小
|
||||||
|
rectLight.position.set(-359.9403422361475, -1.529084801673889, 252.0914627146708); // 设置光源位置
|
||||||
|
// rectLight.lookAt(0, 0, 0);
|
||||||
|
rectLight.rotation.set(Math.PI / 2, 0, 130); // 设置光源方向
|
||||||
|
this.scene.add(rectLight);
|
||||||
|
const rectLightHelper = new RectAreaLightHelper(rectLight);
|
||||||
|
this.scene.add(rectLightHelper);
|
||||||
|
|
||||||
|
// 创建模型,模拟被照亮的部分
|
||||||
|
const geometry = new THREE.BoxGeometry(10, 10, 10);
|
||||||
|
const material = new THREE.MeshStandardMaterial({
|
||||||
|
color: 0x0077ff, // 基础颜色
|
||||||
|
emissive: 0x00ff00, // 自发光颜色(模拟光源照射效果)
|
||||||
|
emissiveIntensity: 1.0,
|
||||||
|
metalness: 0.5, // 添加金属感
|
||||||
|
roughness: 0.5, // 添加粗糙度
|
||||||
|
});
|
||||||
|
const cube = new THREE.Mesh(geometry, material);
|
||||||
|
cube.position.set(100, 10, 100);
|
||||||
|
|
||||||
|
this.scene.add(cube);
|
||||||
|
}
|
||||||
|
addGlowingLine() {
|
||||||
|
// 创建一个简单的几何体 - 一条线
|
||||||
|
const geometryLong = new THREE.BufferGeometry().setFromPoints([
|
||||||
|
new THREE.Vector3(-354.08223192840916, -2, 264.05812058416177), // 起点
|
||||||
|
new THREE.Vector3(-287.3028056623888, -2, 225.7963829281244), // 终点
|
||||||
|
]);
|
||||||
|
const geometryShort = new THREE.BufferGeometry().setFromPoints([
|
||||||
|
new THREE.Vector3(-354.08223192840916, -2, 264.05812058416177), // 起点
|
||||||
|
new THREE.Vector3(-360.5798019279332, -2, 250.94835192772078), // 终点
|
||||||
|
]);
|
||||||
|
const geometryShortR = new THREE.BufferGeometry().setFromPoints([
|
||||||
|
new THREE.Vector3(-287.3028056623888, -2, 225.7963829281244), // 起点
|
||||||
|
new THREE.Vector3(-294.9079008105597, -2, 212.79678961784637), // 终点
|
||||||
|
]);
|
||||||
|
// 创建材质,并设置发光颜色
|
||||||
|
// const material = new THREE.MeshBasicMaterial({
|
||||||
|
// color: 0xffffff, // 线条的颜色
|
||||||
|
// emissive: 0x00ff00, // 设置线条的发光颜色
|
||||||
|
// emissiveIntensity: 1.0 // 设置发光强度
|
||||||
|
// });
|
||||||
|
// 使用 ShaderMaterial 自定义发光效果
|
||||||
|
const material = new THREE.ShaderMaterial({
|
||||||
|
vertexShader: `
|
||||||
|
void main() {
|
||||||
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
fragmentShader: `
|
||||||
|
uniform vec3 glowColor;
|
||||||
|
void main() {
|
||||||
|
float intensity = 10.0;
|
||||||
|
gl_FragColor = vec4(glowColor * intensity, 1.0);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
uniforms: {
|
||||||
|
glowColor: {
|
||||||
|
value: new THREE.Color(0xe5daa2),
|
||||||
|
}, // 发光颜色
|
||||||
|
},
|
||||||
|
side: THREE.DoubleSide, // 双面渲染
|
||||||
|
transparent: true,
|
||||||
|
depthTest: false,
|
||||||
|
});
|
||||||
|
// 创建发光效果
|
||||||
|
const lineLong = new THREE.Line(geometryLong, material);
|
||||||
|
const lineShort = new THREE.Line(geometryShort, material);
|
||||||
|
const lineShortR = new THREE.Line(geometryShortR, material);
|
||||||
|
|
||||||
|
geometryLong.renderOrder = 100;
|
||||||
|
geometryShort.renderOrder = 100;
|
||||||
|
geometryShortR.renderOrder = 100;
|
||||||
|
|
||||||
|
// 使它看起来像一个宽度可调的线条
|
||||||
|
const tubeGeometry = new THREE.TubeGeometry(
|
||||||
|
new THREE.LineCurve3(new THREE.Vector3(0, 0, 0), new THREE.Vector3(100, 10, 100)),
|
||||||
|
100,
|
||||||
|
2,
|
||||||
|
8,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
const meshMaterial = new THREE.MeshBasicMaterial({
|
||||||
|
color: 0xffffff,
|
||||||
|
});
|
||||||
|
const tube = new THREE.Mesh(tubeGeometry, meshMaterial);
|
||||||
|
|
||||||
|
// 将线条添加到场景中
|
||||||
|
// this.scene.add(lineLong);
|
||||||
|
// this.scene.add(lineShort);
|
||||||
|
// this.scene.add(lineShortR);
|
||||||
|
|
||||||
|
// 创建 UnrealBloomPass
|
||||||
|
const bloomPass = new UnrealBloomPass(
|
||||||
|
new THREE.Vector2(window.innerWidth, window.innerHeight),
|
||||||
|
0.5, // 强度
|
||||||
|
0.1, // 扩散
|
||||||
|
0.85 // 高光阈值
|
||||||
|
);
|
||||||
|
this.composer.addPass(bloomPass);
|
||||||
|
// 使渲染器支持发光效果
|
||||||
|
this.renderer.toneMapping = THREE.ACESFilmicToneMapping; // 启用 HDR 渲染
|
||||||
|
this.renderer.outputEncoding = THREE.sRGBEncoding;
|
||||||
|
this.renderer.physicallyCorrectLights = true;
|
||||||
|
}
|
||||||
|
async initEnvMap() {
|
||||||
|
const hdrLoader = new RGBELoader(); //hdr格式图像加载器
|
||||||
|
const envMap = await hdrLoader.loadAsync('./envMap.hdr');
|
||||||
|
envMap.mapping = THREE.EquirectangularReflectionMapping;
|
||||||
|
// envMap.colorSpace = THREE.SRGBColorSpace;//设置为SRGB颜色空间
|
||||||
|
this.scene.environment = envMap;
|
||||||
|
|
||||||
|
if (this.gui) {
|
||||||
|
this.gui
|
||||||
|
.add(
|
||||||
|
{
|
||||||
|
v: 1,
|
||||||
|
},
|
||||||
|
'v',
|
||||||
|
0,
|
||||||
|
5
|
||||||
|
)
|
||||||
|
.onChange((v) => {
|
||||||
|
this.model.traverse((obj) => {
|
||||||
|
if (obj.isMesh) {
|
||||||
|
obj.material.envMapIntensity = v;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.name('环境贴图强度');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 背景球体
|
||||||
|
const sphereBack = new THREE.TextureLoader().load('./sphereBack.jpg');
|
||||||
|
this.scene.background = sphereBack;
|
||||||
|
// const geometry = new THREE.SphereGeometry(1200, 50, 50);
|
||||||
|
// const material = new THREE.MeshBasicMaterial({
|
||||||
|
// map: sphereBack,
|
||||||
|
// side: THREE.BackSide, //默认前面可见,设置为背面可见即可
|
||||||
|
// });
|
||||||
|
// const mesh = new THREE.Mesh(geometry, material);
|
||||||
|
// this.scene.add(mesh);
|
||||||
|
}
|
||||||
|
|
||||||
|
// event:鼠标事件
|
||||||
|
// chooseObjArr:需要射线拾取的模型对象构成的数组
|
||||||
|
raychoose(event, chooseObjArr, camera) {
|
||||||
|
const px = event.offsetX; //鼠标单击位置横坐标(以canvas左上角为基准)
|
||||||
|
const py = event.offsetY; //鼠标单击位置纵坐标
|
||||||
|
const width = window.innerWidth - this.left;
|
||||||
|
const height = window.innerHeight - this.top;
|
||||||
|
//屏幕坐标转WebGL标准设备坐标
|
||||||
|
const x = (px / width) * 2 - 1;
|
||||||
|
const y = -(py / height) * 2 + 1;
|
||||||
|
const raycaster = new THREE.Raycaster();
|
||||||
|
raycaster.setFromCamera(new THREE.Vector2(x, y), camera);
|
||||||
|
const intersects = raycaster.intersectObjects(chooseObjArr, true);
|
||||||
|
let choose = null;
|
||||||
|
// 考虑没有后代的特殊情况 注意代码bug
|
||||||
|
for (let i = 0; i < chooseObjArr.length; i++) {
|
||||||
|
const group = chooseObjArr[i];
|
||||||
|
//递归遍历chooseObj,并给chooseObj的所有子孙后代设置一个ancestors属性指向自己
|
||||||
|
group.traverse(function (obj) {
|
||||||
|
obj.ancestors = group;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (intersects.length > 0) {
|
||||||
|
choose = intersects[0].object.ancestors;
|
||||||
|
}
|
||||||
|
return choose;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个CSS2 HTML标签对象 modelName模型对象名字,dom标签html对象
|
||||||
|
css2Tag(position, areaName, imageUrl = '', labelType = '', align, name, width, height) {
|
||||||
|
console.log(height);
|
||||||
|
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.innerHTML = areaName;
|
||||||
|
div.style.color = 'white';
|
||||||
|
// if (areaName) {
|
||||||
|
// div.style.backgroundColor = 'rgba(0, 0, 0, 0.6)';
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
// div.style.backgroundColor = 'transparent';
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
div.style.width = 0.6 + 'rem';
|
||||||
|
div.style.height = 0.5 + 'rem';
|
||||||
|
div.style.padding = '0.02rem 8px';
|
||||||
|
div.style.borderRadius = '4px';
|
||||||
|
div.style.textAlign = 'center';
|
||||||
|
|
||||||
|
// 设置背景图片
|
||||||
|
div.style.backgroundImage = `url(${imageUrl})`;
|
||||||
|
div.style.backgroundSize = '100% 100%'; // 背景图片覆盖整个标签
|
||||||
|
|
||||||
|
const label = new CSS2DObject(div);
|
||||||
|
label.name = name;
|
||||||
|
label.position.set(position.x, position.y, position.z); // 稍微上移,避免和面重叠
|
||||||
|
label.userData.type = labelType;
|
||||||
|
this.scene.add(label);
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
addSpriteTag(name, position, imageUrl, width, height, type) {
|
||||||
|
const texture = new THREE.TextureLoader().load(imageUrl);
|
||||||
|
texture.encoding = THREE.sRGBEncoding; // ⚠️ 必须在创建材质前设置
|
||||||
|
const material = new THREE.SpriteMaterial({
|
||||||
|
map: texture,
|
||||||
|
opacity: 1,
|
||||||
|
toneMapped: false, // 🚀 Sprite 不受 toneMapping 影响
|
||||||
|
});
|
||||||
|
const sprite = new THREE.Sprite(material);
|
||||||
|
sprite.scale.set(width, height, 1); // 控制图标大小
|
||||||
|
sprite.position.set(position.x, position.y, position.z);
|
||||||
|
sprite.userData = {
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
};
|
||||||
|
this.scene.add(sprite);
|
||||||
|
return sprite;
|
||||||
|
}
|
||||||
|
addCameraTag(name, position, imageUrl, width, height) {
|
||||||
|
const texture = new THREE.TextureLoader().load(imageUrl, (tex) => {
|
||||||
|
tex.encoding = THREE.sRGBEncoding;
|
||||||
|
});
|
||||||
|
const material = new THREE.SpriteMaterial({
|
||||||
|
map: texture,
|
||||||
|
opacity: 1,
|
||||||
|
});
|
||||||
|
const sprite = new THREE.Sprite(material);
|
||||||
|
sprite.scale.set(width, height, 1); // 控制图标大小
|
||||||
|
sprite.position.set(position.x, position.y, position.z);
|
||||||
|
|
||||||
|
sprite.userData = {
|
||||||
|
name,
|
||||||
|
type: 'camera',
|
||||||
|
};
|
||||||
|
this.scene.add(sprite);
|
||||||
|
}
|
||||||
|
removeSpriteTag(type) {
|
||||||
|
const spritesToRemove = [];
|
||||||
|
|
||||||
|
this.scene.traverse((obj) => {
|
||||||
|
if (obj instanceof THREE.Sprite && obj.userData && obj.userData.type === type) {
|
||||||
|
spritesToRemove.push(obj);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
spritesToRemove.forEach((sprite) => {
|
||||||
|
this.scene.remove(sprite);
|
||||||
|
if (sprite.material) sprite.material.dispose();
|
||||||
|
if (sprite.geometry) sprite.geometry.dispose?.(); // 有些 Sprite 可能没有 geometry
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个HTML标签对象 dom元素对象 s缩放倍数 ty:y方向标签偏移尺寸
|
||||||
|
css3SpirteTag(objectName, dom, s, ty) {
|
||||||
|
//dom元素包装为CSS3模型对象CSS3DObject
|
||||||
|
const label = new CSS3DSprite(dom);
|
||||||
|
dom.style.pointerEvents = 'none'; //避免HTML标签遮挡三维场景的鼠标事件
|
||||||
|
// 设置HTML元素标签在three.js世界坐标中位置
|
||||||
|
// label.position.set(x, y, z);
|
||||||
|
// const s = 0.01;
|
||||||
|
label.scale.set(s, s, s); //根据场景范围和HTML像素,缩放标签
|
||||||
|
label.position.y = ty;
|
||||||
|
this.model.getObjectByName(objectName).add(label);
|
||||||
|
// return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
css3ObjTag(domID) {
|
||||||
|
const dom = document.getElementById(domID);
|
||||||
|
//dom元素包装为CSS3模型对象CSS3DObject
|
||||||
|
const label = new CSS3DObject(dom);
|
||||||
|
dom.style.pointerEvents = 'none'; //避免HTML标签遮挡三维场景的鼠标事件
|
||||||
|
// 设置HTML元素标签在three.js世界坐标中位置
|
||||||
|
const s = 0.01;
|
||||||
|
label.scale.set(s, s, s); //根据场景范围和HTML像素,缩放标签
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
//部署时候使用
|
||||||
|
this.renderer.setAnimationLoop(() => {
|
||||||
|
// this.renderer.render(this.scene, this.camera);
|
||||||
|
this.composer.render();
|
||||||
|
TWEEN.update();
|
||||||
|
this.css2DRenderer.render(this.scene, this.camera);
|
||||||
|
this.css3DRenderer.render(this.scene, this.camera);
|
||||||
|
|
||||||
|
if (this.stats) this.stats.update();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// addStats() {
|
||||||
|
// const stats = new Stats();
|
||||||
|
// document.body.appendChild(stats.dom);
|
||||||
|
// }
|
||||||
|
addAxesHelper(size) {
|
||||||
|
if (size === undefined) size = 1000;
|
||||||
|
const axesHelper = new THREE.AxesHelper(size);
|
||||||
|
this.scene.add(axesHelper);
|
||||||
|
if (this.gui) {
|
||||||
|
this.gui
|
||||||
|
.add(
|
||||||
|
{
|
||||||
|
showAxes: true,
|
||||||
|
},
|
||||||
|
'showAxes'
|
||||||
|
)
|
||||||
|
.name('显示坐标轴')
|
||||||
|
.onChange((value) => {
|
||||||
|
axesHelper.visible = value; // 根据勾选状态显示/隐藏
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return axesHelper;
|
||||||
|
}
|
||||||
|
addAmbientLight(intensity, max) {
|
||||||
|
if (max === undefined) max = 2.0;
|
||||||
|
if (intensity === undefined) intensity = 1.0;
|
||||||
|
const ambient = new THREE.AmbientLight(0xffffff, intensity);
|
||||||
|
this.scene.add(ambient);
|
||||||
|
if (this.gui)
|
||||||
|
this.gui.add(ambient, 'intensity').min(0).max(max).step(0.01).name('环境光强度');
|
||||||
|
}
|
||||||
|
|
||||||
|
addDirectionalLight(intensity, max) {
|
||||||
|
if (max === undefined) max = 10.0;
|
||||||
|
if (intensity === undefined) intensity = 7.0;
|
||||||
|
const directionalLight = this.directionalLight;
|
||||||
|
directionalLight.intensity = intensity;
|
||||||
|
directionalLight.position.set(150, 150, 80);
|
||||||
|
this.scene.add(directionalLight);
|
||||||
|
if (this.gui)
|
||||||
|
this.gui
|
||||||
|
.add(directionalLight, 'intensity')
|
||||||
|
.min(0)
|
||||||
|
.max(max)
|
||||||
|
.step(0.01)
|
||||||
|
.name('日光强度');
|
||||||
|
// 设置阴影
|
||||||
|
// 设置用于计算阴影的光源对象
|
||||||
|
// directionalLight.castShadow = true;
|
||||||
|
// // 设置计算阴影的区域,最好刚好紧密包围在对象周围
|
||||||
|
// // 计算阴影的区域过大:模糊 过小:看不到或显示不完整
|
||||||
|
// directionalLight.shadow.camera.near = 0.5;
|
||||||
|
// directionalLight.shadow.camera.far = 3000;
|
||||||
|
// directionalLight.shadow.camera.left = -500;
|
||||||
|
// directionalLight.shadow.camera.right = 500;
|
||||||
|
// directionalLight.shadow.camera.top = 500;
|
||||||
|
// directionalLight.shadow.camera.bottom = -500;
|
||||||
|
// // 为了清晰度,提升阴影贴图的尺寸
|
||||||
|
// directionalLight.shadow.mapSize.width = 1024 * 4;
|
||||||
|
// directionalLight.shadow.mapSize.height = 1024 * 4;
|
||||||
|
// directionalLight.shadow.radius = 2;
|
||||||
|
|
||||||
|
// this.directionalLight = directionalLight;
|
||||||
|
|
||||||
|
// this.renderer.shadowMap.enabled = true; // 设置渲染器,允许场景中使用阴影贴图
|
||||||
|
// this.renderer.shadowMap.type = THREE.VSMShadowMap; // 以免模型表面产生条纹影响渲染效果
|
||||||
|
|
||||||
|
// this.model.traverse(function (obj) {
|
||||||
|
// if (obj.type === 'Mesh') {
|
||||||
|
// // 设置产生投影的网格模型
|
||||||
|
// obj.castShadow = true;
|
||||||
|
// // 设置接收阴影的投影面
|
||||||
|
// obj.receiveShadow = true;
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
// // 太阳模拟
|
||||||
|
// const texLoader = new THREE.TextureLoader();
|
||||||
|
// // 用于镜头光晕的纹理对象
|
||||||
|
// const texture = texLoader.load("./lensflare.jpg");
|
||||||
|
|
||||||
|
// // 创建两个镜头光晕Lensflare对象
|
||||||
|
// const lensflareElement = new LensflareElement(texture, 600, 0, new THREE.Color(0xffffff)); //600:设置光晕像素大小
|
||||||
|
// const lensflare1 = new Lensflare();
|
||||||
|
|
||||||
|
// lensflare1.addElement(lensflareElement); // Lensflare可以根据需要包含多个LensflareElement
|
||||||
|
// // const lensflare2 = new Lensflare();
|
||||||
|
// // lensflare2.addElement(lensflareElement);
|
||||||
|
// directionalLight.add(lensflare1);
|
||||||
|
// // directionalLight.add(lensflare2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 相机动画形式切换到名为name的模型附近 s控制渲染范围
|
||||||
|
setCameraTarget(model, s) {
|
||||||
|
if (s == undefined) s = 1.0;
|
||||||
|
// const model = this.model.getObjectByName(name);
|
||||||
|
const box3 = new THREE.Box3();
|
||||||
|
box3.expandByObject(model);
|
||||||
|
const center = new THREE.Vector3();
|
||||||
|
box3.getCenter(center);
|
||||||
|
const size = new THREE.Vector3();
|
||||||
|
box3.getSize(size);
|
||||||
|
// // center + size 设置相机位置
|
||||||
|
// this.camera.position.addVectors(center, size.multiplyScalar(1.2))
|
||||||
|
// // 模型中心center作为目标观察点
|
||||||
|
// // this.camera.lookAt(x, y, z);
|
||||||
|
// this.orbitControls.target.copy(center); //与lookAt参数保持一致
|
||||||
|
// this.orbitControls.update();
|
||||||
|
|
||||||
|
const dir = new THREE.Vector3();
|
||||||
|
this.camera.getWorldDirection(dir);
|
||||||
|
|
||||||
|
// 当前相机位置 靠拢目标观察点,或者 视线不变 相机拖位置 多少会好点,目前好像也没事
|
||||||
|
// bug误操作
|
||||||
|
|
||||||
|
const cameraPos = new THREE.Vector3();
|
||||||
|
// center + size 设置相机位置
|
||||||
|
// cameraPos.addVectors(center, size.multiplyScalar(1.2))
|
||||||
|
let max; // 计算包围盒的最大边长
|
||||||
|
if (size.x > size.y) {
|
||||||
|
max = size.x;
|
||||||
|
} else {
|
||||||
|
max = size.y;
|
||||||
|
}
|
||||||
|
if (max < size.z) max = size.z;
|
||||||
|
// size.set(max * 0.8, max * 0.8, max * 0.8)
|
||||||
|
// size.set(max * 1.5, max * 1.5, max * 1.5)
|
||||||
|
size.set(max * s, max * s, max * s);
|
||||||
|
cameraPos.addVectors(center, size);
|
||||||
|
|
||||||
|
const obj = {
|
||||||
|
// 当前预览状态对应位置
|
||||||
|
x: this.camera.position.x,
|
||||||
|
y: this.camera.position.y,
|
||||||
|
z: this.camera.position.z,
|
||||||
|
// 相机当前预览状态对应目标观察点
|
||||||
|
tx: this.orbitControls.target.x,
|
||||||
|
ty: this.orbitControls.target.y,
|
||||||
|
tz: this.orbitControls.target.z,
|
||||||
|
};
|
||||||
|
const tween = new TWEEN.Tween(obj);
|
||||||
|
tween.to(
|
||||||
|
{
|
||||||
|
// center + size 设置相机位置
|
||||||
|
x: cameraPos.x,
|
||||||
|
y: cameraPos.y,
|
||||||
|
z: cameraPos.z,
|
||||||
|
// 模型中心center作为目标观察点
|
||||||
|
tx: center.x,
|
||||||
|
ty: center.y,
|
||||||
|
tz: center.z,
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
tween.onUpdate((v) => {
|
||||||
|
this.camera.position.set(v.x, v.y, v.z);
|
||||||
|
// camera.lookAt(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.target.set(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.update();
|
||||||
|
});
|
||||||
|
tween.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过相机动画方式,回到整个场景预览状态
|
||||||
|
changeCamera0() {
|
||||||
|
const obj = {
|
||||||
|
// 当前预览状态对应位置
|
||||||
|
x: this.camera.position.x,
|
||||||
|
y: this.camera.position.y,
|
||||||
|
z: this.camera.position.z,
|
||||||
|
// 相机当前预览状态对应目标观察点
|
||||||
|
tx: this.orbitControls.target.x,
|
||||||
|
ty: this.orbitControls.target.y,
|
||||||
|
tz: this.orbitControls.target.z,
|
||||||
|
};
|
||||||
|
const tween = new TWEEN.Tween(obj);
|
||||||
|
tween.to(
|
||||||
|
{
|
||||||
|
// 相机整体观察位置
|
||||||
|
x: this.cameraPosition0.x,
|
||||||
|
y: this.cameraPosition0.y,
|
||||||
|
z: this.cameraPosition0.z,
|
||||||
|
// 相机整体预览对应目标观察点
|
||||||
|
tx: this.cameraTarget0.x,
|
||||||
|
ty: this.cameraTarget0.y,
|
||||||
|
tz: this.cameraTarget0.z,
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
tween.onUpdate((v) => {
|
||||||
|
this.camera.position.set(v.x, v.y, v.z);
|
||||||
|
// camera.lookAt(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.target.set(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.update();
|
||||||
|
});
|
||||||
|
tween.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 某个页面切换到那个状态
|
||||||
|
changeCamera(pos, target) {
|
||||||
|
if (!target) target = new THREE.Vector3(0, 0, 0);
|
||||||
|
const obj = {
|
||||||
|
// 当前预览状态对应位置
|
||||||
|
x: this.camera.position.x,
|
||||||
|
y: this.camera.position.y,
|
||||||
|
z: this.camera.position.z,
|
||||||
|
// 相机当前预览状态对应目标观察点
|
||||||
|
tx: this.orbitControls.target.x,
|
||||||
|
ty: this.orbitControls.target.y,
|
||||||
|
tz: this.orbitControls.target.z,
|
||||||
|
};
|
||||||
|
const tween = new TWEEN.Tween(obj);
|
||||||
|
tween.to(
|
||||||
|
{
|
||||||
|
// 相机整体观察位置
|
||||||
|
x: pos.x,
|
||||||
|
y: pos.y,
|
||||||
|
z: pos.z,
|
||||||
|
// 相机整体预览对应目标观察点
|
||||||
|
tx: target.x,
|
||||||
|
ty: target.y,
|
||||||
|
tz: target.z,
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
tween.onUpdate((v) => {
|
||||||
|
this.camera.position.set(v.x, v.y, v.z);
|
||||||
|
// camera.lookAt(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.target.set(v.tx, v.ty, v.tz);
|
||||||
|
this.orbitControls.update();
|
||||||
|
});
|
||||||
|
tween.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
logCameraPosition() {
|
||||||
|
// 鼠标旋转缩放场景,浏览器控制台打印相机坐标
|
||||||
|
this.orbitControls.addEventListener('change', () => {
|
||||||
|
const pos = this.camera.position;
|
||||||
|
console.log('相机xyz坐标', [pos.x, pos.y, pos.z]);
|
||||||
|
const target = this.orbitControls.target;
|
||||||
|
console.log('目标观察点xyz坐标', [target.x, target.y, target.z]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
120
src/Three/boom.js
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
import * as THREE from 'three';
|
||||||
|
|
||||||
|
class ExplosionMaterial extends THREE.ShaderMaterial {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
defines: { STEPS: '48' }, // Raymarch 步数
|
||||||
|
uniforms: {
|
||||||
|
time: { value: 0.0 },
|
||||||
|
invModelMatrix: { value: new THREE.Matrix4() },
|
||||||
|
scale: { value: new THREE.Vector3(1, 1, 1) },
|
||||||
|
},
|
||||||
|
vertexShader: `
|
||||||
|
varying vec3 vWorldPos;
|
||||||
|
void main() {
|
||||||
|
vWorldPos = (modelMatrix * vec4(position, 1.0)).xyz;
|
||||||
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
fragmentShader: `
|
||||||
|
precision highp float;
|
||||||
|
varying vec3 vWorldPos;
|
||||||
|
uniform float time;
|
||||||
|
uniform mat4 invModelMatrix;
|
||||||
|
uniform vec3 scale;
|
||||||
|
|
||||||
|
// 经典 3D hash & noise
|
||||||
|
float hash(vec3 p) {
|
||||||
|
return fract(sin(dot(p, vec3(127.1,311.7,74.7))) * 43758.5453);
|
||||||
|
}
|
||||||
|
|
||||||
|
float noise(vec3 p) {
|
||||||
|
vec3 i = floor(p);
|
||||||
|
vec3 f = fract(p);
|
||||||
|
float n = dot(i, vec3(1.0,57.0,113.0));
|
||||||
|
float res = mix(
|
||||||
|
mix(mix(hash(i + vec3(0,0,0)), hash(i + vec3(1,0,0)), f.x),
|
||||||
|
mix(hash(i + vec3(0,1,0)), hash(i + vec3(1,1,0)), f.x), f.y),
|
||||||
|
mix(mix(hash(i + vec3(0,0,1)), hash(i + vec3(1,0,1)), f.x),
|
||||||
|
mix(hash(i + vec3(0,1,1)), hash(i + vec3(1,1,1)), f.x), f.y), f.z);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
float fbm(vec3 p){
|
||||||
|
float v = 0.0;
|
||||||
|
float a = 0.5;
|
||||||
|
for (int i=0; i<5; i++) {
|
||||||
|
v += a * noise(p);
|
||||||
|
p *= 2.0;
|
||||||
|
a *= 0.5;
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 localize(vec3 p) {
|
||||||
|
return (invModelMatrix * vec4(p,1.0)).xyz;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec3 rayPos = vWorldPos;
|
||||||
|
vec3 rayDir = normalize(rayPos - cameraPosition);
|
||||||
|
float stepLen = 0.1 * length(scale);
|
||||||
|
|
||||||
|
vec4 sum = vec4(0.0);
|
||||||
|
|
||||||
|
for(int i=0; i<STEPS; i++){
|
||||||
|
rayPos += rayDir * stepLen;
|
||||||
|
vec3 lp = localize(rayPos);
|
||||||
|
|
||||||
|
float d = fbm(lp * 2.5 + vec3(time * 3.0)); // 时间明显影响
|
||||||
|
float mask = smoothstep(0.5, 0.0, length(lp));
|
||||||
|
|
||||||
|
// vec3 col = mix(vec3(1.0,0.5,0.1), vec3(0.0), pow(d,2.0));
|
||||||
|
vec3 col = mix(vec3(1.0,0.5,0.1), vec3(0.0), pow(d,2.0)) * 2.0; // 增加亮度
|
||||||
|
|
||||||
|
// float alpha = mask * d * 0.25;
|
||||||
|
float alpha = mask * d * 0.4; // 0.25 -> 0.4
|
||||||
|
|
||||||
|
sum.rgb += (1.0 - sum.a) * col * alpha;
|
||||||
|
sum.a += (1.0 - sum.a) * alpha;
|
||||||
|
|
||||||
|
if(sum.a > 0.95) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// gl_FragColor = sum;
|
||||||
|
gl_FragColor = vec4(pow(sum.rgb, vec3(1.0/2.2)), sum.a);
|
||||||
|
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
transparent: true,
|
||||||
|
depthWrite: false,
|
||||||
|
depthTest: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Explosion extends THREE.Mesh {
|
||||||
|
constructor(scale = 10) {
|
||||||
|
const geometry = new THREE.BoxGeometry();
|
||||||
|
const material = new ExplosionMaterial();
|
||||||
|
super(geometry, material);
|
||||||
|
|
||||||
|
this.scale.set(scale, scale, scale);
|
||||||
|
this.material.uniforms.scale.value = this.scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(time) {
|
||||||
|
this.updateMatrixWorld();
|
||||||
|
this.material.uniforms.invModelMatrix.value.copy(this.matrixWorld).invert();
|
||||||
|
this.material.uniforms.time.value = time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工厂函数
|
||||||
|
export function createExplosion(scene, coordinate) {
|
||||||
|
const boom = new Explosion(15);
|
||||||
|
|
||||||
|
boom.position.set(57.05896412549997, 113.83086378957434, -5.000000000000025);
|
||||||
|
scene.add(boom);
|
||||||
|
return boom;
|
||||||
|
}
|
||||||
226
src/Three/firemat.js
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
import * as THREE from 'three';
|
||||||
|
|
||||||
|
// 保持FireMaterial类不变
|
||||||
|
class FireMaterial extends THREE.ShaderMaterial {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
defines: { ITERATIONS: '10', OCTIVES: '3' },
|
||||||
|
uniforms: {
|
||||||
|
fireTex: { type: 't', value: null },
|
||||||
|
color: { type: 'c', value: null },
|
||||||
|
time: { type: 'f', value: 0.0 },
|
||||||
|
seed: { type: 'f', value: 0.0 },
|
||||||
|
invModelMatrix: { type: 'm4', value: null },
|
||||||
|
scale: { type: 'v3', value: null },
|
||||||
|
noiseScale: { type: 'v4', value: new THREE.Vector4(1, 2, 1, 0.3) },
|
||||||
|
magnitude: { type: 'f', value: 2.5 },
|
||||||
|
lacunarity: { type: 'f', value: 3.0 },
|
||||||
|
gain: { type: 'f', value: 0.6 },
|
||||||
|
},
|
||||||
|
vertexShader: `
|
||||||
|
varying vec3 vWorldPos;
|
||||||
|
void main() {
|
||||||
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
||||||
|
vWorldPos = (modelMatrix * vec4(position, 1.0)).xyz;
|
||||||
|
}`,
|
||||||
|
fragmentShader: `
|
||||||
|
// 注意:这里我们直接内联noise函数,替代原先的glsl-noise导入
|
||||||
|
// Simplex 3D noise function
|
||||||
|
vec3 mod289(vec3 x) {
|
||||||
|
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 mod289(vec4 x) {
|
||||||
|
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 permute(vec4 x) {
|
||||||
|
return mod289(((x * 34.0) + 1.0) * x);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 taylorInvSqrt(vec4 r) {
|
||||||
|
return 1.79284291400159 - 0.85373472095314 * r;
|
||||||
|
}
|
||||||
|
|
||||||
|
float snoise(vec3 v) {
|
||||||
|
const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);
|
||||||
|
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
||||||
|
|
||||||
|
// First corner
|
||||||
|
vec3 i = floor(v + dot(v, C.yyy));
|
||||||
|
vec3 x0 = v - i + dot(i, C.xxx);
|
||||||
|
|
||||||
|
// Other corners
|
||||||
|
vec3 g = step(x0.yzx, x0.xyz);
|
||||||
|
vec3 l = 1.0 - g;
|
||||||
|
vec3 i1 = min(g.xyz, l.zxy);
|
||||||
|
vec3 i2 = max(g.xyz, l.zxy);
|
||||||
|
|
||||||
|
vec3 x1 = x0 - i1 + C.xxx;
|
||||||
|
vec3 x2 = x0 - i2 + C.yyy;
|
||||||
|
vec3 x3 = x0 - D.yyy;
|
||||||
|
|
||||||
|
// Permutations
|
||||||
|
i = mod289(i);
|
||||||
|
vec4 p = permute(permute(permute(
|
||||||
|
i.z + vec4(0.0, i1.z, i2.z, 1.0))
|
||||||
|
+ i.y + vec4(0.0, i1.y, i2.y, 1.0))
|
||||||
|
+ i.x + vec4(0.0, i1.x, i2.x, 1.0));
|
||||||
|
|
||||||
|
// Gradients: 7x7 points over a square, mapped onto an octahedron.
|
||||||
|
float n_ = 0.142857142857;
|
||||||
|
vec3 ns = n_ * D.wyz - D.xzx;
|
||||||
|
|
||||||
|
vec4 j = p - 49.0 * floor(p * ns.z * ns.z);
|
||||||
|
|
||||||
|
vec4 x_ = floor(j * ns.z);
|
||||||
|
vec4 y_ = floor(j - 7.0 * x_);
|
||||||
|
|
||||||
|
vec4 x = x_ * ns.x + ns.yyyy;
|
||||||
|
vec4 y = y_ * ns.x + ns.yyyy;
|
||||||
|
vec4 h = 1.0 - abs(x) - abs(y);
|
||||||
|
|
||||||
|
vec4 b0 = vec4(x.xy, y.xy);
|
||||||
|
vec4 b1 = vec4(x.zw, y.zw);
|
||||||
|
|
||||||
|
vec4 s0 = floor(b0) * 2.0 + 1.0;
|
||||||
|
vec4 s1 = floor(b1) * 2.0 + 1.0;
|
||||||
|
vec4 sh = -step(h, vec4(0.0));
|
||||||
|
|
||||||
|
vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
|
||||||
|
vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
|
||||||
|
|
||||||
|
vec3 p0 = vec3(a0.xy, h.x);
|
||||||
|
vec3 p1 = vec3(a0.zw, h.y);
|
||||||
|
vec3 p2 = vec3(a1.xy, h.z);
|
||||||
|
vec3 p3 = vec3(a1.zw, h.w);
|
||||||
|
|
||||||
|
// Normalise gradients
|
||||||
|
vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
|
||||||
|
p0 *= norm.x;
|
||||||
|
p1 *= norm.y;
|
||||||
|
p2 *= norm.z;
|
||||||
|
p3 *= norm.w;
|
||||||
|
|
||||||
|
// Mix final noise value
|
||||||
|
vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);
|
||||||
|
m = m * m;
|
||||||
|
return 42.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
|
||||||
|
}
|
||||||
|
|
||||||
|
uniform vec3 color;
|
||||||
|
uniform float time;
|
||||||
|
uniform float seed;
|
||||||
|
uniform mat4 invModelMatrix;
|
||||||
|
uniform vec3 scale;
|
||||||
|
uniform vec4 noiseScale;
|
||||||
|
uniform float magnitude;
|
||||||
|
uniform float lacunarity;
|
||||||
|
uniform float gain;
|
||||||
|
uniform sampler2D fireTex;
|
||||||
|
varying vec3 vWorldPos;
|
||||||
|
|
||||||
|
float turbulence(vec3 p) {
|
||||||
|
float sum = 0.0;
|
||||||
|
float freq = 1.0;
|
||||||
|
float amp = 1.0;
|
||||||
|
for(int i = 0; i < OCTIVES; i++) {
|
||||||
|
sum += abs(snoise(p * freq)) * amp;
|
||||||
|
freq *= lacunarity;
|
||||||
|
amp *= gain;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 samplerFire (vec3 p, vec4 scale) {
|
||||||
|
vec2 st = vec2(sqrt(dot(p.xz, p.xz)), p.y);
|
||||||
|
if(st.x <= 0.0 || st.x >= 1.0 || st.y <= 0.0 || st.y >= 1.0) return vec4(0.0);
|
||||||
|
p.y -= (seed + time) * scale.w;
|
||||||
|
p *= scale.xyz;
|
||||||
|
st.y += sqrt(st.y) * magnitude * turbulence(p);
|
||||||
|
if(st.y <= 0.0 || st.y >= 1.0) return vec4(0.0);
|
||||||
|
return texture2D(fireTex, st);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 localize(vec3 p) {
|
||||||
|
return (invModelMatrix * vec4(p, 1.0)).xyz;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec3 rayPos = vWorldPos;
|
||||||
|
vec3 rayDir = normalize(rayPos - cameraPosition);
|
||||||
|
float rayLen = 0.0288 * length(scale.xyz);
|
||||||
|
vec4 col = vec4(0.0);
|
||||||
|
for(int i = 0; i < ITERATIONS; i++) {
|
||||||
|
rayPos += rayDir * rayLen;
|
||||||
|
vec3 lp = localize(rayPos);
|
||||||
|
lp.y += 0.5;
|
||||||
|
lp.xz *= 2.0;
|
||||||
|
col += samplerFire(lp, noiseScale);
|
||||||
|
}
|
||||||
|
// col.a = col.r;
|
||||||
|
// 根据亮度决定透明度(黑色 -> 透明)
|
||||||
|
float brightness = dot(col.rgb, vec3(0.299, 0.587, 0.114));
|
||||||
|
col.a = smoothstep(0.05, 0.2, brightness); // 阈值可调
|
||||||
|
// 2. 整体调暗(gamma + 系数)
|
||||||
|
col.rgb = pow(col.rgb, vec3(1.5)); // γ校正 >1 会让颜色更暗
|
||||||
|
col.rgb *= 0.5; // 系数 0.5 再压暗一半
|
||||||
|
gl_FragColor = col;
|
||||||
|
}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建Fire类来替代React组件
|
||||||
|
class Fire extends THREE.Mesh {
|
||||||
|
constructor(scale = 7) {
|
||||||
|
const geometry = new THREE.BoxGeometry();
|
||||||
|
const material = new FireMaterial();
|
||||||
|
|
||||||
|
super(geometry, material);
|
||||||
|
|
||||||
|
this.scale.set(scale, scale, scale);
|
||||||
|
this.material.transparent = true;
|
||||||
|
this.material.depthWrite = false;
|
||||||
|
this.material.depthTest = false;
|
||||||
|
|
||||||
|
// 初始化uniform值
|
||||||
|
this.material.uniforms.invModelMatrix.value = new THREE.Matrix4();
|
||||||
|
this.material.uniforms.scale.value = this.scale;
|
||||||
|
this.material.uniforms.seed.value = Math.random() * 19.19;
|
||||||
|
this.material.uniforms.color.value = new THREE.Color(0xeeeeee);
|
||||||
|
}
|
||||||
|
|
||||||
|
update(time) {
|
||||||
|
// 更新材质
|
||||||
|
this.updateMatrixWorld();
|
||||||
|
this.material.uniforms.invModelMatrix.value.copy(this.matrixWorld).invert();
|
||||||
|
this.material.uniforms.time.value = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTexture(texture) {
|
||||||
|
texture.magFilter = texture.minFilter = THREE.LinearFilter;
|
||||||
|
texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping;
|
||||||
|
this.material.uniforms.fireTex.value = texture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化场景
|
||||||
|
export function init(scene, coordinate) {
|
||||||
|
// 创建火焰
|
||||||
|
const fire = new Fire(17);
|
||||||
|
// 设置位置 (x, y, z)
|
||||||
|
|
||||||
|
fire.position.set(coordinate.x, coordinate.y, coordinate.z);
|
||||||
|
scene.add(fire);
|
||||||
|
|
||||||
|
// 加载纹理
|
||||||
|
const textureLoader = new THREE.TextureLoader();
|
||||||
|
textureLoader.load(
|
||||||
|
`https://z2586300277.github.io/three-cesium-examples/` + 'files/images/fire.png',
|
||||||
|
(texture) => {
|
||||||
|
fire.setTexture(texture);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return fire;
|
||||||
|
}
|
||||||
21
src/api/aianalysis.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
|
||||||
|
// 码头智能AI图像识别
|
||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
export const GetDetectRecordList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/Get_MT_AI_DETECT_RECORD',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetVideoUrls = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_CAM_POSITION',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
259
src/api/forms.ts
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
export const GetMatoList = async () => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetMatouList',
|
||||||
|
method: 'get',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetGuanxianList = async () => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetGuanxianList',
|
||||||
|
method: 'get',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const arrangeDock = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Anpaimatou',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Jiebokaoan = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiebokaoan',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Xiadazhuangchuan = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiadazhuangchuan',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Jiliangjiaoyan = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiliangjiaoyan',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const Matouzuoye = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Matouzuoye',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Guanquzuoye = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Guanquzuoye',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Kaishizhuangchuan = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Kaishizhuangchuan',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Zhuangchuanjieshu = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Zhuangchuanjieshu',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Jiebokaoanjieshu = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiebokaoanjieshu',
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Xiadazhuangchuanjieshu = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiadazhuangchuanjieshu',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Jiliangjieshu = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiliangjieshu',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Shilimatou = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Shilimatou',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetNodeDetail = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetNodeDetail',
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetGuanquList = async () => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetGuanquList',
|
||||||
|
method: 'get',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetGuanhaoList = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetGuanhaoList',
|
||||||
|
method: 'get',
|
||||||
|
params: params, // ✅ 改为 params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//取样分析
|
||||||
|
export const Quyangfenxi = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Quyangfenxi',
|
||||||
|
method: 'post',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetCheckInDetail = async (params) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetCheckInDetail',
|
||||||
|
method: 'get',
|
||||||
|
params: params,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//下达卸船
|
||||||
|
export const Xiadaxiechuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiadaxiechuan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//开始卸船
|
||||||
|
export const Kaishixiechuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Kaishixiechuan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//结束卸船
|
||||||
|
export const Jieshuxiechuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiechuanjieshu',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Shenbaodaogang = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Shenbaodaogang',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Lianheyancang = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Lianheyancang',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetYichang = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_TRANSPORT_PLAN_DTL',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const PostABNLRESETWORK = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_RESET_WORK',
|
||||||
|
method: 'get',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const ABNLSTOPWORK = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_STOP_WORK',
|
||||||
|
method: 'get',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetFetchGuanDaoCumulativeFlow = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/FetchGuanDaoCumulativeFlow_B',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
127
src/api/hbmatou.ts
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
|
||||||
|
|
||||||
|
// 环保码头
|
||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
|
||||||
|
const token = 'MIIEowIBAAKCAQEAx3fVoeijJ2P35w7G0AxfZTok7Nk5uV'
|
||||||
|
|
||||||
|
// 5.01 L1.1.1 设备状态统计
|
||||||
|
export const GetEnvMonitorDeviceStatusSumImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_STATUS_SUM',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.02 - L1.1.2 设备状态列表
|
||||||
|
export const GetEnvMonitorDevStatusListImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_STATUS_DTL',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.03 L2.1 环保告警统计
|
||||||
|
export const GetEnvMonitorAlarmSumImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_ALARM_SUM',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.04 L2.2 今日环保告警明细
|
||||||
|
export const GetEnvMonitorAlarmTodayListImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_ALARM_TODAY_LIST',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.05 T1.1 天气现况及预告
|
||||||
|
export const GetEnvMonitorWeatherDescImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_WEATHER_DESC',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.06 T1.2 水文信息
|
||||||
|
export const GetEnvMonitorWaterHydroloInfoImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_WATER_HYDROLO_INFO',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.07 T1.3 水质信息
|
||||||
|
export const GetEnvMonitorWaterQualityInfoImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_WATER_QUALITY_INFO',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.09 EP1.1 设备位置
|
||||||
|
export const GetEnvMonitorDevListImp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_LST',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.10 EP1.2.1 设备监测指标详情(支持多个)
|
||||||
|
export const GetEnvMonitorDevInfoDtl1Imp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_DTL1',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5.12 EP1.2.3 最近1小时数据(支持多个)
|
||||||
|
export const GetEnvMonitorDevInfoDtl3Imp = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_DTL3',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//5.09.1 EP1.1.1 设备详情信息
|
||||||
|
export const GetDetailData = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_DEV_DTL',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
156
src/api/home.ts
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
import { dataTool } from 'echarts';
|
||||||
|
|
||||||
|
// 待执行计划列表
|
||||||
|
export const GetExcutingTaskList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetExcutingTaskList',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 待安排计划列表
|
||||||
|
export const GetUnexcutedTaskList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetUnexcutedTaskList',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//历史计划列表
|
||||||
|
|
||||||
|
export const GetFinishedTaskList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetFinishedTaskList',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetYilaiguanxi = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetYilaiguanxi',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetShenbaoFujian = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetShenbaoFujian',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetUseId = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/user/user-info',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetUserPermission = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance(); // 每次获取已初始化的实例
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/GetUserPermission',
|
||||||
|
method: 'get',
|
||||||
|
params: data, // 如果需要传参
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetShipCreditInfo = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/Get_Ship_Credit_Info',
|
||||||
|
methood: 'post',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//暂停装船确定逻辑
|
||||||
|
export const ABNLPAUSEWORK = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_PAUSE_WORK',
|
||||||
|
methood: 'post',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//恢复装船逻辑
|
||||||
|
export const ABNLRESUMEWORK = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_RESUME_WORK',
|
||||||
|
methood: 'post',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//添加火焰
|
||||||
|
export const addFire = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_EMER_EvacuationIncident',
|
||||||
|
methood: 'post',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const getBoatWarningAlarm = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-ais-service/getShipAvoidanceCollision',
|
||||||
|
methood: 'get',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//倒计时
|
||||||
|
export const GetFlowTimeOut = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url:'/mtoperatapi/Get_Flow_TimeOut_CountDown',
|
||||||
|
methood:'post',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const GetFetchGuanDaoCumulativeFlow = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/FetchGuanDaoCumulativeFlow_B',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//获取异常原因
|
||||||
|
export const GetMeasureExceptionPlot = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/ABNL_RESON_TYPE_PICKLST',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetMenuWarning = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetMenuWarning',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//6.02 应急物资及设备
|
||||||
|
export const GetYingjiMarker = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: 'mtoperatapi/VW_VSL_EMER_MATERIALSANDDEVICE',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
119
src/api/mtwork.ts
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
// 码头作业
|
||||||
|
export const Matouzuoye = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Matouzuoye',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//罐区作业
|
||||||
|
export const GetFinishedTaskList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Guanquzuoye',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//开始装船
|
||||||
|
export const Kaishizhuangchuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Kaishizhuangchuan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//装船结束
|
||||||
|
export const Zhuangchuanjieshu = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Zhuangchuanjieshu',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//装船结束
|
||||||
|
export const Jiliangjieshu = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiliangjieshu',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//驶离码头
|
||||||
|
export const Shilimatou = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Shilimatou',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//计划执行
|
||||||
|
export const Jihuazhixing = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jihuazhixing',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//信息反馈
|
||||||
|
export const Xinxifankui = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xinxifankui',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//计量校验
|
||||||
|
export const Jiliangjiaoyan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiliangjiaoyan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//下达装船指令
|
||||||
|
export const Xiadazhuangchuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiadazhuangchuan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//接驳靠岸
|
||||||
|
export const Jiebokaoan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Jiebokaoan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//安排码头
|
||||||
|
export const Anpaimatou = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Anpaimatou',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//下达卸船
|
||||||
|
export const Xiadaxiechuan = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mt-app-service/mt/update/Xiadaxiechuan',
|
||||||
|
method: 'POST',
|
||||||
|
params: data,
|
||||||
|
});
|
||||||
|
};
|
||||||
51
src/api/wharf.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
//港区船舶作业概览
|
||||||
|
export const GetHomeOverallChart_WharfWork = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetHomeOverallChart_WharfWork',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//今日船舶作业统计
|
||||||
|
export const GetHomeOverallChart_WharfWorkOilQty = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetHomeOverallChart_WharfWorkOilQty',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//今日码头作业对比
|
||||||
|
export const GetHomeOverallChart_WorkOilQty = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetHomeOverallChart_WorkOilQty',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//码头船舶作业趋势
|
||||||
|
export const GetHomeOverallChart_WharfWorkTrend = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetHomeOverallChart_WharfWorkTrend',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//正在作业的船舶
|
||||||
|
export const GetTransportPlanList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetTransportPlanList',
|
||||||
|
method: 'GET',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
88
src/api/zhishideng.ts
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import { getAxiosInstance } from '@/utils/request';
|
||||||
|
|
||||||
|
export const GetMeasureExceptionPlot = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/Get_Measure_Exception_Plot',
|
||||||
|
method: 'GET',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const SetMeasureExceptionPlot = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/Set_Measure_Exception_Plot',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ResetMeasureExceptionPlot = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/Reset_Measure_Exception_Plot',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetMeasureExceptionPlotList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/VW_VSL_ENV_MONITOR_ALARM_TODAY_LIST',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetFetchGuanDaoDetail = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/FetchGuanDaoDetail',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetFetchGuanDaoList = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/FetchGuanDaoDetail',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const GetFetchGuanDaoCumulativeFlow = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/FetchGuanDaoCumulativeFlow_B',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetWeather = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: 'mtoperatapi/VW_VSL_ENV_MONITOR_WEATHER_DESC',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getJLMeasuremen = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/getJLMeasurement',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GetHeadWarning = async (data) => {
|
||||||
|
const axiosInstance = await getAxiosInstance();
|
||||||
|
return axiosInstance({
|
||||||
|
url: '/mtoperatapi/GetHeadWarning',
|
||||||
|
method: 'POST',
|
||||||
|
params: data
|
||||||
|
});
|
||||||
|
};
|
||||||
BIN
src/assets/SceneTag.png
Normal file
|
After Width: | Height: | Size: 829 B |
29
src/assets/certificates/zhmt.cer
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIE8TCCA9mgAwIBAgIIR4z1ZQq/CAAwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UE
|
||||||
|
BhMCQ04xEDAOBgNVBAoMB1NJTk9QRUMxITAfBgNVBAMMGFNJTk9QRUMgUlNBIE9w
|
||||||
|
ZXJhdGlvbiBDQTAeFw0yNTA3MjQwNzU4NTRaFw00NTA3MTkwNzU4NTRaMF8xCzAJ
|
||||||
|
BgNVBAYTAkNOMQ0wCwYDVQQKDARhcXNoMQ8wDQYDVQQHDAZhbnFpbmcxEDAOBgNV
|
||||||
|
BAsMB1NJTk9QRUMxHjAcBgNVBAMMFXpobXQuYXFzaC5zaW5vcGVjLmNvbTCCASIw
|
||||||
|
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANK3BFn+bAmWO1k6tJ7msCertINE
|
||||||
|
UY48Pjz4WKQm/VePptVzm40HVI0DEFV4FgWiQpgdje24kof+UafZC+7fpyjm1n8i
|
||||||
|
9hXZEcH1sBljiHkG1CkdNcpo7JQlr2sJgjUJezu4lFAPqEj86CSkNsbSByOOZkrp
|
||||||
|
WveA4dzuol4XnSG7nb0dfCTnwxPmSW/+DP7HS7/jMQYfqRt5gHS3gWIErCB9iRvC
|
||||||
|
x5wL2jSC632taF0Mi5139EA4PoVQg6yWYXo9ajFbUKIyIJ5VZsJXcB8dFyBi1+tX
|
||||||
|
3oSpAl9j2dovBPolFN3f+zEehFdveQR0IrZX+yPFJVmRSomuXBtA+PSb4aMCAwEA
|
||||||
|
AaOCAcwwggHIMB8GA1UdIwQYMBaAFGaFujLeHwZe2bv8RxGocI0tHbOvMB0GA1Ud
|
||||||
|
DgQWBBSpvPCpktJluTt3S1NH/GQBUW076DARBglghkgBhvhCAQEEBAMCBeAwJgYD
|
||||||
|
VR0RBB8wHYcECnYCSIIVemhtdC5hcXNoLnNpbm9wZWMuY29tMAsGA1UdDwQEAwIE
|
||||||
|
8DCCAREGA1UdHwSCAQgwggEEMC+gLaArhilodHRwOi8veGttcy5zaW5vcGVjLmNv
|
||||||
|
bS9uZXdjYS9yc2EyMDQ4LmNybDCB0KCBzaCByoaBx2xkYXA6Ly94a21zLnNpbm9w
|
||||||
|
ZWMuY29tOjM4OS9DTj1jcmwsQ049UlNBMjA0OENSTCxDTj1DQVNlcnZlcjIsQ049
|
||||||
|
Q0RQLENOPVB1YmxpYyBLZXkgU2VydmljZXMsQ049U2VydmljZXMsQ049Q29uZmln
|
||||||
|
dXJhdGlvbixPPVNJTk9QRUMsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0
|
||||||
|
P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwKQYDVR0lBCIw
|
||||||
|
IAYIKwYBBQUHAwEGCCsGAQUFBwMCBgorBgEEAYI3CgMEMA0GCSqGSIb3DQEBCwUA
|
||||||
|
A4IBAQCVNgBf+HrYLLRe3mfDqPM1qEpk8gCPAAuLzypTD+Ib0rnUtUXYJA52nOHS
|
||||||
|
yckt6s5OQiu2jp3l/OKYIKdXQAsoDye981tKgjVaMbpqaIOreIJI7AglMjmDHrnl
|
||||||
|
kxHfKjca+5+euAVmyiHAcGahFBep328O7eZ6a+geXmv3pgx1wmLXrfR61RL7WUFy
|
||||||
|
gev2HTSv1BW1l/qSYVszqy/S4z4LQeCAex9mbZXzXIAHzv3vYXOq2+5lIEQUr+lS
|
||||||
|
BnPXYVND7t+2VERSnvcANqnbV1gr06vj1FAlhBbCvZ5Ddo8nDqGBnwBknFYM139L
|
||||||
|
zA1z5IkntFr/agS8fupGPCbmfUDl
|
||||||
|
-----END CERTIFICATE-----
|
||||||
18
src/assets/certificates/zhmt.csr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
-----BEGIN CERTIFICATE REQUEST-----
|
||||||
|
MIIC2zCCAcMCAQAwgZUxCzAJBgNVBAYTAkNOMQ4wDAYDVQQIDAVhbmh1aTEPMA0G
|
||||||
|
A1UEBwwGYW5xaW5nMQ0wCwYDVQQKDARhcXNoMRAwDgYDVQQLDAdTSU5PUEVDMR4w
|
||||||
|
HAYDVQQDDBV6aG10LmFxc2guc2lub3BlYy5jb20xJDAiBgkqhkiG9w0BCQEWFWh1
|
||||||
|
eWsuYXFzaEBzaW5vcGVjLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||||
|
ggEBANK3BFn+bAmWO1k6tJ7msCertINEUY48Pjz4WKQm/VePptVzm40HVI0DEFV4
|
||||||
|
FgWiQpgdje24kof+UafZC+7fpyjm1n8i9hXZEcH1sBljiHkG1CkdNcpo7JQlr2sJ
|
||||||
|
gjUJezu4lFAPqEj86CSkNsbSByOOZkrpWveA4dzuol4XnSG7nb0dfCTnwxPmSW/+
|
||||||
|
DP7HS7/jMQYfqRt5gHS3gWIErCB9iRvCx5wL2jSC632taF0Mi5139EA4PoVQg6yW
|
||||||
|
YXo9ajFbUKIyIJ5VZsJXcB8dFyBi1+tX3oSpAl9j2dovBPolFN3f+zEehFdveQR0
|
||||||
|
IrZX+yPFJVmRSomuXBtA+PSb4aMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCO
|
||||||
|
rq8q/g/7sOOGXM+JSp8u3hpDEKMtmu1wzlvfaehq4um2ngDxtlHoq0A1L0RspjJo
|
||||||
|
4QjtROwgzGwAi5cFr27vSkY76aqb0Ho64pxkTwRj5gafk2ILKL6o08SwhZnBPMad
|
||||||
|
B8AsYwOstF4Gla4OJBlke2SZrhKylRsacnVYe/6B/DgxrHbpYPRZiW4EOUwgZDLm
|
||||||
|
1IVk1JyCY7bOsJZ/F3eZEddRdqAH3MAppW1BKrqiFsJB72OxwGkZJXkwLcQF84hO
|
||||||
|
dkPvQ1+wkCi3MNShYNXD4fc3MEDLNvoAk79PJrrq7dMCe9dIyU29yVsWca7gOlZj
|
||||||
|
BrqS9jqtsnKKxuztAc2N
|
||||||
|
-----END CERTIFICATE REQUEST-----
|
||||||
30
src/assets/certificates/zhmt.key
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
Proc-Type: 4,ENCRYPTED
|
||||||
|
DEK-Info: DES-EDE3-CBC,6618E524539A74BB
|
||||||
|
|
||||||
|
322B8MP26s6bbCSO/LxzbOj7D2I0MUAUUfmsTg6PteidXEoP7HSAw57U1mc/JWop
|
||||||
|
ysGPe4NYdDnC5XUWpIK5wtpe0fwUCrANNKlcj6nZYsXDjZR9FAC49IjP3ZjuErkM
|
||||||
|
BWbwmKkVkBE60CaYeT/nJriRrx3eA5N1TrvHjJ0MCAI1t+igPRJkDnZFarbVyIaN
|
||||||
|
T9GxjoGExt3dqszNyrOsY2/W+r46z2s/Zr7XVUDx0ZDoAQ0qkTAEeC+8eh+DlKYG
|
||||||
|
fY3/2mTbN4aczhNM1T2qqV372KzrotekbkVKZkr4k1D+FipGRuy76rQJQw4GZQM/
|
||||||
|
065KL4ksLLMgU5M6Es0NGcHTyUKRad+tDZXVGn1fJyDP/Kki7gd8BOXyhwhaKLPb
|
||||||
|
uBIntT6nTZDvv8hAq3Wtv7OoEyBDITzaMNzRtqUeuG9kP17ZBwFdFh0vhe3bwqBO
|
||||||
|
rJJiB1OTB1FW61vWmnHakYIm/uag4uQD4ePnjNn3YBRMmyI7mxndy8JnGMgDGJGr
|
||||||
|
MCUxKRGSSbJaDuByCAeZAwiEsqBNmxgAs6QmW+WvAgNjFcT+g754Wui046oimGhj
|
||||||
|
0zSY9br6RbSKkQRjIiTlfX/896FCHGLfZ5ZzQkENHHB/5GUFq19En/hQgOoIT9US
|
||||||
|
fP3dsLaFkw/wcD+kkZrO7VyvFCFhJOh2yJaAkX2zyJOt2mosnLWrUuXjY6cxrkrG
|
||||||
|
PKuo+NgM/1yb+4pZD9v2QeT+1s/zFLNlYwQ8+kymTcRvsPuQY94/+uU/ePGUjLQW
|
||||||
|
9l8JuvElqKvQb3R+8bXY8dBzjxBePHrIGNrLa17S+nvH1yDjr5xzCzZZ3efU5NPU
|
||||||
|
vdF/6qEeSWBmjoTLkNO7/aLAyzjCmbReHlj55Hk1uo3xtiiL5is4Dxrihc2jFX6C
|
||||||
|
uqJHtOQ9zKgxQSk1EYJ2V2/LfjoN+FwiGjQd3cCDJeR9vMQdZaU8L9kxuBJ0fkub
|
||||||
|
HIhheKUQ0VZuIeOA1C4Dl9bM+YWO3fnwuIxBoowqoIfBsZOCPFA5HYK8WQKL9Uxv
|
||||||
|
vnyi5ujRDutNp1xS1fkxDtiCnbfXj8HIpj57gwEvLUhagogoxgn1m/LH5AUqUE7x
|
||||||
|
ogDOHHt5wgC8nuqZ88P1eV4YKVkNZTk8KamicZlWYfIHYXr1GAq/P3SHQsvoNInQ
|
||||||
|
bTOmMaHin/Cjds0yFBrOMqUlZIWE8t7HBwAkj9ymL/ML645SrTwZyztfhveLYj96
|
||||||
|
I92LQGizXUofp8LiMk2uCShy0K5CUu5kQJlXTL4SpxpgcRQZRg8tm6+zTQgG+Ol9
|
||||||
|
wZhTQYtCGX1d1Nk231tEsWbN3q5cEKMJCEEa5PUAUt8h7k47H2qgr6418G4S/eg/
|
||||||
|
lclpvtAxC6fc0UkOhklhU+nADPLEgSljcpzjd8fBMjWkiqr8HY2twH44wrEGeMaH
|
||||||
|
O6tEOyDrc3s6uMfL3m5tV5zzkXv6wGaiIP19QIquvp2RqSKSxIiwDRoITnbn2Q+4
|
||||||
|
ljakNms3FaF0hemrwmmQyPzYD43bsbjTwrulXNxdVhYOxfSN3RjWZeobBu85bCpW
|
||||||
|
8PIDC3skuKk86WxPUBIJ/dfw8OTVlqgxOPhjdHnVjrP5l72aCEMLZQ==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
27
src/assets/certificates/zhmt_decrypted.key
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEA0rcEWf5sCZY7WTq0nuawJ6u0g0RRjjw+PPhYpCb9V4+m1XOb
|
||||||
|
jQdUjQMQVXgWBaJCmB2N7biSh/5Rp9kL7t+nKObWfyL2FdkRwfWwGWOIeQbUKR01
|
||||||
|
ymjslCWvawmCNQl7O7iUUA+oSPzoJKQ2xtIHI45mSula94Dh3O6iXhedIbudvR18
|
||||||
|
JOfDE+ZJb/4M/sdLv+MxBh+pG3mAdLeBYgSsIH2JG8LHnAvaNILrfa1oXQyLnXf0
|
||||||
|
QDg+hVCDrJZhej1qMVtQojIgnlVmwldwHx0XIGLX61fehKkCX2PZ2i8E+iUU3d/7
|
||||||
|
MR6EV295BHQitlf7I8UlWZFKia5cG0D49JvhowIDAQABAoIBAEn+pvKLW5kKPpEZ
|
||||||
|
AnCChf2IWH14MkOGeDyk4UvTvUdQVL/ENy2RE2npV4UMBH+5+TS9vCdsl1hWQIp2
|
||||||
|
t7AMrgC4/z3qIwyNC6VXB54Cy9vkQACoF0mbCukDStSFpEnHqJTSPpLWzLvExCiJ
|
||||||
|
2gp7mrIrwVQxGhasFaSl0DLGjBFZ02YuHrrgJr5XymSRdKhh1zWOE3pTVWn41QTh
|
||||||
|
pPjfiE39O4zPYAMxAY1E9s60qvGHQml7MlDX8uJywuCgmdcJy0LAzsFVpVl9HKjD
|
||||||
|
L2/KIGMe81HwJcxSd29n07QMVeJWz8RHRiaGnQdJS//cuCxlF0MGT2mEMTFl8Wn0
|
||||||
|
D+agRgECgYEA+7wVAIsviNFZ3r6k5zKf3Od3QZwYGcYg5NbklwVOk8asu9P/PnK4
|
||||||
|
pFnzM5HIKnCI8mKV3IOWZfhC2RgJY1jLtM4RnTJxVfDoOhkjQQot38zsqN5OKnoX
|
||||||
|
ULkQqykfMegYlVxAe9PpkgxQR8+Q7NGE05/Fb4gw8Nbi2hR4eZEVkCMCgYEA1kkC
|
||||||
|
Mu37kxDXj1/nBwf+adiyUHPalCWC+l79dDkcJxssHCs7gahj9E9gWmAISQudEolU
|
||||||
|
5CUUmcO9wuz3qdbrcU4QLL/n32Y62W9igCmVtpEdyk4eBJ2qXnI1KI2CmWXed5iu
|
||||||
|
k5Efo3M1OZpqlcookM+ZnMTxy6dek3KCtZkMwIECgYAXcjUij9QlkhokvOzu+7AY
|
||||||
|
Cxb4bWlxPRrjNYCk8EGZUe/UrrIfRuAbrqUQMIvMKB8ZNEVw/HCNnsnbHnoBXsva
|
||||||
|
UzcgxQn5Ty7R+nVmIWSUa6m/MLVnD2gMhLAgwPu+0jc38hevcNVYXP09Mv/0jq8o
|
||||||
|
ZsEk2jJ0vA708OMnr3OqsQKBgCb0esvba6KeqzFLU+p5T4zacgAiL5hDAX6Wiij4
|
||||||
|
wN9zFx+/1D+L5y/gxjlnv9nXnKRkBuS6wPX7GaI4BgYAJikg8dvQv0xjf0tL7nIy
|
||||||
|
HR9lXi8K6HYaW4Bz7qoCn71XQYwoW4REG6ZRKVnhcoLsj1dUBi7ztqk5Mf5IEO8G
|
||||||
|
dcUBAoGAOOHZjNTlrqzI6XXaL1sDFvE1X2FMm6+lUxqLMxIiQWVrCb1s9rO+k2CS
|
||||||
|
homa4nGQi7T4ghUsCSR0ERZHpAD/8dgNZZHHiKaSViiGn2Lgtpb5iSvMD793ClL7
|
||||||
|
+ugL4uTtGd1ElnCQFuisO1QUmGx6pkdwMFtYTS2pH8Uu3Z0oRDQ=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
BIN
src/assets/formbg.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
src/assets/gaojing/橙-作业.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/assets/gaojing/橙-有毒可燃.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
src/assets/gaojing/橙-水文.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
src/assets/gaojing/橙-漏油.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/assets/gaojing/橙-碰撞.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/assets/gaojing/红-作业.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
src/assets/gaojing/红-有毒可燃.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
src/assets/gaojing/红-水文.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
src/assets/gaojing/红-漏油.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
src/assets/gaojing/红-碰撞.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
src/assets/gaojing/蓝-作业.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
src/assets/gaojing/蓝-有毒可燃.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
src/assets/gaojing/蓝-水文.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
src/assets/gaojing/蓝-漏油.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
src/assets/gaojing/蓝-碰撞.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
src/assets/head.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
src/assets/header/Vector.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/assets/header/desk.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
src/assets/header/fcl.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/assets/header/kaiguan.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |