初始化项目:添加核心代码和配置文件

This commit is contained in:
陈松淇 2026-01-05 17:38:04 +08:00
commit 36e7bcba5f
223 changed files with 52802 additions and 0 deletions

5
.env Normal file
View 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
View 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?

0
README.md Normal file
View File

20
index.html Normal file
View 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

File diff suppressed because it is too large Load Diff

38
package.json Normal file
View 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

File diff suppressed because it is too large Load Diff

BIN
public/1.glb Normal file

Binary file not shown.

448
public/areaConfig.json Normal file
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
public/baseColor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

View File

@ -0,0 +1,4 @@
{"loginIp": "10.118.2.159",
"loginPort": "443",
"userName": "duijie",
"userPwd": "Aqsh@2025"}

View 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/"
}

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 MiB

BIN
public/emergency_alarm.mp3 Normal file

Binary file not shown.

BIN
public/envMap.hdr Normal file

Binary file not shown.

119
public/flexible.js Normal file
View 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'] = {}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

7
public/js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
public/js/jquery-3.4.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
public/lcbg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
public/liucheng/aqjc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
public/liucheng/jiebo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
public/liucheng/jljs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
public/liucheng/jlxy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
public/liucheng/qrka.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
public/liucheng/sbdg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
public/liucheng/slmt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
public/liucheng/xdzl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
public/liucheng/zcjs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
public/lunchuan.bin Normal file

Binary file not shown.

BIN
public/lunchuan.glb Normal file

Binary file not shown.

1
public/lunchuan.gltf Normal file

File diff suppressed because one or more lines are too long

BIN
public/lunchuan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
public/marker/swmarker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/marker/sxtcheck.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
public/marker/szmarker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/marker/xfs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
public/marker/ydmarker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/marker/yjwz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
public/marker/zihang.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/mtBg1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
public/mtnew1.glb Normal file

Binary file not shown.

BIN
public/normal.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
public/sphereBack.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

825
public/tween.umd.js Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
public/wave.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

BIN
public/wave1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 KiB

BIN
public/wave2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 KiB

11
src/App.vue Normal file
View File

@ -0,0 +1,11 @@
<script setup>
</script>
<template>
<router-view></router-view>
</template>
<style scoped>
</style>

BIN
src/Three/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

852
src/Three/Twin.js Normal file
View 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缩放倍数 tyy方向标签偏移尺寸
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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

View 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-----

View 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-----

View 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-----

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
src/assets/head.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/assets/header/desk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/assets/header/fcl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Some files were not shown because too many files have changed in this diff Show More