Compare commits
10 Commits
e03f9e5178
...
c28eba6e1f
Author | SHA1 | Date | |
---|---|---|---|
|
c28eba6e1f | ||
|
e410ef3a24 | ||
|
f801f2dfd9 | ||
|
e66f93fc5d | ||
|
87ee53fca4 | ||
|
482f6392a6 | ||
|
849a38795c | ||
|
dfbd2b6fb8 | ||
|
efbb5c1d0c | ||
|
5a45cbf558 |
@ -6,3 +6,7 @@ VITE_APP_ENV = 'development'
|
||||
|
||||
# 若依管理系统/开发环境
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
|
||||
VITE_PUBLIC_BASE_PATH = ''
|
||||
|
||||
VITE_APP_WS_API = 'ws://8.141.87.86:9018/'
|
||||
|
@ -9,3 +9,7 @@ VITE_APP_BASE_API = '/prod-api'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
|
||||
VITE_PUBLIC_BASE_PATH = '/'
|
||||
|
||||
VITE_APP_WS_API = ''
|
12
package.json
@ -16,20 +16,26 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "2.0.10",
|
||||
"@iamzzg/data-view": "^2.10.0",
|
||||
"@jiaminghi/data-view": "^2.10.0",
|
||||
"@vueup/vue-quill": "1.1.0",
|
||||
"@vueuse/core": "9.5.0",
|
||||
"axios": "0.27.2",
|
||||
"echarts": "5.4.0",
|
||||
"echarts": "^5.5.1",
|
||||
"element-plus": "2.2.27",
|
||||
"file-saver": "2.0.5",
|
||||
"file-saver": "^2.0.5",
|
||||
"fuse.js": "6.6.2",
|
||||
"gsap": "^3.12.5",
|
||||
"js-cookie": "3.0.1",
|
||||
"jsencrypt": "3.3.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mitt": "^3.0.1",
|
||||
"nprogress": "0.2.0",
|
||||
"pinia": "2.0.22",
|
||||
"three": "^0.169.0",
|
||||
"three": "^0.152.2",
|
||||
"vue": "3.2.45",
|
||||
"vue-cropper": "1.0.3",
|
||||
"vue-echarts": "^7.0.3",
|
||||
"vue-router": "4.1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
32
public/draco/README.md
Normal file
@ -0,0 +1,32 @@
|
||||
# Draco 3D Data Compression
|
||||
|
||||
Draco is an open-source library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.
|
||||
|
||||
[Website](https://google.github.io/draco/) | [GitHub](https://github.com/google/draco)
|
||||
|
||||
## Contents
|
||||
|
||||
This folder contains three utilities:
|
||||
|
||||
* `draco_decoder.js` — Emscripten-compiled decoder, compatible with any modern browser.
|
||||
* `draco_decoder.wasm` — WebAssembly decoder, compatible with newer browsers and devices.
|
||||
* `draco_wasm_wrapper.js` — JavaScript wrapper for the WASM decoder.
|
||||
|
||||
Each file is provided in two variations:
|
||||
|
||||
* **Default:** Latest stable builds, tracking the project's [master branch](https://github.com/google/draco).
|
||||
* **glTF:** Builds targeted by the [glTF mesh compression extension](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression), tracking the [corresponding Draco branch](https://github.com/google/draco/tree/gltf_2.0_draco_extension).
|
||||
|
||||
Either variation may be used with `THREE.DRACOLoader`:
|
||||
|
||||
```js
|
||||
var dracoLoader = new THREE.DRACOLoader();
|
||||
dracoLoader.setDecoderPath('path/to/decoders/');
|
||||
dracoLoader.setDecoderConfig({type: 'js'}); // (Optional) Override detection of WASM support.
|
||||
```
|
||||
|
||||
Further [documentation on GitHub](https://github.com/google/draco/tree/master/javascript/example#static-loading-javascript-decoder).
|
||||
|
||||
## License
|
||||
|
||||
[Apache License 2.0](https://github.com/google/draco/blob/master/LICENSE)
|
34
public/draco/draco_decoder.js
Normal file
BIN
public/draco/draco_decoder.wasm
Normal file
33
public/draco/draco_encoder.js
Normal file
117
public/draco/draco_wasm_wrapper.js
Normal file
@ -0,0 +1,117 @@
|
||||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(k){var n=0;return function(){return n<k.length?{done:!1,value:k[n++]}:{done:!0}}};$jscomp.arrayIterator=function(k){return{next:$jscomp.arrayIteratorImpl(k)}};$jscomp.makeIterator=function(k){var n="undefined"!=typeof Symbol&&Symbol.iterator&&k[Symbol.iterator];return n?n.call(k):$jscomp.arrayIterator(k)};$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(k){k=["object"==typeof globalThis&&globalThis,k,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var n=0;n<k.length;++n){var l=k[n];if(l&&l.Math==Math)return l}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
|
||||
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(k,n,l){if(k==Array.prototype||k==Object.prototype)return k;k[n]=l.value;return k};$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(k,n){var l=$jscomp.propertyToPolyfillSymbol[n];if(null==l)return k[n];l=k[l];return void 0!==l?l:k[n]};$jscomp.polyfill=function(k,n,l,p){n&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(k,n,l,p):$jscomp.polyfillUnisolated(k,n,l,p))};
|
||||
$jscomp.polyfillUnisolated=function(k,n,l,p){l=$jscomp.global;k=k.split(".");for(p=0;p<k.length-1;p++){var h=k[p];if(!(h in l))return;l=l[h]}k=k[k.length-1];p=l[k];n=n(p);n!=p&&null!=n&&$jscomp.defineProperty(l,k,{configurable:!0,writable:!0,value:n})};
|
||||
$jscomp.polyfillIsolated=function(k,n,l,p){var h=k.split(".");k=1===h.length;p=h[0];p=!k&&p in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var A=0;A<h.length-1;A++){var f=h[A];if(!(f in p))return;p=p[f]}h=h[h.length-1];l=$jscomp.IS_SYMBOL_NATIVE&&"es6"===l?p[h]:null;n=n(l);null!=n&&(k?$jscomp.defineProperty($jscomp.polyfills,h,{configurable:!0,writable:!0,value:n}):n!==l&&(void 0===$jscomp.propertyToPolyfillSymbol[h]&&(l=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[h]=$jscomp.IS_SYMBOL_NATIVE?
|
||||
$jscomp.global.Symbol(h):$jscomp.POLYFILL_PREFIX+l+"$"+h),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[h],{configurable:!0,writable:!0,value:n})))};
|
||||
$jscomp.polyfill("Promise",function(k){function n(){this.batch_=null}function l(f){return f instanceof h?f:new h(function(q,v){q(f)})}if(k&&(!($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 k;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 v=f[q];f[q]=null;try{v()}catch(z){this.asyncThrow_(z)}}}this.batch_=null};n.prototype.asyncThrow_=function(f){this.asyncExecuteFunction(function(){throw f;})};var h=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(v){q.reject(v)}};h.prototype.createResolveAndReject_=function(){function f(z){return function(O){v||(v=!0,z.call(q,O))}}var q=this,v=!1;return{resolve:f(this.resolveTo_),reject:f(this.reject_)}};h.prototype.resolveTo_=function(f){if(f===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(f instanceof h)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)}};h.prototype.resolveToNonPromiseObj_=function(f){var q=void 0;try{q=f.then}catch(v){this.reject_(v);return}"function"==typeof q?this.settleSameAsThenable_(q,f):this.fulfill_(f)};h.prototype.reject_=function(f){this.settle_(2,f)};h.prototype.fulfill_=function(f){this.settle_(1,f)};h.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_()};h.prototype.scheduleUnhandledRejectionCheck_=function(){var f=this;p(function(){if(f.notifyUnhandledRejection_()){var q=$jscomp.global.console;"undefined"!==typeof q&&q.error(f.result_)}},1)};h.prototype.notifyUnhandledRejection_=function(){if(this.isRejectionHandled_)return!1;var f=$jscomp.global.CustomEvent,q=$jscomp.global.Event,v=$jscomp.global.dispatchEvent;if("undefined"===typeof v)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 v(f)};h.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var f=0;f<this.onSettledCallbacks_.length;++f)A.asyncExecute(this.onSettledCallbacks_[f]);this.onSettledCallbacks_=null}};var A=new n;h.prototype.settleSameAsPromise_=function(f){var q=this.createResolveAndReject_();
|
||||
f.callWhenSettled_(q.resolve,q.reject)};h.prototype.settleSameAsThenable_=function(f,q){var v=this.createResolveAndReject_();try{f.call(q,v.resolve,v.reject)}catch(z){v.reject(z)}};h.prototype.then=function(f,q){function v(t,x){return"function"==typeof t?function(D){try{z(t(D))}catch(R){O(R)}}:x}var z,O,ba=new h(function(t,x){z=t;O=x});this.callWhenSettled_(v(f,z),v(q,O));return ba};h.prototype.catch=function(f){return this.then(void 0,f)};h.prototype.callWhenSettled_=function(f,q){function v(){switch(z.state_){case 1:f(z.result_);
|
||||
break;case 2:q(z.result_);break;default:throw Error("Unexpected state: "+z.state_);}}var z=this;null==this.onSettledCallbacks_?A.asyncExecute(v):this.onSettledCallbacks_.push(v);this.isRejectionHandled_=!0};h.resolve=l;h.reject=function(f){return new h(function(q,v){v(f)})};h.race=function(f){return new h(function(q,v){for(var z=$jscomp.makeIterator(f),O=z.next();!O.done;O=z.next())l(O.value).callWhenSettled_(q,v)})};h.all=function(f){var q=$jscomp.makeIterator(f),v=q.next();return v.done?l([]):new h(function(z,
|
||||
O){function ba(D){return function(R){t[D]=R;x--;0==x&&z(t)}}var t=[],x=0;do t.push(void 0),x++,l(v.value).callWhenSettled_(ba(t.length-1),O),v=q.next();while(!v.done)})};return h},"es6","es3");$jscomp.owns=function(k,n){return Object.prototype.hasOwnProperty.call(k,n)};$jscomp.assign=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.assign?Object.assign:function(k,n){for(var l=1;l<arguments.length;l++){var p=arguments[l];if(p)for(var h in p)$jscomp.owns(p,h)&&(k[h]=p[h])}return k};
|
||||
$jscomp.polyfill("Object.assign",function(k){return k||$jscomp.assign},"es6","es3");$jscomp.checkStringArgs=function(k,n,l){if(null==k)throw new TypeError("The 'this' value for String.prototype."+l+" must not be null or undefined");if(n instanceof RegExp)throw new TypeError("First argument to String.prototype."+l+" must not be a regular expression");return k+""};
|
||||
$jscomp.polyfill("String.prototype.startsWith",function(k){return k?k:function(n,l){var p=$jscomp.checkStringArgs(this,n,"startsWith");n+="";var h=p.length,A=n.length;l=Math.max(0,Math.min(l|0,p.length));for(var f=0;f<A&&l<h;)if(p[l++]!=n[f++])return!1;return f>=A}},"es6","es3");
|
||||
$jscomp.polyfill("Array.prototype.copyWithin",function(k){function n(l){l=Number(l);return Infinity===l||-Infinity===l?l:l|0}return k?k:function(l,p,h){var A=this.length;l=n(l);p=n(p);h=void 0===h?A:n(h);l=0>l?Math.max(A+l,0):Math.min(l,A);p=0>p?Math.max(A+p,0):Math.min(p,A);h=0>h?Math.max(A+h,0):Math.min(h,A);if(l<p)for(;p<h;)p in this?this[l++]=this[p++]:(delete this[l++],p++);else for(h=Math.min(h,A+p-l),l+=h-p;h>p;)--h in this?this[--l]=this[h]:delete this[--l];return this}},"es6","es3");
|
||||
$jscomp.typedArrayCopyWithin=function(k){return k?k: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 k="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;"undefined"!==typeof __filename&&(k=k||__filename);return function(n){function l(e){return a.locateFile?a.locateFile(e,U):U+e}function p(e,b,c){var d=b+c;for(c=b;e[c]&&!(c>=d);)++c;if(16<c-b&&e.buffer&&va)return va.decode(e.subarray(b,c));for(d="";b<c;){var g=e[b++];if(g&128){var u=e[b++]&63;if(192==(g&224))d+=String.fromCharCode((g&31)<<6|u);else{var X=e[b++]&63;g=224==
|
||||
(g&240)?(g&15)<<12|u<<6|X:(g&7)<<18|u<<12|X<<6|e[b++]&63;65536>g?d+=String.fromCharCode(g):(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else d+=String.fromCharCode(g)}return d}function h(e,b){return e?p(ea,e,b):""}function A(){var e=ja.buffer;a.HEAP8=Y=new Int8Array(e);a.HEAP16=new Int16Array(e);a.HEAP32=ca=new Int32Array(e);a.HEAPU8=ea=new Uint8Array(e);a.HEAPU16=new Uint16Array(e);a.HEAPU32=V=new Uint32Array(e);a.HEAPF32=new Float32Array(e);a.HEAPF64=new Float64Array(e)}function f(e){if(a.onAbort)a.onAbort(e);
|
||||
e="Aborted("+e+")";da(e);wa=!0;e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.");ka(e);throw e;}function q(e){try{if(e==P&&fa)return new Uint8Array(fa);if(ma)return ma(e);throw"both async and sync fetching of the wasm failed";}catch(b){f(b)}}function v(){if(!fa&&(xa||ha)){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 q(P)});
|
||||
if(na)return new Promise(function(e,b){na(P,function(c){e(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return q(P)})}function z(e){for(;0<e.length;)e.shift()(a)}function O(e){this.excPtr=e;this.ptr=e-24;this.set_type=function(b){V[this.ptr+4>>2]=b};this.get_type=function(){return V[this.ptr+4>>2]};this.set_destructor=function(b){V[this.ptr+8>>2]=b};this.get_destructor=function(){return V[this.ptr+8>>2]};this.set_refcount=function(b){ca[this.ptr>>2]=b};this.set_caught=function(b){Y[this.ptr+
|
||||
12>>0]=b?1:0};this.get_caught=function(){return 0!=Y[this.ptr+12>>0]};this.set_rethrown=function(b){Y[this.ptr+13>>0]=b?1:0};this.get_rethrown=function(){return 0!=Y[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){V[this.ptr+
|
||||
16>>2]=b};this.get_adjusted_ptr=function(){return V[this.ptr+16>>2]};this.get_exception_ptr=function(){if(ya(this.get_type()))return V[this.excPtr>>2];var b=this.get_adjusted_ptr();return 0!==b?b:this.excPtr}}function ba(){function e(){if(!la&&(la=!0,a.calledRun=!0,!wa)){za=!0;z(oa);Aa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ba.unshift(a.postRun.shift());z(Ba)}}if(!(0<aa)){if(a.preRun)for("function"==
|
||||
typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)Ca.unshift(a.preRun.shift());z(Ca);0<aa||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);e()},1)):e())}}function t(){}function x(e){return(e||t).__cache__}function D(e,b){var c=x(b),d=c[e];if(d)return d;d=Object.create((b||t).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 u=e.charCodeAt(g);if(55296<=u&&57343>=u){var X=e.charCodeAt(++g);u=65536+((u&1023)<<10)|X&1023}if(127>=u){if(c>=d)break;b[c++]=u}else{if(2047>=u){if(c+1>=d)break;b[c++]=192|u>>6}else{if(65535>=u){if(c+2>=d)break;b[c++]=224|u>>12}else{if(c+3>=d)break;b[c++]=240|u>>18;b[c++]=128|u>>12&63}b[c++]=128|u>>6&63}b[c++]=128|u&63}}b[c]=0}e=r.alloc(b,Y);r.copy(b,Y,e);return e}return e}function pa(e){if("object"===typeof e){var b=
|
||||
r.alloc(e,Y);r.copy(e,Y,b);return b}return e}function Z(){throw"cannot construct a VoidPtr, no constructor in IDL";}function S(){this.ptr=Da();x(S)[this.ptr]=this}function Q(){this.ptr=Ea();x(Q)[this.ptr]=this}function W(){this.ptr=Fa();x(W)[this.ptr]=this}function w(){this.ptr=Ga();x(w)[this.ptr]=this}function C(){this.ptr=Ha();x(C)[this.ptr]=this}function F(){this.ptr=Ia();x(F)[this.ptr]=this}function G(){this.ptr=Ja();x(G)[this.ptr]=this}function E(){this.ptr=Ka();x(E)[this.ptr]=this}function T(){this.ptr=
|
||||
La();x(T)[this.ptr]=this}function B(){throw"cannot construct a Status, no constructor in IDL";}function H(){this.ptr=Ma();x(H)[this.ptr]=this}function I(){this.ptr=Na();x(I)[this.ptr]=this}function J(){this.ptr=Oa();x(J)[this.ptr]=this}function K(){this.ptr=Pa();x(K)[this.ptr]=this}function L(){this.ptr=Qa();x(L)[this.ptr]=this}function M(){this.ptr=Ra();x(M)[this.ptr]=this}function N(){this.ptr=Sa();x(N)[this.ptr]=this}function y(){this.ptr=Ta();x(y)[this.ptr]=this}function m(){this.ptr=Ua();x(m)[this.ptr]=
|
||||
this}n=void 0===n?{}:n;var a="undefined"!=typeof n?n:{},Aa,ka;a.ready=new Promise(function(e,b){Aa=e;ka=b});var Va=!1,Wa=!1;a.onRuntimeInitialized=function(){Va=!0;if(Wa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Wa=!0;if(Va&&"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 Xa=
|
||||
Object.assign({},a),xa="object"==typeof window,ha="function"==typeof importScripts,Ya="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,U="";if(Ya){var Za=require("fs"),qa=require("path");U=ha?qa.dirname(U)+"/":__dirname+"/";var $a=function(e,b){e=e.startsWith("file://")?new URL(e):qa.normalize(e);return Za.readFileSync(e,b?void 0:"utf8")};var ma=function(e){e=$a(e,!0);e.buffer||(e=new Uint8Array(e));return e};var na=function(e,b,c){e=e.startsWith("file://")?
|
||||
new URL(e):qa.normalize(e);Za.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(xa||ha)ha?U=self.location.href:"undefined"!=typeof document&&document.currentScript&&(U=document.currentScript.src),k&&(U=k),U=0!==U.indexOf("blob:")?U.substr(0,U.replace(/[?#].*/,"").lastIndexOf("/")+1):"",$a=function(e){var b=new XMLHttpRequest;b.open("GET",e,!1);b.send(null);
|
||||
return b.responseText},ha&&(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)};var ud=a.print||console.log.bind(console),da=a.printErr||console.warn.bind(console);Object.assign(a,Xa);Xa=null;var fa;a.wasmBinary&&(fa=a.wasmBinary);
|
||||
"object"!=typeof WebAssembly&&f("no native wasm support detected");var ja,wa=!1,va="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,Y,ea,ca,V,Ca=[],oa=[],Ba=[],za=!1,aa=0,ra=null,ia=null;var P="draco_decoder.wasm";P.startsWith("data:application/octet-stream;base64,")||(P=l(P));var vd=0,wd=[null,[],[]],xd={b:function(e,b,c){(new O(e)).init(b,c);vd++;throw e;},a:function(){f("")},g:function(e,b,c){ea.copyWithin(e,b,b+c)},e:function(e){var b=ea.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);A();var u=1;break a}catch(X){}u=void 0}if(u)return!0}return!1},f:function(e){return 52},d:function(e,b,c,d,g){return 70},c:function(e,b,c,d){for(var g=0,u=0;u<c;u++){var X=V[b>>2],ab=V[b+4>>2];b+=8;for(var sa=0;sa<ab;sa++){var ta=ea[X+sa],ua=wd[e];0===ta||10===ta?((1===e?ud:da)(p(ua,0)),ua.length=0):ua.push(ta)}g+=
|
||||
ab}V[d>>2]=g;return 0}};(function(){function e(g,u){a.asm=g.exports;ja=a.asm.h;A();oa.unshift(a.asm.i);aa--;a.monitorRunDependencies&&a.monitorRunDependencies(aa);0==aa&&(null!==ra&&(clearInterval(ra),ra=null),ia&&(g=ia,ia=null,g()))}function b(g){e(g.instance)}function c(g){return v().then(function(u){return WebAssembly.instantiate(u,d)}).then(function(u){return u}).then(g,function(u){da("failed to asynchronously prepare wasm: "+u);f(u)})}var d={a:xd};aa++;a.monitorRunDependencies&&a.monitorRunDependencies(aa);
|
||||
if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(g){da("Module.instantiateWasm callback failed with error: "+g),ka(g)}(function(){return fa||"function"!=typeof WebAssembly.instantiateStreaming||P.startsWith("data:application/octet-stream;base64,")||P.startsWith("file://")||Ya||"function"!=typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(u){da("wasm streaming compile failed: "+u);da("falling back to ArrayBuffer instantiation");
|
||||
return c(b)})})})().catch(ka);return{}})();var bb=a._emscripten_bind_VoidPtr___destroy___0=function(){return(bb=a._emscripten_bind_VoidPtr___destroy___0=a.asm.k).apply(null,arguments)},Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return(Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=a.asm.l).apply(null,arguments)},cb=a._emscripten_bind_DecoderBuffer_Init_2=function(){return(cb=a._emscripten_bind_DecoderBuffer_Init_2=a.asm.m).apply(null,arguments)},db=a._emscripten_bind_DecoderBuffer___destroy___0=
|
||||
function(){return(db=a._emscripten_bind_DecoderBuffer___destroy___0=a.asm.n).apply(null,arguments)},Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return(Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=a.asm.o).apply(null,arguments)},eb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return(eb=a._emscripten_bind_AttributeTransformData_transform_type_0=a.asm.p).apply(null,arguments)},fb=a._emscripten_bind_AttributeTransformData___destroy___0=
|
||||
function(){return(fb=a._emscripten_bind_AttributeTransformData___destroy___0=a.asm.q).apply(null,arguments)},Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return(Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=a.asm.r).apply(null,arguments)},gb=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return(gb=a._emscripten_bind_GeometryAttribute___destroy___0=a.asm.s).apply(null,arguments)},Ga=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return(Ga=
|
||||
a._emscripten_bind_PointAttribute_PointAttribute_0=a.asm.t).apply(null,arguments)},hb=a._emscripten_bind_PointAttribute_size_0=function(){return(hb=a._emscripten_bind_PointAttribute_size_0=a.asm.u).apply(null,arguments)},ib=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return(ib=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=a.asm.v).apply(null,arguments)},jb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return(jb=a._emscripten_bind_PointAttribute_attribute_type_0=
|
||||
a.asm.w).apply(null,arguments)},kb=a._emscripten_bind_PointAttribute_data_type_0=function(){return(kb=a._emscripten_bind_PointAttribute_data_type_0=a.asm.x).apply(null,arguments)},lb=a._emscripten_bind_PointAttribute_num_components_0=function(){return(lb=a._emscripten_bind_PointAttribute_num_components_0=a.asm.y).apply(null,arguments)},mb=a._emscripten_bind_PointAttribute_normalized_0=function(){return(mb=a._emscripten_bind_PointAttribute_normalized_0=a.asm.z).apply(null,arguments)},nb=a._emscripten_bind_PointAttribute_byte_stride_0=
|
||||
function(){return(nb=a._emscripten_bind_PointAttribute_byte_stride_0=a.asm.A).apply(null,arguments)},ob=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return(ob=a._emscripten_bind_PointAttribute_byte_offset_0=a.asm.B).apply(null,arguments)},pb=a._emscripten_bind_PointAttribute_unique_id_0=function(){return(pb=a._emscripten_bind_PointAttribute_unique_id_0=a.asm.C).apply(null,arguments)},qb=a._emscripten_bind_PointAttribute___destroy___0=function(){return(qb=a._emscripten_bind_PointAttribute___destroy___0=
|
||||
a.asm.D).apply(null,arguments)},Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return(Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=a.asm.E).apply(null,arguments)},rb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return(rb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=a.asm.F).apply(null,arguments)},sb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=
|
||||
function(){return(sb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=a.asm.G).apply(null,arguments)},tb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return(tb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=a.asm.H).apply(null,arguments)},ub=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return(ub=a._emscripten_bind_AttributeQuantizationTransform_range_0=a.asm.I).apply(null,arguments)},vb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=
|
||||
function(){return(vb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=a.asm.J).apply(null,arguments)},Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return(Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=a.asm.K).apply(null,arguments)},wb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return(wb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=a.asm.L).apply(null,
|
||||
arguments)},xb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return(xb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=a.asm.M).apply(null,arguments)},yb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return(yb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=a.asm.N).apply(null,arguments)},Ja=a._emscripten_bind_PointCloud_PointCloud_0=function(){return(Ja=a._emscripten_bind_PointCloud_PointCloud_0=a.asm.O).apply(null,
|
||||
arguments)},zb=a._emscripten_bind_PointCloud_num_attributes_0=function(){return(zb=a._emscripten_bind_PointCloud_num_attributes_0=a.asm.P).apply(null,arguments)},Ab=a._emscripten_bind_PointCloud_num_points_0=function(){return(Ab=a._emscripten_bind_PointCloud_num_points_0=a.asm.Q).apply(null,arguments)},Bb=a._emscripten_bind_PointCloud___destroy___0=function(){return(Bb=a._emscripten_bind_PointCloud___destroy___0=a.asm.R).apply(null,arguments)},Ka=a._emscripten_bind_Mesh_Mesh_0=function(){return(Ka=
|
||||
a._emscripten_bind_Mesh_Mesh_0=a.asm.S).apply(null,arguments)},Cb=a._emscripten_bind_Mesh_num_faces_0=function(){return(Cb=a._emscripten_bind_Mesh_num_faces_0=a.asm.T).apply(null,arguments)},Db=a._emscripten_bind_Mesh_num_attributes_0=function(){return(Db=a._emscripten_bind_Mesh_num_attributes_0=a.asm.U).apply(null,arguments)},Eb=a._emscripten_bind_Mesh_num_points_0=function(){return(Eb=a._emscripten_bind_Mesh_num_points_0=a.asm.V).apply(null,arguments)},Fb=a._emscripten_bind_Mesh___destroy___0=function(){return(Fb=
|
||||
a._emscripten_bind_Mesh___destroy___0=a.asm.W).apply(null,arguments)},La=a._emscripten_bind_Metadata_Metadata_0=function(){return(La=a._emscripten_bind_Metadata_Metadata_0=a.asm.X).apply(null,arguments)},Gb=a._emscripten_bind_Metadata___destroy___0=function(){return(Gb=a._emscripten_bind_Metadata___destroy___0=a.asm.Y).apply(null,arguments)},Hb=a._emscripten_bind_Status_code_0=function(){return(Hb=a._emscripten_bind_Status_code_0=a.asm.Z).apply(null,arguments)},Ib=a._emscripten_bind_Status_ok_0=function(){return(Ib=
|
||||
a._emscripten_bind_Status_ok_0=a.asm._).apply(null,arguments)},Jb=a._emscripten_bind_Status_error_msg_0=function(){return(Jb=a._emscripten_bind_Status_error_msg_0=a.asm.$).apply(null,arguments)},Kb=a._emscripten_bind_Status___destroy___0=function(){return(Kb=a._emscripten_bind_Status___destroy___0=a.asm.aa).apply(null,arguments)},Ma=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return(Ma=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=a.asm.ba).apply(null,arguments)},
|
||||
Lb=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return(Lb=a._emscripten_bind_DracoFloat32Array_GetValue_1=a.asm.ca).apply(null,arguments)},Mb=a._emscripten_bind_DracoFloat32Array_size_0=function(){return(Mb=a._emscripten_bind_DracoFloat32Array_size_0=a.asm.da).apply(null,arguments)},Nb=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return(Nb=a._emscripten_bind_DracoFloat32Array___destroy___0=a.asm.ea).apply(null,arguments)},Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=
|
||||
function(){return(Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=a.asm.fa).apply(null,arguments)},Ob=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return(Ob=a._emscripten_bind_DracoInt8Array_GetValue_1=a.asm.ga).apply(null,arguments)},Pb=a._emscripten_bind_DracoInt8Array_size_0=function(){return(Pb=a._emscripten_bind_DracoInt8Array_size_0=a.asm.ha).apply(null,arguments)},Qb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return(Qb=a._emscripten_bind_DracoInt8Array___destroy___0=
|
||||
a.asm.ia).apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return(Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=a.asm.ja).apply(null,arguments)},Rb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return(Rb=a._emscripten_bind_DracoUInt8Array_GetValue_1=a.asm.ka).apply(null,arguments)},Sb=a._emscripten_bind_DracoUInt8Array_size_0=function(){return(Sb=a._emscripten_bind_DracoUInt8Array_size_0=a.asm.la).apply(null,arguments)},Tb=a._emscripten_bind_DracoUInt8Array___destroy___0=
|
||||
function(){return(Tb=a._emscripten_bind_DracoUInt8Array___destroy___0=a.asm.ma).apply(null,arguments)},Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return(Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=a.asm.na).apply(null,arguments)},Ub=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return(Ub=a._emscripten_bind_DracoInt16Array_GetValue_1=a.asm.oa).apply(null,arguments)},Vb=a._emscripten_bind_DracoInt16Array_size_0=function(){return(Vb=a._emscripten_bind_DracoInt16Array_size_0=
|
||||
a.asm.pa).apply(null,arguments)},Wb=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return(Wb=a._emscripten_bind_DracoInt16Array___destroy___0=a.asm.qa).apply(null,arguments)},Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return(Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=a.asm.ra).apply(null,arguments)},Xb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return(Xb=a._emscripten_bind_DracoUInt16Array_GetValue_1=a.asm.sa).apply(null,arguments)},
|
||||
Yb=a._emscripten_bind_DracoUInt16Array_size_0=function(){return(Yb=a._emscripten_bind_DracoUInt16Array_size_0=a.asm.ta).apply(null,arguments)},Zb=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return(Zb=a._emscripten_bind_DracoUInt16Array___destroy___0=a.asm.ua).apply(null,arguments)},Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return(Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=a.asm.va).apply(null,arguments)},$b=a._emscripten_bind_DracoInt32Array_GetValue_1=
|
||||
function(){return($b=a._emscripten_bind_DracoInt32Array_GetValue_1=a.asm.wa).apply(null,arguments)},ac=a._emscripten_bind_DracoInt32Array_size_0=function(){return(ac=a._emscripten_bind_DracoInt32Array_size_0=a.asm.xa).apply(null,arguments)},bc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return(bc=a._emscripten_bind_DracoInt32Array___destroy___0=a.asm.ya).apply(null,arguments)},Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return(Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=
|
||||
a.asm.za).apply(null,arguments)},cc=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return(cc=a._emscripten_bind_DracoUInt32Array_GetValue_1=a.asm.Aa).apply(null,arguments)},dc=a._emscripten_bind_DracoUInt32Array_size_0=function(){return(dc=a._emscripten_bind_DracoUInt32Array_size_0=a.asm.Ba).apply(null,arguments)},ec=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return(ec=a._emscripten_bind_DracoUInt32Array___destroy___0=a.asm.Ca).apply(null,arguments)},Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=
|
||||
function(){return(Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=a.asm.Da).apply(null,arguments)},fc=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return(fc=a._emscripten_bind_MetadataQuerier_HasEntry_2=a.asm.Ea).apply(null,arguments)},gc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return(gc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=a.asm.Fa).apply(null,arguments)},hc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=function(){return(hc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=
|
||||
a.asm.Ga).apply(null,arguments)},ic=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return(ic=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=a.asm.Ha).apply(null,arguments)},jc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return(jc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=a.asm.Ia).apply(null,arguments)},kc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return(kc=a._emscripten_bind_MetadataQuerier_NumEntries_1=a.asm.Ja).apply(null,arguments)},
|
||||
lc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return(lc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=a.asm.Ka).apply(null,arguments)},mc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return(mc=a._emscripten_bind_MetadataQuerier___destroy___0=a.asm.La).apply(null,arguments)},Ua=a._emscripten_bind_Decoder_Decoder_0=function(){return(Ua=a._emscripten_bind_Decoder_Decoder_0=a.asm.Ma).apply(null,arguments)},nc=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=function(){return(nc=
|
||||
a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=a.asm.Na).apply(null,arguments)},oc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=function(){return(oc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=a.asm.Oa).apply(null,arguments)},pc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return(pc=a._emscripten_bind_Decoder_GetAttributeId_2=a.asm.Pa).apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return(qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=
|
||||
a.asm.Qa).apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return(rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=a.asm.Ra).apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return(sc=a._emscripten_bind_Decoder_GetAttribute_2=a.asm.Sa).apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return(tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=a.asm.Ta).apply(null,arguments)},
|
||||
uc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return(uc=a._emscripten_bind_Decoder_GetMetadata_1=a.asm.Ua).apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return(vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=a.asm.Va).apply(null,arguments)},wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return(wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=a.asm.Wa).apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=
|
||||
function(){return(xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=a.asm.Xa).apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return(yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=a.asm.Ya).apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=function(){return(zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=a.asm.Za).apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return(Ac=
|
||||
a._emscripten_bind_Decoder_GetAttributeFloat_3=a.asm._a).apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return(Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=a.asm.$a).apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return(Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=a.asm.ab).apply(null,arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return(Dc=
|
||||
a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=a.asm.bb).apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return(Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=a.asm.cb).apply(null,arguments)},Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return(Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=a.asm.db).apply(null,arguments)},Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=
|
||||
function(){return(Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=a.asm.eb).apply(null,arguments)},Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return(Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=a.asm.fb).apply(null,arguments)},Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return(Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=a.asm.gb).apply(null,arguments)},Jc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=
|
||||
function(){return(Jc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=a.asm.hb).apply(null,arguments)},Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return(Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=a.asm.ib).apply(null,arguments)},Lc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=function(){return(Lc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=a.asm.jb).apply(null,arguments)},Mc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=
|
||||
function(){return(Mc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=a.asm.kb).apply(null,arguments)},Nc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return(Nc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=a.asm.lb).apply(null,arguments)},Oc=a._emscripten_bind_Decoder___destroy___0=function(){return(Oc=a._emscripten_bind_Decoder___destroy___0=a.asm.mb).apply(null,arguments)},Pc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return(Pc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=
|
||||
a.asm.nb).apply(null,arguments)},Qc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return(Qc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=a.asm.ob).apply(null,arguments)},Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return(Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=a.asm.pb).apply(null,arguments)},Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=
|
||||
function(){return(Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=a.asm.qb).apply(null,arguments)},Tc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return(Tc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=a.asm.rb).apply(null,arguments)},Uc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return(Uc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=a.asm.sb).apply(null,arguments)},Vc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=
|
||||
function(){return(Vc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=a.asm.tb).apply(null,arguments)},Wc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return(Wc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=a.asm.ub).apply(null,arguments)},Xc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return(Xc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=a.asm.vb).apply(null,arguments)},Yc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=
|
||||
function(){return(Yc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=a.asm.wb).apply(null,arguments)},Zc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return(Zc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=a.asm.xb).apply(null,arguments)},$c=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return($c=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=a.asm.yb).apply(null,arguments)},ad=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=
|
||||
function(){return(ad=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=a.asm.zb).apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return(bd=a._emscripten_enum_draco_DataType_DT_INVALID=a.asm.Ab).apply(null,arguments)},cd=a._emscripten_enum_draco_DataType_DT_INT8=function(){return(cd=a._emscripten_enum_draco_DataType_DT_INT8=a.asm.Bb).apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_UINT8=function(){return(dd=a._emscripten_enum_draco_DataType_DT_UINT8=
|
||||
a.asm.Cb).apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_INT16=function(){return(ed=a._emscripten_enum_draco_DataType_DT_INT16=a.asm.Db).apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return(fd=a._emscripten_enum_draco_DataType_DT_UINT16=a.asm.Eb).apply(null,arguments)},gd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return(gd=a._emscripten_enum_draco_DataType_DT_INT32=a.asm.Fb).apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_UINT32=
|
||||
function(){return(hd=a._emscripten_enum_draco_DataType_DT_UINT32=a.asm.Gb).apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_INT64=function(){return(id=a._emscripten_enum_draco_DataType_DT_INT64=a.asm.Hb).apply(null,arguments)},jd=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return(jd=a._emscripten_enum_draco_DataType_DT_UINT64=a.asm.Ib).apply(null,arguments)},kd=a._emscripten_enum_draco_DataType_DT_FLOAT32=function(){return(kd=a._emscripten_enum_draco_DataType_DT_FLOAT32=a.asm.Jb).apply(null,
|
||||
arguments)},ld=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return(ld=a._emscripten_enum_draco_DataType_DT_FLOAT64=a.asm.Kb).apply(null,arguments)},md=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return(md=a._emscripten_enum_draco_DataType_DT_BOOL=a.asm.Lb).apply(null,arguments)},nd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return(nd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=a.asm.Mb).apply(null,arguments)},od=a._emscripten_enum_draco_StatusCode_OK=function(){return(od=
|
||||
a._emscripten_enum_draco_StatusCode_OK=a.asm.Nb).apply(null,arguments)},pd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return(pd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=a.asm.Ob).apply(null,arguments)},qd=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return(qd=a._emscripten_enum_draco_StatusCode_IO_ERROR=a.asm.Pb).apply(null,arguments)},rd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return(rd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=
|
||||
a.asm.Qb).apply(null,arguments)},sd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return(sd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=a.asm.Rb).apply(null,arguments)},td=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return(td=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=a.asm.Sb).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.Tb).apply(null,arguments)};a._free=function(){return(a._free=a.asm.Ub).apply(null,arguments)};
|
||||
var ya=function(){return(ya=a.asm.Vb).apply(null,arguments)};a.___start_em_js=15856;a.___stop_em_js=15954;var la;ia=function b(){la||ba();la||(ia=b)};if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();ba();t.prototype=Object.create(t.prototype);t.prototype.constructor=t;t.prototype.__class__=t;t.__cache__={};a.WrapperObject=t;a.getCache=x;a.wrapPointer=D;a.castObject=function(b,c){return D(b.ptr,c)};a.NULL=D(0);a.destroy=function(b){if(!b.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";
|
||||
b.__destroy__();delete x(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||f(void 0));r.pos=0},alloc:function(b,c){r.buffer||f(void 0);b=
|
||||
b.length*c.BYTES_PER_ELEMENT;b=b+7&-8;r.pos+b>=r.size?(0<b||f(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]}};Z.prototype=Object.create(t.prototype);Z.prototype.constructor=Z;Z.prototype.__class__=Z;Z.__cache__={};a.VoidPtr=Z;Z.prototype.__destroy__=Z.prototype.__destroy__=function(){bb(this.ptr)};S.prototype=
|
||||
Object.create(t.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=pa(b));c&&"object"===typeof c&&(c=c.ptr);cb(d,b,c)};S.prototype.__destroy__=S.prototype.__destroy__=function(){db(this.ptr)};Q.prototype=Object.create(t.prototype);Q.prototype.constructor=Q;Q.prototype.__class__=Q;Q.__cache__={};a.AttributeTransformData=Q;Q.prototype.transform_type=Q.prototype.transform_type=
|
||||
function(){return eb(this.ptr)};Q.prototype.__destroy__=Q.prototype.__destroy__=function(){fb(this.ptr)};W.prototype=Object.create(t.prototype);W.prototype.constructor=W;W.prototype.__class__=W;W.__cache__={};a.GeometryAttribute=W;W.prototype.__destroy__=W.prototype.__destroy__=function(){gb(this.ptr)};w.prototype=Object.create(t.prototype);w.prototype.constructor=w;w.prototype.__class__=w;w.__cache__={};a.PointAttribute=w;w.prototype.size=w.prototype.size=function(){return hb(this.ptr)};w.prototype.GetAttributeTransformData=
|
||||
w.prototype.GetAttributeTransformData=function(){return D(ib(this.ptr),Q)};w.prototype.attribute_type=w.prototype.attribute_type=function(){return jb(this.ptr)};w.prototype.data_type=w.prototype.data_type=function(){return kb(this.ptr)};w.prototype.num_components=w.prototype.num_components=function(){return lb(this.ptr)};w.prototype.normalized=w.prototype.normalized=function(){return!!mb(this.ptr)};w.prototype.byte_stride=w.prototype.byte_stride=function(){return nb(this.ptr)};w.prototype.byte_offset=
|
||||
w.prototype.byte_offset=function(){return ob(this.ptr)};w.prototype.unique_id=w.prototype.unique_id=function(){return pb(this.ptr)};w.prototype.__destroy__=w.prototype.__destroy__=function(){qb(this.ptr)};C.prototype=Object.create(t.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.AttributeQuantizationTransform=C;C.prototype.InitFromAttribute=C.prototype.InitFromAttribute=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!rb(c,b)};C.prototype.quantization_bits=
|
||||
C.prototype.quantization_bits=function(){return sb(this.ptr)};C.prototype.min_value=C.prototype.min_value=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return tb(c,b)};C.prototype.range=C.prototype.range=function(){return ub(this.ptr)};C.prototype.__destroy__=C.prototype.__destroy__=function(){vb(this.ptr)};F.prototype=Object.create(t.prototype);F.prototype.constructor=F;F.prototype.__class__=F;F.__cache__={};a.AttributeOctahedronTransform=F;F.prototype.InitFromAttribute=F.prototype.InitFromAttribute=
|
||||
function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!wb(c,b)};F.prototype.quantization_bits=F.prototype.quantization_bits=function(){return xb(this.ptr)};F.prototype.__destroy__=F.prototype.__destroy__=function(){yb(this.ptr)};G.prototype=Object.create(t.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.PointCloud=G;G.prototype.num_attributes=G.prototype.num_attributes=function(){return zb(this.ptr)};G.prototype.num_points=G.prototype.num_points=function(){return Ab(this.ptr)};
|
||||
G.prototype.__destroy__=G.prototype.__destroy__=function(){Bb(this.ptr)};E.prototype=Object.create(t.prototype);E.prototype.constructor=E;E.prototype.__class__=E;E.__cache__={};a.Mesh=E;E.prototype.num_faces=E.prototype.num_faces=function(){return Cb(this.ptr)};E.prototype.num_attributes=E.prototype.num_attributes=function(){return Db(this.ptr)};E.prototype.num_points=E.prototype.num_points=function(){return Eb(this.ptr)};E.prototype.__destroy__=E.prototype.__destroy__=function(){Fb(this.ptr)};T.prototype=
|
||||
Object.create(t.prototype);T.prototype.constructor=T;T.prototype.__class__=T;T.__cache__={};a.Metadata=T;T.prototype.__destroy__=T.prototype.__destroy__=function(){Gb(this.ptr)};B.prototype=Object.create(t.prototype);B.prototype.constructor=B;B.prototype.__class__=B;B.__cache__={};a.Status=B;B.prototype.code=B.prototype.code=function(){return Hb(this.ptr)};B.prototype.ok=B.prototype.ok=function(){return!!Ib(this.ptr)};B.prototype.error_msg=B.prototype.error_msg=function(){return h(Jb(this.ptr))};
|
||||
B.prototype.__destroy__=B.prototype.__destroy__=function(){Kb(this.ptr)};H.prototype=Object.create(t.prototype);H.prototype.constructor=H;H.prototype.__class__=H;H.__cache__={};a.DracoFloat32Array=H;H.prototype.GetValue=H.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Lb(c,b)};H.prototype.size=H.prototype.size=function(){return Mb(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){Nb(this.ptr)};I.prototype=Object.create(t.prototype);I.prototype.constructor=
|
||||
I;I.prototype.__class__=I;I.__cache__={};a.DracoInt8Array=I;I.prototype.GetValue=I.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Ob(c,b)};I.prototype.size=I.prototype.size=function(){return Pb(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Qb(this.ptr)};J.prototype=Object.create(t.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoUInt8Array=J;J.prototype.GetValue=J.prototype.GetValue=function(b){var c=
|
||||
this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Rb(c,b)};J.prototype.size=J.prototype.size=function(){return Sb(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Tb(this.ptr)};K.prototype=Object.create(t.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.DracoInt16Array=K;K.prototype.GetValue=K.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Ub(c,b)};K.prototype.size=K.prototype.size=function(){return Vb(this.ptr)};
|
||||
K.prototype.__destroy__=K.prototype.__destroy__=function(){Wb(this.ptr)};L.prototype=Object.create(t.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoUInt16Array=L;L.prototype.GetValue=L.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Xb(c,b)};L.prototype.size=L.prototype.size=function(){return Yb(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){Zb(this.ptr)};M.prototype=Object.create(t.prototype);M.prototype.constructor=
|
||||
M;M.prototype.__class__=M;M.__cache__={};a.DracoInt32Array=M;M.prototype.GetValue=M.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return $b(c,b)};M.prototype.size=M.prototype.size=function(){return ac(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){bc(this.ptr)};N.prototype=Object.create(t.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoUInt32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(b){var c=
|
||||
this.ptr;b&&"object"===typeof b&&(b=b.ptr);return cc(c,b)};N.prototype.size=N.prototype.size=function(){return dc(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){ec(this.ptr)};y.prototype=Object.create(t.prototype);y.prototype.constructor=y;y.prototype.__class__=y;y.__cache__={};a.MetadataQuerier=y;y.prototype.HasEntry=y.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!!fc(d,b,c)};y.prototype.GetIntEntry=
|
||||
y.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 gc(d,b,c)};y.prototype.GetIntEntryArray=y.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);hc(g,b,c,d)};y.prototype.GetDoubleEntry=y.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 ic(d,b,c)};y.prototype.GetStringEntry=y.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 h(jc(d,b,c))};y.prototype.NumEntries=y.prototype.NumEntries=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return kc(c,b)};y.prototype.GetEntryName=y.prototype.GetEntryName=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=
|
||||
c.ptr);return h(lc(d,b,c))};y.prototype.__destroy__=y.prototype.__destroy__=function(){mc(this.ptr)};m.prototype=Object.create(t.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=pa(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return D(nc(g,b,c,d),B)};m.prototype.DecodeArrayToMesh=m.prototype.DecodeArrayToMesh=
|
||||
function(b,c,d){var g=this.ptr;r.prepare();"object"==typeof b&&(b=pa(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return D(oc(g,b,c,d),B)};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 pc(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 qc(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 rc(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 D(sc(d,b,c),w)};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 D(tc(d,b,c),w)};m.prototype.GetMetadata=m.prototype.GetMetadata=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return D(uc(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 D(vc(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!!wc(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 xc(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!!yc(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!!zc(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!!Ac(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!!Bc(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!!Cc(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!!Dc(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!!Ec(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!!Fc(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!!Gc(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!!Hc(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!!Ic(g,b,c,d)};m.prototype.GetAttributeDataArrayForAllPoints=m.prototype.GetAttributeDataArrayForAllPoints=function(b,c,d,g,u){var X=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);u&&"object"===typeof u&&(u=u.ptr);return!!Jc(X,b,c,d,g,u)};m.prototype.SkipAttributeTransform=m.prototype.SkipAttributeTransform=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);Kc(c,b)};m.prototype.GetEncodedGeometryType_Deprecated=m.prototype.GetEncodedGeometryType_Deprecated=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Lc(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 D(Mc(d,b,c),B)};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 D(Nc(d,b,c),B)};m.prototype.__destroy__=m.prototype.__destroy__=function(){Oc(this.ptr)};(function(){function b(){a.ATTRIBUTE_INVALID_TRANSFORM=Pc();a.ATTRIBUTE_NO_TRANSFORM=Qc();
|
||||
a.ATTRIBUTE_QUANTIZATION_TRANSFORM=Rc();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=Sc();a.INVALID=Tc();a.POSITION=Uc();a.NORMAL=Vc();a.COLOR=Wc();a.TEX_COORD=Xc();a.GENERIC=Yc();a.INVALID_GEOMETRY_TYPE=Zc();a.POINT_CLOUD=$c();a.TRIANGULAR_MESH=ad();a.DT_INVALID=bd();a.DT_INT8=cd();a.DT_UINT8=dd();a.DT_INT16=ed();a.DT_UINT16=fd();a.DT_INT32=gd();a.DT_UINT32=hd();a.DT_INT64=id();a.DT_UINT64=jd();a.DT_FLOAT32=kd();a.DT_FLOAT64=ld();a.DT_BOOL=md();a.DT_TYPES_COUNT=nd();a.OK=od();a.DRACO_ERROR=pd();a.IO_ERROR=qd();
|
||||
a.INVALID_PARAMETER=rd();a.UNSUPPORTED_VERSION=sd();a.UNKNOWN_VERSION=td()}za?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);
|
33
public/draco/gltf/draco_decoder.js
Normal file
BIN
public/draco/gltf/draco_decoder.wasm
Normal file
33
public/draco/gltf/draco_encoder.js
Normal file
116
public/draco/gltf/draco_wasm_wrapper.js
Normal file
@ -0,0 +1,116 @@
|
||||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(h){var n=0;return function(){return n<h.length?{done:!1,value:h[n++]}:{done:!0}}};$jscomp.arrayIterator=function(h){return{next:$jscomp.arrayIteratorImpl(h)}};$jscomp.makeIterator=function(h){var n="undefined"!=typeof Symbol&&Symbol.iterator&&h[Symbol.iterator];return n?n.call(h):$jscomp.arrayIterator(h)};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
|
||||
$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.getGlobal=function(h){h=["object"==typeof globalThis&&globalThis,h,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var n=0;n<h.length;++n){var k=h[n];if(k&&k.Math==Math)return k}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
|
||||
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(h,n,k){if(h==Array.prototype||h==Object.prototype)return h;h[n]=k.value;return h};$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";
|
||||
var $jscomp$lookupPolyfilledValue=function(h,n){var k=$jscomp.propertyToPolyfillSymbol[n];if(null==k)return h[n];k=h[k];return void 0!==k?k:h[n]};$jscomp.polyfill=function(h,n,k,p){n&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(h,n,k,p):$jscomp.polyfillUnisolated(h,n,k,p))};
|
||||
$jscomp.polyfillUnisolated=function(h,n,k,p){k=$jscomp.global;h=h.split(".");for(p=0;p<h.length-1;p++){var l=h[p];if(!(l in k))return;k=k[l]}h=h[h.length-1];p=k[h];n=n(p);n!=p&&null!=n&&$jscomp.defineProperty(k,h,{configurable:!0,writable:!0,value:n})};
|
||||
$jscomp.polyfillIsolated=function(h,n,k,p){var l=h.split(".");h=1===l.length;p=l[0];p=!h&&p in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var y=0;y<l.length-1;y++){var f=l[y];if(!(f in p))return;p=p[f]}l=l[l.length-1];k=$jscomp.IS_SYMBOL_NATIVE&&"es6"===k?p[l]:null;n=n(k);null!=n&&(h?$jscomp.defineProperty($jscomp.polyfills,l,{configurable:!0,writable:!0,value:n}):n!==k&&(void 0===$jscomp.propertyToPolyfillSymbol[l]&&(k=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[l]=$jscomp.IS_SYMBOL_NATIVE?
|
||||
$jscomp.global.Symbol(l):$jscomp.POLYFILL_PREFIX+k+"$"+l),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[l],{configurable:!0,writable:!0,value:n})))};
|
||||
$jscomp.polyfill("Promise",function(h){function n(){this.batch_=null}function k(f){return f instanceof l?f:new l(function(q,u){q(f)})}if(h&&(!($jscomp.FORCE_POLYFILL_PROMISE||$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&"undefined"===typeof $jscomp.global.PromiseRejectionEvent)||!$jscomp.global.Promise||-1===$jscomp.global.Promise.toString().indexOf("[native code]")))return h;n.prototype.asyncExecute=function(f){if(null==this.batch_){this.batch_=[];var q=this;this.asyncExecuteFunction(function(){q.executeBatch_()})}this.batch_.push(f)};
|
||||
var p=$jscomp.global.setTimeout;n.prototype.asyncExecuteFunction=function(f){p(f,0)};n.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var f=this.batch_;this.batch_=[];for(var q=0;q<f.length;++q){var u=f[q];f[q]=null;try{u()}catch(A){this.asyncThrow_(A)}}}this.batch_=null};n.prototype.asyncThrow_=function(f){this.asyncExecuteFunction(function(){throw f;})};var l=function(f){this.state_=0;this.result_=void 0;this.onSettledCallbacks_=[];this.isRejectionHandled_=!1;var q=this.createResolveAndReject_();
|
||||
try{f(q.resolve,q.reject)}catch(u){q.reject(u)}};l.prototype.createResolveAndReject_=function(){function f(A){return function(F){u||(u=!0,A.call(q,F))}}var q=this,u=!1;return{resolve:f(this.resolveTo_),reject:f(this.reject_)}};l.prototype.resolveTo_=function(f){if(f===this)this.reject_(new TypeError("A Promise cannot resolve to itself"));else if(f instanceof l)this.settleSameAsPromise_(f);else{a:switch(typeof f){case "object":var q=null!=f;break a;case "function":q=!0;break a;default:q=!1}q?this.resolveToNonPromiseObj_(f):
|
||||
this.fulfill_(f)}};l.prototype.resolveToNonPromiseObj_=function(f){var q=void 0;try{q=f.then}catch(u){this.reject_(u);return}"function"==typeof q?this.settleSameAsThenable_(q,f):this.fulfill_(f)};l.prototype.reject_=function(f){this.settle_(2,f)};l.prototype.fulfill_=function(f){this.settle_(1,f)};l.prototype.settle_=function(f,q){if(0!=this.state_)throw Error("Cannot settle("+f+", "+q+"): Promise already settled in state"+this.state_);this.state_=f;this.result_=q;2===this.state_&&this.scheduleUnhandledRejectionCheck_();
|
||||
this.executeOnSettledCallbacks_()};l.prototype.scheduleUnhandledRejectionCheck_=function(){var f=this;p(function(){if(f.notifyUnhandledRejection_()){var q=$jscomp.global.console;"undefined"!==typeof q&&q.error(f.result_)}},1)};l.prototype.notifyUnhandledRejection_=function(){if(this.isRejectionHandled_)return!1;var f=$jscomp.global.CustomEvent,q=$jscomp.global.Event,u=$jscomp.global.dispatchEvent;if("undefined"===typeof u)return!0;"function"===typeof f?f=new f("unhandledrejection",{cancelable:!0}):
|
||||
"function"===typeof q?f=new q("unhandledrejection",{cancelable:!0}):(f=$jscomp.global.document.createEvent("CustomEvent"),f.initCustomEvent("unhandledrejection",!1,!0,f));f.promise=this;f.reason=this.result_;return u(f)};l.prototype.executeOnSettledCallbacks_=function(){if(null!=this.onSettledCallbacks_){for(var f=0;f<this.onSettledCallbacks_.length;++f)y.asyncExecute(this.onSettledCallbacks_[f]);this.onSettledCallbacks_=null}};var y=new n;l.prototype.settleSameAsPromise_=function(f){var q=this.createResolveAndReject_();
|
||||
f.callWhenSettled_(q.resolve,q.reject)};l.prototype.settleSameAsThenable_=function(f,q){var u=this.createResolveAndReject_();try{f.call(q,u.resolve,u.reject)}catch(A){u.reject(A)}};l.prototype.then=function(f,q){function u(w,B){return"function"==typeof w?function(R){try{A(w(R))}catch(Z){F(Z)}}:B}var A,F,v=new l(function(w,B){A=w;F=B});this.callWhenSettled_(u(f,A),u(q,F));return v};l.prototype.catch=function(f){return this.then(void 0,f)};l.prototype.callWhenSettled_=function(f,q){function u(){switch(A.state_){case 1:f(A.result_);
|
||||
break;case 2:q(A.result_);break;default:throw Error("Unexpected state: "+A.state_);}}var A=this;null==this.onSettledCallbacks_?y.asyncExecute(u):this.onSettledCallbacks_.push(u);this.isRejectionHandled_=!0};l.resolve=k;l.reject=function(f){return new l(function(q,u){u(f)})};l.race=function(f){return new l(function(q,u){for(var A=$jscomp.makeIterator(f),F=A.next();!F.done;F=A.next())k(F.value).callWhenSettled_(q,u)})};l.all=function(f){var q=$jscomp.makeIterator(f),u=q.next();return u.done?k([]):new l(function(A,
|
||||
F){function v(R){return function(Z){w[R]=Z;B--;0==B&&A(w)}}var w=[],B=0;do w.push(void 0),B++,k(u.value).callWhenSettled_(v(w.length-1),F),u=q.next();while(!u.done)})};return l},"es6","es3");$jscomp.owns=function(h,n){return Object.prototype.hasOwnProperty.call(h,n)};$jscomp.assign=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.assign?Object.assign:function(h,n){for(var k=1;k<arguments.length;k++){var p=arguments[k];if(p)for(var l in p)$jscomp.owns(p,l)&&(h[l]=p[l])}return h};
|
||||
$jscomp.polyfill("Object.assign",function(h){return h||$jscomp.assign},"es6","es3");$jscomp.checkStringArgs=function(h,n,k){if(null==h)throw new TypeError("The 'this' value for String.prototype."+k+" must not be null or undefined");if(n instanceof RegExp)throw new TypeError("First argument to String.prototype."+k+" must not be a regular expression");return h+""};
|
||||
$jscomp.polyfill("String.prototype.startsWith",function(h){return h?h:function(n,k){var p=$jscomp.checkStringArgs(this,n,"startsWith");n+="";var l=p.length,y=n.length;k=Math.max(0,Math.min(k|0,p.length));for(var f=0;f<y&&k<l;)if(p[k++]!=n[f++])return!1;return f>=y}},"es6","es3");
|
||||
$jscomp.polyfill("Array.prototype.copyWithin",function(h){function n(k){k=Number(k);return Infinity===k||-Infinity===k?k:k|0}return h?h:function(k,p,l){var y=this.length;k=n(k);p=n(p);l=void 0===l?y:n(l);k=0>k?Math.max(y+k,0):Math.min(k,y);p=0>p?Math.max(y+p,0):Math.min(p,y);l=0>l?Math.max(y+l,0):Math.min(l,y);if(k<p)for(;p<l;)p in this?this[k++]=this[p++]:(delete this[k++],p++);else for(l=Math.min(l,y+p-k),k+=l-p;l>p;)--l in this?this[--k]=this[l]:delete this[--k];return this}},"es6","es3");
|
||||
$jscomp.typedArrayCopyWithin=function(h){return h?h:Array.prototype.copyWithin};$jscomp.polyfill("Int8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");
|
||||
$jscomp.polyfill("Uint16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float64Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");
|
||||
var DracoDecoderModule=function(){var h="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;"undefined"!==typeof __filename&&(h=h||__filename);return function(n){function k(e){return a.locateFile?a.locateFile(e,U):U+e}function p(e,b){if(e){var c=ia;var d=e+b;for(b=e;c[b]&&!(b>=d);)++b;if(16<b-e&&c.buffer&&ra)c=ra.decode(c.subarray(e,b));else{for(d="";e<b;){var g=c[e++];if(g&128){var t=c[e++]&63;if(192==(g&224))d+=String.fromCharCode((g&31)<<6|t);else{var aa=c[e++]&
|
||||
63;g=224==(g&240)?(g&15)<<12|t<<6|aa:(g&7)<<18|t<<12|aa<<6|c[e++]&63;65536>g?d+=String.fromCharCode(g):(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else d+=String.fromCharCode(g)}c=d}}else c="";return c}function l(){var e=ja.buffer;a.HEAP8=W=new Int8Array(e);a.HEAP16=new Int16Array(e);a.HEAP32=ca=new Int32Array(e);a.HEAPU8=ia=new Uint8Array(e);a.HEAPU16=new Uint16Array(e);a.HEAPU32=Y=new Uint32Array(e);a.HEAPF32=new Float32Array(e);a.HEAPF64=new Float64Array(e)}function y(e){if(a.onAbort)a.onAbort(e);
|
||||
e="Aborted("+e+")";da(e);sa=!0;e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.");ka(e);throw e;}function f(e){try{if(e==P&&ea)return new Uint8Array(ea);if(ma)return ma(e);throw"both async and sync fetching of the wasm failed";}catch(b){y(b)}}function q(){if(!ea&&(ta||fa)){if("function"==typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+P+"'";return e.arrayBuffer()}).catch(function(){return f(P)});
|
||||
if(na)return new Promise(function(e,b){na(P,function(c){e(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return f(P)})}function u(e){for(;0<e.length;)e.shift()(a)}function A(e){this.excPtr=e;this.ptr=e-24;this.set_type=function(b){Y[this.ptr+4>>2]=b};this.get_type=function(){return Y[this.ptr+4>>2]};this.set_destructor=function(b){Y[this.ptr+8>>2]=b};this.get_destructor=function(){return Y[this.ptr+8>>2]};this.set_refcount=function(b){ca[this.ptr>>2]=b};this.set_caught=function(b){W[this.ptr+
|
||||
12>>0]=b?1:0};this.get_caught=function(){return 0!=W[this.ptr+12>>0]};this.set_rethrown=function(b){W[this.ptr+13>>0]=b?1:0};this.get_rethrown=function(){return 0!=W[this.ptr+13>>0]};this.init=function(b,c){this.set_adjusted_ptr(0);this.set_type(b);this.set_destructor(c);this.set_refcount(0);this.set_caught(!1);this.set_rethrown(!1)};this.add_ref=function(){ca[this.ptr>>2]+=1};this.release_ref=function(){var b=ca[this.ptr>>2];ca[this.ptr>>2]=b-1;return 1===b};this.set_adjusted_ptr=function(b){Y[this.ptr+
|
||||
16>>2]=b};this.get_adjusted_ptr=function(){return Y[this.ptr+16>>2]};this.get_exception_ptr=function(){if(ua(this.get_type()))return Y[this.excPtr>>2];var b=this.get_adjusted_ptr();return 0!==b?b:this.excPtr}}function F(){function e(){if(!la&&(la=!0,a.calledRun=!0,!sa)){va=!0;u(oa);wa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)xa.unshift(a.postRun.shift());u(xa)}}if(!(0<ba)){if(a.preRun)for("function"==
|
||||
typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)ya.unshift(a.preRun.shift());u(ya);0<ba||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1);e()},1)):e())}}function v(){}function w(e){return(e||v).__cache__}function B(e,b){var c=w(b),d=c[e];if(d)return d;d=Object.create((b||v).prototype);d.ptr=e;return c[e]=d}function R(e){if("string"===typeof e){for(var b=0,c=0;c<e.length;++c){var d=e.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=
|
||||
d?(b+=4,++c):b+=3}b=Array(b+1);c=0;d=b.length;if(0<d){d=c+d-1;for(var g=0;g<e.length;++g){var t=e.charCodeAt(g);if(55296<=t&&57343>=t){var aa=e.charCodeAt(++g);t=65536+((t&1023)<<10)|aa&1023}if(127>=t){if(c>=d)break;b[c++]=t}else{if(2047>=t){if(c+1>=d)break;b[c++]=192|t>>6}else{if(65535>=t){if(c+2>=d)break;b[c++]=224|t>>12}else{if(c+3>=d)break;b[c++]=240|t>>18;b[c++]=128|t>>12&63}b[c++]=128|t>>6&63}b[c++]=128|t&63}}b[c]=0}e=r.alloc(b,W);r.copy(b,W,e);return e}return e}function Z(e){if("object"===
|
||||
typeof e){var b=r.alloc(e,W);r.copy(e,W,b);return b}return e}function X(){throw"cannot construct a VoidPtr, no constructor in IDL";}function S(){this.ptr=za();w(S)[this.ptr]=this}function Q(){this.ptr=Aa();w(Q)[this.ptr]=this}function V(){this.ptr=Ba();w(V)[this.ptr]=this}function x(){this.ptr=Ca();w(x)[this.ptr]=this}function D(){this.ptr=Da();w(D)[this.ptr]=this}function G(){this.ptr=Ea();w(G)[this.ptr]=this}function H(){this.ptr=Fa();w(H)[this.ptr]=this}function E(){this.ptr=Ga();w(E)[this.ptr]=
|
||||
this}function T(){this.ptr=Ha();w(T)[this.ptr]=this}function C(){throw"cannot construct a Status, no constructor in IDL";}function I(){this.ptr=Ia();w(I)[this.ptr]=this}function J(){this.ptr=Ja();w(J)[this.ptr]=this}function K(){this.ptr=Ka();w(K)[this.ptr]=this}function L(){this.ptr=La();w(L)[this.ptr]=this}function M(){this.ptr=Ma();w(M)[this.ptr]=this}function N(){this.ptr=Na();w(N)[this.ptr]=this}function O(){this.ptr=Oa();w(O)[this.ptr]=this}function z(){this.ptr=Pa();w(z)[this.ptr]=this}function m(){this.ptr=
|
||||
Qa();w(m)[this.ptr]=this}n=void 0===n?{}:n;var a="undefined"!=typeof n?n:{},wa,ka;a.ready=new Promise(function(e,b){wa=e;ka=b});var Ra=!1,Sa=!1;a.onRuntimeInitialized=function(){Ra=!0;if(Sa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Sa=!0;if(Ra&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(e){if("string"!==typeof e)return!1;e=e.split(".");return 2>e.length||3<e.length?!1:1==e[0]&&0<=e[1]&&5>=e[1]?!0:0!=e[0]||10<
|
||||
e[1]?!1:!0};var Ta=Object.assign({},a),ta="object"==typeof window,fa="function"==typeof importScripts,Ua="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,U="";if(Ua){var Va=require("fs"),pa=require("path");U=fa?pa.dirname(U)+"/":__dirname+"/";var Wa=function(e,b){e=e.startsWith("file://")?new URL(e):pa.normalize(e);return Va.readFileSync(e,b?void 0:"utf8")};var ma=function(e){e=Wa(e,!0);e.buffer||(e=new Uint8Array(e));return e};var na=function(e,
|
||||
b,c){e=e.startsWith("file://")?new URL(e):pa.normalize(e);Va.readFile(e,function(d,g){d?c(d):b(g.buffer)})};1<process.argv.length&&process.argv[1].replace(/\\/g,"/");process.argv.slice(2);a.inspect=function(){return"[Emscripten Module object]"}}else if(ta||fa)fa?U=self.location.href:"undefined"!=typeof document&&document.currentScript&&(U=document.currentScript.src),h&&(U=h),U=0!==U.indexOf("blob:")?U.substr(0,U.replace(/[?#].*/,"").lastIndexOf("/")+1):"",Wa=function(e){var b=new XMLHttpRequest;b.open("GET",
|
||||
e,!1);b.send(null);return b.responseText},fa&&(ma=function(e){var b=new XMLHttpRequest;b.open("GET",e,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),na=function(e,b,c){var d=new XMLHttpRequest;d.open("GET",e,!0);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};a.print||console.log.bind(console);var da=a.printErr||console.warn.bind(console);Object.assign(a,Ta);Ta=null;var ea;a.wasmBinary&&
|
||||
(ea=a.wasmBinary);"object"!=typeof WebAssembly&&y("no native wasm support detected");var ja,sa=!1,ra="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,W,ia,ca,Y,ya=[],oa=[],xa=[],va=!1,ba=0,qa=null,ha=null;var P="draco_decoder_gltf.wasm";P.startsWith("data:application/octet-stream;base64,")||(P=k(P));var pd=0,qd={b:function(e,b,c){(new A(e)).init(b,c);pd++;throw e;},a:function(){y("")},d:function(e,b,c){ia.copyWithin(e,b,b+c)},c:function(e){var b=ia.length;e>>>=0;if(2147483648<e)return!1;
|
||||
for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,e+100663296);var g=Math;d=Math.max(e,d);g=g.min.call(g,2147483648,d+(65536-d%65536)%65536);a:{d=ja.buffer;try{ja.grow(g-d.byteLength+65535>>>16);l();var t=1;break a}catch(aa){}t=void 0}if(t)return!0}return!1}};(function(){function e(g,t){a.asm=g.exports;ja=a.asm.e;l();oa.unshift(a.asm.f);ba--;a.monitorRunDependencies&&a.monitorRunDependencies(ba);0==ba&&(null!==qa&&(clearInterval(qa),qa=null),ha&&(g=ha,ha=null,g()))}function b(g){e(g.instance)}
|
||||
function c(g){return q().then(function(t){return WebAssembly.instantiate(t,d)}).then(function(t){return t}).then(g,function(t){da("failed to asynchronously prepare wasm: "+t);y(t)})}var d={a:qd};ba++;a.monitorRunDependencies&&a.monitorRunDependencies(ba);if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(g){da("Module.instantiateWasm callback failed with error: "+g),ka(g)}(function(){return ea||"function"!=typeof WebAssembly.instantiateStreaming||P.startsWith("data:application/octet-stream;base64,")||
|
||||
P.startsWith("file://")||Ua||"function"!=typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(t){da("wasm streaming compile failed: "+t);da("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ka);return{}})();var Xa=a._emscripten_bind_VoidPtr___destroy___0=function(){return(Xa=a._emscripten_bind_VoidPtr___destroy___0=a.asm.h).apply(null,arguments)},za=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=
|
||||
function(){return(za=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=a.asm.i).apply(null,arguments)},Ya=a._emscripten_bind_DecoderBuffer_Init_2=function(){return(Ya=a._emscripten_bind_DecoderBuffer_Init_2=a.asm.j).apply(null,arguments)},Za=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return(Za=a._emscripten_bind_DecoderBuffer___destroy___0=a.asm.k).apply(null,arguments)},Aa=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return(Aa=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=
|
||||
a.asm.l).apply(null,arguments)},$a=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return($a=a._emscripten_bind_AttributeTransformData_transform_type_0=a.asm.m).apply(null,arguments)},ab=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return(ab=a._emscripten_bind_AttributeTransformData___destroy___0=a.asm.n).apply(null,arguments)},Ba=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return(Ba=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=
|
||||
a.asm.o).apply(null,arguments)},bb=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return(bb=a._emscripten_bind_GeometryAttribute___destroy___0=a.asm.p).apply(null,arguments)},Ca=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return(Ca=a._emscripten_bind_PointAttribute_PointAttribute_0=a.asm.q).apply(null,arguments)},cb=a._emscripten_bind_PointAttribute_size_0=function(){return(cb=a._emscripten_bind_PointAttribute_size_0=a.asm.r).apply(null,arguments)},db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=
|
||||
function(){return(db=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=a.asm.s).apply(null,arguments)},eb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return(eb=a._emscripten_bind_PointAttribute_attribute_type_0=a.asm.t).apply(null,arguments)},fb=a._emscripten_bind_PointAttribute_data_type_0=function(){return(fb=a._emscripten_bind_PointAttribute_data_type_0=a.asm.u).apply(null,arguments)},gb=a._emscripten_bind_PointAttribute_num_components_0=function(){return(gb=a._emscripten_bind_PointAttribute_num_components_0=
|
||||
a.asm.v).apply(null,arguments)},hb=a._emscripten_bind_PointAttribute_normalized_0=function(){return(hb=a._emscripten_bind_PointAttribute_normalized_0=a.asm.w).apply(null,arguments)},ib=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return(ib=a._emscripten_bind_PointAttribute_byte_stride_0=a.asm.x).apply(null,arguments)},jb=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return(jb=a._emscripten_bind_PointAttribute_byte_offset_0=a.asm.y).apply(null,arguments)},kb=a._emscripten_bind_PointAttribute_unique_id_0=
|
||||
function(){return(kb=a._emscripten_bind_PointAttribute_unique_id_0=a.asm.z).apply(null,arguments)},lb=a._emscripten_bind_PointAttribute___destroy___0=function(){return(lb=a._emscripten_bind_PointAttribute___destroy___0=a.asm.A).apply(null,arguments)},Da=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return(Da=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=a.asm.B).apply(null,arguments)},mb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=
|
||||
function(){return(mb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=a.asm.C).apply(null,arguments)},nb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return(nb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=a.asm.D).apply(null,arguments)},ob=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return(ob=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=a.asm.E).apply(null,arguments)},pb=
|
||||
a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return(pb=a._emscripten_bind_AttributeQuantizationTransform_range_0=a.asm.F).apply(null,arguments)},qb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return(qb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=a.asm.G).apply(null,arguments)},Ea=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return(Ea=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=
|
||||
a.asm.H).apply(null,arguments)},rb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return(rb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=a.asm.I).apply(null,arguments)},sb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return(sb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=a.asm.J).apply(null,arguments)},tb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return(tb=
|
||||
a._emscripten_bind_AttributeOctahedronTransform___destroy___0=a.asm.K).apply(null,arguments)},Fa=a._emscripten_bind_PointCloud_PointCloud_0=function(){return(Fa=a._emscripten_bind_PointCloud_PointCloud_0=a.asm.L).apply(null,arguments)},ub=a._emscripten_bind_PointCloud_num_attributes_0=function(){return(ub=a._emscripten_bind_PointCloud_num_attributes_0=a.asm.M).apply(null,arguments)},vb=a._emscripten_bind_PointCloud_num_points_0=function(){return(vb=a._emscripten_bind_PointCloud_num_points_0=a.asm.N).apply(null,
|
||||
arguments)},wb=a._emscripten_bind_PointCloud___destroy___0=function(){return(wb=a._emscripten_bind_PointCloud___destroy___0=a.asm.O).apply(null,arguments)},Ga=a._emscripten_bind_Mesh_Mesh_0=function(){return(Ga=a._emscripten_bind_Mesh_Mesh_0=a.asm.P).apply(null,arguments)},xb=a._emscripten_bind_Mesh_num_faces_0=function(){return(xb=a._emscripten_bind_Mesh_num_faces_0=a.asm.Q).apply(null,arguments)},yb=a._emscripten_bind_Mesh_num_attributes_0=function(){return(yb=a._emscripten_bind_Mesh_num_attributes_0=
|
||||
a.asm.R).apply(null,arguments)},zb=a._emscripten_bind_Mesh_num_points_0=function(){return(zb=a._emscripten_bind_Mesh_num_points_0=a.asm.S).apply(null,arguments)},Ab=a._emscripten_bind_Mesh___destroy___0=function(){return(Ab=a._emscripten_bind_Mesh___destroy___0=a.asm.T).apply(null,arguments)},Ha=a._emscripten_bind_Metadata_Metadata_0=function(){return(Ha=a._emscripten_bind_Metadata_Metadata_0=a.asm.U).apply(null,arguments)},Bb=a._emscripten_bind_Metadata___destroy___0=function(){return(Bb=a._emscripten_bind_Metadata___destroy___0=
|
||||
a.asm.V).apply(null,arguments)},Cb=a._emscripten_bind_Status_code_0=function(){return(Cb=a._emscripten_bind_Status_code_0=a.asm.W).apply(null,arguments)},Db=a._emscripten_bind_Status_ok_0=function(){return(Db=a._emscripten_bind_Status_ok_0=a.asm.X).apply(null,arguments)},Eb=a._emscripten_bind_Status_error_msg_0=function(){return(Eb=a._emscripten_bind_Status_error_msg_0=a.asm.Y).apply(null,arguments)},Fb=a._emscripten_bind_Status___destroy___0=function(){return(Fb=a._emscripten_bind_Status___destroy___0=
|
||||
a.asm.Z).apply(null,arguments)},Ia=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return(Ia=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=a.asm._).apply(null,arguments)},Gb=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return(Gb=a._emscripten_bind_DracoFloat32Array_GetValue_1=a.asm.$).apply(null,arguments)},Hb=a._emscripten_bind_DracoFloat32Array_size_0=function(){return(Hb=a._emscripten_bind_DracoFloat32Array_size_0=a.asm.aa).apply(null,arguments)},Ib=
|
||||
a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return(Ib=a._emscripten_bind_DracoFloat32Array___destroy___0=a.asm.ba).apply(null,arguments)},Ja=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return(Ja=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=a.asm.ca).apply(null,arguments)},Jb=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return(Jb=a._emscripten_bind_DracoInt8Array_GetValue_1=a.asm.da).apply(null,arguments)},Kb=a._emscripten_bind_DracoInt8Array_size_0=
|
||||
function(){return(Kb=a._emscripten_bind_DracoInt8Array_size_0=a.asm.ea).apply(null,arguments)},Lb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return(Lb=a._emscripten_bind_DracoInt8Array___destroy___0=a.asm.fa).apply(null,arguments)},Ka=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return(Ka=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=a.asm.ga).apply(null,arguments)},Mb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return(Mb=a._emscripten_bind_DracoUInt8Array_GetValue_1=
|
||||
a.asm.ha).apply(null,arguments)},Nb=a._emscripten_bind_DracoUInt8Array_size_0=function(){return(Nb=a._emscripten_bind_DracoUInt8Array_size_0=a.asm.ia).apply(null,arguments)},Ob=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return(Ob=a._emscripten_bind_DracoUInt8Array___destroy___0=a.asm.ja).apply(null,arguments)},La=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return(La=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=a.asm.ka).apply(null,arguments)},Pb=a._emscripten_bind_DracoInt16Array_GetValue_1=
|
||||
function(){return(Pb=a._emscripten_bind_DracoInt16Array_GetValue_1=a.asm.la).apply(null,arguments)},Qb=a._emscripten_bind_DracoInt16Array_size_0=function(){return(Qb=a._emscripten_bind_DracoInt16Array_size_0=a.asm.ma).apply(null,arguments)},Rb=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return(Rb=a._emscripten_bind_DracoInt16Array___destroy___0=a.asm.na).apply(null,arguments)},Ma=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return(Ma=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=
|
||||
a.asm.oa).apply(null,arguments)},Sb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return(Sb=a._emscripten_bind_DracoUInt16Array_GetValue_1=a.asm.pa).apply(null,arguments)},Tb=a._emscripten_bind_DracoUInt16Array_size_0=function(){return(Tb=a._emscripten_bind_DracoUInt16Array_size_0=a.asm.qa).apply(null,arguments)},Ub=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return(Ub=a._emscripten_bind_DracoUInt16Array___destroy___0=a.asm.ra).apply(null,arguments)},Na=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=
|
||||
function(){return(Na=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=a.asm.sa).apply(null,arguments)},Vb=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return(Vb=a._emscripten_bind_DracoInt32Array_GetValue_1=a.asm.ta).apply(null,arguments)},Wb=a._emscripten_bind_DracoInt32Array_size_0=function(){return(Wb=a._emscripten_bind_DracoInt32Array_size_0=a.asm.ua).apply(null,arguments)},Xb=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return(Xb=a._emscripten_bind_DracoInt32Array___destroy___0=
|
||||
a.asm.va).apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return(Oa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=a.asm.wa).apply(null,arguments)},Yb=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return(Yb=a._emscripten_bind_DracoUInt32Array_GetValue_1=a.asm.xa).apply(null,arguments)},Zb=a._emscripten_bind_DracoUInt32Array_size_0=function(){return(Zb=a._emscripten_bind_DracoUInt32Array_size_0=a.asm.ya).apply(null,arguments)},$b=a._emscripten_bind_DracoUInt32Array___destroy___0=
|
||||
function(){return($b=a._emscripten_bind_DracoUInt32Array___destroy___0=a.asm.za).apply(null,arguments)},Pa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return(Pa=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=a.asm.Aa).apply(null,arguments)},ac=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return(ac=a._emscripten_bind_MetadataQuerier_HasEntry_2=a.asm.Ba).apply(null,arguments)},bc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return(bc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=
|
||||
a.asm.Ca).apply(null,arguments)},cc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=function(){return(cc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=a.asm.Da).apply(null,arguments)},dc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return(dc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=a.asm.Ea).apply(null,arguments)},ec=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return(ec=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=a.asm.Fa).apply(null,
|
||||
arguments)},fc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return(fc=a._emscripten_bind_MetadataQuerier_NumEntries_1=a.asm.Ga).apply(null,arguments)},gc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return(gc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=a.asm.Ha).apply(null,arguments)},hc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return(hc=a._emscripten_bind_MetadataQuerier___destroy___0=a.asm.Ia).apply(null,arguments)},Qa=a._emscripten_bind_Decoder_Decoder_0=
|
||||
function(){return(Qa=a._emscripten_bind_Decoder_Decoder_0=a.asm.Ja).apply(null,arguments)},ic=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=function(){return(ic=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=a.asm.Ka).apply(null,arguments)},jc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=function(){return(jc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=a.asm.La).apply(null,arguments)},kc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return(kc=a._emscripten_bind_Decoder_GetAttributeId_2=
|
||||
a.asm.Ma).apply(null,arguments)},lc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return(lc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=a.asm.Na).apply(null,arguments)},mc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return(mc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=a.asm.Oa).apply(null,arguments)},nc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return(nc=a._emscripten_bind_Decoder_GetAttribute_2=a.asm.Pa).apply(null,arguments)},
|
||||
oc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return(oc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=a.asm.Qa).apply(null,arguments)},pc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return(pc=a._emscripten_bind_Decoder_GetMetadata_1=a.asm.Ra).apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return(qc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=a.asm.Sa).apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=
|
||||
function(){return(rc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=a.asm.Ta).apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=function(){return(sc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=a.asm.Ua).apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return(tc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=a.asm.Va).apply(null,arguments)},uc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=function(){return(uc=
|
||||
a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=a.asm.Wa).apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return(vc=a._emscripten_bind_Decoder_GetAttributeFloat_3=a.asm.Xa).apply(null,arguments)},wc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return(wc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=a.asm.Ya).apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return(xc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=
|
||||
a.asm.Za).apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return(yc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=a.asm._a).apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return(zc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=a.asm.$a).apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return(Ac=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=
|
||||
a.asm.ab).apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=function(){return(Bc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=a.asm.bb).apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return(Cc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=a.asm.cb).apply(null,arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return(Dc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=
|
||||
a.asm.db).apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=function(){return(Ec=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=a.asm.eb).apply(null,arguments)},Fc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return(Fc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=a.asm.fb).apply(null,arguments)},Gc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=function(){return(Gc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=
|
||||
a.asm.gb).apply(null,arguments)},Hc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=function(){return(Hc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=a.asm.hb).apply(null,arguments)},Ic=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return(Ic=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=a.asm.ib).apply(null,arguments)},Jc=a._emscripten_bind_Decoder___destroy___0=function(){return(Jc=a._emscripten_bind_Decoder___destroy___0=a.asm.jb).apply(null,arguments)},Kc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=
|
||||
function(){return(Kc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=a.asm.kb).apply(null,arguments)},Lc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return(Lc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=a.asm.lb).apply(null,arguments)},Mc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return(Mc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=
|
||||
a.asm.mb).apply(null,arguments)},Nc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=function(){return(Nc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=a.asm.nb).apply(null,arguments)},Oc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return(Oc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=a.asm.ob).apply(null,arguments)},Pc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return(Pc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=
|
||||
a.asm.pb).apply(null,arguments)},Qc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=function(){return(Qc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=a.asm.qb).apply(null,arguments)},Rc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return(Rc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=a.asm.rb).apply(null,arguments)},Sc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return(Sc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=
|
||||
a.asm.sb).apply(null,arguments)},Tc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=function(){return(Tc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=a.asm.tb).apply(null,arguments)},Uc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return(Uc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=a.asm.ub).apply(null,arguments)},Vc=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return(Vc=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=
|
||||
a.asm.vb).apply(null,arguments)},Wc=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=function(){return(Wc=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=a.asm.wb).apply(null,arguments)},Xc=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return(Xc=a._emscripten_enum_draco_DataType_DT_INVALID=a.asm.xb).apply(null,arguments)},Yc=a._emscripten_enum_draco_DataType_DT_INT8=function(){return(Yc=a._emscripten_enum_draco_DataType_DT_INT8=a.asm.yb).apply(null,arguments)},Zc=
|
||||
a._emscripten_enum_draco_DataType_DT_UINT8=function(){return(Zc=a._emscripten_enum_draco_DataType_DT_UINT8=a.asm.zb).apply(null,arguments)},$c=a._emscripten_enum_draco_DataType_DT_INT16=function(){return($c=a._emscripten_enum_draco_DataType_DT_INT16=a.asm.Ab).apply(null,arguments)},ad=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return(ad=a._emscripten_enum_draco_DataType_DT_UINT16=a.asm.Bb).apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return(bd=a._emscripten_enum_draco_DataType_DT_INT32=
|
||||
a.asm.Cb).apply(null,arguments)},cd=a._emscripten_enum_draco_DataType_DT_UINT32=function(){return(cd=a._emscripten_enum_draco_DataType_DT_UINT32=a.asm.Db).apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_INT64=function(){return(dd=a._emscripten_enum_draco_DataType_DT_INT64=a.asm.Eb).apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return(ed=a._emscripten_enum_draco_DataType_DT_UINT64=a.asm.Fb).apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_FLOAT32=
|
||||
function(){return(fd=a._emscripten_enum_draco_DataType_DT_FLOAT32=a.asm.Gb).apply(null,arguments)},gd=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return(gd=a._emscripten_enum_draco_DataType_DT_FLOAT64=a.asm.Hb).apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return(hd=a._emscripten_enum_draco_DataType_DT_BOOL=a.asm.Ib).apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return(id=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=
|
||||
a.asm.Jb).apply(null,arguments)},jd=a._emscripten_enum_draco_StatusCode_OK=function(){return(jd=a._emscripten_enum_draco_StatusCode_OK=a.asm.Kb).apply(null,arguments)},kd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return(kd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=a.asm.Lb).apply(null,arguments)},ld=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return(ld=a._emscripten_enum_draco_StatusCode_IO_ERROR=a.asm.Mb).apply(null,arguments)},md=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=
|
||||
function(){return(md=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=a.asm.Nb).apply(null,arguments)},nd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return(nd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=a.asm.Ob).apply(null,arguments)},od=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return(od=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=a.asm.Pb).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.Qb).apply(null,arguments)};
|
||||
a._free=function(){return(a._free=a.asm.Rb).apply(null,arguments)};var ua=function(){return(ua=a.asm.Sb).apply(null,arguments)};a.___start_em_js=11660;a.___stop_em_js=11758;var la;ha=function b(){la||F();la||(ha=b)};if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();F();v.prototype=Object.create(v.prototype);v.prototype.constructor=v;v.prototype.__class__=v;v.__cache__={};a.WrapperObject=v;a.getCache=w;a.wrapPointer=B;a.castObject=function(b,
|
||||
c){return B(b.ptr,c)};a.NULL=B(0);a.destroy=function(b){if(!b.__destroy__)throw"Error: Cannot destroy object. (Did you create it yourself?)";b.__destroy__();delete w(b.__class__)[b.ptr]};a.compare=function(b,c){return b.ptr===c.ptr};a.getPointer=function(b){return b.ptr};a.getClass=function(b){return b.__class__};var r={buffer:0,size:0,pos:0,temps:[],needed:0,prepare:function(){if(r.needed){for(var b=0;b<r.temps.length;b++)a._free(r.temps[b]);r.temps.length=0;a._free(r.buffer);r.buffer=0;r.size+=
|
||||
r.needed;r.needed=0}r.buffer||(r.size+=128,r.buffer=a._malloc(r.size),r.buffer||y(void 0));r.pos=0},alloc:function(b,c){r.buffer||y(void 0);b=b.length*c.BYTES_PER_ELEMENT;b=b+7&-8;r.pos+b>=r.size?(0<b||y(void 0),r.needed+=b,c=a._malloc(b),r.temps.push(c)):(c=r.buffer+r.pos,r.pos+=b);return c},copy:function(b,c,d){d>>>=0;switch(c.BYTES_PER_ELEMENT){case 2:d>>>=1;break;case 4:d>>>=2;break;case 8:d>>>=3}for(var g=0;g<b.length;g++)c[d+g]=b[g]}};X.prototype=Object.create(v.prototype);X.prototype.constructor=
|
||||
X;X.prototype.__class__=X;X.__cache__={};a.VoidPtr=X;X.prototype.__destroy__=X.prototype.__destroy__=function(){Xa(this.ptr)};S.prototype=Object.create(v.prototype);S.prototype.constructor=S;S.prototype.__class__=S;S.__cache__={};a.DecoderBuffer=S;S.prototype.Init=S.prototype.Init=function(b,c){var d=this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);Ya(d,b,c)};S.prototype.__destroy__=S.prototype.__destroy__=function(){Za(this.ptr)};Q.prototype=Object.create(v.prototype);
|
||||
Q.prototype.constructor=Q;Q.prototype.__class__=Q;Q.__cache__={};a.AttributeTransformData=Q;Q.prototype.transform_type=Q.prototype.transform_type=function(){return $a(this.ptr)};Q.prototype.__destroy__=Q.prototype.__destroy__=function(){ab(this.ptr)};V.prototype=Object.create(v.prototype);V.prototype.constructor=V;V.prototype.__class__=V;V.__cache__={};a.GeometryAttribute=V;V.prototype.__destroy__=V.prototype.__destroy__=function(){bb(this.ptr)};x.prototype=Object.create(v.prototype);x.prototype.constructor=
|
||||
x;x.prototype.__class__=x;x.__cache__={};a.PointAttribute=x;x.prototype.size=x.prototype.size=function(){return cb(this.ptr)};x.prototype.GetAttributeTransformData=x.prototype.GetAttributeTransformData=function(){return B(db(this.ptr),Q)};x.prototype.attribute_type=x.prototype.attribute_type=function(){return eb(this.ptr)};x.prototype.data_type=x.prototype.data_type=function(){return fb(this.ptr)};x.prototype.num_components=x.prototype.num_components=function(){return gb(this.ptr)};x.prototype.normalized=
|
||||
x.prototype.normalized=function(){return!!hb(this.ptr)};x.prototype.byte_stride=x.prototype.byte_stride=function(){return ib(this.ptr)};x.prototype.byte_offset=x.prototype.byte_offset=function(){return jb(this.ptr)};x.prototype.unique_id=x.prototype.unique_id=function(){return kb(this.ptr)};x.prototype.__destroy__=x.prototype.__destroy__=function(){lb(this.ptr)};D.prototype=Object.create(v.prototype);D.prototype.constructor=D;D.prototype.__class__=D;D.__cache__={};a.AttributeQuantizationTransform=
|
||||
D;D.prototype.InitFromAttribute=D.prototype.InitFromAttribute=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!mb(c,b)};D.prototype.quantization_bits=D.prototype.quantization_bits=function(){return nb(this.ptr)};D.prototype.min_value=D.prototype.min_value=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return ob(c,b)};D.prototype.range=D.prototype.range=function(){return pb(this.ptr)};D.prototype.__destroy__=D.prototype.__destroy__=function(){qb(this.ptr)};G.prototype=
|
||||
Object.create(v.prototype);G.prototype.constructor=G;G.prototype.__class__=G;G.__cache__={};a.AttributeOctahedronTransform=G;G.prototype.InitFromAttribute=G.prototype.InitFromAttribute=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return!!rb(c,b)};G.prototype.quantization_bits=G.prototype.quantization_bits=function(){return sb(this.ptr)};G.prototype.__destroy__=G.prototype.__destroy__=function(){tb(this.ptr)};H.prototype=Object.create(v.prototype);H.prototype.constructor=H;H.prototype.__class__=
|
||||
H;H.__cache__={};a.PointCloud=H;H.prototype.num_attributes=H.prototype.num_attributes=function(){return ub(this.ptr)};H.prototype.num_points=H.prototype.num_points=function(){return vb(this.ptr)};H.prototype.__destroy__=H.prototype.__destroy__=function(){wb(this.ptr)};E.prototype=Object.create(v.prototype);E.prototype.constructor=E;E.prototype.__class__=E;E.__cache__={};a.Mesh=E;E.prototype.num_faces=E.prototype.num_faces=function(){return xb(this.ptr)};E.prototype.num_attributes=E.prototype.num_attributes=
|
||||
function(){return yb(this.ptr)};E.prototype.num_points=E.prototype.num_points=function(){return zb(this.ptr)};E.prototype.__destroy__=E.prototype.__destroy__=function(){Ab(this.ptr)};T.prototype=Object.create(v.prototype);T.prototype.constructor=T;T.prototype.__class__=T;T.__cache__={};a.Metadata=T;T.prototype.__destroy__=T.prototype.__destroy__=function(){Bb(this.ptr)};C.prototype=Object.create(v.prototype);C.prototype.constructor=C;C.prototype.__class__=C;C.__cache__={};a.Status=C;C.prototype.code=
|
||||
C.prototype.code=function(){return Cb(this.ptr)};C.prototype.ok=C.prototype.ok=function(){return!!Db(this.ptr)};C.prototype.error_msg=C.prototype.error_msg=function(){return p(Eb(this.ptr))};C.prototype.__destroy__=C.prototype.__destroy__=function(){Fb(this.ptr)};I.prototype=Object.create(v.prototype);I.prototype.constructor=I;I.prototype.__class__=I;I.__cache__={};a.DracoFloat32Array=I;I.prototype.GetValue=I.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Gb(c,
|
||||
b)};I.prototype.size=I.prototype.size=function(){return Hb(this.ptr)};I.prototype.__destroy__=I.prototype.__destroy__=function(){Ib(this.ptr)};J.prototype=Object.create(v.prototype);J.prototype.constructor=J;J.prototype.__class__=J;J.__cache__={};a.DracoInt8Array=J;J.prototype.GetValue=J.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Jb(c,b)};J.prototype.size=J.prototype.size=function(){return Kb(this.ptr)};J.prototype.__destroy__=J.prototype.__destroy__=function(){Lb(this.ptr)};
|
||||
K.prototype=Object.create(v.prototype);K.prototype.constructor=K;K.prototype.__class__=K;K.__cache__={};a.DracoUInt8Array=K;K.prototype.GetValue=K.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Mb(c,b)};K.prototype.size=K.prototype.size=function(){return Nb(this.ptr)};K.prototype.__destroy__=K.prototype.__destroy__=function(){Ob(this.ptr)};L.prototype=Object.create(v.prototype);L.prototype.constructor=L;L.prototype.__class__=L;L.__cache__={};a.DracoInt16Array=
|
||||
L;L.prototype.GetValue=L.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Pb(c,b)};L.prototype.size=L.prototype.size=function(){return Qb(this.ptr)};L.prototype.__destroy__=L.prototype.__destroy__=function(){Rb(this.ptr)};M.prototype=Object.create(v.prototype);M.prototype.constructor=M;M.prototype.__class__=M;M.__cache__={};a.DracoUInt16Array=M;M.prototype.GetValue=M.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Sb(c,b)};
|
||||
M.prototype.size=M.prototype.size=function(){return Tb(this.ptr)};M.prototype.__destroy__=M.prototype.__destroy__=function(){Ub(this.ptr)};N.prototype=Object.create(v.prototype);N.prototype.constructor=N;N.prototype.__class__=N;N.__cache__={};a.DracoInt32Array=N;N.prototype.GetValue=N.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Vb(c,b)};N.prototype.size=N.prototype.size=function(){return Wb(this.ptr)};N.prototype.__destroy__=N.prototype.__destroy__=function(){Xb(this.ptr)};
|
||||
O.prototype=Object.create(v.prototype);O.prototype.constructor=O;O.prototype.__class__=O;O.__cache__={};a.DracoUInt32Array=O;O.prototype.GetValue=O.prototype.GetValue=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Yb(c,b)};O.prototype.size=O.prototype.size=function(){return Zb(this.ptr)};O.prototype.__destroy__=O.prototype.__destroy__=function(){$b(this.ptr)};z.prototype=Object.create(v.prototype);z.prototype.constructor=z;z.prototype.__class__=z;z.__cache__={};a.MetadataQuerier=
|
||||
z;z.prototype.HasEntry=z.prototype.HasEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return!!ac(d,b,c)};z.prototype.GetIntEntry=z.prototype.GetIntEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return bc(d,b,c)};z.prototype.GetIntEntryArray=z.prototype.GetIntEntryArray=function(b,c,d){var g=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===
|
||||
typeof c?c.ptr:R(c);d&&"object"===typeof d&&(d=d.ptr);cc(g,b,c,d)};z.prototype.GetDoubleEntry=z.prototype.GetDoubleEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return dc(d,b,c)};z.prototype.GetStringEntry=z.prototype.GetStringEntry=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return p(ec(d,b,c))};z.prototype.NumEntries=z.prototype.NumEntries=function(b){var c=this.ptr;
|
||||
b&&"object"===typeof b&&(b=b.ptr);return fc(c,b)};z.prototype.GetEntryName=z.prototype.GetEntryName=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return p(gc(d,b,c))};z.prototype.__destroy__=z.prototype.__destroy__=function(){hc(this.ptr)};m.prototype=Object.create(v.prototype);m.prototype.constructor=m;m.prototype.__class__=m;m.__cache__={};a.Decoder=m;m.prototype.DecodeArrayToPointCloud=m.prototype.DecodeArrayToPointCloud=function(b,c,d){var g=
|
||||
this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return B(ic(g,b,c,d),C)};m.prototype.DecodeArrayToMesh=m.prototype.DecodeArrayToMesh=function(b,c,d){var g=this.ptr;r.prepare();"object"==typeof b&&(b=Z(b));c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return B(jc(g,b,c,d),C)};m.prototype.GetAttributeId=m.prototype.GetAttributeId=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&
|
||||
(c=c.ptr);return kc(d,b,c)};m.prototype.GetAttributeIdByName=m.prototype.GetAttributeIdByName=function(b,c){var d=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);return lc(d,b,c)};m.prototype.GetAttributeIdByMetadataEntry=m.prototype.GetAttributeIdByMetadataEntry=function(b,c,d){var g=this.ptr;r.prepare();b&&"object"===typeof b&&(b=b.ptr);c=c&&"object"===typeof c?c.ptr:R(c);d=d&&"object"===typeof d?d.ptr:R(d);return mc(g,b,c,d)};m.prototype.GetAttribute=
|
||||
m.prototype.GetAttribute=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(nc(d,b,c),x)};m.prototype.GetAttributeByUniqueId=m.prototype.GetAttributeByUniqueId=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(oc(d,b,c),x)};m.prototype.GetMetadata=m.prototype.GetMetadata=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return B(pc(c,b),T)};m.prototype.GetAttributeMetadata=m.prototype.GetAttributeMetadata=
|
||||
function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(qc(d,b,c),T)};m.prototype.GetFaceFromMesh=m.prototype.GetFaceFromMesh=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!rc(g,b,c,d)};m.prototype.GetTriangleStripsFromMesh=m.prototype.GetTriangleStripsFromMesh=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);
|
||||
return sc(d,b,c)};m.prototype.GetTrianglesUInt16Array=m.prototype.GetTrianglesUInt16Array=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!tc(g,b,c,d)};m.prototype.GetTrianglesUInt32Array=m.prototype.GetTrianglesUInt32Array=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!uc(g,b,c,d)};m.prototype.GetAttributeFloat=m.prototype.GetAttributeFloat=
|
||||
function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!vc(g,b,c,d)};m.prototype.GetAttributeFloatForAllPoints=m.prototype.GetAttributeFloatForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!wc(g,b,c,d)};m.prototype.GetAttributeIntForAllPoints=m.prototype.GetAttributeIntForAllPoints=function(b,c,d){var g=this.ptr;
|
||||
b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!xc(g,b,c,d)};m.prototype.GetAttributeInt8ForAllPoints=m.prototype.GetAttributeInt8ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!yc(g,b,c,d)};m.prototype.GetAttributeUInt8ForAllPoints=m.prototype.GetAttributeUInt8ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=
|
||||
b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!zc(g,b,c,d)};m.prototype.GetAttributeInt16ForAllPoints=m.prototype.GetAttributeInt16ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Ac(g,b,c,d)};m.prototype.GetAttributeUInt16ForAllPoints=m.prototype.GetAttributeUInt16ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&
|
||||
(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Bc(g,b,c,d)};m.prototype.GetAttributeInt32ForAllPoints=m.prototype.GetAttributeInt32ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);return!!Cc(g,b,c,d)};m.prototype.GetAttributeUInt32ForAllPoints=m.prototype.GetAttributeUInt32ForAllPoints=function(b,c,d){var g=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===
|
||||
typeof d&&(d=d.ptr);return!!Dc(g,b,c,d)};m.prototype.GetAttributeDataArrayForAllPoints=m.prototype.GetAttributeDataArrayForAllPoints=function(b,c,d,g,t){var aa=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);d&&"object"===typeof d&&(d=d.ptr);g&&"object"===typeof g&&(g=g.ptr);t&&"object"===typeof t&&(t=t.ptr);return!!Ec(aa,b,c,d,g,t)};m.prototype.SkipAttributeTransform=m.prototype.SkipAttributeTransform=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);Fc(c,
|
||||
b)};m.prototype.GetEncodedGeometryType_Deprecated=m.prototype.GetEncodedGeometryType_Deprecated=function(b){var c=this.ptr;b&&"object"===typeof b&&(b=b.ptr);return Gc(c,b)};m.prototype.DecodeBufferToPointCloud=m.prototype.DecodeBufferToPointCloud=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===typeof c&&(c=c.ptr);return B(Hc(d,b,c),C)};m.prototype.DecodeBufferToMesh=m.prototype.DecodeBufferToMesh=function(b,c){var d=this.ptr;b&&"object"===typeof b&&(b=b.ptr);c&&"object"===
|
||||
typeof c&&(c=c.ptr);return B(Ic(d,b,c),C)};m.prototype.__destroy__=m.prototype.__destroy__=function(){Jc(this.ptr)};(function(){function b(){a.ATTRIBUTE_INVALID_TRANSFORM=Kc();a.ATTRIBUTE_NO_TRANSFORM=Lc();a.ATTRIBUTE_QUANTIZATION_TRANSFORM=Mc();a.ATTRIBUTE_OCTAHEDRON_TRANSFORM=Nc();a.INVALID=Oc();a.POSITION=Pc();a.NORMAL=Qc();a.COLOR=Rc();a.TEX_COORD=Sc();a.GENERIC=Tc();a.INVALID_GEOMETRY_TYPE=Uc();a.POINT_CLOUD=Vc();a.TRIANGULAR_MESH=Wc();a.DT_INVALID=Xc();a.DT_INT8=Yc();a.DT_UINT8=Zc();a.DT_INT16=
|
||||
$c();a.DT_UINT16=ad();a.DT_INT32=bd();a.DT_UINT32=cd();a.DT_INT64=dd();a.DT_UINT64=ed();a.DT_FLOAT32=fd();a.DT_FLOAT64=gd();a.DT_BOOL=hd();a.DT_TYPES_COUNT=id();a.OK=jd();a.DRACO_ERROR=kd();a.IO_ERROR=ld();a.INVALID_PARAMETER=md();a.UNSUPPORTED_VERSION=nd();a.UNKNOWN_VERSION=od()}va?b():oa.unshift(b)})();if("function"===typeof a.onModuleParsed)a.onModuleParsed();a.Decoder.prototype.GetEncodedGeometryType=function(b){if(b.__class__&&b.__class__===a.DecoderBuffer)return a.Decoder.prototype.GetEncodedGeometryType_Deprecated(b);
|
||||
if(8>b.byteLength)return a.INVALID_GEOMETRY_TYPE;switch(b[7]){case 0:return a.POINT_CLOUD;case 1:return a.TRIANGULAR_MESH;default:return a.INVALID_GEOMETRY_TYPE}};return n.ready}}();"object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule);
|
BIN
public/models/datacenter.glb
Normal file
BIN
public/models/plane.glb
Normal file
BIN
public/models/ren.glb
Normal file
BIN
public/models/scene.glb
Normal file
BIN
public/models/zuo.glb
Normal file
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
BIN
public/skybox/daytime/negx.jpg
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
public/skybox/daytime/negy.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
public/skybox/daytime/negz.jpg
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
public/skybox/daytime/posx.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
public/skybox/daytime/posy.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
public/skybox/daytime/posz.jpg
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
public/skybox/dusk/negX.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
public/skybox/dusk/negY.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
public/skybox/dusk/negZ.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
public/skybox/dusk/posX.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
public/skybox/dusk/posY.jpg
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
public/skybox/dusk/posZ.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
public/skybox/night/negx.jpg
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
public/skybox/night/negy.jpg
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
public/skybox/night/negz.jpg
Normal file
After Width: | Height: | Size: 179 KiB |
BIN
public/skybox/night/posx.jpg
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
public/skybox/night/posy.jpg
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
public/skybox/night/posz.jpg
Normal file
After Width: | Height: | Size: 55 KiB |
32
src/api/screen/R_D_Environment.js
Normal file
@ -0,0 +1,32 @@
|
||||
import request from '@/utils/request'
|
||||
//big/getScreen
|
||||
|
||||
// 查询办公室噪声数据
|
||||
export function getNoiseData(query) {
|
||||
return request({
|
||||
url: '/screen/goaSensor/getNoiseData',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
// 查询公区传感器数据
|
||||
export function getTopData(query) {
|
||||
return request({
|
||||
url: '/screen/goaSensor/getTopData?depts=100',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
/** 获取特定传感器数据
|
||||
* @param {Object} query
|
||||
* @param {'water_pressure'|'TVOC_CH2O'|'temp_humi'|'Smoke'|'noise'|'Methane'|'hydraulic_pressure'|'FIRE'|'dust'|'Current'} query.type 传感器类型
|
||||
* @param {number} query.deptId 部门id
|
||||
*/
|
||||
export function getSensorDateHourByType(query) {
|
||||
return request({
|
||||
url: '/screen/goaSenso/getSensorDateHourByType',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
BIN
src/assets/images/preview-bottom.png
Normal file
After Width: | Height: | Size: 449 KiB |
BIN
src/assets/images/preview-left.png
Normal file
After Width: | Height: | Size: 671 KiB |
BIN
src/assets/images/preview-right.png
Normal file
After Width: | Height: | Size: 672 KiB |
480
src/components/ZdScrollBoard/index.vue
Normal file
@ -0,0 +1,480 @@
|
||||
<template>
|
||||
<div class="zd-scroll-board" :ref="ref">
|
||||
<div class="header" v-if="header.length && mergedConfig" :style="`background-color: ${mergedConfig.headerBGC};`">
|
||||
<div class="header-item" v-for="(headerItem, i) in header" :key="`${headerItem}${i}`" :style="`
|
||||
height: ${mergedConfig.headerHeight}px;
|
||||
line-height: ${mergedConfig.headerHeight}px;
|
||||
width: ${widths[i]}px;
|
||||
`" :align="aligns[i]" v-html="headerItem" />
|
||||
</div>
|
||||
|
||||
<div v-if="mergedConfig" class="rows"
|
||||
:style="`height: ${height - (header.length ? mergedConfig.headerHeight : 0)}px;`">
|
||||
<div class="row-item" v-for="(row, ri) in rows" :key="`${row.toString()}${row.scroll}`" :style="`
|
||||
height: ${heights[ri]}px; line-height: ${heights[ri]}px;
|
||||
background-color: ${mergedConfig[row.rowIndex % 2 === 0 ? 'evenRowBGC' : 'oddRowBGC']};`">
|
||||
<div class="ceil" :class="{'ceil-wrap':wraps[ci]}" v-for="(ceil, ci) in row.ceils" :key="`${ceil}${ri}${ci}`"
|
||||
:style="`width: ${widths[ci]}px;justify-content:${wraps[ci]?align_hash[aligns[ci]]:''}`" :align="aligns[ci]" v-html="ceil"
|
||||
@click="emitEvent('click', ri, ci, row, ceil)" @mouseenter="handleHover(true, ri, ci, row, ceil)"
|
||||
@mouseleave="handleHover(false)" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import autoResize from '@jiaminghi/data-view/lib/mixin/autoResize'
|
||||
|
||||
import { deepMerge } from '@jiaminghi/charts/lib/util/index'
|
||||
|
||||
import { deepClone } from '@jiaminghi/c-render/lib/plugin/util'
|
||||
|
||||
export default {
|
||||
name: 'ZdScrollBoard',
|
||||
mixins: [autoResize],
|
||||
props: {
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
ref: 'scroll-board',
|
||||
align_hash: {
|
||||
left: 'flex-start',
|
||||
center: 'center',
|
||||
right: 'flex-end',
|
||||
justify: 'space-between'
|
||||
},
|
||||
defaultConfig: {
|
||||
/**
|
||||
* @description Board header
|
||||
* @type {Array<String>}
|
||||
* @default header = []
|
||||
* @example header = ['column1', 'column2', 'column3']
|
||||
*/
|
||||
header: [],
|
||||
/**
|
||||
* @description Board data
|
||||
* @type {Array<Array>}
|
||||
* @default data = []
|
||||
*/
|
||||
data: [],
|
||||
/**
|
||||
* @description Row num
|
||||
* @type {Number}
|
||||
* @default rowNum = 5
|
||||
*/
|
||||
rowNum: 5,
|
||||
/**
|
||||
* @description Header background color
|
||||
* @type {String}
|
||||
* @default headerBGC = '#00BAFF'
|
||||
*/
|
||||
headerBGC: '#00BAFF',
|
||||
/**
|
||||
* @description Odd row background color
|
||||
* @type {String}
|
||||
* @default oddRowBGC = '#003B51'
|
||||
*/
|
||||
oddRowBGC: '#003B51',
|
||||
/**
|
||||
* @description Even row background color
|
||||
* @type {String}
|
||||
* @default evenRowBGC = '#003B51'
|
||||
*/
|
||||
evenRowBGC: '#0A2732',
|
||||
/**
|
||||
* @description Scroll wait time
|
||||
* @type {Number}
|
||||
* @default waitTime = 2000
|
||||
*/
|
||||
waitTime: 2000,
|
||||
/**
|
||||
* @description Header height
|
||||
* @type {Number}
|
||||
* @default headerHeight = 35
|
||||
*/
|
||||
headerHeight: 35,
|
||||
/**
|
||||
* @description Column width
|
||||
* @type {Array<Number>}
|
||||
* @default columnWidth = []
|
||||
*/
|
||||
columnWidth: [],
|
||||
/**
|
||||
* @description Column align
|
||||
* @type {Array<String>}
|
||||
* @default align = []
|
||||
* @example align = ['left', 'center', 'right']
|
||||
*/
|
||||
align: [],
|
||||
/**
|
||||
* @description Show index
|
||||
* @type {Boolean}
|
||||
* @default index = false
|
||||
*/
|
||||
index: false,
|
||||
/**
|
||||
* @description index Header
|
||||
* @type {String}
|
||||
* @default indexHeader = '#'
|
||||
*/
|
||||
indexHeader: '#',
|
||||
/**
|
||||
* @description Carousel type
|
||||
* @type {String}
|
||||
* @default carousel = 'single'
|
||||
* @example carousel = 'single' | 'page'
|
||||
*/
|
||||
carousel: 'single',
|
||||
/**
|
||||
* @description Pause scroll when mouse hovered
|
||||
* @type {Boolean}
|
||||
* @default hoverPause = true
|
||||
* @example hoverPause = true | false
|
||||
*/
|
||||
hoverPause: true
|
||||
},
|
||||
|
||||
mergedConfig: null,
|
||||
|
||||
header: [],
|
||||
|
||||
rowsData: [],
|
||||
|
||||
rows: [],
|
||||
|
||||
widths: [],
|
||||
|
||||
heights: [],
|
||||
|
||||
avgHeight: 0,
|
||||
|
||||
aligns: [],
|
||||
//是否换行
|
||||
wraps: [],
|
||||
|
||||
animationIndex: 0,
|
||||
|
||||
animationHandler: '',
|
||||
|
||||
updater: 0,
|
||||
|
||||
needCalc: false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
// config () {
|
||||
// console.log("更新了数据");
|
||||
// const { stopAnimation, calcData } = this
|
||||
|
||||
// stopAnimation()
|
||||
|
||||
// this.animationIndex = 0
|
||||
|
||||
// calcData()
|
||||
// }
|
||||
config: {
|
||||
handler(newValue, oldValue) {
|
||||
const { stopAnimation, calcData } = this
|
||||
|
||||
stopAnimation()
|
||||
|
||||
this.animationIndex = 0
|
||||
|
||||
calcData()
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleHover(enter, ri, ci, row, ceil) {
|
||||
const { mergedConfig, emitEvent, stopAnimation, animation } = this
|
||||
if (enter) { emitEvent('mouseover', ri, ci, row, ceil) } else {
|
||||
this.$emit('mouseend')
|
||||
}
|
||||
|
||||
if (!mergedConfig.hoverPause) return
|
||||
if (enter) {
|
||||
stopAnimation()
|
||||
} else {
|
||||
animation(true)
|
||||
}
|
||||
},
|
||||
afterAutoResizeMixinInit() {
|
||||
const { calcData } = this
|
||||
|
||||
calcData()
|
||||
},
|
||||
onResize() {
|
||||
const { mergedConfig, calcWidths, calcHeights } = this
|
||||
|
||||
if (!mergedConfig) return
|
||||
|
||||
calcWidths()
|
||||
|
||||
calcHeights()
|
||||
},
|
||||
calcData() {
|
||||
const { mergeConfig, calcHeaderData, calcRowsData } = this
|
||||
|
||||
mergeConfig()
|
||||
|
||||
calcHeaderData()
|
||||
|
||||
calcRowsData()
|
||||
|
||||
const { calcWidths, calcHeights, calcAligns } = this
|
||||
|
||||
calcWidths()
|
||||
|
||||
calcHeights()
|
||||
|
||||
calcAligns()
|
||||
|
||||
const { animation } = this
|
||||
|
||||
animation(true)
|
||||
},
|
||||
mergeConfig() {
|
||||
let { config, defaultConfig } = this
|
||||
|
||||
this.mergedConfig = deepMerge(deepClone(defaultConfig, true), config || {})
|
||||
},
|
||||
calcHeaderData() {
|
||||
let { header, index, indexHeader } = this.mergedConfig
|
||||
|
||||
if (!header.length) {
|
||||
this.header = []
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
header = [...header]
|
||||
|
||||
if (index) header.unshift(indexHeader)
|
||||
|
||||
this.header = header
|
||||
},
|
||||
calcRowsData() {
|
||||
let { data, index, headerBGC, rowNum } = this.mergedConfig
|
||||
|
||||
if (index) {
|
||||
data = data.map((row, i) => {
|
||||
row = [...row]
|
||||
|
||||
const indexTag = `<span class="index" style="background-color: ${headerBGC};">${i + 1}</span>`
|
||||
|
||||
row.unshift(indexTag)
|
||||
|
||||
return row
|
||||
})
|
||||
}
|
||||
|
||||
data = data.map((ceils, i) => ({ ceils, rowIndex: i }))
|
||||
|
||||
const rowLength = data.length
|
||||
|
||||
if (rowLength > rowNum && rowLength < 2 * rowNum) {
|
||||
data = [...data, ...data]
|
||||
}
|
||||
|
||||
data = data.map((d, i) => ({ ...d, scroll: i }))
|
||||
|
||||
this.rowsData = data
|
||||
this.rows = data
|
||||
},
|
||||
calcWidths() {
|
||||
const { width, mergedConfig, rowsData } = this
|
||||
|
||||
const { columnWidth, header } = mergedConfig
|
||||
|
||||
const usedWidth = columnWidth.reduce((all, w) => all + w, 0)
|
||||
|
||||
let columnNum = 0
|
||||
if (rowsData[0]) {
|
||||
columnNum = rowsData[0].ceils.length
|
||||
} else if (header.length) {
|
||||
columnNum = header.length
|
||||
}
|
||||
|
||||
const avgWidth = (width - usedWidth) / (columnNum - columnWidth.length)
|
||||
|
||||
const widths = new Array(columnNum).fill(avgWidth)
|
||||
|
||||
this.widths = deepMerge(widths, columnWidth)
|
||||
},
|
||||
calcHeights(onresize = false) {
|
||||
const { height, mergedConfig, header } = this
|
||||
|
||||
const { headerHeight, rowNum, data } = mergedConfig
|
||||
|
||||
let allHeight = height
|
||||
|
||||
if (header.length) allHeight -= headerHeight
|
||||
|
||||
const avgHeight = allHeight / rowNum
|
||||
|
||||
this.avgHeight = avgHeight
|
||||
|
||||
if (!onresize) this.heights = new Array(data.length).fill(avgHeight)
|
||||
},
|
||||
calcAligns() {
|
||||
const { header, mergedConfig } = this
|
||||
|
||||
const columnNum = header.length
|
||||
|
||||
let aligns = new Array(columnNum).fill('left')
|
||||
let wraps = new Array(columnNum).fill(false)
|
||||
const { align,wrap } = mergedConfig
|
||||
|
||||
this.aligns = deepMerge(aligns, align)
|
||||
this.wraps = deepMerge(wraps, wrap)
|
||||
},
|
||||
async animation(start = false) {
|
||||
const { needCalc, calcHeights, calcRowsData } = this
|
||||
|
||||
if (needCalc) {
|
||||
calcRowsData()
|
||||
calcHeights()
|
||||
this.needCalc = false
|
||||
}
|
||||
|
||||
let { avgHeight, animationIndex, mergedConfig, rowsData, animation, updater } = this
|
||||
|
||||
const { waitTime, carousel, rowNum } = mergedConfig
|
||||
|
||||
const rowLength = rowsData.length
|
||||
|
||||
if (rowNum >= rowLength) return
|
||||
|
||||
if (start) {
|
||||
await new Promise(resolve => setTimeout(resolve, waitTime))
|
||||
if (updater !== this.updater) return
|
||||
}
|
||||
|
||||
const animationNum = carousel === 'single' ? 1 : rowNum
|
||||
|
||||
let rows = rowsData.slice(animationIndex)
|
||||
rows.push(...rowsData.slice(0, animationIndex))
|
||||
|
||||
this.rows = rows.slice(0, carousel === 'page' ? rowNum * 2 : rowNum + 1)
|
||||
this.heights = new Array(rowLength).fill(avgHeight)
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 300))
|
||||
if (updater !== this.updater) return
|
||||
|
||||
this.heights.splice(0, animationNum, ...new Array(animationNum).fill(0))
|
||||
|
||||
animationIndex += animationNum
|
||||
|
||||
const back = animationIndex - rowLength
|
||||
if (back >= 0) animationIndex = back
|
||||
|
||||
this.animationIndex = animationIndex
|
||||
this.animationHandler = setTimeout(animation, waitTime - 300)
|
||||
},
|
||||
stopAnimation() {
|
||||
const { animationHandler, updater } = this
|
||||
|
||||
this.updater = (updater + 1) % 999999
|
||||
|
||||
if (!animationHandler) return
|
||||
|
||||
clearTimeout(animationHandler)
|
||||
},
|
||||
emitEvent(type, ri, ci, row, ceil) {
|
||||
const { ceils, rowIndex } = row
|
||||
this.$emit(type, {
|
||||
row: ceils,
|
||||
ceil,
|
||||
rowIndex,
|
||||
columnIndex: ci
|
||||
})
|
||||
},
|
||||
updateRows(rows, config, animationIndex) {
|
||||
const { mergedConfig, animationHandler, animation } = this
|
||||
this.mergedConfig = {
|
||||
...mergedConfig,
|
||||
data: [...rows],
|
||||
...config
|
||||
}
|
||||
this.needCalc = true
|
||||
|
||||
if (typeof animationIndex === 'number') this.animationIndex = animationIndex
|
||||
if (!animationHandler) animation(true)
|
||||
}
|
||||
},
|
||||
destroyed() {
|
||||
const { stopAnimation } = this
|
||||
|
||||
stopAnimation()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.zd-scroll-board {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.zd-scroll-board .text {
|
||||
padding: 0 10px;
|
||||
box-sizing: border-box;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.zd-scroll-board .header {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.zd-scroll-board .header .header-item {
|
||||
padding: 0 10px;
|
||||
box-sizing: border-box;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
.zd-scroll-board .rows {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.zd-scroll-board .rows .row-item {
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
.zd-scroll-board .rows .ceil {
|
||||
padding: 0 10px;
|
||||
box-sizing: border-box;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.zd-scroll-board .rows .ceil-wrap {
|
||||
display: flex;
|
||||
line-height: normal;
|
||||
white-space: normal;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.zd-scroll-board .rows .index {
|
||||
border-radius: 3px;
|
||||
padding: 0px 3px;
|
||||
}
|
||||
</style>
|
@ -20,14 +20,15 @@ import {
|
||||
CanvasRenderer
|
||||
} from 'echarts/renderers'
|
||||
import {
|
||||
PieChart,LineChart,BarChart,CustomChart,GaugeChart
|
||||
PieChart,LineChart,BarChart,CustomChart,GaugeChart,PictorialBarChart
|
||||
} from 'echarts/charts'
|
||||
import {
|
||||
TitleComponent,
|
||||
TooltipComponent,
|
||||
LegendComponent,
|
||||
GridComponent,
|
||||
ToolboxComponent
|
||||
ToolboxComponent,
|
||||
MarkLineComponent
|
||||
} from 'echarts/components'
|
||||
echarts.use([
|
||||
CanvasRenderer,
|
||||
@ -36,11 +37,13 @@ echarts.use([
|
||||
LegendComponent,
|
||||
GridComponent,
|
||||
ToolboxComponent,
|
||||
MarkLineComponent,
|
||||
PieChart,
|
||||
LineChart,
|
||||
BarChart,
|
||||
CustomChart,
|
||||
GaugeChart
|
||||
GaugeChart,
|
||||
PictorialBarChart
|
||||
]);
|
||||
|
||||
|
||||
|
135
src/modules/BaseModel/index.ts
Normal file
@ -0,0 +1,135 @@
|
||||
import type { Object3DExtends } from '@/types';
|
||||
import * as THREE from 'three';
|
||||
import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
|
||||
import type { Material } from 'three';
|
||||
import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
|
||||
import type Viewer from '../Viewer';
|
||||
import type { Animate } from '../Viewer';
|
||||
|
||||
export default class BaseModel {
|
||||
protected viewer: Viewer;
|
||||
public gltf: GLTF;
|
||||
public object: THREE.Group;
|
||||
/**模型原始材质 */
|
||||
public originMaterials: Material[] = [];
|
||||
public isSaveMaterial: boolean = false;
|
||||
public animaIndex: number = -1;
|
||||
public mixer!: THREE.AnimationMixer;
|
||||
public clock: THREE.Clock;
|
||||
public animaObject!: Animate;
|
||||
|
||||
constructor(gltf: GLTF, viewer: Viewer) {
|
||||
this.gltf = gltf;
|
||||
this.viewer = viewer;
|
||||
this.object = gltf.scene || gltf;
|
||||
|
||||
this.clock = new THREE.Clock();
|
||||
}
|
||||
/**
|
||||
* 设置模型比例
|
||||
* @param x 可以只填写一个参数
|
||||
* @param y 纵轴缩放
|
||||
* @param z 横轴缩放
|
||||
*/
|
||||
public setScalc(x: number, y?: number, z?: number) {
|
||||
this.object.scale.set(x, y || x, z || x);
|
||||
}
|
||||
|
||||
public getLength() {
|
||||
const box = new THREE.Box3();
|
||||
box.setFromObject(this.object);
|
||||
const size = box.getSize(new THREE.Vector3());
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置模型动画
|
||||
* @param i 选择模型动画进行播放
|
||||
*/
|
||||
public startAnima(i = 0) {
|
||||
this.animaIndex = i;
|
||||
if (!this.mixer) this.mixer = new THREE.AnimationMixer(this.object);
|
||||
if (this.gltf.animations.length < 1) return;
|
||||
this.mixer.clipAction(this.gltf.animations[i]).play();
|
||||
// 传入参数需要将函数与函数参数分开,在运行时填入
|
||||
this.animaObject = {
|
||||
fun: this.updateAnima,
|
||||
content: this,
|
||||
};
|
||||
this.viewer.addAnimate(this.animaObject);
|
||||
}
|
||||
|
||||
private updateAnima(e: any) {
|
||||
e.mixer.update(e.clock.getDelta());
|
||||
}
|
||||
|
||||
/**
|
||||
* 克隆模型
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @returns {*}
|
||||
*/
|
||||
public cloneModel([x, y, z] = [0, 0, 0]) {
|
||||
const newScene = { ...this.gltf };
|
||||
const newModel = clone(this.object);
|
||||
newModel.position.set(x, y, z);
|
||||
this.viewer.scene.add(newModel);
|
||||
newScene.scene = newModel as any;
|
||||
return new BaseModel(newScene, this.viewer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启模型阴影 数组中移除阴影
|
||||
*/
|
||||
public openCastShadow(names = []) {
|
||||
this.gltf.scene.traverse((model: Object3DExtends) => {
|
||||
if (model.isMesh && !names.includes(model.name as never)) {
|
||||
model.frustumCulled = false;
|
||||
model.castShadow = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**设置模型颜色 */
|
||||
public setColor(color = 'yellow', opacity = 0.5) {
|
||||
if (!this.isSaveMaterial) this.originMaterials = [];
|
||||
this.gltf.scene.traverse((model: Object3DExtends) => {
|
||||
if (model.isMesh) {
|
||||
if (!this.isSaveMaterial) this.originMaterials.push(model.material as Material);
|
||||
model.material = new THREE.MeshPhongMaterial({
|
||||
side: THREE.DoubleSide,
|
||||
transparent: true,
|
||||
depthTest: false,
|
||||
depthWrite: true, // 无法被选择,鼠标穿透
|
||||
color: new THREE.Color(color),
|
||||
opacity: opacity,
|
||||
});
|
||||
}
|
||||
});
|
||||
this.isSaveMaterial = true;
|
||||
}
|
||||
|
||||
/**设置模型材质 */
|
||||
public setMaterial(material = new THREE.MeshBasicMaterial()) {
|
||||
if (!this.isSaveMaterial) this.originMaterials = [];
|
||||
this.gltf.scene.traverse((model: Object3DExtends) => {
|
||||
if (model.isMesh) {
|
||||
if (!this.isSaveMaterial) this.originMaterials.push(model.material as Material);
|
||||
model.material = material;
|
||||
}
|
||||
});
|
||||
this.isSaveMaterial = true;
|
||||
}
|
||||
|
||||
// 还原模型材质
|
||||
public setDefault() {
|
||||
let i = 0;
|
||||
this.gltf.scene.traverse((model: Object3DExtends) => {
|
||||
if (model.isMesh) {
|
||||
model.material = this.originMaterials[i];
|
||||
i++;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
46
src/modules/BoxHelperWrap/index.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import {
|
||||
BoxHelper,
|
||||
Color,
|
||||
Object3D
|
||||
} from 'three';
|
||||
import type Viewer from '../Viewer';
|
||||
|
||||
export default class BoxHelperWrap {
|
||||
protected viewer: Viewer;
|
||||
public boxHelper: BoxHelper;
|
||||
|
||||
constructor (viewer: Viewer, color?: number) {
|
||||
this.viewer = viewer;
|
||||
const boxColor = color === undefined ? 0x00ffff : color;
|
||||
this.boxHelper = new BoxHelper(new Object3D(), new Color(boxColor));
|
||||
// // @ts-expect-error
|
||||
// this.boxHelper.material.depthTest = false;
|
||||
|
||||
this.initBoxHelperWrap();
|
||||
}
|
||||
|
||||
private initBoxHelperWrap () {
|
||||
this.viewer.scene.add(this.boxHelper);
|
||||
}
|
||||
|
||||
public setVisible (visible: boolean): void {
|
||||
this.boxHelper.visible = visible;
|
||||
}
|
||||
|
||||
public attach (obj: Object3D): void {
|
||||
this.boxHelper.setFromObject(obj);
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
public dispose (): void {
|
||||
const parent = this.boxHelper.parent;
|
||||
if (parent !== null) {
|
||||
parent.remove(this.boxHelper);
|
||||
}
|
||||
|
||||
Object.keys(this).forEach(key => {
|
||||
// @ts-expect-error
|
||||
this[key] = null;
|
||||
});
|
||||
}
|
||||
}
|
34
src/modules/Floors/index.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import * as THREE from 'three';
|
||||
import type Viewer from '../Viewer';
|
||||
|
||||
export default class Floors {
|
||||
protected viewer: Viewer;
|
||||
public planeWidth: number = 500;
|
||||
public planeHeight: number = 500;
|
||||
|
||||
constructor(viewer: Viewer) {
|
||||
this.viewer = viewer;
|
||||
this.initFlooer();
|
||||
}
|
||||
|
||||
private initFlooer() {
|
||||
const ground = new THREE.Mesh(
|
||||
new THREE.PlaneGeometry(this.planeWidth, this.planeHeight),
|
||||
new THREE.MeshPhongMaterial({ color: 0xbbbbbb, depthWrite: false })
|
||||
);
|
||||
ground.rotation.x = - Math.PI / 2;
|
||||
ground.receiveShadow = true;
|
||||
this.viewer.scene.add(ground);
|
||||
}
|
||||
|
||||
/**网格辅助线 */
|
||||
public addGird(
|
||||
size: number = 500,
|
||||
divisions: number = 20,
|
||||
colorCenterLine: number = 0x888888,
|
||||
colorGrid: number = 0x888888
|
||||
) {
|
||||
const grid = new THREE.GridHelper(size, divisions, colorCenterLine, colorGrid);
|
||||
this.viewer.scene.add(grid);
|
||||
}
|
||||
}
|
20
src/modules/Lights/DirectionalLight.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import * as THREE from 'three';
|
||||
import type Viewer from '../Viewer';
|
||||
|
||||
/**
|
||||
* 平行光
|
||||
*/
|
||||
export default class DirectionalLight {
|
||||
public light: THREE.DirectionalLight;
|
||||
public viewer: Viewer;
|
||||
|
||||
constructor(viewer: Viewer) {
|
||||
this.viewer = viewer;
|
||||
const ambient = new THREE.AmbientLight(0xffffff, 0.4);
|
||||
this.viewer.scene.add(ambient);
|
||||
this.light = new THREE.DirectionalLight(new THREE.Color('#fff'));
|
||||
|
||||
this.viewer.scene.add(this.light);
|
||||
}
|
||||
|
||||
}
|
11
src/modules/Lights/index.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { AmbientLight } from 'three';
|
||||
import type Viewer from '../Viewer';
|
||||
|
||||
export default class Lights {
|
||||
public viewer: Viewer;
|
||||
constructor(viewer: Viewer) {
|
||||
this.viewer = viewer;
|
||||
const ambient = new AmbientLight(0xffffff, 0.4);
|
||||
this.viewer.scene.add(ambient);
|
||||
}
|
||||
}
|
69
src/modules/ModelLoder/index.ts
Normal file
@ -0,0 +1,69 @@
|
||||
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
|
||||
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
|
||||
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';
|
||||
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader';
|
||||
import BaseModel from '../BaseModel';
|
||||
import type Viewer from '../Viewer';
|
||||
|
||||
type LoadModelCallbackFn<T = any> = (arg: T) => any;
|
||||
|
||||
type arrUrl = {mtlUrl:string,objUrl:string};
|
||||
const publicPath = `${import.meta.env.VITE_PUBLIC_BASE_PATH || ''}`
|
||||
|
||||
/**模型加载器 */
|
||||
export default class ModelLoder {
|
||||
protected viewer: Viewer;
|
||||
private gltfLoader: GLTFLoader;
|
||||
private dracoLoader: DRACOLoader;
|
||||
|
||||
constructor(viewer: Viewer, dracolPath: string = `${publicPath}/draco/`) {
|
||||
this.viewer = viewer;
|
||||
this.gltfLoader = new GLTFLoader();
|
||||
this.dracoLoader = new DRACOLoader();
|
||||
|
||||
// 提供一个DracLoader实例来解码压缩网格数据
|
||||
// 没有这个会报错 dracolPath 默认放在public文件夹当中
|
||||
this.dracoLoader.setDecoderPath(dracolPath);
|
||||
this.gltfLoader.setDRACOLoader(this.dracoLoader);
|
||||
}
|
||||
|
||||
/**模型加载到场景 */
|
||||
public loadModelToScene(url: string, callback: LoadModelCallbackFn<BaseModel>) {
|
||||
const publicUrl = `${publicPath}${url}`;
|
||||
this.loadModel(publicUrl, model => {
|
||||
this.viewer.scene.add(model.object);
|
||||
callback && callback(model);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public ladObjModelToScene(url: arrUrl, callback: LoadModelCallbackFn<any>) {
|
||||
|
||||
this.loadObjModel(url, model => {
|
||||
this.viewer.scene.add(model);
|
||||
callback && callback(model);
|
||||
});
|
||||
}
|
||||
|
||||
private loadModel(url: string, callback: LoadModelCallbackFn<BaseModel>) {
|
||||
this.gltfLoader.load(url, gltf => {
|
||||
const baseModel = new BaseModel(gltf, this.viewer);
|
||||
callback && callback(baseModel);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private loadObjModel(url: arrUrl, callback: LoadModelCallbackFn<any>) {
|
||||
const objLoader = new OBJLoader();
|
||||
const mtlLoader = new MTLLoader();
|
||||
const publicMtlUrl = `${publicPath}${url.mtlUrl}`;
|
||||
const publicObjUrl = `${publicPath}${url.objUrl}`;
|
||||
mtlLoader.load(publicMtlUrl, materials => {
|
||||
materials.preload();
|
||||
objLoader.setMaterials(materials);
|
||||
objLoader.load(publicObjUrl, obj => {
|
||||
callback && callback(obj);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
57
src/modules/SkyBoxs/index.ts
Normal file
@ -0,0 +1,57 @@
|
||||
import * as THREE from 'three';
|
||||
import type Viewer from '../Viewer';
|
||||
import { Sky } from '../type';
|
||||
|
||||
/** 场景天空盒*/
|
||||
export default class SkyBoxs {
|
||||
protected viewer: Viewer;
|
||||
|
||||
constructor (viewer: Viewer) {
|
||||
this.viewer = viewer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加雾效果
|
||||
* @param color 颜色
|
||||
*/
|
||||
public addFog (color = 0xa0a0a0, near = 500, far = 2000) {
|
||||
this.viewer.scene.fog = new THREE.Fog(new THREE.Color(color), near, far);
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除雾效果
|
||||
*/
|
||||
public removeFog () {
|
||||
this.viewer.scene.fog = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加默认天空盒
|
||||
* @param skyType
|
||||
*/
|
||||
public addSkybox (skyType: keyof typeof Sky = Sky.daytime) {
|
||||
const path = `${import.meta.env.VITE_PUBLIC_BASE_PATH || ''}/skybox/${Sky[skyType]}/`; // 设置路径
|
||||
const format = '.jpg'; // 设定格式
|
||||
this.setSkybox(path, format);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义添加天空盒
|
||||
* @param path 天空盒地址
|
||||
* @param format 图片后缀名
|
||||
*/
|
||||
private setSkybox (path: string, format = '.jpg') {
|
||||
const loaderbox = new THREE.CubeTextureLoader();
|
||||
const cubeTexture = loaderbox.load([
|
||||
path + 'posx' + format,
|
||||
path + 'negx' + format,
|
||||
path + 'posy' + format,
|
||||
path + 'negy' + format,
|
||||
path + 'posz' + format,
|
||||
path + 'negz' + format,
|
||||
]);
|
||||
// 需要把色彩空间编码改一下
|
||||
cubeTexture.encoding = THREE.sRGBEncoding;
|
||||
this.viewer.scene.background = cubeTexture;
|
||||
}
|
||||
}
|
20
src/modules/Viewer/Events.ts
Normal file
@ -0,0 +1,20 @@
|
||||
export default {
|
||||
animate: 'animate',
|
||||
dispose: 'dispose',
|
||||
orbitChange: 'orbitChange',
|
||||
load: {
|
||||
start: 'load:start',
|
||||
processing: 'load:processing',
|
||||
finish: 'load:finish',
|
||||
},
|
||||
click: {
|
||||
raycaster: 'click:raycaster',
|
||||
},
|
||||
dblclick: {
|
||||
raycaster: 'dblclick:raycaster',
|
||||
},
|
||||
mousemove: {
|
||||
raycaster: 'mousemove:raycaster',
|
||||
},
|
||||
resize: 'resize',
|
||||
};
|
247
src/modules/Viewer/index.ts
Normal file
@ -0,0 +1,247 @@
|
||||
import {
|
||||
Scene,
|
||||
PerspectiveCamera,
|
||||
AxesHelper,
|
||||
WebGLRenderer,
|
||||
Camera,
|
||||
SRGBColorSpace,
|
||||
AmbientLight,
|
||||
Raycaster,
|
||||
Vector2
|
||||
} from 'three';
|
||||
import * as THREE from 'three';
|
||||
import mitt, { type Emitter } from 'mitt';
|
||||
import Events from './Events';
|
||||
import { throttle } from 'lodash-es';
|
||||
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
||||
import Stats from 'three/examples/jsm/libs/stats.module';
|
||||
import SkyBoxs from '../SkyBoxs';
|
||||
|
||||
export type Animate = {
|
||||
fun: (arg: any) => any,
|
||||
content: any,
|
||||
}
|
||||
|
||||
export default class Viewer {
|
||||
public id: string;
|
||||
public viewerDom!: HTMLElement;
|
||||
public scene!: Scene;
|
||||
public camera!: PerspectiveCamera;
|
||||
public renderer!: WebGLRenderer;
|
||||
public controls!: OrbitControls;
|
||||
public skyboxs!: SkyBoxs;
|
||||
public animateEventList: Animate[] = [];
|
||||
public statsControls!: Stats;
|
||||
public raycaster!: Raycaster;
|
||||
public mouse!: Vector2;
|
||||
public emitter!: Emitter<any>;
|
||||
public mouseEvent: MouseEvent | undefined;
|
||||
public raycasterObjects: THREE.Object3D[] = [];
|
||||
public isDestroy: boolean = false;
|
||||
public senceWidth: ()=>number = ()=> window.innerWidth;
|
||||
public senceHeight: ()=>number = ()=> window.innerHeight;
|
||||
constructor(id: string,wh?:{width:number,height:number}) {
|
||||
this.id = id;
|
||||
this.senceWidth = ()=> wh.width||window.innerWidth;
|
||||
this.senceHeight = ()=> wh.height||window.innerHeight;
|
||||
this.initViewer();
|
||||
}
|
||||
/**坐标轴辅助 */
|
||||
public addAxis() {
|
||||
const axis = new AxesHelper(1000);
|
||||
this.scene?.add(axis);
|
||||
}
|
||||
|
||||
public addAnimate(animate: Animate) {
|
||||
this.animateEventList.push(animate);
|
||||
}
|
||||
/**
|
||||
* 添加性能状态监测
|
||||
*/
|
||||
public addStats() {
|
||||
if (!this.statsControls) this.statsControls = new Stats();
|
||||
this.statsControls.dom.style.position = 'absolute';
|
||||
this.viewerDom.appendChild(this.statsControls.dom);
|
||||
|
||||
// 添加到动画
|
||||
this.addAnimate({
|
||||
fun: this.statsUpdate,
|
||||
content: this.statsControls,
|
||||
});
|
||||
}
|
||||
|
||||
/**注册鼠标事件监听 */
|
||||
public initRaycaster() {
|
||||
this.raycaster = new Raycaster();
|
||||
|
||||
const initRaycasterEvent: Function = (eventName: keyof HTMLElementEventMap): void => {
|
||||
const funWrap = throttle(
|
||||
(event: any) => {
|
||||
this.mouseEvent = event;
|
||||
this.mouse.x = (event.clientX / this.senceWidth()) * 2 - 1;
|
||||
this.mouse.y = - (event.clientY / this.senceHeight()) * 2 + 1;
|
||||
|
||||
this.emitter.emit(Events[eventName].raycaster, this.getRaycasterIntersectObjects());
|
||||
},
|
||||
50
|
||||
);
|
||||
this.viewerDom.addEventListener(eventName, funWrap, false);
|
||||
};
|
||||
|
||||
initRaycasterEvent('click');
|
||||
initRaycasterEvent('dblclick');
|
||||
initRaycasterEvent('mousemove');
|
||||
}
|
||||
|
||||
/**销毁场景 */
|
||||
public destroy() {
|
||||
this.scene.traverse((child: any) => {
|
||||
if (child.material) {
|
||||
child.material.dispose();
|
||||
}
|
||||
if (child.geometry) {
|
||||
child.geometry.dispose();
|
||||
}
|
||||
child = null;
|
||||
});
|
||||
this.renderer.forceContextLoss();
|
||||
this.renderer.dispose();
|
||||
this.scene.clear();
|
||||
|
||||
this.isDestroy = true;
|
||||
}
|
||||
|
||||
private statsUpdate(statsControls: any) {
|
||||
statsControls.update();
|
||||
}
|
||||
|
||||
private initViewer() {
|
||||
this.emitter = mitt();
|
||||
|
||||
this.initRenderer();
|
||||
this.initScene();
|
||||
this.initLight();
|
||||
this.initCamera();
|
||||
this.initControl();
|
||||
this.initSkybox();
|
||||
|
||||
this.raycaster = new Raycaster();
|
||||
this.mouse = new Vector2();
|
||||
|
||||
const animate = () => {
|
||||
if (this.isDestroy) return;
|
||||
requestAnimationFrame(animate);
|
||||
|
||||
this.updateDom();
|
||||
this.readerDom();
|
||||
|
||||
// 全局的公共动画函数,添加函数可同步执行
|
||||
this.animateEventList.forEach(event => {
|
||||
// event.fun && event.content && event.fun(event.content);
|
||||
if (event.fun && event.content) {
|
||||
event.fun(event.content);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
animate();
|
||||
}
|
||||
|
||||
private initScene() {
|
||||
this.scene = new Scene();
|
||||
}
|
||||
|
||||
private initCamera() {
|
||||
// 渲染相机
|
||||
this.camera = new PerspectiveCamera(75, this.senceWidth() / this.senceHeight(), 0.1, 2000);
|
||||
//设置相机位置
|
||||
this.camera.position.set(40, 300, 200);
|
||||
//设置相机方向
|
||||
this.camera.lookAt(0, 0, 0);
|
||||
}
|
||||
|
||||
private initRenderer() {
|
||||
// 获取画布dom
|
||||
this.viewerDom = document.getElementById(this.id) as HTMLElement;
|
||||
// 初始化渲染器
|
||||
this.renderer = new WebGLRenderer({
|
||||
logarithmicDepthBuffer: true,
|
||||
antialias: true, // true/false表示是否开启反锯齿
|
||||
alpha: true, // true/false 表示是否可以设置背景色透明
|
||||
precision: 'mediump', // highp/mediump/lowp 表示着色精度选择
|
||||
premultipliedAlpha: true, // true/false 表示是否可以设置像素深度(用来度量图像的分辨率)
|
||||
// preserveDrawingBuffer: false, // true/false 表示是否保存绘图缓冲
|
||||
physicallyCorrectLights: true, // true/false 表示是否开启物理光照
|
||||
});
|
||||
this.renderer.clearDepth();
|
||||
|
||||
this.renderer.shadowMap.enabled = true;
|
||||
this.renderer.outputColorSpace = SRGBColorSpace; // 可以看到更亮的材质,同时这也影响到环境贴图。
|
||||
this.viewerDom.appendChild(this.renderer.domElement);
|
||||
}
|
||||
|
||||
private initControl() {
|
||||
this.controls = new OrbitControls(
|
||||
this.camera as Camera,
|
||||
this.renderer?.domElement
|
||||
);
|
||||
this.controls.enableDamping = false;
|
||||
this.controls.screenSpacePanning = false; // 定义平移时如何平移相机的位置 控制不上下移动
|
||||
this.controls.minDistance = 2;
|
||||
this.controls.maxDistance = 1000;
|
||||
this.controls.addEventListener('change', ()=>{
|
||||
this.renderer.render(this.scene, this.camera);
|
||||
});
|
||||
}
|
||||
|
||||
private initSkybox() {
|
||||
if (!this.skyboxs) this.skyboxs = new SkyBoxs(this);
|
||||
this.skyboxs.addSkybox('night');
|
||||
this.skyboxs.addFog();
|
||||
}
|
||||
|
||||
private initLight() {
|
||||
const ambient = new AmbientLight(0xffffff, 0.6);
|
||||
this.scene.add(ambient);
|
||||
|
||||
const light = new THREE.DirectionalLight( 0xffffff );
|
||||
light.position.set( 0, 200, 100 );
|
||||
light.castShadow = true;
|
||||
|
||||
light.shadow.camera.top = 180;
|
||||
light.shadow.camera.bottom = -100;
|
||||
light.shadow.camera.left = -120;
|
||||
light.shadow.camera.right = 400;
|
||||
light.shadow.camera.near = 0.1;
|
||||
light.shadow.camera.far = 400;
|
||||
// 设置mapSize属性可以使阴影更清晰,不那么模糊
|
||||
light.shadow.mapSize.set(1024, 1024);
|
||||
|
||||
this.scene.add(light);
|
||||
}
|
||||
|
||||
// 渲染dom
|
||||
private readerDom() {
|
||||
this.renderer?.render(this.scene as Scene, this.camera as Camera);
|
||||
}
|
||||
|
||||
private updateDom() {
|
||||
this.controls.update();
|
||||
// 更新参数
|
||||
this.camera.aspect = this.viewerDom.clientWidth / this.viewerDom.clientHeight; // 摄像机视锥体的长宽比,通常是使用画布的宽/画布的高
|
||||
this.camera.updateProjectionMatrix(); // 更新摄像机投影矩阵。在任何参数被改变以后必须被调用,来使得这些改变生效
|
||||
this.renderer.setSize(this.viewerDom.clientWidth, this.viewerDom.clientHeight);
|
||||
this.renderer.setPixelRatio(window.devicePixelRatio); // 设置设备像素比
|
||||
}
|
||||
|
||||
/**自定义鼠标事件触发的范围,给定一个模型组,对给定的模型组鼠标事件才生效 */
|
||||
public setRaycasterObjects (objList: THREE.Object3D[]): void {
|
||||
this.raycasterObjects = objList;
|
||||
}
|
||||
|
||||
private getRaycasterIntersectObjects(): THREE.Intersection[] {
|
||||
if (!this.raycasterObjects.length) return [];
|
||||
this.raycaster.setFromCamera(this.mouse, this.camera);
|
||||
return this.raycaster.intersectObjects(this.raycasterObjects, true);
|
||||
}
|
||||
}
|
5
src/modules/type.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export enum Sky {
|
||||
daytime = 'daytime',
|
||||
dusk = 'dusk',
|
||||
night = 'night',
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
import { createWebHistory, createRouter } from 'vue-router'
|
||||
import { createWebHistory, createRouter,createWebHashHistory } from 'vue-router'
|
||||
/* Layout */
|
||||
import Layout from '@/layout'
|
||||
import ScaleScreen from '@/layout/scaleScreen'
|
||||
@ -77,10 +77,16 @@ export const constantRoutes = [
|
||||
hidden: true,
|
||||
redirect: 'noredirect',
|
||||
children: [
|
||||
// {
|
||||
// path: "/screen/R_D_Environment",
|
||||
// name: "R_D_Environment",
|
||||
// component: () => import("../views/screen/R_D_Environment/index.vue"),
|
||||
// hidden: true
|
||||
// },
|
||||
{
|
||||
path: "/screen/R_D_Environment",
|
||||
name: "R_D_Environment",
|
||||
component: () => import("../views/screen/R_D_Environment/index.vue"),
|
||||
path: "/screen/R_D_Environment1",
|
||||
name: "R_D_Environment1",
|
||||
component: () => import("../views/screen/R_D_Environment1/index.vue"),
|
||||
hidden: true
|
||||
},
|
||||
]
|
||||
@ -176,7 +182,7 @@ export const dynamicRoutes = [
|
||||
]
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
history: createWebHashHistory(),
|
||||
routes: constantRoutes,
|
||||
scrollBehavior(to, from, savedPosition) {
|
||||
if (savedPosition) {
|
||||
|
41
src/utils/threejs.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import type { Object3D } from 'three';
|
||||
|
||||
|
||||
/**
|
||||
* Finding object3D parent(include itself) circularly until callback return true.
|
||||
* If don't find the parent match the callback,it will return null.
|
||||
* @param {Object3D} object3d
|
||||
* @param {(obj:Object3D)=>boolean} callback
|
||||
* @returns {Object3D|null}
|
||||
*/
|
||||
export function findParent (object3d: Object3D, callback: (obj: Object3D) => boolean): Object3D | null {
|
||||
let parent: Object3D | null = object3d;
|
||||
while (!callback(parent)) {
|
||||
parent = parent.parent;
|
||||
if (parent === null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return parent;
|
||||
}
|
||||
|
||||
export function findChildren (object3D: Object3D, callback: (obj: Object3D) => boolean): Object3D |null {
|
||||
const children: Object3D[] = [];
|
||||
object3D.traverse(obj => children.push(obj));
|
||||
const result = children.find(callback);
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function checkNameIncludes (obj: Object3D, str: string): boolean {
|
||||
if (obj.name.includes(str)) {
|
||||
// console.log(obj.name);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
220
src/utils/websocket.js
Normal file
@ -0,0 +1,220 @@
|
||||
|
||||
// websocket实例
|
||||
let wsObj = null
|
||||
// ws连接地址
|
||||
let wsUrl = null
|
||||
// let userId = null;
|
||||
// 是否执行重连 true/不执行 ; false/执行
|
||||
let lockReconnect = false
|
||||
// 重连定时器
|
||||
let wsCreateHandler = null
|
||||
// 连接成功,执行回调函数
|
||||
let messageCallback = null
|
||||
// 连接失败,执行回调函数
|
||||
let errorCallback = null
|
||||
// 发送给后台的数据
|
||||
let sendDatas = {}
|
||||
/**
|
||||
* 发起websocket请求函数
|
||||
* @param {string} url ws连接地址
|
||||
* @param {Object} agentData 传给后台的参数
|
||||
* @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
|
||||
* @param {function} errCallback ws连接错误的回调函数
|
||||
*/
|
||||
export const connectWebsocket = (url = null, agentData, successCallback, errCallback) => {
|
||||
//console.log(process.env);
|
||||
if (!url) {
|
||||
if (import.meta.env.VITE_APP_ENV == "production") {
|
||||
wsUrl = `ws://${window.document.location.hostname}:9018/`
|
||||
} else {
|
||||
console.log(import.meta.env,'11111111');
|
||||
wsUrl = import.meta.env.VITE_APP_WS_API
|
||||
}
|
||||
|
||||
} else {
|
||||
wsUrl = url
|
||||
}
|
||||
console.log('socket地址:',wsUrl);
|
||||
createWebSoket()
|
||||
messageCallback = successCallback
|
||||
errorCallback = errCallback
|
||||
sendDatas = agentData
|
||||
}
|
||||
|
||||
// 手动关闭websocket (这里手动关闭会执行onclose事件)
|
||||
export const closeWebsocket = () => {
|
||||
if (wsObj) {
|
||||
writeToScreen('手动关闭websocket')
|
||||
wsObj.close() // 关闭websocket
|
||||
wsObj.onclose() // 关闭websocket(如果上面的关闭不生效就加上这一条)
|
||||
// 关闭重连
|
||||
lockReconnect = true
|
||||
wsCreateHandler && clearTimeout(wsCreateHandler)
|
||||
// 关闭心跳检查
|
||||
heartCheck.stop()
|
||||
}
|
||||
}
|
||||
|
||||
// 创建ws函数
|
||||
const createWebSoket = () => {
|
||||
if (typeof (WebSocket) === 'undefined') {
|
||||
writeToScreen('您的浏览器不支持WebSocket,无法获取数据')
|
||||
return false
|
||||
}
|
||||
// const host = window.location.host;
|
||||
// userId = GetQueryString("userId");
|
||||
// wsUrl = "ws://" + host + "/websoket" + userId;
|
||||
|
||||
try {
|
||||
wsObj = new WebSocket(wsUrl)
|
||||
initWsEventHandle()
|
||||
} catch (e) {
|
||||
writeToScreen('连接异常,开始重连')
|
||||
reconnect()
|
||||
}
|
||||
}
|
||||
|
||||
const initWsEventHandle = () => {
|
||||
try {
|
||||
// 连接成功
|
||||
wsObj.onopen = (event) => {
|
||||
onWsOpen(event)
|
||||
// heartCheck.start()
|
||||
}
|
||||
|
||||
// 监听服务器端返回的信息
|
||||
wsObj.onmessage = (event) => {
|
||||
onWsMessage(event)
|
||||
// heartCheck.start()
|
||||
}
|
||||
|
||||
wsObj.onclose = (event) => {
|
||||
writeToScreen('onclose执行关闭事件')
|
||||
onWsClose(event)
|
||||
}
|
||||
|
||||
wsObj.onerror = (event) => {
|
||||
writeToScreen('onerror执行error事件,开始重连')
|
||||
onWsError(event)
|
||||
reconnect()
|
||||
}
|
||||
} catch (err) {
|
||||
writeToScreen('绑定事件没有成功,开始重连')
|
||||
reconnect()
|
||||
}
|
||||
}
|
||||
|
||||
const onWsOpen = (event) => {
|
||||
writeToScreen('CONNECT')
|
||||
// // 客户端与服务器端通信
|
||||
// wsObj.send('我发送消息给服务端');
|
||||
// 添加状态判断,当为OPEN时,发送消息
|
||||
if (wsObj.readyState === wsObj.OPEN) { // wsObj.OPEN = 1
|
||||
// 发给后端的数据需要字符串化
|
||||
console.log('发送标识', sendDatas)
|
||||
// wsObj.send(sendDatas)
|
||||
}
|
||||
if (wsObj.readyState === wsObj.CLOSED) { // wsObj.CLOSED = 3
|
||||
writeToScreen('wsObj.readyState=3, ws连接异常,开始重连')
|
||||
reconnect()
|
||||
errorCallback()
|
||||
}
|
||||
}
|
||||
const onWsMessage = (event) => {
|
||||
if (event.data) {
|
||||
messageCallback(event.data)
|
||||
}
|
||||
// const jsonStr = event.data
|
||||
// writeToScreen('onWsMessage接收到服务器的数据: ', jsonStr)
|
||||
}
|
||||
const onWsClose = (event) => {
|
||||
writeToScreen('DISCONNECT')
|
||||
// e.code === 1000 表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
|
||||
// e.code !== 1000 表示非正常关闭。
|
||||
console.log('onclose event: ', event)
|
||||
if (event && event.code !== 1000) {
|
||||
writeToScreen('非正常关闭')
|
||||
errorCallback()
|
||||
// 如果不是手动关闭,这里的重连会执行;如果调用了手动关闭函数,这里重连不会执行
|
||||
reconnect()
|
||||
}
|
||||
}
|
||||
const onWsError = (event) => {
|
||||
// writeToScreen('onWsError: ', event.data)
|
||||
console.log(event);
|
||||
|
||||
errorCallback()
|
||||
}
|
||||
|
||||
const writeToScreen = (massage) => {
|
||||
console.log(massage)
|
||||
}
|
||||
|
||||
// 重连函数
|
||||
const reconnect = () => {
|
||||
if (lockReconnect) {
|
||||
return
|
||||
}
|
||||
writeToScreen('3秒后重连')
|
||||
lockReconnect = true
|
||||
// 没连接上会一直重连,设置延迟避免请求过多
|
||||
wsCreateHandler && clearTimeout(wsCreateHandler)
|
||||
wsCreateHandler = setTimeout(() => {
|
||||
writeToScreen('重连...' + wsUrl)
|
||||
createWebSoket()
|
||||
lockReconnect = false
|
||||
writeToScreen('重连完成')
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
// 从浏览器地址中获取对应参数
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const GetQueryString = (name) => {
|
||||
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')
|
||||
// 获取url中 ? 符后的字符串并正则匹配
|
||||
let r = window.location.search.substr(1).match(reg)
|
||||
let context = ''
|
||||
r && (context = r[2])
|
||||
reg = null
|
||||
r = null
|
||||
return context
|
||||
}
|
||||
|
||||
// 心跳检查(看看websocket是否还在正常连接中)
|
||||
const heartCheck = {
|
||||
timeout: 60000,
|
||||
timeoutObj: null,
|
||||
serverTimeoutObj: null,
|
||||
// 重启
|
||||
reset() {
|
||||
clearTimeout(this.timeoutObj)
|
||||
clearTimeout(this.serverTimeoutObj)
|
||||
this.start()
|
||||
},
|
||||
// 停止
|
||||
stop() {
|
||||
clearTimeout(this.timeoutObj)
|
||||
clearTimeout(this.serverTimeoutObj)
|
||||
},
|
||||
// 开启定时器
|
||||
start() {
|
||||
this.timeoutObj && clearTimeout(this.timeoutObj)
|
||||
this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj)
|
||||
// 15s之内如果没有收到后台的消息,则认为是连接断开了,需要重连
|
||||
this.timeoutObj = setTimeout(() => {
|
||||
writeToScreen('心跳检查,发送ping到后台')
|
||||
try {
|
||||
const datas = { ping: true }
|
||||
wsObj.send(JSON.stringify(datas))
|
||||
} catch (err) {
|
||||
writeToScreen('发送ping异常')
|
||||
}
|
||||
console.log('内嵌定时器this.serverTimeoutObj: ', this.serverTimeoutObj)
|
||||
// 内嵌定时器
|
||||
this.serverTimeoutObj = setTimeout(() => {
|
||||
writeToScreen('没有收到后台的数据,重新连接')
|
||||
reconnect()
|
||||
}, 100)
|
||||
}, this.timeout)
|
||||
}
|
||||
}
|
61
src/views/screen/R_D_Environment/component/Popover/index.vue
Normal file
@ -0,0 +1,61 @@
|
||||
<template>
|
||||
<div
|
||||
class="popover"
|
||||
:style="{
|
||||
'top': props.top + 'px',
|
||||
'left': props.left + 'px',
|
||||
'display': isShow ? 'inline-block' : 'none'
|
||||
}"
|
||||
>
|
||||
<div class="popover-title">
|
||||
{{ dataRef.name }}
|
||||
</div>
|
||||
<div class="popover-content">
|
||||
{{ 'content' }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="Popover">
|
||||
import { ref } from 'vue';
|
||||
type PropsTypes = {
|
||||
top: number;
|
||||
left: number;
|
||||
};
|
||||
|
||||
const props = withDefaults(defineProps<PropsTypes>(), {
|
||||
top: 0,
|
||||
left: 0,
|
||||
});
|
||||
|
||||
const isShow = ref(false);
|
||||
const dataRef = ref<any>({});
|
||||
|
||||
const setShow = (visible: boolean, data?: any) => {
|
||||
isShow.value = visible;
|
||||
if (data) dataRef.value = data;
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
setShow,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.popover {
|
||||
position: absolute;
|
||||
background-color: rgb(29 78 216 / 0.6);
|
||||
/* background-image: url('/src/assets/images/preview-bottom.png'); */
|
||||
border-radius: 5px;
|
||||
font-size: 0.2rem;
|
||||
color: #fff;
|
||||
font-size: 30px;
|
||||
}
|
||||
.popover-title {
|
||||
padding: 12px;
|
||||
border-bottom: 1px solid #fff;
|
||||
}
|
||||
.popover-content {
|
||||
padding: 24px;
|
||||
}
|
||||
</style>
|
385
src/views/screen/R_D_Environment/component/Sence.vue
Normal file
@ -0,0 +1,385 @@
|
||||
<template>
|
||||
<div id="three"></div>
|
||||
<Popover ref="popoverRef" :top="popoverTop" :left="popoverLeft" :data="popoverData"></Popover>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="Sence">
|
||||
/* eslint-disable */
|
||||
import { ref, onMounted, type Ref } from 'vue';
|
||||
import Viewer, { type Animate } from '@/modules/Viewer';
|
||||
import Floors from '@/modules/Floors';
|
||||
import ModelLoader from '@/modules/ModelLoder';
|
||||
import * as THREE from 'three';
|
||||
import gsap from 'gsap';
|
||||
import Event from '@/modules/Viewer/Events';
|
||||
import BoxHelperWrap from '@/modules/BoxHelperWrap';
|
||||
import { checkNameIncludes, findParent } from '@/utils/threejs';
|
||||
|
||||
import Popover from './Popover/index.vue';
|
||||
|
||||
let viewer: Viewer;
|
||||
let modelLoader: ModelLoader;
|
||||
let boxHelperWrap: BoxHelperWrap;
|
||||
|
||||
const popoverRef: Ref = ref(null);
|
||||
const popoverTop = ref(0);
|
||||
const popoverLeft = ref(0);
|
||||
const popoverData = ref<any>({});
|
||||
|
||||
let office: any = null;
|
||||
let oldOffice: any = null;
|
||||
let dataCenter: any = null;
|
||||
let oldDataCenter: any = null;
|
||||
let modelSelect = ['zuo0', 'zuo1', 'zuo2', 'zuo3', 'zuo4', 'zuo5'];
|
||||
let modelSelectName = '';
|
||||
let modelMoveName = '';
|
||||
let isModelSelectName = false;
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
init();
|
||||
initModel();
|
||||
|
||||
viewer.scene.traverse((item: THREE.Object3D) => {
|
||||
console.log(item, '0000000000');
|
||||
});
|
||||
});
|
||||
|
||||
const init = () => {
|
||||
viewer = new Viewer('three',{width: 1920, height: 1080});
|
||||
// viewer.addAxis();
|
||||
// viewer.addStats();
|
||||
viewer.initRaycaster();
|
||||
|
||||
modelLoader = new ModelLoader(viewer);
|
||||
// const floors = new Floors(viewer);
|
||||
// floors.addGird();
|
||||
|
||||
boxHelperWrap = new BoxHelperWrap(viewer);
|
||||
|
||||
viewer.emitter.on(Event.dblclick.raycaster, (list: THREE.Intersection[]) => {
|
||||
onMouseClick(list);
|
||||
});
|
||||
|
||||
viewer.emitter.on(Event.mousemove.raycaster, (list: THREE.Intersection[]) => {
|
||||
onMouseMove(list);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
const initModel = () => {
|
||||
// modelLoader.loadModelToScene('/models/zuo.glb', baseModel => {
|
||||
// console.log(baseModel, '1111111');
|
||||
|
||||
// baseModel.setScalc(0.01);
|
||||
// const model = baseModel.gltf.scene;
|
||||
// office = baseModel;
|
||||
// office.object.rotation.y = Math.PI;
|
||||
// office.object.position.set(2, 0, 0);
|
||||
// // model.position.set(80, 2, 90);
|
||||
// office.object.children.forEach((item: any) => {
|
||||
// item.name = item.name.replace('zuo', '');
|
||||
// if (item.name === 'ding') {
|
||||
// item.name = 6;
|
||||
// }
|
||||
// item.name--;
|
||||
// });
|
||||
// office.object.children.sort((a: { name: number; }, b: { name: number; }) => a.name - b.name).forEach((v: { name: string; }) => {
|
||||
// v.name = 'zuo' + v.name;
|
||||
// });
|
||||
|
||||
// model.name = '办公楼';
|
||||
// baseModel.openCastShadow();
|
||||
// oldOffice = model.clone();
|
||||
|
||||
// const list: THREE.Object3D<THREE.Event>[] = [];
|
||||
// model.traverse(item => {
|
||||
// list.push(item);
|
||||
// });
|
||||
// viewer.setRaycasterObjects(list);
|
||||
// });
|
||||
|
||||
modelLoader.loadModelToScene('/models/plane.glb', baseModel => {
|
||||
const model = baseModel.gltf.scene;
|
||||
model.scale.set(0.01 * 3, 0.01 * 3, 0.01 * 3)
|
||||
model.name = 'plane';
|
||||
baseModel.openCastShadow();
|
||||
|
||||
const texture = (baseModel.object.children[0] as any).material.map;
|
||||
// console.log(baseModel,baseModel.object.children[0], 'texture-------2222');
|
||||
const fnOnj = planeAnimate(texture);
|
||||
viewer.addAnimate(fnOnj);
|
||||
});
|
||||
|
||||
|
||||
let objUrl = {
|
||||
mtlUrl: '/obj/goats_R&D.mtl',
|
||||
objUrl: '/obj/goats_R&D.obj',
|
||||
}
|
||||
modelLoader.ladObjModelToScene(objUrl, baseModel => {
|
||||
var scale = 0.07 / baseModel.scale.x;
|
||||
baseModel.scale.set(scale, scale, scale);
|
||||
const box = new THREE.Box3().setFromObject(baseModel);
|
||||
const size = box.getSize(new THREE.Vector3())
|
||||
// // console.log(size,'-----');
|
||||
baseModel.position.set(-size.x * 0.5, -size.y * 0.1+2, -size.z * 0.5);
|
||||
// baseModel.children.forEach((child) => {
|
||||
// const c = child;
|
||||
// const cm = c.material;
|
||||
// cm.emissive = cm.color;
|
||||
// cm.emissiveMap = cm.map;
|
||||
// });
|
||||
|
||||
baseModel.name = '再登研发中心';
|
||||
dataCenter = baseModel;
|
||||
oldDataCenter = baseModel.clone();
|
||||
|
||||
const rackList: any[] = [];
|
||||
baseModel.traverse(item => {
|
||||
|
||||
if (checkIsRack(item)) {
|
||||
rackList.push(item);
|
||||
}
|
||||
});
|
||||
// console.log(baseModel,rackList, 'rackList------111');
|
||||
|
||||
viewer.setRaycasterObjects(rackList);
|
||||
|
||||
});
|
||||
|
||||
|
||||
// modelLoader.loadModelToScene('/models/datacenter.glb', baseModel => {
|
||||
// console.log(baseModel, '1111111');
|
||||
// baseModel.setScalc(0.2);
|
||||
// // baseModel.object.rotation.y = Math.PI / 2;
|
||||
// const model = baseModel.gltf.scene;
|
||||
// model.position.set(0, 0, 0);
|
||||
// model.name = '机房';
|
||||
// baseModel.openCastShadow();
|
||||
|
||||
// dataCenter = baseModel;
|
||||
// oldDataCenter = model.clone();
|
||||
|
||||
// const rackList: any[] = [];
|
||||
// model.traverse(item => {
|
||||
// if (checkIsRack(item)) {
|
||||
// rackList.push(item);
|
||||
// }
|
||||
// });
|
||||
// // console.log(rackList, 'rackList------');
|
||||
|
||||
// viewer.setRaycasterObjects(rackList);
|
||||
|
||||
// });
|
||||
};
|
||||
|
||||
const planeAnimate = (texture: any): Animate => {
|
||||
console.log(texture, 'texture');
|
||||
texture.wrapS = THREE.RepeatWrapping;
|
||||
texture.wrapT = THREE.RepeatWrapping;
|
||||
const animateFn = {
|
||||
fun: () => {
|
||||
const count = texture.repeat.y;
|
||||
if (count <= 10) {
|
||||
texture.repeat.x += 0.01;
|
||||
texture.repeat.y += 0.02;
|
||||
} else {
|
||||
texture.repeat.x = 0;
|
||||
texture.repeat.y = 0;
|
||||
}
|
||||
},
|
||||
content: viewer,
|
||||
};
|
||||
return animateFn;
|
||||
}
|
||||
|
||||
const onMouseClick = (intersects: THREE.Intersection[]) => {
|
||||
if (!intersects.length) return;
|
||||
const selectedObject = intersects[0].object;
|
||||
|
||||
let selectedObjectName = '';
|
||||
const findClickModel = (object: any) => {
|
||||
console.log(object, 'object');
|
||||
if (object.type === 'Group') {
|
||||
selectedObjectName = object.name;
|
||||
}
|
||||
if (object.parent && object.type !== 'Scene') {
|
||||
findClickModel(object.parent);
|
||||
}
|
||||
};
|
||||
findClickModel(selectedObject);
|
||||
console.log(selectedObjectName);
|
||||
|
||||
// if (!selectedObjectName || !selectedObjectName.includes('办公楼')) {
|
||||
// // this.scene.remove(this.label);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// const selectedModel = viewer.scene.getObjectByName(selectedObjectName);
|
||||
console.log(selectedObject, 'selectedObject');
|
||||
|
||||
// 点击楼房
|
||||
if (selectedObject.name.includes('zuo')) {
|
||||
|
||||
selectOffice(selectedObject.parent);
|
||||
}
|
||||
|
||||
// 点击其他区域
|
||||
if (!selectedObject.name.includes('zuo')) {
|
||||
if (!isModelSelectName && oldOffice) {
|
||||
let oldmodel = oldOffice.getObjectByName(modelMoveName);
|
||||
office.object.getObjectByName(modelMoveName).traverse(function (child: { isMesh: any; material: any; name: any; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = oldmodel.getObjectByName(child.name).material;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function checkIsRack(obj: any): boolean {
|
||||
return checkNameIncludes(obj, 'Door');
|
||||
}
|
||||
|
||||
const onMouseMove = (intersects: THREE.Intersection[]) => {
|
||||
if (!intersects.length) {
|
||||
popoverRef.value.setShow(false);
|
||||
boxHelperWrap.setVisible(false);
|
||||
return;
|
||||
}
|
||||
const selectedObject = intersects[0].object || {};
|
||||
|
||||
|
||||
let selectedObjectName = '';
|
||||
const findClickModel = (object: any) => {
|
||||
if (object.name.includes('Door')) {
|
||||
selectedObjectName = object.name;
|
||||
return;
|
||||
}
|
||||
if (object.parent) {
|
||||
findClickModel(object.parent);
|
||||
}
|
||||
};
|
||||
|
||||
// const findClickModel = (object: any) => {
|
||||
// if (object.name.includes('zuo')) {
|
||||
// selectedObjectName = object.name;
|
||||
// return;
|
||||
// }
|
||||
// if (object.parent) {
|
||||
// findClickModel(object.parent);
|
||||
// }
|
||||
// };
|
||||
findClickModel(selectedObject);
|
||||
|
||||
console.log(selectedObjectName, '--selectedObjectName---');
|
||||
console.log(selectedObject, '------selectedObject---------');
|
||||
const rack = findParent(selectedObject, checkIsRack);
|
||||
console.log(rack, '-------rack---------');
|
||||
if (rack) {
|
||||
|
||||
boxHelperWrap.attach(rack);
|
||||
updateRackInfo(rack.name);
|
||||
}
|
||||
|
||||
// if (!selectedObjectName || !selectedObjectName.includes('办公楼')) {
|
||||
// // 重置模型
|
||||
// // viewer.scene.children[viewer.scene.children.findIndex(o => o.name === '办公楼')] = office.object = oldOffice.clone();
|
||||
// return;
|
||||
// }
|
||||
|
||||
|
||||
modelSelect.forEach((item: any) => {
|
||||
if (item === selectedObject.parent?.name) {
|
||||
modelMoveName = item;
|
||||
if (modelSelectName === modelMoveName) return;
|
||||
office.object.getObjectByName(item).traverse(function (child: { isMesh: any; material: THREE.MeshPhongMaterial; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = new THREE.MeshPhongMaterial({
|
||||
side: THREE.DoubleSide,
|
||||
transparent: true,
|
||||
depthTest: false,
|
||||
depthWrite: true, // 无法被选择,鼠标穿透
|
||||
color: 'yellow',
|
||||
opacity: 0.3,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!isModelSelectName && oldOffice) {
|
||||
let oldmodel = oldOffice.getObjectByName(item);
|
||||
office.object.getObjectByName(item).traverse(function (child: { isMesh: any; material: any; name: any; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = oldmodel.getObjectByName(child.name).material;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
const updateRackInfo = (name: string) => {
|
||||
if (name) {
|
||||
popoverRef.value.setShow(true, { name });
|
||||
const event = viewer.mouseEvent as MouseEvent;
|
||||
popoverTop.value = event.y + 10;
|
||||
popoverLeft.value = event.x + 10;
|
||||
} else {
|
||||
popoverRef.value.setShow(false);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
const selectOffice = (model: any) => {
|
||||
modelSelectName = model.name;
|
||||
let oldmodel = oldOffice.getObjectByName(modelSelectName);
|
||||
let modelSelectIndex = modelSelect.findIndex(v => v === modelSelectName);
|
||||
office.object.children.forEach((child: any, index: number) => {
|
||||
child.children.forEach((Mesh: any) => {
|
||||
if (child.name === modelSelectName) {
|
||||
child.children.forEach((Mesh: { material: any; name: any; }) => {
|
||||
Mesh.material = oldmodel.getObjectByName(Mesh.name).material;
|
||||
});
|
||||
} else {
|
||||
// Mesh.material = new THREE.MeshPhongMaterial({
|
||||
// color: new THREE.Color('#123ca8'),
|
||||
// transparent: true,
|
||||
// opacity: 0.5,
|
||||
// emissiveMap: Mesh.material.map,
|
||||
// });
|
||||
}
|
||||
});
|
||||
if (!model.userData.position && index > modelSelectIndex) {
|
||||
gsap.to(child.position, {
|
||||
y: !child.userData.position ? child.position.y + 60 : child.position.y,
|
||||
duration: 2,
|
||||
ease: "power1.inOut",
|
||||
onComplete: () => {
|
||||
child.userData.position = true;
|
||||
},
|
||||
});
|
||||
}
|
||||
if (model.userData.position && index <= modelSelectIndex) {
|
||||
if (child.userData.position) {
|
||||
gsap.to(child.position, {
|
||||
y: oldOffice.getObjectByName(child.name).position.y,
|
||||
duration: 2,
|
||||
ease: "power1.inOut",
|
||||
onComplete: () => {
|
||||
child.userData.position = false;
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
#three {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -17,7 +17,7 @@ let height = 1080;
|
||||
let text = ref('标注1');
|
||||
const init = () => {
|
||||
scene = new THREE.Scene();
|
||||
// scene.background = new THREE.Color(null);//0x100c2a
|
||||
// scene.background = new THREE.Color(0x100c2a);//0x100c2a
|
||||
// scene.background.setAlpha(0);
|
||||
camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 2000);
|
||||
camera.position.set(40, 300, 200);
|
||||
|
147
src/views/screen/R_D_Environment/component/barChart.vue
Normal file
@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
const prop = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const options = computed(() => {
|
||||
return {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.8)',
|
||||
borderColor: '#00c6ff',
|
||||
borderWidth: 2,
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 14
|
||||
},
|
||||
formatter: function (params) {
|
||||
let tooltipText = '';
|
||||
let xAxisValue = params[0].name;
|
||||
params.forEach((item) => {
|
||||
tooltipText += `<div style="padding: 2px 0;"><strong>${item.seriesName}:</strong> ${item.value}</div>`;
|
||||
});
|
||||
return `${xAxisValue}<br>${tooltipText}`;
|
||||
},
|
||||
padding: 10,
|
||||
extraCssText: 'border-radius: 8px; box-shadow: 0 0 15px rgba(0, 0, 0, 0.5);'
|
||||
},
|
||||
backgroundColor: 'transparent',
|
||||
legend: {
|
||||
show: true,
|
||||
data: ['目标产量', '实际产量'],
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['102410', '102411', '102412', '102413', '102414', '102415', '102416', '102417'],
|
||||
axisLabel: {
|
||||
color: "#ffffff",
|
||||
interval: 0,
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#0091ea'
|
||||
}
|
||||
},
|
||||
axisTick: {
|
||||
show: false,
|
||||
}
|
||||
},
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value',
|
||||
axisTick: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'value',
|
||||
axisTick: {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: '目标产量',
|
||||
data: [150, 105, 110, 80, 120, 100, 140, 180],
|
||||
yAxisIndex: 0,
|
||||
type: 'bar',
|
||||
barCategoryGap: '10%',
|
||||
showBackground: true,
|
||||
itemStyle: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 1,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{ offset: 0, color: '#5aaef3' },
|
||||
{ offset: 1, color: '#1e90ff' }
|
||||
]
|
||||
},
|
||||
borderRadius: [60, 60, 60, 60],
|
||||
stroke: '#00c6ff',
|
||||
lineWidth: 2
|
||||
},
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
color: '#ffffff'
|
||||
},
|
||||
backgroundStyle: {
|
||||
borderRadius: [60, 60, 60, 60],
|
||||
}
|
||||
},
|
||||
{
|
||||
name: '实际产量',
|
||||
yAxisIndex: 1,
|
||||
data: [106, 90, 25, 80, 35, 100, 140, 172],
|
||||
type: 'bar',
|
||||
barCategoryGap: '10%',
|
||||
showBackground: true,
|
||||
itemStyle: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 1,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{ offset: 0, color: '#f8efd4' },
|
||||
{ offset: 1, color: '#fbdc7f' }
|
||||
]
|
||||
},
|
||||
borderRadius: [60, 60, 60, 60],
|
||||
stroke: '#ff6347',
|
||||
lineWidth: 2
|
||||
},
|
||||
label: {
|
||||
show: true,
|
||||
position: 'top',
|
||||
color: '#ffffff'
|
||||
},
|
||||
backgroundStyle: {
|
||||
borderRadius: [60, 60, 60, 60],
|
||||
}
|
||||
},
|
||||
],
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
@ -35,9 +35,11 @@ const prop = defineProps({
|
||||
color: #fff;
|
||||
}
|
||||
.pos-l {
|
||||
// background: linear-gradient(to right, #102238 0%, transparent 100%);
|
||||
background: url('/src/assets/images/box-title-l.png') no-repeat center center / 100% 100%;
|
||||
}
|
||||
.pos-r {
|
||||
// background: linear-gradient(to left, #102238 0%, transparent 100%);
|
||||
background: url('/src/assets/images/box-title-r.png') no-repeat center center / 100% 100%;
|
||||
text-align: right;
|
||||
padding-right: 25px;
|
||||
|
@ -1,60 +1,61 @@
|
||||
<template>
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
const prop = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const options = computed(() => {
|
||||
return {
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: function (params) {
|
||||
let tooltipText = '';
|
||||
let xAxisValue = params[0].name; // 获取 x 轴的值
|
||||
params.forEach((item) => {
|
||||
tooltipText += `${item.marker}${item.seriesName}: ${item.value} kWh<br>`;
|
||||
});
|
||||
return `${xAxisValue}<br>${tooltipText}`;
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00'],
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "耗电量",
|
||||
data: [820, 932, 901, 934, 1290, 1330, 1320],
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{ offset: 0, color: 'rgba(0, 198, 255, 0.5)' },
|
||||
{ offset: 1, color: 'rgba(0, 114, 255, 0.01)' }
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
};
|
||||
return {
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: function (params) {
|
||||
let tooltipText = '';
|
||||
let xAxisValue = params[0].name; // 获取 x 轴的值
|
||||
params.forEach((item) => {
|
||||
tooltipText += `${item.marker}${item.seriesName}: ${item.value} kWh<br>`;
|
||||
});
|
||||
return `${xAxisValue}<br>${tooltipText}`;
|
||||
}
|
||||
},
|
||||
backgroundColor: 'transparent',
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00'],
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "耗电量",
|
||||
data: [820, 932, 901, 934, 1290, 1330, 1320],
|
||||
type: 'line',
|
||||
smooth: true,
|
||||
areaStyle: {
|
||||
color: {
|
||||
type: 'linear',
|
||||
x: 0,
|
||||
y: 0,
|
||||
x2: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{ offset: 0, color: 'rgba(0, 198, 255, 0.5)' },
|
||||
{ offset: 1, color: 'rgba(0, 114, 255, 0.01)' }
|
||||
]
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -9,14 +9,8 @@ const prop = defineProps({
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
date: ['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04', '2021-10-05', '2021-10-06', '2021-10-07'],
|
||||
series: [{
|
||||
type: '温度',
|
||||
value: [20, 22, 23, 24, 25, 26, 27]
|
||||
}, {
|
||||
type: '湿度',
|
||||
value: [30, 32, 33, 34, 35, 36, 37]
|
||||
}]
|
||||
pm25: 0,
|
||||
pm10: 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -102,7 +96,7 @@ const options = computed(() => {
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 80,
|
||||
value: prop.data.pm25,
|
||||
name: "PM2.5",
|
||||
},
|
||||
],
|
||||
@ -162,7 +156,7 @@ const options = computed(() => {
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 60,
|
||||
value: prop.data.pm10,
|
||||
name: "PM10",
|
||||
},
|
||||
],
|
||||
|
@ -1,101 +1,121 @@
|
||||
<template>
|
||||
<div class=""></div>
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
|
||||
const prop = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return [
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e488",
|
||||
"devName": "噪声监测7",
|
||||
"label": "noise-7",
|
||||
"place": null,
|
||||
"data": 0,
|
||||
"status": 0
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const bodyMax = 150;
|
||||
const labelSetting = {
|
||||
show: true,
|
||||
position: 'top',
|
||||
offset: [0, -20],
|
||||
formatter: function (param) {
|
||||
return ((param.value / bodyMax) * 100).toFixed(0) + '%';
|
||||
},
|
||||
fontSize: 18,
|
||||
fontFamily: 'Arial'
|
||||
};
|
||||
const markLineSetting = {
|
||||
symbol: 'none',
|
||||
lineStyle: {
|
||||
opacity: 0.3
|
||||
},
|
||||
data: [
|
||||
{
|
||||
type: 'max',
|
||||
label: {
|
||||
formatter: 'max: {c}'
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'min',
|
||||
label: {
|
||||
formatter: 'min: {c}'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
option = {
|
||||
tooltip: {
|
||||
},
|
||||
xAxis: {
|
||||
data: ['a', 'b'],
|
||||
axisTick: { show: false },
|
||||
axisLine: { show: false },
|
||||
axisLabel: { show: false }
|
||||
},
|
||||
yAxis: {
|
||||
max: bodyMax,
|
||||
offset: 20,
|
||||
splitLine: { show: false },
|
||||
},
|
||||
grid: {
|
||||
top: 'center',
|
||||
height: 230
|
||||
},
|
||||
markLine: {
|
||||
z: -100
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'typeA',
|
||||
type: 'pictorialBar',
|
||||
symbolClip: true,
|
||||
symbolBoundingData: bodyMax,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
data: [
|
||||
{
|
||||
value: 80,
|
||||
},
|
||||
{
|
||||
value: 60,
|
||||
}
|
||||
],
|
||||
z: 10
|
||||
},
|
||||
{
|
||||
name: 'full',
|
||||
type: 'pictorialBar',
|
||||
symbolBoundingData: bodyMax,
|
||||
label: labelSetting,
|
||||
animationDuration: 0,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
itemStyle: {
|
||||
color: '#ccc'
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 100,
|
||||
}, {
|
||||
value: 100,
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
const options = computed(() => {
|
||||
|
||||
|
||||
let xData = []
|
||||
let seriesData = []
|
||||
prop.data.forEach((item) => {
|
||||
xData.push(item.devName);
|
||||
seriesData.push(item.data);
|
||||
});
|
||||
const labelSetting = {
|
||||
show: true,
|
||||
position: 'top',
|
||||
offset: [0, -20],
|
||||
formatter: function (param) {
|
||||
return xData[param.dataIndex] + '\r\n' + seriesData[param.dataIndex] + 'dB';
|
||||
},
|
||||
fontSize: 14,
|
||||
fontFamily: 'Arial',
|
||||
color: '#33FFFF'
|
||||
};
|
||||
return {
|
||||
tooltip: {
|
||||
},
|
||||
backgroundColor: 'transparent',
|
||||
xAxis: {
|
||||
data: xData,
|
||||
axisTick: { show: false },
|
||||
axisLine: { show: false },
|
||||
axisLabel: { show: false }
|
||||
},
|
||||
yAxis: {
|
||||
show: false,
|
||||
max: bodyMax,
|
||||
offset: 20,
|
||||
splitLine: { show: false },
|
||||
},
|
||||
grid: {
|
||||
top: 'center',
|
||||
height: 230,
|
||||
left: 0,
|
||||
right: 0
|
||||
},
|
||||
markLine: {
|
||||
z: -100
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'typeA',
|
||||
type: 'pictorialBar',
|
||||
symbolClip: true,
|
||||
symbolBoundingData: bodyMax,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
itemStyle: {
|
||||
color: '#33FFFF'
|
||||
},
|
||||
data: seriesData.map((item) => {
|
||||
let dataobj = {
|
||||
value: item
|
||||
}
|
||||
if (item > 100) {
|
||||
dataobj.itemStyle = {
|
||||
color: '#FF0000'
|
||||
}
|
||||
|
||||
}
|
||||
return dataobj
|
||||
}),
|
||||
z: 10
|
||||
},
|
||||
{
|
||||
name: 'full',
|
||||
type: 'pictorialBar',
|
||||
symbolBoundingData: bodyMax,
|
||||
label: labelSetting,
|
||||
animationDuration: 0,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
itemStyle: {
|
||||
color: '#ccc'
|
||||
},
|
||||
data: prop.data.map(item => {
|
||||
return {
|
||||
value: 100,
|
||||
}
|
||||
})
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
36
src/views/screen/R_D_Environment/component/svgPm10.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1731979776030" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="15886" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M507.44 955.95a438.912 438.912 0 0 1-172.62-35.08c-52.91-22.48-100.5-54.63-141.43-95.57-40.94-40.94-73.09-88.52-95.57-141.44a439.09 439.09 0 0 1-35.08-172.62c0-74.45 21.05-153.39 59.26-222.31 4.25-6.88 12.99-11.86 20.85-11.86 1.58 0 4.56 0.24 6.67 1.82 8.49 6.37 13.39 19.42 6.91 30.23l-0.24 0.39-0.22 0.41c-34.67 65.01-52.25 132.75-52.25 201.32 0 222.62 181.11 403.73 403.73 403.73s403.73-181.11 403.73-403.73c0-222.61-181.11-403.73-403.73-403.73-68.57 0-136.31 17.58-201.33 52.26l-0.4 0.22-0.39 0.23c-4.29 2.57-8.85 3.93-13.21 3.93-6.33 0-11.59-2.8-15.23-8.12-3.41-9.72-3.22-23.18 8.25-30.23C354.05 87.58 433 66.54 507.45 66.54a438.912 438.912 0 0 1 172.62 35.08c52.91 22.48 100.5 54.63 141.44 95.57 40.93 40.93 73.09 88.51 95.57 141.43 23.28 54.79 35.08 112.87 35.08 172.62s-11.8 117.84-35.08 172.62c-22.48 52.91-54.63 100.5-95.57 141.43-40.94 40.94-88.53 73.09-141.44 95.57a438.83 438.83 0 0 1-172.63 35.09z m0 0"
|
||||
p-id="15887" class="border"></path>
|
||||
<path
|
||||
d="M327.36 460.82c0 22.16 18.05 40.64 39.71 40.64s39.73-18.57 39.73-40.64c3.62-25.85-18.05-40.61-39.73-40.61s-39.71 18.44-39.71 40.61z m377.59-94.43c-14.46 0-25.3 11.09-25.3 22.16 3.62 11.07 14.46 22.16 25.3 22.16 14.43 0 25.27-11.09 25.27-22.16s-10.84-22.16-25.27-22.16z m-110.23 18.29c21.68 0 39.73-18.56 39.73-40.61s-18.06-40.61-39.73-40.61c-21.67 0-39.73 18.57-39.73 40.61-3.6 22.09 14.46 40.54 39.73 40.54v0.07zM429.23 395.7c18.08 0 36.11-14.78 36.11-33.23 0-18.45-14.43-33.21-36.11-33.21-18.06 0-36.11 14.76-36.11 33.23s14.46 33.21 36.11 33.21z m178.99 95.33c0 18.57 14.46 33.23 36.11 33.23 18.05 0 36.11-14.78 36.11-33.23 0-18.45-14.43-33.23-36.11-33.23-17.96 0-36.11 14.76-36.11 33.23z m-89.64-3.02c18.05 0 28.89-14.87 28.89-29.54s-14.43-29.43-28.89-29.43c-18.05 0-28.89 14.64-28.89 29.43 0 14.78 14.45 29.54 28.89 29.54z m178.2 63.15c-3.88 0-7.77 0-9.7 2-77.74 55.51-147.71 15.85-149.66 13.92-145.76-91.25-242.9 5.85-242.9 5.85a10.313 10.313 0 0 0-3.88 7.94c0.47 2.98 1.81 5.75 3.88 7.96 3.9 5.96 11.6 3.97 17.5 0 1.95-3.97 81.62-81.22 209.9-1.97 1.95 1.97 33.05 19.82 77.74 19.82 29.15 0 66.07-7.91 102.99-33.7a14.953 14.953 0 0 0 1.95-17.85 10.057 10.057 0 0 0-7.82-3.97z m-383.26-185a29.21 29.21 0 0 0 20.56-8.77c5.42-5.54 8.41-13 8.33-20.75 0.19-16.14-12.73-29.39-28.87-29.59a29.227 29.227 0 0 0-28.89 29.54 29.22 29.22 0 0 0 8.3 20.77 29.22 29.22 0 0 0 20.57 8.8z m57.14 267.22h-32.77v95.15h22.49v-31.52h10.91c19.7 0 36.9-9.98 36.9-32.65 0.04-23.55-16.95-30.98-37.53-30.98z m-0.49 45.58h-9.79v-27.52h9.17c10.79 0 16.8 3.34 16.8 12.93 0 9.58-5.27 14.59-16.18 14.59z m103.92-4.48c-1.76 5.5-3.27 11.6-5.15 17.41h-0.63c-1.76-5.87-3.27-11.91-5.15-17.41l-14.81-41.1h-24.23v95.15h20.08v-32.61c-0.39-11.05-1.35-22.07-2.88-33.02h0.51l7.52 22.79 12.67 34.81h12.3l12.56-34.81 7.77-22.79h0.51a320.218 320.218 0 0 0-2.88 33.02v32.72h20.38V633.5h-24.27l-14.3 40.98z m101.23-41.1h-16.45a62.13 62.13 0 0 1-23.21 8.59v14.09h17.2v54.14h-19.82v18.45H592V710.2h-16.69v-76.82z m62.66-1.79c-19.68 0-33 16.13-33 48.9 0 32.77 13.32 49.94 33 49.94s33.14-17.15 33.14-49.94c-0.01-32.79-13.42-48.9-33.14-48.9z m0 81.23c-6.64 0-11.9-6.15-11.9-32.28 0-26.13 5.27-31.35 11.9-31.35 6.64 0 12.07 5.38 12.07 31.35 0 25.97-5.41 32.23-12.07 32.23v0.05z m0 0"
|
||||
p-id="15888"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment/component/svgPm25.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1731979377696" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="4643" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M510.24 954.86a438.195 438.195 0 0 1-172.33-35.02c-52.82-22.44-100.33-54.54-141.2-95.41-40.87-40.87-72.97-88.37-95.41-141.2A438.195 438.195 0 0 1 66.28 510.9c0-74.33 21.01-153.14 59.16-221.94 4.24-6.87 12.97-11.84 20.81-11.84 1.58 0 4.55 0.24 6.66 1.82 8.48 6.36 13.37 19.39 6.9 30.18l-0.24 0.39-0.22 0.41c-34.62 64.9-52.17 132.53-52.17 200.98 0 222.25 180.81 403.06 403.06 403.06S913.3 733.15 913.3 510.9c0-222.24-180.81-403.06-403.06-403.06-68.46 0-136.08 17.56-201 52.18l-0.4 0.22-0.39 0.23c-4.28 2.57-8.84 3.93-13.19 3.93-6.32 0-11.57-2.8-15.2-8.11-3.4-9.71-3.22-23.14 8.24-30.18 68.8-38.15 147.61-59.16 221.94-59.16a438.16 438.16 0 0 1 172.33 35.02c52.82 22.44 100.33 54.54 141.2 95.41 40.86 40.87 72.97 88.37 95.41 141.2 23.24 54.7 35.02 112.68 35.02 172.33s-11.78 117.64-35.02 172.33c-22.44 52.82-54.54 100.33-95.41 141.2-40.87 40.87-88.38 72.97-141.2 95.41a438.362 438.362 0 0 1-172.33 35.01z m0 0"
|
||||
p-id="4644" class="border"></path>
|
||||
<path
|
||||
d="M314.61 465.3c0 22.12 18.02 40.53 39.63 40.53 21.61 0 39.66-18.51 39.66-40.53 3.61-25.8-18.02-40.54-39.66-40.54-21.64 0.01-39.63 18.33-39.63 40.54z m376.86-94.32c-14.41-0.09-25.13 10.93-25.13 22.03 3.61 11.05 14.41 22.1 25.22 22.1 14.43 0 25.25-11.05 25.25-22.1s-10.91-22.12-25.34-22.12v0.09z m-110 18.25c21.63 0 39.66-18.53 39.66-40.54 0-22-18.02-40.54-39.66-40.54-21.63 0-39.63 18.53-39.63 40.54-3.61 22.01 14.41 40.44 39.63 40.44v0.1z m-165.15 11.05c18.02 0 36.04-14.73 36.04-33.17s-14.43-33.26-36.04-33.26c-18.02 0-36.04 14.75-36.04 33.17 0 18.41 14.41 33.17 36.04 33.17v0.09z m178.63 95.13c0 18.53 14.43 33.17 36.04 33.17 18.02 0 36.04-14.75 36.04-33.17 0-18.41-14.41-33.17-36.04-33.17-17.92-0.04-36.04 14.64-36.04 33.17z m-89.48-3.03c18.02 0 28.84-14.73 28.84-29.49 0-14.76-14.41-29.46-28.84-29.46-18.02 0-28.84 14.73-28.84 29.46s14.43 29.44 28.84 29.44v0.05z m177.87 63.05c-3.87 0-7.76 0-9.68 1.97-77.6 55.41-147.46 15.84-149.38 13.9-145.49-91.12-242.45 5.84-242.45 5.84a10.358 10.358 0 0 0-3.87 7.92c0.47 2.97 1.81 5.73 3.87 7.92 3.89 5.93 11.58 3.96 17.46 0 1.95-3.96 81.46-81.07 209.51-1.97 1.95 1.97 32.98 19.78 77.6 19.78 29.09 0 65.95-7.92 102.82-33.65a14.92 14.92 0 0 0 1.92-17.79 9.92 9.92 0 0 0-7.8-3.96v0.04zM300.8 370.73c16.1-0.18 29.01-13.37 28.84-29.46a29.16 29.16 0 0 0-28.82-29.53c-16.1 0.19-29.01 13.38-28.84 29.49a29.1 29.1 0 0 0 8.29 20.73c5.41 5.52 12.8 8.68 20.53 8.77z m27.15 266.72h-32.68v94.97h22.42v-31.45h10.89c19.66 0 36.83-9.98 36.83-32.59-0.01-23.52-16.91-30.93-37.46-30.93z m-0.51 45.59h-9.75v-27.57h9.15c10.77 0 16.77 3.31 16.77 12.9s-5.26 14.67-16.17 14.67z m103.75-4.64c-1.76 5.49-3.27 11.58-5.14 17.37h-0.6c-1.74-5.88-3.24-11.88-5.12-17.37l-14.78-41.02h-24.11v94.97h19.92v-32.41c-0.39-11.04-1.35-22.05-2.87-32.98h0.51l7.5 22.75 12.65 34.75h12.28l12.53-34.75 7.76-22.75h0.51a316.917 316.917 0 0 0-2.87 32.98v32.57h20.4v-94.97h-24.3l-14.27 40.86z m86.91 36.23c14.29-14.69 28.05-32.71 28.05-49.06 0-18.16-12.51-29.9-30.55-29.9-13.27 0-21.8 4.84-30.95 14.69l12.16 12.28c4.38-4.86 9.26-9.27 15.77-9.27 7.39 0 12.16 4.63 12.16 13.44 0 13.9-15.66 31.04-38.96 52.65v13.02h64.65v-19.16h-17.19c-5.07 0.13-10.13 0.57-15.14 1.31z m60.75-8.57c-5.8-0.36-11.23 2.86-13.69 8.12a14.157 14.157 0 0 0 2.52 15.72 14.158 14.158 0 0 0 15.55 3.42c5.39-2.16 8.92-7.39 8.9-13.21 0.18-3.66-1.15-7.24-3.68-9.9a13.39 13.39 0 0 0-9.7-4.16h0.1z m62.27-35.51c-3.31-0.06-6.6 0.59-9.64 1.92l1.37-16.21h33.19v-18.9h-52.35l-2.32 47.02 9.75 6.51c5.54-3.57 8.04-4.63 13.16-4.63 8.04 0 13.66 5.12 13.66 14.69s-5.63 14.82-14.66 14.82c-7.39 0-13.9-3.96-19.16-9.06l-10.33 14.43a44.022 44.022 0 0 0 32.57 13.18c17.9 0 33.7-12.39 33.7-33.75 0-20.57-13.29-30.02-29.07-30.02h0.13z m0 0"
|
||||
p-id="4645"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
@ -11,9 +11,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { fill } from 'three/src/extras/TextureUtils.js';
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -11,9 +11,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { fill } from 'three/src/extras/TextureUtils.js';
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -11,9 +11,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { fill } from 'three/src/extras/TextureUtils.js';
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -14,9 +14,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { fill } from 'three/src/extras/TextureUtils.js';
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = ref({
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
@ -1,131 +1,410 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<div class="abs-header">研发中心环境实时监测系统</div>
|
||||
<div class="abs-header" ref="texstref">研发中心环境实时监测系统</div>
|
||||
<div class="l-box">
|
||||
<div class="lbox1">
|
||||
<ItemVue title="温湿度">
|
||||
<ItemVue title="温湿度监测">
|
||||
<Humiture />
|
||||
</ItemVue>
|
||||
</div>
|
||||
<div class="lbox1">
|
||||
<ItemVue title="粉尘">
|
||||
<PmVue />
|
||||
<ItemVue title="粉尘监测">
|
||||
<PmVue :data="dustData" />
|
||||
</ItemVue>
|
||||
</div>
|
||||
<div class="lbox1">
|
||||
<ItemVue title="温湿度">
|
||||
<LineChart />
|
||||
<ItemVue title="智能控制系统">
|
||||
<BarChart />
|
||||
</ItemVue>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ct-box">
|
||||
<div class="ct-sensor">
|
||||
<div class="sensor-item" v-for="item in sensor_list">
|
||||
<!-- <svg-icon ref="fenchen" icon-class="fenchen" :color="'#469DE9'" class="sensor-icon" /> -->
|
||||
<component style="width: 75px;height: 75px;margin-top: 10px;" color="#469DE9" :is="item.component" :value="item.value" :unit="item.unit" />
|
||||
<!-- :style="{color:item.status == 'true'?'#469DE9':'gray'}" -->
|
||||
<component style="width: 75px;height: 75px;margin-top: 10px;" :is="item.component" :value="item.value"
|
||||
:color="checkCb(item)" :unit="item.unit" /><!-- item.status == 'true'?'#469DE9':'gray' -->
|
||||
|
||||
<div style="margin: 10px 0">{{ item.value + item.unit }}</div>
|
||||
<div>{{ item.name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="cb-box">
|
||||
<div class="cbox">
|
||||
<ItemVue title="温湿度">
|
||||
<ItemVue title="甲醛监测">
|
||||
<LineChart />
|
||||
</ItemVue>
|
||||
</div>
|
||||
<div class="cbox">
|
||||
<ItemVue title="温湿度">
|
||||
<ItemVue title="TVOC监测">
|
||||
<LineChart />
|
||||
</ItemVue>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r-box">
|
||||
<div class="rbox-item">
|
||||
<ItemVue title="温湿度" pos="right">
|
||||
<ItemVue title="公共区域噪音" pos="right">
|
||||
<LineChart />
|
||||
</ItemVue>
|
||||
</div>
|
||||
<div class="rbox-item">
|
||||
<ItemVue title="温湿度" pos="right">
|
||||
<ItemVue title="办公室噪音" pos="right">
|
||||
<ProgeChart :data="noiseDataList" />
|
||||
</ItemVue>
|
||||
</div>
|
||||
<div class="rbox-item">
|
||||
<ItemVue title="温湿度" pos="right">
|
||||
<ItemVue title="告警信息" pos="right">
|
||||
<ZdScrollBoard ref="devList" :config="zd_config"
|
||||
:style="{ width: '100%', height: '260px', 'padding-top': '10px' }" />
|
||||
</ItemVue>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ThreeBG />
|
||||
|
||||
<!-- <Sence /> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref,reactive, onMounted } from 'vue';
|
||||
import ThreeBG from './component/threeBG.vue';
|
||||
import { ref, reactive, onMounted } from 'vue';
|
||||
// import ThreeBG from './component/threeBG.vue';
|
||||
import Sence from './component/Sence.vue';
|
||||
import ItemVue from './component/item.vue';
|
||||
import Humiture from './component/humiture_line.vue';
|
||||
import PmVue from './component/pm.vue';
|
||||
import LineChart from './component/lineChart.vue';
|
||||
import BarChart from './component/barChart.vue';
|
||||
import ProgeChart from './component/proge.vue';
|
||||
import SvgFenchen from './component/svgFenchen.vue';
|
||||
import SvgPm25 from './component/svgPm25.vue';
|
||||
import SvgPm10 from './component/svgPm10.vue';
|
||||
import SvgJiaquan from './component/svgJiaquan.vue';
|
||||
import SvgZaosheng from './component/svgZaosheng.vue';
|
||||
import SvgTVOC from './component/svgTVOC.vue';
|
||||
import SvgShidu from './component/svgShidu.vue';
|
||||
import SvgWendu from './component/svgWendu.vue';
|
||||
import SvgYanwu from './component/svgYanwu.vue';
|
||||
import ZdScrollBoard from "@/components/ZdScrollBoard/index.vue";
|
||||
import { connectWebsocket, closeWebsocket } from '@/utils/websocket';
|
||||
import { getNoiseData, getTopData, getSensorDateHourByType } from '@/api/screen/R_D_Environment';
|
||||
|
||||
|
||||
let noiseDataList = ref([
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e488",
|
||||
"devName": "办公区7",
|
||||
"label": "noise-7",
|
||||
"place": null,
|
||||
"data": 10,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e489",
|
||||
"devName": "办公区6",
|
||||
"label": "noise-6",
|
||||
"place": null,
|
||||
"data": 20,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e490",
|
||||
"devName": "办公区5",
|
||||
"label": "noise-5",
|
||||
"place": null,
|
||||
"data": 22,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e491",
|
||||
"devName": "办公区4",
|
||||
"label": "noise-4",
|
||||
"place": null,
|
||||
"data": 22,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e491",
|
||||
"devName": "办公区3",
|
||||
"label": "noise-3",
|
||||
"place": null,
|
||||
"data": 21,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e492",
|
||||
"devName": "办公区2",
|
||||
"label": "noise-2",
|
||||
"place": null,
|
||||
"data": 24,
|
||||
"status": 0
|
||||
},
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e493",
|
||||
"devName": "办公区1",
|
||||
"label": "noise-1",
|
||||
"place": null,
|
||||
"data": 25,
|
||||
"status": 0
|
||||
},
|
||||
])
|
||||
let sensor_list = reactive([
|
||||
{
|
||||
name:'温度',
|
||||
component:SvgWendu,
|
||||
id: '',
|
||||
name: '温度',
|
||||
component: SvgWendu,
|
||||
value: 20,
|
||||
unit: '℃'
|
||||
unit: '℃',
|
||||
type: 'AirTemp_Reg',
|
||||
limit: 40,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'湿度',
|
||||
component:SvgShidu,
|
||||
id: '',
|
||||
name: '湿度',
|
||||
component: SvgShidu,
|
||||
value: 20,
|
||||
unit: '%'
|
||||
unit: '%',
|
||||
type: 'AirHumi_Reg',
|
||||
limit: 90,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'甲醛',
|
||||
component:SvgJiaquan,
|
||||
id: '',
|
||||
name: '甲醛',
|
||||
component: SvgJiaquan,
|
||||
value: 20,
|
||||
unit: 'mg/m³'
|
||||
unit: 'mg/m³',
|
||||
type: 'CH2O',
|
||||
limit: 0.08,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'TVOC',
|
||||
component:SvgTVOC,
|
||||
id: '',
|
||||
name: 'TVOC',
|
||||
component: SvgTVOC,
|
||||
value: 20,
|
||||
unit: 'mg/m³'
|
||||
unit: 'mg/m³',
|
||||
type: 'TVOC',
|
||||
limit: 0.5,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'粉尘',
|
||||
component:SvgFenchen,
|
||||
id: '',
|
||||
name: 'PM2.5',
|
||||
component: SvgPm25,
|
||||
value: 20,
|
||||
unit: 'mg/m³'
|
||||
unit: 'mg/m³',
|
||||
type: 'HIGH_PM25_Reg',
|
||||
limit: 30,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'噪声',
|
||||
component:SvgZaosheng,
|
||||
id: '',
|
||||
name: 'PM10',
|
||||
component: SvgPm10,
|
||||
value: 20,
|
||||
unit: 'dB'
|
||||
unit: 'mg/m³',
|
||||
type: 'HIGH_PM10_Reg',
|
||||
limit: 30,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
name:'烟雾',
|
||||
component:SvgYanwu,
|
||||
id: '',
|
||||
name: '噪音',
|
||||
component: SvgZaosheng,
|
||||
value: 20,
|
||||
unit: 'mg/m³'
|
||||
unit: 'dB',
|
||||
type: 'Noise_Reg',
|
||||
limit: 85,
|
||||
status: "true"
|
||||
},
|
||||
{
|
||||
id: '',
|
||||
name: '烟雾',
|
||||
component: SvgYanwu,
|
||||
value: 20,
|
||||
unit: 'mg/m³',
|
||||
type: 'Smoke_Reg',
|
||||
limit: 100,
|
||||
status: "true"
|
||||
}
|
||||
])
|
||||
let dustData = reactive({
|
||||
pm25: 0,
|
||||
pm10: 0,
|
||||
})
|
||||
let texstref = ref(null)
|
||||
let zd_config = ref({
|
||||
header: ['报警时间', '报警内容', '报警位置'],
|
||||
rowNum: 4,
|
||||
data: [
|
||||
['行1列1', '行1列2', '行1列3'],
|
||||
['行2列1', '行2列2', '行2列3'],
|
||||
['行3列1', '行3列2', '行3列3'],
|
||||
['行4列1', '行4列2', '行4列3'],
|
||||
['行5列1', '行5列2', '行5列3'],
|
||||
['行6列1', '行6列2', '行6列3'],
|
||||
['行7列1', '行7列2', '行7列3'],
|
||||
['行8列1', '行8列2', '行8列3'],
|
||||
['行9列1', '行9列2', '行9列3'],
|
||||
['行10列1', '行10列2', '行10列3']
|
||||
]
|
||||
})
|
||||
//检测是否超标
|
||||
function checkCb(item) {
|
||||
if (item.status === 'false') {
|
||||
return 'gray'
|
||||
} else if (item.value > item.limit) {
|
||||
return '#FF0000'
|
||||
} else {
|
||||
return '#469DE9'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 获取各办公室噪音数据
|
||||
function getNoiseDataList() {
|
||||
getNoiseData().then(res => {
|
||||
if (res.code === 200) {
|
||||
noiseDataList.value = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
// 获取顶部数据
|
||||
function getTopDataList() {
|
||||
getTopData().then(res => {
|
||||
if (res.code === 200) {
|
||||
res.data.forEach(item => {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === item.type)
|
||||
sensor_list[index].value = item.data
|
||||
sensor_list[index].id = item.id
|
||||
sensor_list[index].status = item.status
|
||||
sensor_list[index].limit = item.limit
|
||||
if (item.type === 'HIGH_PM25_Reg') {
|
||||
dustData.pm25 = item.data
|
||||
} else if (item.type === 'HIGH_PM10_Reg') {
|
||||
dustData.pm10 = item.data
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取传感器数据
|
||||
function getSensorData(type) {
|
||||
let query = {
|
||||
type,
|
||||
deptId: '100'
|
||||
}
|
||||
getSensorDateHourByType(query)
|
||||
}
|
||||
|
||||
|
||||
//socket
|
||||
function getWebsocket(val) {
|
||||
try {
|
||||
let data = JSON.parse(val);
|
||||
|
||||
if (data.type == "HUMI_TEMP") {
|
||||
let obj = data.msg;
|
||||
if (obj.hasOwnProperty('temp')) {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === 'AirTemp_Reg' && sensor.id === obj.temp.devId)
|
||||
if (index !== -1) {
|
||||
sensor_list[index].value = obj.temp.value
|
||||
sensor_list[index].status = "true"
|
||||
}
|
||||
|
||||
}
|
||||
if (obj.hasOwnProperty('humi')) {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === 'AirHumi_Reg' && sensor.id === obj.humi.devId)
|
||||
if (index !== -1) {
|
||||
sensor_list[index].value = obj.humi.value
|
||||
sensor_list[index].status = "true"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (data.type == "TVOC_CH2O") {
|
||||
let obj = data.msg;
|
||||
if (obj.hasOwnProperty('CH2O')) {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === 'CH2O' && sensor.id === obj.CH2O.devId)
|
||||
if (index !== -1) {
|
||||
sensor_list[index].value = obj.CH2O.value
|
||||
sensor_list[index].status = "true"
|
||||
}
|
||||
|
||||
}
|
||||
if (obj.hasOwnProperty('TVOC')) {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === 'TVOC' && sensor.id === obj.TVOC.devId)
|
||||
if (index !== -1) {
|
||||
sensor_list[index].value = obj.TVOC.value
|
||||
sensor_list[index].status = "true"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//粉尘
|
||||
if (data.type == "dust") {
|
||||
let obj = data.msg;
|
||||
|
||||
|
||||
let index_pm25 = sensor_list.findIndex(sensor => sensor.type === 'HIGH_PM25_Reg' && sensor.id === obj.devId)
|
||||
let index_pm10 = sensor_list.findIndex(sensor => sensor.type === 'HIGH_PM10_Reg' && sensor.id === obj.devId)
|
||||
if (index_pm25 !== -1) {
|
||||
sensor_list[index_pm25].value = obj.pm25
|
||||
sensor_list[index_pm25].status = "true"
|
||||
dustData.pm25 = obj.pm25
|
||||
}
|
||||
if (index_pm10 !== -1) {
|
||||
sensor_list[index_pm10].value = obj.pm10
|
||||
sensor_list[index_pm10].status = "true"
|
||||
dustData.pm10 = obj.pm10
|
||||
}
|
||||
}
|
||||
//噪音
|
||||
if (data.type === "NOISE") {
|
||||
let obj = data.msg;
|
||||
let list_index = noiseDataList.value.findIndex(item => item.devId === obj.noise.devId)
|
||||
if (list_index !== -1) {
|
||||
noiseDataList.value[list_index].data = obj.noise.value
|
||||
} else {
|
||||
let index = sensor_list.findIndex(sensor => sensor.type === 'Noise_Reg' && sensor.id === obj.noise.devId)
|
||||
if (index !== -1) {
|
||||
sensor_list[index].value = obj.noise.value
|
||||
sensor_list[index].status = "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
function errWebsocket(val) {
|
||||
// console.log(val);
|
||||
}
|
||||
|
||||
let deltaY = ref(0)
|
||||
onMounted(() => {
|
||||
getNoiseDataList()
|
||||
getTopDataList()
|
||||
|
||||
//监听滚动事件
|
||||
// window.addEventListener('wheel', function (event) {
|
||||
// deltaY.value += event.deltaY
|
||||
// console.log(event.deltaY,deltaY.value,'event.deltaY');
|
||||
// if (deltaY.value <= -500 &&deltaY.value >= -1000) {
|
||||
// texstref.value.style.display = 'none'
|
||||
// }
|
||||
// if (deltaY.value > -500 && deltaY.value < 0) {
|
||||
// texstref.value.style.display = 'block'
|
||||
|
||||
// }
|
||||
// }, { passive: false });
|
||||
|
||||
connectWebsocket(null, null, getWebsocket, errWebsocket);
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -137,7 +416,7 @@ onMounted(() => {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-image: url('/src/assets/images/gif-bg.gif');
|
||||
// background-image: url('/src/assets/images/gif-bg.gif');
|
||||
background-repeat: no-repeat;
|
||||
/* 如果你不想让背景平铺 */
|
||||
background-size: cover;
|
||||
@ -160,15 +439,23 @@ onMounted(() => {
|
||||
.l-box {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
left: 33px;
|
||||
left: 0px;
|
||||
width: 410px;
|
||||
height: 950px;
|
||||
height: 980px;
|
||||
z-index: 2;
|
||||
background: linear-gradient(to left, transparent 0%, rgba(15, 32, 54, 0.8) 50%, #102238 100%);
|
||||
// background: url('/src/assets/images/preview-left.png') center center / 100% 100% no-repeat;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.lbox1 {
|
||||
width: 100%;
|
||||
height: 316px;
|
||||
}
|
||||
}
|
||||
|
||||
.ct-box {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
@ -176,19 +463,25 @@ onMounted(() => {
|
||||
width: 1026px;
|
||||
height: 180px;
|
||||
display: flex;
|
||||
z-index: 2;
|
||||
justify-content: space-between;
|
||||
|
||||
.ct-sensor {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.sensor-item {
|
||||
width: 146px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
|
||||
.sensor-icon {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
@ -196,26 +489,39 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cb-box {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 445px;
|
||||
width: 1026px;
|
||||
bottom: 0px;
|
||||
left: 435px;
|
||||
width: 1046px;
|
||||
height: 316px;
|
||||
display: flex;
|
||||
z-index: 2;
|
||||
justify-content: space-between;
|
||||
|
||||
background: linear-gradient(to bottom, transparent 0%, rgba(15, 32, 54, 0.8) 50%, #102238 100%);
|
||||
// background: url('/src/assets/images/preview-bottom.png') center center / 100% 100% no-repeat;
|
||||
|
||||
.cbox {
|
||||
width: 50%;
|
||||
width: 48%;
|
||||
height: 100%;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.r-box {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
right: 38px;
|
||||
width: 410px;
|
||||
height: 950px;
|
||||
right: 0px;
|
||||
width: 420px;
|
||||
height: 980px;
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: linear-gradient(to right, transparent 0%, rgba(15, 32, 54, 0.8) 50%, #102238 100%);
|
||||
|
||||
.rbox-item {
|
||||
width: 100%;
|
||||
|
86
src/views/screen/R_D_Environment1/component/Lr1.vue
Normal file
@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div class="lr-box">
|
||||
<div class="lr-title">{{ props.data.title }}</div>
|
||||
<div class="lr-content">
|
||||
<TempHumiVue />
|
||||
<div class="avg-th">
|
||||
<div class="avg-th-title">当前平均温度</div>
|
||||
<div class="avg-th-value temp-color">{{props.data.temp}}℃</div>
|
||||
</div>
|
||||
<div class="avg-th">
|
||||
<div class="avg-th-title">当前平均湿度</div>
|
||||
<div class="avg-th-value humi-color">{{props.data.humi}}%RH</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import TempHumiVue from './temp_humi_icon.vue';
|
||||
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
title: '研发中心四楼',
|
||||
temp: 25.5,
|
||||
humi: 60
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.lr-box {
|
||||
width: 100%;
|
||||
height: 134px;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.lr-title {
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
box-sizing: border-box;
|
||||
background-image: url('./../image/u803.png');
|
||||
background-position: top left;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 60px;
|
||||
font-size: 25px;
|
||||
color: #2affff;
|
||||
text-align: left;
|
||||
line-height: 34px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.lr-content {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
.avg-th {
|
||||
width: 40%;
|
||||
height: 34px;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
.avg-th-title {
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
}
|
||||
.temp-color {
|
||||
color: #2affff;
|
||||
}
|
||||
.humi-color {
|
||||
color: #ffd249;
|
||||
}
|
||||
.avg-th-value {
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
240
src/views/screen/R_D_Environment1/component/Lr2.vue
Normal file
@ -0,0 +1,240 @@
|
||||
<template>
|
||||
<div class="container2">
|
||||
<div class="title">
|
||||
<img :src="u918" alt="">
|
||||
<span>温湿度监测</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
import u918 from './../image/u918.png';
|
||||
|
||||
const prop = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
Humiture: [],
|
||||
bottom: {
|
||||
"temp": -15,
|
||||
"humidity": 15,
|
||||
"name": "温湿度下限值"
|
||||
},
|
||||
top: {
|
||||
"temp": 45,
|
||||
"humidity": 75,
|
||||
"name": "温湿度上限值"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const options = computed(() => {
|
||||
|
||||
let obj = {
|
||||
bottom: prop.data.bottom,
|
||||
top: prop.data.top
|
||||
}
|
||||
//x轴数据
|
||||
let x = [];
|
||||
//y轴数据
|
||||
let y = { temp: [], humidity: [] };
|
||||
prop.data.Humiture.forEach((res) => {
|
||||
x.push(res.name);
|
||||
y.temp.push(res.temp);
|
||||
y.humidity.push(res.humidity);
|
||||
});
|
||||
|
||||
return {
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
axisPointer: {
|
||||
type: "shadow",
|
||||
},
|
||||
|
||||
},
|
||||
legend: {
|
||||
// bottom: "3%",
|
||||
top: '2%'
|
||||
},
|
||||
backgroundColor: "transparent",
|
||||
grid: {
|
||||
top: "15%",
|
||||
left: "3%",
|
||||
right: "4%",
|
||||
bottom: "3%",
|
||||
containLabel: true,
|
||||
},
|
||||
color: ["#4992FF", "#7CFFB2", "#FF6E76"],
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: x,
|
||||
axisLabel: {
|
||||
interval: 0,
|
||||
rotate: 25,
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
boundaryGap: [0, 0.01],
|
||||
name:'(°C/%RH)',
|
||||
axisLabel: {
|
||||
formatter: "{value}",
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: `温度(°C)`,//(范围:${obj.bottom.temp}°C - ${obj.top.temp}°C)
|
||||
type: "bar",
|
||||
data: y.temp,
|
||||
barWidth: '30%',
|
||||
itemStyle: {
|
||||
color: function (params) {
|
||||
var index_color = params.value;
|
||||
if (
|
||||
index_color <= obj.bottom.temp ||
|
||||
index_color >= obj.top.temp
|
||||
) {
|
||||
return "#FF6E76";
|
||||
} else {
|
||||
return "#4992FF";
|
||||
}
|
||||
},
|
||||
},
|
||||
label: {
|
||||
formatter: "{c} °C",
|
||||
show: false,
|
||||
position: "top",
|
||||
textStyle: {
|
||||
color: "rgb(255,255,255,0.9)",
|
||||
},
|
||||
},
|
||||
markLine: {
|
||||
// 设置最大值和最小值
|
||||
silent: true, //基线显示 隐藏
|
||||
symbol: "none", // 不显示箭头和圆点
|
||||
data: [
|
||||
{
|
||||
name: '温度',
|
||||
yAxis: obj.bottom.temp,
|
||||
label: {
|
||||
formatter: `温度下限值: ${obj.bottom.temp} °C`,
|
||||
position: "middle",
|
||||
},
|
||||
lineStyle: {
|
||||
color: "yellow", // 这儿设置安全基线颜色
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '温度',
|
||||
yAxis: obj.top.temp,
|
||||
label: {
|
||||
formatter: `温度上限值:${obj.top.temp} °C`,
|
||||
position: "middle",
|
||||
},
|
||||
lineStyle: {
|
||||
color: "yellow", // 这儿设置安全基线颜色
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: `湿度(%RH)`,//(范围:${obj.bottom.humidity}%RH - ${obj.top.humidity}%RH)
|
||||
type: "bar",
|
||||
data: y.humidity,
|
||||
barWidth: '30%',
|
||||
itemStyle: {
|
||||
color: function (params) {
|
||||
var index_color = params.value;
|
||||
|
||||
if (
|
||||
index_color <= obj.bottom.humidity ||
|
||||
index_color >= obj.top.humidity
|
||||
) {
|
||||
return "#FF6E76";
|
||||
} else {
|
||||
return "#7CFFB2";
|
||||
}
|
||||
},
|
||||
},
|
||||
label: {
|
||||
formatter: "{c} %RH",
|
||||
show: false,
|
||||
position: "top",
|
||||
textStyle: {
|
||||
color: "rgb(255,255,255,0.9)",
|
||||
},
|
||||
},
|
||||
markLine: {
|
||||
// 设置最大值和最小值
|
||||
silent: true, //基线显示 隐藏
|
||||
symbol: "none", // 不显示箭头和圆点
|
||||
data: [
|
||||
{
|
||||
name: "湿度",
|
||||
yAxis: obj.bottom.humidity,
|
||||
label: {
|
||||
formatter: `湿度下限值:` + obj.bottom.humidity + "%RH",
|
||||
position: "middle",
|
||||
},
|
||||
lineStyle: {
|
||||
color: "red", // 这儿设置安全基线颜色
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "湿度",
|
||||
yAxis: obj.top.humidity,
|
||||
label: {
|
||||
formatter: `湿度上限值:` + obj.top.humidity + "%RH",
|
||||
position: "middle",
|
||||
},
|
||||
lineStyle: {
|
||||
color: "red", // 这儿设置安全基线颜色
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '超标',//(温湿度未达正常值均为超标)
|
||||
type: "bar",
|
||||
color: '#FF6E76'
|
||||
}
|
||||
],
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container2 {
|
||||
width: 395px;
|
||||
height: 272px;
|
||||
|
||||
.title {
|
||||
width: 395px;
|
||||
height: 35px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
font-size: 20px;
|
||||
color: #2affff;
|
||||
font-weight: 700;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
width: 100%;
|
||||
height: 237px;
|
||||
}
|
||||
}
|
||||
</style>
|
123
src/views/screen/R_D_Environment1/component/Lr3.vue
Normal file
@ -0,0 +1,123 @@
|
||||
<template>
|
||||
<div class="container2">
|
||||
<div class="title">
|
||||
<img :src="u918" alt="">
|
||||
<span>噪音监测</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="public-box">
|
||||
<svg t="1737006052368" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="1941" width="48" height="48">
|
||||
<path
|
||||
d="M704 672a32 32 0 0 1-32-32v-256a32 32 0 0 1 64 0v256a32 32 0 0 1-32 32z m96-64a32 32 0 0 1-32-32v-128a32 32 0 0 1 64 0v128a32 32 0 0 1-32 32z m-480 96a32 32 0 0 1-32-32V352a32 32 0 1 1 64 0v320a32 32 0 0 1-32 32z m96 128a32 32 0 0 1-32-32V224a32 32 0 1 1 64 0v576a32 32 0 0 1-32 32z m96-128a32 32 0 0 1-32-32V352a32 32 0 1 1 64 0v320a32 32 0 0 1-32 32z m96-96a32 32 0 0 1-32-32v-128a32 32 0 0 1 64 0v128a32 32 0 0 1-32 32zM224 608a32 32 0 0 1-32-32v-128a32 32 0 1 1 64 0v128a32 32 0 0 1-32 32z"
|
||||
fill="#2affff" p-id="1942"></path>
|
||||
</svg>
|
||||
<div class="text-label">
|
||||
<div class="label-left">{{ prop.public_list.devName }}</div>
|
||||
<div class="label-right"><i class="value" :style="{ color: checkCb(prop.public_list) }">{{
|
||||
prop.public_list.data }}</i> dB</div>
|
||||
</div>
|
||||
</div>
|
||||
<Progress v-for="item in prop.office_list" :mdoelValue1="item" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, watch } from 'vue';
|
||||
import u918 from './../image/u918.png';
|
||||
import Progress from './Progress.vue';
|
||||
const prop = defineProps({
|
||||
public_list: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return {
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e488",
|
||||
"devName": "公共区域1",
|
||||
"label": "noise-7",
|
||||
"place": null,
|
||||
"data": 0,
|
||||
"status": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
office_list: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return [
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e488",
|
||||
"devName": "办公区2",
|
||||
"label": "noise-7",
|
||||
"place": null,
|
||||
"data": 0,
|
||||
"status": 0
|
||||
}]
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
//检测是否超标
|
||||
function checkCb(item) {
|
||||
if (item.data > 85) {
|
||||
return '#FF0000'
|
||||
} else {
|
||||
return '#2affff'
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container2 {
|
||||
width: 385px;
|
||||
height: 310px;
|
||||
|
||||
.title {
|
||||
width: 385px;
|
||||
height: 35px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
font-size: 20px;
|
||||
color: #2affff;
|
||||
font-weight: 700;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
height: 275px;
|
||||
|
||||
.public-box {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.text-label {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
color: #fff;
|
||||
box-sizing: border-box;
|
||||
|
||||
.label-right {
|
||||
color: #2affff;
|
||||
|
||||
.value {
|
||||
//color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
99
src/views/screen/R_D_Environment1/component/Lr4.vue
Normal file
@ -0,0 +1,99 @@
|
||||
<template>
|
||||
<div class="container2">
|
||||
<div class="title">
|
||||
<img :src="u918" alt="">
|
||||
<span>甲醛/TVOC监测</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import u918 from './../image/u918.png';
|
||||
import { computed } from 'vue';
|
||||
|
||||
const prop = defineProps({
|
||||
option: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
xData: [],
|
||||
seriesData: [],
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const options = computed(() => {
|
||||
return {
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
legend: {
|
||||
data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
backgroundColor: 'transparent',
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
boundaryGap: false,
|
||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '甲醛',
|
||||
type: 'line',
|
||||
areaStyle: {
|
||||
opacity: 0.3
|
||||
},
|
||||
data: [120, 132, 101, 134, 90, 230, 210]
|
||||
},
|
||||
{
|
||||
name: 'TVOC',
|
||||
type: 'line',
|
||||
areaStyle: {
|
||||
opacity: 0.3
|
||||
},
|
||||
data: [220, 182, 191, 234, 290, 330, 310]
|
||||
}
|
||||
]
|
||||
};
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container2 {
|
||||
width: 408px;
|
||||
height: 268px;
|
||||
|
||||
.title {
|
||||
width: 408px;
|
||||
height: 35px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
font-size: 20px;
|
||||
color: #2affff;
|
||||
font-weight: 700;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
height: 222px;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,61 @@
|
||||
<template>
|
||||
<div
|
||||
class="popover"
|
||||
:style="{
|
||||
'top': props.top + 'px',
|
||||
'left': props.left + 'px',
|
||||
'display': isShow ? 'inline-block' : 'none'
|
||||
}"
|
||||
>
|
||||
<div class="popover-title">
|
||||
{{ dataRef.name }}
|
||||
</div>
|
||||
<div class="popover-content">
|
||||
{{ 'content' }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="Popover">
|
||||
import { ref } from 'vue';
|
||||
type PropsTypes = {
|
||||
top: number;
|
||||
left: number;
|
||||
};
|
||||
|
||||
const props = withDefaults(defineProps<PropsTypes>(), {
|
||||
top: 0,
|
||||
left: 0,
|
||||
});
|
||||
|
||||
const isShow = ref(false);
|
||||
const dataRef = ref<any>({});
|
||||
|
||||
const setShow = (visible: boolean, data?: any) => {
|
||||
isShow.value = visible;
|
||||
if (data) dataRef.value = data;
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
setShow,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.popover {
|
||||
position: absolute;
|
||||
background-color: rgb(29 78 216 / 0.6);
|
||||
/* background-image: url('/src/assets/images/preview-bottom.png'); */
|
||||
border-radius: 5px;
|
||||
font-size: 0.2rem;
|
||||
color: #fff;
|
||||
font-size: 30px;
|
||||
}
|
||||
.popover-title {
|
||||
padding: 12px;
|
||||
border-bottom: 1px solid #fff;
|
||||
}
|
||||
.popover-content {
|
||||
padding: 24px;
|
||||
}
|
||||
</style>
|
63
src/views/screen/R_D_Environment1/component/Progress.vue
Normal file
@ -0,0 +1,63 @@
|
||||
<template>
|
||||
<div class="progress-container">
|
||||
<div class="text-label">
|
||||
<div class="label-left">{{ prop.mdoelValue1.devName }}</div>
|
||||
<div class="label-right"><i class="value">{{ prop.mdoelValue1.data }}</i> dB</div>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<el-progress :percentage="percentage" stroke-width="8" :color="checkCb(prop.mdoelValue1)" :show-text="false"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref,computed } from 'vue';
|
||||
|
||||
const prop = defineProps({
|
||||
mdoelValue1:{
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
devName: '办公区1噪音',
|
||||
data: 10,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
const percentage = computed(() => {
|
||||
return prop.mdoelValue1.data > 100 ? 100 : prop.mdoelValue1.data;
|
||||
})
|
||||
|
||||
//检测是否超标
|
||||
function checkCb(item) {
|
||||
if (item.data > 85) {
|
||||
return '#FF0000'
|
||||
} else {
|
||||
return '#469DE9'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.progress-container {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
.text-label {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
color: #2affff;
|
||||
box-sizing: border-box;
|
||||
.label-right {
|
||||
.value {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
384
src/views/screen/R_D_Environment1/component/Sence.vue
Normal file
@ -0,0 +1,384 @@
|
||||
<template>
|
||||
<div id="three"></div>
|
||||
<Popover ref="popoverRef" :top="popoverTop" :left="popoverLeft" :data="popoverData"></Popover>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="Sence">
|
||||
/* eslint-disable */
|
||||
import { ref, onMounted, type Ref } from 'vue';
|
||||
import Viewer, { type Animate } from '@/modules/Viewer';
|
||||
import Floors from '@/modules/Floors';
|
||||
import ModelLoader from '@/modules/ModelLoder';
|
||||
import * as THREE from 'three';
|
||||
import gsap from 'gsap';
|
||||
import Event from '@/modules/Viewer/Events';
|
||||
import BoxHelperWrap from '@/modules/BoxHelperWrap';
|
||||
import { checkNameIncludes, findParent } from '@/utils/threejs';
|
||||
|
||||
import Popover from './Popover/index.vue';
|
||||
|
||||
let viewer: Viewer;
|
||||
let modelLoader: ModelLoader;
|
||||
let boxHelperWrap: BoxHelperWrap;
|
||||
|
||||
const popoverRef: Ref = ref(null);
|
||||
const popoverTop = ref(0);
|
||||
const popoverLeft = ref(0);
|
||||
const popoverData = ref<any>({});
|
||||
|
||||
let office: any = null;
|
||||
let oldOffice: any = null;
|
||||
let dataCenter: any = null;
|
||||
let oldDataCenter: any = null;
|
||||
let modelSelect = ['zuo0', 'zuo1', 'zuo2', 'zuo3', 'zuo4', 'zuo5'];
|
||||
let modelSelectName = '';
|
||||
let modelMoveName = '';
|
||||
let isModelSelectName = false;
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
init();
|
||||
initModel();
|
||||
|
||||
viewer.scene.traverse((item: THREE.Object3D) => {
|
||||
//console.log(item, '0000000000');
|
||||
});
|
||||
});
|
||||
|
||||
const init = () => {
|
||||
viewer = new Viewer('three',{width: 1920, height: 1080});
|
||||
// viewer.addAxis();
|
||||
// viewer.addStats();
|
||||
viewer.initRaycaster();
|
||||
|
||||
modelLoader = new ModelLoader(viewer);
|
||||
// const floors = new Floors(viewer);
|
||||
// floors.addGird();
|
||||
|
||||
boxHelperWrap = new BoxHelperWrap(viewer);
|
||||
|
||||
viewer.emitter.on(Event.dblclick.raycaster, (list: THREE.Intersection[]) => {
|
||||
onMouseClick(list);
|
||||
});
|
||||
|
||||
viewer.emitter.on(Event.mousemove.raycaster, (list: THREE.Intersection[]) => {
|
||||
onMouseMove(list);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
const initModel = () => {
|
||||
// modelLoader.loadModelToScene('/models/zuo.glb', baseModel => {
|
||||
// console.log(baseModel, '1111111');
|
||||
|
||||
// baseModel.setScalc(0.01);
|
||||
// const model = baseModel.gltf.scene;
|
||||
// office = baseModel;
|
||||
// office.object.rotation.y = Math.PI;
|
||||
// office.object.position.set(2, 0, 0);
|
||||
// // model.position.set(80, 2, 90);
|
||||
// office.object.children.forEach((item: any) => {
|
||||
// item.name = item.name.replace('zuo', '');
|
||||
// if (item.name === 'ding') {
|
||||
// item.name = 6;
|
||||
// }
|
||||
// item.name--;
|
||||
// });
|
||||
// office.object.children.sort((a: { name: number; }, b: { name: number; }) => a.name - b.name).forEach((v: { name: string; }) => {
|
||||
// v.name = 'zuo' + v.name;
|
||||
// });
|
||||
|
||||
// model.name = '办公楼';
|
||||
// baseModel.openCastShadow();
|
||||
// oldOffice = model.clone();
|
||||
|
||||
// const list: THREE.Object3D<THREE.Event>[] = [];
|
||||
// model.traverse(item => {
|
||||
// list.push(item);
|
||||
// });
|
||||
// viewer.setRaycasterObjects(list);
|
||||
// });
|
||||
|
||||
modelLoader.loadModelToScene('/models/plane.glb', baseModel => {
|
||||
const model = baseModel.gltf.scene;
|
||||
model.scale.set(0.01 * 3, 0.01 * 3, 0.01 * 3)
|
||||
model.name = 'plane';
|
||||
baseModel.openCastShadow();
|
||||
|
||||
const texture = (baseModel.object.children[0] as any).material.map;
|
||||
// console.log(baseModel,baseModel.object.children[0], 'texture-------2222');
|
||||
const fnOnj = planeAnimate(texture);
|
||||
viewer.addAnimate(fnOnj);
|
||||
});
|
||||
|
||||
|
||||
let objUrl = {
|
||||
mtlUrl: '/obj/goats_R&D.mtl',
|
||||
objUrl: '/obj/goats_R&D.obj',
|
||||
}
|
||||
modelLoader.ladObjModelToScene(objUrl, baseModel => {
|
||||
var scale = 0.07 / baseModel.scale.x;
|
||||
baseModel.scale.set(scale, scale, scale);
|
||||
const box = new THREE.Box3().setFromObject(baseModel);
|
||||
const size = box.getSize(new THREE.Vector3())
|
||||
// // console.log(size,'-----');
|
||||
baseModel.position.set(-size.x * 0.5, -size.y * 0.1+2, -size.z * 0.5);
|
||||
// baseModel.children.forEach((child) => {
|
||||
// const c = child;
|
||||
// const cm = c.material;
|
||||
// cm.emissive = cm.color;
|
||||
// cm.emissiveMap = cm.map;
|
||||
// });
|
||||
|
||||
baseModel.name = '再登研发中心';
|
||||
dataCenter = baseModel;
|
||||
oldDataCenter = baseModel.clone();
|
||||
|
||||
const rackList: any[] = [];
|
||||
baseModel.traverse(item => {
|
||||
|
||||
if (checkIsRack(item)) {
|
||||
rackList.push(item);
|
||||
}
|
||||
});
|
||||
// console.log(baseModel,rackList, 'rackList------111');
|
||||
|
||||
viewer.setRaycasterObjects(rackList);
|
||||
|
||||
});
|
||||
|
||||
|
||||
// modelLoader.loadModelToScene('/models/datacenter.glb', baseModel => {
|
||||
// console.log(baseModel, '1111111');
|
||||
// baseModel.setScalc(0.2);
|
||||
// // baseModel.object.rotation.y = Math.PI / 2;
|
||||
// const model = baseModel.gltf.scene;
|
||||
// model.position.set(0, 0, 0);
|
||||
// model.name = '机房';
|
||||
// baseModel.openCastShadow();
|
||||
|
||||
// dataCenter = baseModel;
|
||||
// oldDataCenter = model.clone();
|
||||
|
||||
// const rackList: any[] = [];
|
||||
// model.traverse(item => {
|
||||
// if (checkIsRack(item)) {
|
||||
// rackList.push(item);
|
||||
// }
|
||||
// });
|
||||
// // console.log(rackList, 'rackList------');
|
||||
|
||||
// viewer.setRaycasterObjects(rackList);
|
||||
|
||||
// });
|
||||
};
|
||||
|
||||
const planeAnimate = (texture: any): Animate => {
|
||||
console.log(texture, 'texture');
|
||||
texture.wrapS = THREE.RepeatWrapping;
|
||||
texture.wrapT = THREE.RepeatWrapping;
|
||||
const animateFn = {
|
||||
fun: () => {
|
||||
const count = texture.repeat.y;
|
||||
if (count <= 10) {
|
||||
texture.repeat.x += 0.01;
|
||||
texture.repeat.y += 0.02;
|
||||
} else {
|
||||
texture.repeat.x = 0;
|
||||
texture.repeat.y = 0;
|
||||
}
|
||||
},
|
||||
content: viewer,
|
||||
};
|
||||
return animateFn;
|
||||
}
|
||||
|
||||
const onMouseClick = (intersects: THREE.Intersection[]) => {
|
||||
if (!intersects.length) return;
|
||||
const selectedObject = intersects[0].object;
|
||||
|
||||
let selectedObjectName = '';
|
||||
const findClickModel = (object: any) => {
|
||||
console.log(object, 'object');
|
||||
if (object.type === 'Group') {
|
||||
selectedObjectName = object.name;
|
||||
}
|
||||
if (object.parent && object.type !== 'Scene') {
|
||||
findClickModel(object.parent);
|
||||
}
|
||||
};
|
||||
findClickModel(selectedObject);
|
||||
console.log(selectedObjectName);
|
||||
|
||||
// if (!selectedObjectName || !selectedObjectName.includes('办公楼')) {
|
||||
// // this.scene.remove(this.label);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// const selectedModel = viewer.scene.getObjectByName(selectedObjectName);
|
||||
console.log(selectedObject, 'selectedObject');
|
||||
|
||||
// 点击楼房
|
||||
if (selectedObject.name.includes('zuo')) {
|
||||
|
||||
selectOffice(selectedObject.parent);
|
||||
}
|
||||
|
||||
// 点击其他区域
|
||||
if (!selectedObject.name.includes('zuo')) {
|
||||
if (!isModelSelectName && oldOffice) {
|
||||
let oldmodel = oldOffice.getObjectByName(modelMoveName);
|
||||
office.object.getObjectByName(modelMoveName).traverse(function (child: { isMesh: any; material: any; name: any; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = oldmodel.getObjectByName(child.name).material;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function checkIsRack(obj: any): boolean {
|
||||
return checkNameIncludes(obj, 'Door');
|
||||
}
|
||||
|
||||
const onMouseMove = (intersects: THREE.Intersection[]) => {
|
||||
if (!intersects.length) {
|
||||
popoverRef.value.setShow(false);
|
||||
boxHelperWrap.setVisible(false);
|
||||
return;
|
||||
}
|
||||
const selectedObject = intersects[0].object || {};
|
||||
|
||||
|
||||
let selectedObjectName = '';
|
||||
const findClickModel = (object: any) => {
|
||||
if (object.name.includes('Door')) {
|
||||
selectedObjectName = object.name;
|
||||
return;
|
||||
}
|
||||
if (object.parent) {
|
||||
findClickModel(object.parent);
|
||||
}
|
||||
};
|
||||
|
||||
// const findClickModel = (object: any) => {
|
||||
// if (object.name.includes('zuo')) {
|
||||
// selectedObjectName = object.name;
|
||||
// return;
|
||||
// }
|
||||
// if (object.parent) {
|
||||
// findClickModel(object.parent);
|
||||
// }
|
||||
// };
|
||||
findClickModel(selectedObject);
|
||||
|
||||
console.log(selectedObjectName,selectedObject, '--selectedObjectName---');
|
||||
const rack = findParent(selectedObject, checkIsRack);
|
||||
console.log(rack, '-------rack---------');
|
||||
if (rack) {
|
||||
|
||||
boxHelperWrap.attach(rack);
|
||||
updateRackInfo(rack.name);
|
||||
}
|
||||
|
||||
// if (!selectedObjectName || !selectedObjectName.includes('办公楼')) {
|
||||
// // 重置模型
|
||||
// // viewer.scene.children[viewer.scene.children.findIndex(o => o.name === '办公楼')] = office.object = oldOffice.clone();
|
||||
// return;
|
||||
// }
|
||||
|
||||
|
||||
modelSelect.forEach((item: any) => {
|
||||
if (item === selectedObject.parent?.name) {
|
||||
modelMoveName = item;
|
||||
if (modelSelectName === modelMoveName) return;
|
||||
office.object.getObjectByName(item).traverse(function (child: { isMesh: any; material: THREE.MeshPhongMaterial; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = new THREE.MeshPhongMaterial({
|
||||
side: THREE.DoubleSide,
|
||||
transparent: true,
|
||||
depthTest: false,
|
||||
depthWrite: true, // 无法被选择,鼠标穿透
|
||||
color: 'yellow',
|
||||
opacity: 0.3,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!isModelSelectName && oldOffice) {
|
||||
let oldmodel = oldOffice.getObjectByName(item);
|
||||
office.object.getObjectByName(item).traverse(function (child: { isMesh: any; material: any; name: any; }) {
|
||||
if (child.isMesh) {
|
||||
child.material = oldmodel.getObjectByName(child.name).material;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
const updateRackInfo = (name: string) => {
|
||||
if (name) {
|
||||
popoverRef.value.setShow(true, { name });
|
||||
const event = viewer.mouseEvent as MouseEvent;
|
||||
popoverTop.value = event.y + 10;
|
||||
popoverLeft.value = event.x + 10;
|
||||
} else {
|
||||
popoverRef.value.setShow(false);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
const selectOffice = (model: any) => {
|
||||
modelSelectName = model.name;
|
||||
let oldmodel = oldOffice.getObjectByName(modelSelectName);
|
||||
let modelSelectIndex = modelSelect.findIndex(v => v === modelSelectName);
|
||||
office.object.children.forEach((child: any, index: number) => {
|
||||
child.children.forEach((Mesh: any) => {
|
||||
if (child.name === modelSelectName) {
|
||||
child.children.forEach((Mesh: { material: any; name: any; }) => {
|
||||
Mesh.material = oldmodel.getObjectByName(Mesh.name).material;
|
||||
});
|
||||
} else {
|
||||
// Mesh.material = new THREE.MeshPhongMaterial({
|
||||
// color: new THREE.Color('#123ca8'),
|
||||
// transparent: true,
|
||||
// opacity: 0.5,
|
||||
// emissiveMap: Mesh.material.map,
|
||||
// });
|
||||
}
|
||||
});
|
||||
if (!model.userData.position && index > modelSelectIndex) {
|
||||
gsap.to(child.position, {
|
||||
y: !child.userData.position ? child.position.y + 60 : child.position.y,
|
||||
duration: 2,
|
||||
ease: "power1.inOut",
|
||||
onComplete: () => {
|
||||
child.userData.position = true;
|
||||
},
|
||||
});
|
||||
}
|
||||
if (model.userData.position && index <= modelSelectIndex) {
|
||||
if (child.userData.position) {
|
||||
gsap.to(child.position, {
|
||||
y: oldOffice.getObjectByName(child.name).position.y,
|
||||
duration: 2,
|
||||
ease: "power1.inOut",
|
||||
onComplete: () => {
|
||||
child.userData.position = false;
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
#three {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,93 @@
|
||||
<template>
|
||||
<div class="sensor-item">
|
||||
<!-- :style="{color:item.status == 'true'?'#469DE9':'gray'}" -->
|
||||
<component style="width: 60px;height: 60px;margin-top: 10px;" :is="componentmap[prop.sensorData.component]"
|
||||
:value="prop.sensorData.list[i].value" :color="checkCb(prop.sensorData.list[i])" :unit="prop.sensorData.unit" />
|
||||
<!-- prop.sensorData.status == 'true'?'#469DE9':'gray' -->
|
||||
|
||||
<div style="margin: 10px 0">{{prop.sensorData.list[i].status=== 'false' ? '——' :prop.sensorData.list[i].value + prop.sensorData.unit }}</div>
|
||||
<div>{{ prop.sensorData.list[i].name }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang='ts'>
|
||||
import { ref, onMounted } from 'vue';
|
||||
import SvgPm25 from './svgPm25.vue';
|
||||
import SvgPm10 from './svgPm10.vue';
|
||||
import SvgJiaquan from './svgJiaquan.vue';
|
||||
import SvgZaosheng from './svgZaosheng.vue';
|
||||
import SvgTVOC from './svgTVOC.vue';
|
||||
import SvgShidu from './svgShidu.vue';
|
||||
import SvgWendu from './svgWendu.vue';
|
||||
import SvgYanwu from './svgYanwu.vue';
|
||||
|
||||
const prop = defineProps({
|
||||
sensorData: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
unit: 'ug/m³',
|
||||
limit: 35,
|
||||
component: 'SvgPm25',
|
||||
list: [
|
||||
{
|
||||
name: 'PM2.5',
|
||||
status: 'true',
|
||||
value: 0,
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
const i = ref(0)
|
||||
let timer = null
|
||||
const componentmap = {
|
||||
'SvgPm25': SvgPm25,
|
||||
'SvgPm10': SvgPm10,
|
||||
'SvgJiaquan': SvgJiaquan,
|
||||
'SvgZaosheng': SvgZaosheng,
|
||||
'SvgTVOC': SvgTVOC,
|
||||
'SvgShidu': SvgShidu,
|
||||
'SvgWendu': SvgWendu,
|
||||
'SvgYanwu': SvgYanwu
|
||||
}
|
||||
|
||||
//检测是否超标
|
||||
function checkCb(item) {
|
||||
if (item.status === 'false') {
|
||||
return 'gray'
|
||||
} else if (item.value > prop.sensorData.limit) {
|
||||
return '#FF0000'
|
||||
} else {
|
||||
return '#469DE9'
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
timer = setInterval(() => {
|
||||
i.value++;
|
||||
if (i.value >= prop.sensorData.list.length) {
|
||||
i.value = 0;
|
||||
}
|
||||
}, 5000);
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.sensor-item {
|
||||
width: 120px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
|
||||
.sensor-icon {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
}
|
||||
</style>
|
121
src/views/screen/R_D_Environment1/component/proge.vue
Normal file
@ -0,0 +1,121 @@
|
||||
<template>
|
||||
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from 'vue';
|
||||
|
||||
const prop = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return [
|
||||
{
|
||||
"devId": "48a2ec70-a60c-11ef-91f3-abd609c7e488",
|
||||
"devName": "噪声监测7",
|
||||
"label": "noise-7",
|
||||
"place": null,
|
||||
"data": 0,
|
||||
"status": 0
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const bodyMax = 150;
|
||||
|
||||
|
||||
|
||||
const options = computed(() => {
|
||||
|
||||
|
||||
let xData = []
|
||||
let seriesData = []
|
||||
prop.data.forEach((item) => {
|
||||
xData.push(item.devName);
|
||||
seriesData.push(item.data);
|
||||
});
|
||||
const labelSetting = {
|
||||
show: true,
|
||||
position: 'top',
|
||||
offset: [0, -20],
|
||||
formatter: function (param) {
|
||||
return xData[param.dataIndex] + '\r\n' + seriesData[param.dataIndex] + 'dB';
|
||||
},
|
||||
fontSize: 14,
|
||||
fontFamily: 'Arial',
|
||||
color: '#33FFFF'
|
||||
};
|
||||
return {
|
||||
tooltip: {
|
||||
},
|
||||
backgroundColor: 'transparent',
|
||||
xAxis: {
|
||||
data: xData,
|
||||
axisTick: { show: false },
|
||||
axisLine: { show: false },
|
||||
axisLabel: { show: false }
|
||||
},
|
||||
yAxis: {
|
||||
show: false,
|
||||
max: bodyMax,
|
||||
offset: 20,
|
||||
splitLine: { show: false },
|
||||
},
|
||||
grid: {
|
||||
top: 'center',
|
||||
height: 230,
|
||||
left: 0,
|
||||
right: 0
|
||||
},
|
||||
markLine: {
|
||||
z: -100
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'typeA',
|
||||
type: 'pictorialBar',
|
||||
symbolClip: true,
|
||||
symbolBoundingData: bodyMax,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
itemStyle: {
|
||||
color: '#33FFFF'
|
||||
},
|
||||
data: seriesData.map((item) => {
|
||||
let dataobj = {
|
||||
value: item
|
||||
}
|
||||
if (item > 100) {
|
||||
dataobj.itemStyle = {
|
||||
color: '#FF0000'
|
||||
}
|
||||
|
||||
}
|
||||
return dataobj
|
||||
}),
|
||||
z: 10
|
||||
},
|
||||
{
|
||||
name: 'full',
|
||||
type: 'pictorialBar',
|
||||
symbolBoundingData: bodyMax,
|
||||
label: labelSetting,
|
||||
animationDuration: 0,
|
||||
symbolRepeat: true, //图形是否重复
|
||||
symbolSize: [25, 6], //图形元素的尺寸
|
||||
itemStyle: {
|
||||
color: '#ccc'
|
||||
},
|
||||
data: prop.data.map(item => {
|
||||
return {
|
||||
value: 100,
|
||||
}
|
||||
})
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
37
src/views/screen/R_D_Environment1/component/svgFenchen.vue
Normal file
@ -0,0 +1,37 @@
|
||||
<template>
|
||||
<svg t="1730769272802" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="1039" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M378.105721 356.776833a62.282417 62.282417 0 0 0-0.01338-63.076668 62.287282 62.287282 0 0 0-55.100101-30.706985c-33.842635 0.76506-60.877578 28.426402-60.867847 62.273902 0.00973 33.852366 27.053187 61.499113 60.895823 62.245928a62.275119 62.275119 0 0 0 55.085505-30.736177zM751.756435 356.776833a62.27147 62.27147 0 0 0-55.114696-93.783653c-33.842635 0.76506-60.877578 28.426402-60.867848 62.273902 0.00973 33.852366 27.058053 61.499113 60.900688 62.245928a62.275119 62.275119 0 0 0 55.081856-30.736177zM540.953941 325.271948c0-17.199853-13.940139-31.139992-31.138776-31.139993-17.194987 0-31.135127 13.940139-31.135127 31.139993 0 17.193771 13.940139 31.133911 31.135127 31.13391 17.198636 0 31.138776-13.940139 31.138776-31.13391zM323.020216 761.162508a62.279984 62.279984 0 0 0 55.085505-30.731312 62.282417 62.282417 0 0 0-0.01338-63.076667 62.267821 62.267821 0 0 0-55.100101-30.706986c-33.842635 0.76506-60.877578 28.421537-60.867847 62.273903 0.00973 33.848717 27.053187 61.495464 60.895823 62.241062zM696.675795 761.162508a62.27147 62.27147 0 0 0 55.066045-93.807979 62.267821 62.267821 0 0 0-55.100101-30.706986c-33.842635 0.76506-60.877578 28.421537-60.867848 62.273903 0.00973 33.848717 27.058053 61.495464 60.901904 62.241062zM478.680038 698.922662c0 17.194987 13.940139 31.135127 31.135127 31.135127 17.198636 0 31.138776-13.940139 31.138776-31.135127 0-17.201069-13.940139-31.141208-31.138776-31.141208-17.194987 0-31.135127 13.940139-31.135127 31.141208zM665.502963 512.093656c0 17.199853 13.945005 31.139992 31.139992 31.139992 17.199853 0 31.139992-13.940139 31.139992-31.139992 0-17.193771-13.940139-31.133911-31.139992-31.133911-17.196204 0-31.139992 13.940139-31.139992 31.133911zM291.852248 512.093656c0 17.199853 13.940139 31.139992 31.139992 31.139992 17.194987 0 31.135127-13.940139 31.135127-31.139992 0-17.193771-13.940139-31.133911-31.135127-31.133911-17.199853 0-31.139992 13.940139-31.139992 31.133911zM448.952183 512.093656c0.003649 33.852366 27.053187 61.495464 60.895822 62.245928a62.27147 62.27147 0 0 0 55.08064-30.736177 62.273903 62.273903 0 0 0-55.11348-93.78487c-33.838986 0.766276-60.872713 28.422754-60.862982 62.275119z"
|
||||
p-id="1040"></path>
|
||||
<path
|
||||
d="M970.857819 318.763468c-25.181285-59.281778-61.204765-112.580522-107.052389-158.434228-45.863436-45.863436-99.171911-81.883267-158.441526-107.059687a491.752072 491.752072 0 0 0-193.366677-39.291708c-83.403656 0-171.837974 23.574538-249.031147 66.383817-12.851541 7.89629-13.060747 22.976113-9.240314 33.865745 4.075858 5.958707 9.962803 9.099222 17.056328 9.099222 4.884705 0 9.996859-1.525254 14.800071-4.404261l0.437872-0.261507 0.451252-0.246911c72.839996-38.846538 148.71712-58.544693 225.534452-58.544694 249.379012 0 452.256024 202.881878 452.256024 452.253591 0 249.377795-202.877012 452.259673-452.256024 452.259673-249.376579 0-452.253591-202.881878-452.253591-452.259673 0-76.807602 19.694506-152.694457 58.534963-225.516207l0.246911-0.460982 0.266372-0.441521c7.265025-12.110808 1.772165-26.726-7.739387-33.862096-2.365725-1.7673-5.702066-2.038537-7.47423-2.038537-8.798793 0-18.591312 5.578002-23.351953 13.289413-42.808063 77.198038-66.383817 165.632356-66.383818 249.02993a491.870054 491.870054 0 0 0 39.292924 193.370327c25.18615 59.280562 61.195035 112.575657 107.058471 158.437876 45.858571 45.859787 99.163397 81.873537 158.434228 107.056039a491.843295 491.843295 0 0 0 193.36911 39.292924 491.928437 491.928437 0 0 0 193.359379-39.283194c59.273264-25.18615 112.57809-61.196251 158.441526-107.059687 45.858571-45.858571 81.871104-99.16218 107.052389-158.435444 26.07649-61.365319 39.292924-126.433087 39.292925-193.367894s-13.216434-131.995277-39.294141-193.370326z"
|
||||
p-id="1041" class="border"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg) ;
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgJiaquan.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1730777236728" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="1648" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M512 22.26087A488.136348 488.136348 0 0 0 165.709913 165.709913 488.136348 488.136348 0 0 0 22.26087 512a488.136348 488.136348 0 0 0 143.449043 346.290087A488.136348 488.136348 0 0 0 512 1001.73913a488.136348 488.136348 0 0 0 346.290087-143.449043A488.136348 488.136348 0 0 0 1001.73913 512a488.136348 488.136348 0 0 0-143.449043-346.290087A488.136348 488.136348 0 0 0 512 22.26087m0-22.26087c282.779826 0 512 229.220174 512 512S794.779826 1024 512 1024 0 794.779826 0 512 229.220174 0 512 0z"
|
||||
p-id="1649"></path>
|
||||
<path
|
||||
d="M748.477217 625.775304a57.677913 57.677913 0 0 0-35.328 12.198957l-73.928347-42.674087a130.715826 130.715826 0 0 0-80.339479-165.954783v-69.565217a84.057043 84.057043 0 1 0-87.485217-5.075478v74.551652a130.715826 130.715826 0 0 0-80.339478 165.954782l-73.928348 42.674087a57.566609 57.566609 0 1 0 18.18713 23.04l68.140522-39.379478a131.027478 131.027478 0 0 0 223.187478 0l68.140522 39.379478a57.655652 57.655652 0 0 0-4.786087 23.04 58.301217 58.301217 0 1 0 58.434783-58.212174z m-247.874782-258.226087a80.740174 80.740174 0 0 0 29.184 1.424696v53.648696a124.14887 124.14887 0 0 0-29.117218 0v-55.073392z m14.558608 287.47687a102.066087 102.066087 0 1 1 102.110609-102.021565 102.066087 102.066087 0 0 1-102.110609 101.954782z"
|
||||
p-id="1650" class="border"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgPm10.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1731979776030" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="15886" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M507.44 955.95a438.912 438.912 0 0 1-172.62-35.08c-52.91-22.48-100.5-54.63-141.43-95.57-40.94-40.94-73.09-88.52-95.57-141.44a439.09 439.09 0 0 1-35.08-172.62c0-74.45 21.05-153.39 59.26-222.31 4.25-6.88 12.99-11.86 20.85-11.86 1.58 0 4.56 0.24 6.67 1.82 8.49 6.37 13.39 19.42 6.91 30.23l-0.24 0.39-0.22 0.41c-34.67 65.01-52.25 132.75-52.25 201.32 0 222.62 181.11 403.73 403.73 403.73s403.73-181.11 403.73-403.73c0-222.61-181.11-403.73-403.73-403.73-68.57 0-136.31 17.58-201.33 52.26l-0.4 0.22-0.39 0.23c-4.29 2.57-8.85 3.93-13.21 3.93-6.33 0-11.59-2.8-15.23-8.12-3.41-9.72-3.22-23.18 8.25-30.23C354.05 87.58 433 66.54 507.45 66.54a438.912 438.912 0 0 1 172.62 35.08c52.91 22.48 100.5 54.63 141.44 95.57 40.93 40.93 73.09 88.51 95.57 141.43 23.28 54.79 35.08 112.87 35.08 172.62s-11.8 117.84-35.08 172.62c-22.48 52.91-54.63 100.5-95.57 141.43-40.94 40.94-88.53 73.09-141.44 95.57a438.83 438.83 0 0 1-172.63 35.09z m0 0"
|
||||
p-id="15887" class="border"></path>
|
||||
<path
|
||||
d="M327.36 460.82c0 22.16 18.05 40.64 39.71 40.64s39.73-18.57 39.73-40.64c3.62-25.85-18.05-40.61-39.73-40.61s-39.71 18.44-39.71 40.61z m377.59-94.43c-14.46 0-25.3 11.09-25.3 22.16 3.62 11.07 14.46 22.16 25.3 22.16 14.43 0 25.27-11.09 25.27-22.16s-10.84-22.16-25.27-22.16z m-110.23 18.29c21.68 0 39.73-18.56 39.73-40.61s-18.06-40.61-39.73-40.61c-21.67 0-39.73 18.57-39.73 40.61-3.6 22.09 14.46 40.54 39.73 40.54v0.07zM429.23 395.7c18.08 0 36.11-14.78 36.11-33.23 0-18.45-14.43-33.21-36.11-33.21-18.06 0-36.11 14.76-36.11 33.23s14.46 33.21 36.11 33.21z m178.99 95.33c0 18.57 14.46 33.23 36.11 33.23 18.05 0 36.11-14.78 36.11-33.23 0-18.45-14.43-33.23-36.11-33.23-17.96 0-36.11 14.76-36.11 33.23z m-89.64-3.02c18.05 0 28.89-14.87 28.89-29.54s-14.43-29.43-28.89-29.43c-18.05 0-28.89 14.64-28.89 29.43 0 14.78 14.45 29.54 28.89 29.54z m178.2 63.15c-3.88 0-7.77 0-9.7 2-77.74 55.51-147.71 15.85-149.66 13.92-145.76-91.25-242.9 5.85-242.9 5.85a10.313 10.313 0 0 0-3.88 7.94c0.47 2.98 1.81 5.75 3.88 7.96 3.9 5.96 11.6 3.97 17.5 0 1.95-3.97 81.62-81.22 209.9-1.97 1.95 1.97 33.05 19.82 77.74 19.82 29.15 0 66.07-7.91 102.99-33.7a14.953 14.953 0 0 0 1.95-17.85 10.057 10.057 0 0 0-7.82-3.97z m-383.26-185a29.21 29.21 0 0 0 20.56-8.77c5.42-5.54 8.41-13 8.33-20.75 0.19-16.14-12.73-29.39-28.87-29.59a29.227 29.227 0 0 0-28.89 29.54 29.22 29.22 0 0 0 8.3 20.77 29.22 29.22 0 0 0 20.57 8.8z m57.14 267.22h-32.77v95.15h22.49v-31.52h10.91c19.7 0 36.9-9.98 36.9-32.65 0.04-23.55-16.95-30.98-37.53-30.98z m-0.49 45.58h-9.79v-27.52h9.17c10.79 0 16.8 3.34 16.8 12.93 0 9.58-5.27 14.59-16.18 14.59z m103.92-4.48c-1.76 5.5-3.27 11.6-5.15 17.41h-0.63c-1.76-5.87-3.27-11.91-5.15-17.41l-14.81-41.1h-24.23v95.15h20.08v-32.61c-0.39-11.05-1.35-22.07-2.88-33.02h0.51l7.52 22.79 12.67 34.81h12.3l12.56-34.81 7.77-22.79h0.51a320.218 320.218 0 0 0-2.88 33.02v32.72h20.38V633.5h-24.27l-14.3 40.98z m101.23-41.1h-16.45a62.13 62.13 0 0 1-23.21 8.59v14.09h17.2v54.14h-19.82v18.45H592V710.2h-16.69v-76.82z m62.66-1.79c-19.68 0-33 16.13-33 48.9 0 32.77 13.32 49.94 33 49.94s33.14-17.15 33.14-49.94c-0.01-32.79-13.42-48.9-33.14-48.9z m0 81.23c-6.64 0-11.9-6.15-11.9-32.28 0-26.13 5.27-31.35 11.9-31.35 6.64 0 12.07 5.38 12.07 31.35 0 25.97-5.41 32.23-12.07 32.23v0.05z m0 0"
|
||||
p-id="15888"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgPm25.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1731979377696" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="4643" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M510.24 954.86a438.195 438.195 0 0 1-172.33-35.02c-52.82-22.44-100.33-54.54-141.2-95.41-40.87-40.87-72.97-88.37-95.41-141.2A438.195 438.195 0 0 1 66.28 510.9c0-74.33 21.01-153.14 59.16-221.94 4.24-6.87 12.97-11.84 20.81-11.84 1.58 0 4.55 0.24 6.66 1.82 8.48 6.36 13.37 19.39 6.9 30.18l-0.24 0.39-0.22 0.41c-34.62 64.9-52.17 132.53-52.17 200.98 0 222.25 180.81 403.06 403.06 403.06S913.3 733.15 913.3 510.9c0-222.24-180.81-403.06-403.06-403.06-68.46 0-136.08 17.56-201 52.18l-0.4 0.22-0.39 0.23c-4.28 2.57-8.84 3.93-13.19 3.93-6.32 0-11.57-2.8-15.2-8.11-3.4-9.71-3.22-23.14 8.24-30.18 68.8-38.15 147.61-59.16 221.94-59.16a438.16 438.16 0 0 1 172.33 35.02c52.82 22.44 100.33 54.54 141.2 95.41 40.86 40.87 72.97 88.37 95.41 141.2 23.24 54.7 35.02 112.68 35.02 172.33s-11.78 117.64-35.02 172.33c-22.44 52.82-54.54 100.33-95.41 141.2-40.87 40.87-88.38 72.97-141.2 95.41a438.362 438.362 0 0 1-172.33 35.01z m0 0"
|
||||
p-id="4644" class="border"></path>
|
||||
<path
|
||||
d="M314.61 465.3c0 22.12 18.02 40.53 39.63 40.53 21.61 0 39.66-18.51 39.66-40.53 3.61-25.8-18.02-40.54-39.66-40.54-21.64 0.01-39.63 18.33-39.63 40.54z m376.86-94.32c-14.41-0.09-25.13 10.93-25.13 22.03 3.61 11.05 14.41 22.1 25.22 22.1 14.43 0 25.25-11.05 25.25-22.1s-10.91-22.12-25.34-22.12v0.09z m-110 18.25c21.63 0 39.66-18.53 39.66-40.54 0-22-18.02-40.54-39.66-40.54-21.63 0-39.63 18.53-39.63 40.54-3.61 22.01 14.41 40.44 39.63 40.44v0.1z m-165.15 11.05c18.02 0 36.04-14.73 36.04-33.17s-14.43-33.26-36.04-33.26c-18.02 0-36.04 14.75-36.04 33.17 0 18.41 14.41 33.17 36.04 33.17v0.09z m178.63 95.13c0 18.53 14.43 33.17 36.04 33.17 18.02 0 36.04-14.75 36.04-33.17 0-18.41-14.41-33.17-36.04-33.17-17.92-0.04-36.04 14.64-36.04 33.17z m-89.48-3.03c18.02 0 28.84-14.73 28.84-29.49 0-14.76-14.41-29.46-28.84-29.46-18.02 0-28.84 14.73-28.84 29.46s14.43 29.44 28.84 29.44v0.05z m177.87 63.05c-3.87 0-7.76 0-9.68 1.97-77.6 55.41-147.46 15.84-149.38 13.9-145.49-91.12-242.45 5.84-242.45 5.84a10.358 10.358 0 0 0-3.87 7.92c0.47 2.97 1.81 5.73 3.87 7.92 3.89 5.93 11.58 3.96 17.46 0 1.95-3.96 81.46-81.07 209.51-1.97 1.95 1.97 32.98 19.78 77.6 19.78 29.09 0 65.95-7.92 102.82-33.65a14.92 14.92 0 0 0 1.92-17.79 9.92 9.92 0 0 0-7.8-3.96v0.04zM300.8 370.73c16.1-0.18 29.01-13.37 28.84-29.46a29.16 29.16 0 0 0-28.82-29.53c-16.1 0.19-29.01 13.38-28.84 29.49a29.1 29.1 0 0 0 8.29 20.73c5.41 5.52 12.8 8.68 20.53 8.77z m27.15 266.72h-32.68v94.97h22.42v-31.45h10.89c19.66 0 36.83-9.98 36.83-32.59-0.01-23.52-16.91-30.93-37.46-30.93z m-0.51 45.59h-9.75v-27.57h9.15c10.77 0 16.77 3.31 16.77 12.9s-5.26 14.67-16.17 14.67z m103.75-4.64c-1.76 5.49-3.27 11.58-5.14 17.37h-0.6c-1.74-5.88-3.24-11.88-5.12-17.37l-14.78-41.02h-24.11v94.97h19.92v-32.41c-0.39-11.04-1.35-22.05-2.87-32.98h0.51l7.5 22.75 12.65 34.75h12.28l12.53-34.75 7.76-22.75h0.51a316.917 316.917 0 0 0-2.87 32.98v32.57h20.4v-94.97h-24.3l-14.27 40.86z m86.91 36.23c14.29-14.69 28.05-32.71 28.05-49.06 0-18.16-12.51-29.9-30.55-29.9-13.27 0-21.8 4.84-30.95 14.69l12.16 12.28c4.38-4.86 9.26-9.27 15.77-9.27 7.39 0 12.16 4.63 12.16 13.44 0 13.9-15.66 31.04-38.96 52.65v13.02h64.65v-19.16h-17.19c-5.07 0.13-10.13 0.57-15.14 1.31z m60.75-8.57c-5.8-0.36-11.23 2.86-13.69 8.12a14.157 14.157 0 0 0 2.52 15.72 14.158 14.158 0 0 0 15.55 3.42c5.39-2.16 8.92-7.39 8.9-13.21 0.18-3.66-1.15-7.24-3.68-9.9a13.39 13.39 0 0 0-9.7-4.16h0.1z m62.27-35.51c-3.31-0.06-6.6 0.59-9.64 1.92l1.37-16.21h33.19v-18.9h-52.35l-2.32 47.02 9.75 6.51c5.54-3.57 8.04-4.63 13.16-4.63 8.04 0 13.66 5.12 13.66 14.69s-5.63 14.82-14.66 14.82c-7.39 0-13.9-3.96-19.16-9.06l-10.33 14.43a44.022 44.022 0 0 0 32.57 13.18c17.9 0 33.7-12.39 33.7-33.75 0-20.57-13.29-30.02-29.07-30.02h0.13z m0 0"
|
||||
p-id="4645"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgShidu.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1730777853051" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="2254" id="mx_n_1730777853052" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M511.952979 1023.896979a505.462446 505.462446 0 0 1-198.72418-40.381232c-60.914463-25.881164-115.693372-62.891387-162.824501-110.022515-47.131128-47.131128-84.141351-101.902162-110.022514-162.8245a505.462446 505.462446 0 0 1-40.381233-198.72418c0-85.708713 24.227164-176.592083 68.223569-255.928957 4.891115-7.923448 14.956887-13.657316 23.998754-13.657316 1.8194 0 5.245543 0.275667 7.679287 2.095067 9.774353 7.332734 15.421582 22.352631 7.954953 34.797013l-0.275667 0.456819-0.252038 0.472571C67.412872 355.019318 47.17106 433.009363 47.17106 511.944552c0 256.283385 208.498533 464.781919 464.781919 464.781918s464.781919-208.498533 464.781919-464.781918-208.498533-464.781919-464.781919-464.781919c-78.943064 0-156.925233 20.241811-231.780554 60.166224l-0.464696 0.252039-0.448943 0.26779c-4.938372 2.961448-10.191791 4.52881-15.208925 4.52881-7.293353 0-13.342268-3.229238-17.532401-9.349039-3.922343-11.192068-3.709686-26.692412 9.498686-34.804889 79.328998-43.996404 170.212368-68.223568 255.928957-68.223568a505.430941 505.430941 0 0 1 198.72418 40.381232c60.906587 25.873288 115.693372 62.891387 162.824501 110.022515 47.123252 47.123252 84.141351 101.902162 110.022515 162.824501 26.794802 63.072539 40.381232 129.933526 40.381232 198.72418s-13.58643 135.659517-40.381232 198.72418c-25.881164 60.914463-62.891387 115.693372-110.022515 162.824501-47.131128 47.131128-101.910038 84.141351-162.824501 110.022514a505.525456 505.525456 0 0 1-198.716304 40.373356z"
|
||||
p-id="2255" class="border"></path>
|
||||
<path
|
||||
d="M716.088103 531.012811c-23.57344-52.345167-57.480443-102.288095-93.364371-155.160967-25.014783-36.852699-50.872319-74.949835-73.587254-114.74823l-0.181153-0.322923-38.506698-78.344474a1190.187004 1190.187004 0 0 0-16.587259 32.930355c-7.758048 15.783887-15.783887 32.111232-24.227164 46.855462-23.124497 40.538756-47.942376 79.116341-71.949007 116.425858-30.945555 48.076271-62.930768 97.79079-91.820637 152.514566-28.094374 69.444378-21.454745 144.449347 18.257012 205.867886 41.641423 64.411492 113.488039 104.438295 187.508483 104.438295 1.252314 0 2.496753-0.015752 3.756944-0.039381 75.761083-1.236562 145.024309-41.239737 185.255893-107.005934 38.490946-62.930768 44.256318-138.975394 15.445211-203.410513z m-41.594166 166.19551c-30.709269 58.323196-95.538199 103.595543-157.933386 106.060791h-0.716733c-65.269996-1.559486-126.877564-41.869832-160.90271-100.137895-34.607984-59.284091-34.214175-131.359117-6.395468-188.296103 25.314079-49.493985 83.897189-140.542756 130.122555-203.953971a37.293765 37.293765 0 0 1 61.158625 0.669476c21.375983 30.638384 49.470357 71.61033 66.994882 99.94099 19.462068 31.47326 37.845099 61.198006 50.9117 81.16415l0.3308 0.535581c40.341851 69.365616 49.186814 141.818699 16.429735 204.016981zM501.745435 594.298007c-63.994053 35.198698-126.475878 15.07503-159.390481-1.016029-1.590991 36.56128 7.529639 74.524521 27.133479 108.1086 31.796184 54.463862 85.015608 86.535713 146.032461 88.000685l0.669476-0.007876c50.4155-1.992676 99.232133-29.716869 130.098926-72.413702a416.099181 416.099181 0 0 0 20.604116-37.333147c14.051125-34.584356 16.603011-71.964759 7.742296-109.778353-36.33287-8.616553-101.847028-14.633963-172.890273 24.439822z"
|
||||
p-id="2256"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgTVOC.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1730777586016" class="icon" viewBox="0 0 1152 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="1965" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M160 512c0-32-19.2-61.44-48.64-74.24l-10.24-3.84 1.28-11.52c17.92-96 64-183.04 133.12-252.16 90.88-90.88 211.2-140.8 340.48-140.8 176.64 0 337.92 96 422.4 250.88 3.84 6.4 12.8 8.96 19.2 5.12 6.4-3.84 8.96-12.8 5.12-19.2C934.4 102.4 762.88 0 576 0c-69.12 0-135.68 14.08-198.4 39.68-61.44 25.6-115.2 62.72-162.56 110.08-47.36 47.36-83.2 102.4-108.8 162.56-15.36 35.84-25.6 72.96-32 110.08l-1.28 8.96-8.96 2.56c-38.4 7.68-64 40.96-64 78.08 0 43.52 35.84 79.36 79.36 79.36 44.8 0 80.64-35.84 80.64-79.36z m912.64-79.36c-43.52 0-79.36 35.84-79.36 79.36 0 32 19.2 61.44 48.64 74.24l10.24 3.84-2.56 11.52c-17.92 96-64 183.04-133.12 252.16-90.88 90.88-211.2 140.8-340.48 140.8-176.64 0-337.92-96-422.4-250.88-2.56-5.12-7.68-7.68-12.8-7.68-2.56 0-5.12 0-6.4 1.28-3.84 1.28-6.4 5.12-6.4 8.96-1.28 3.84-1.28 7.68 1.28 11.52C217.6 921.6 389.12 1024 576 1024c69.12 0 135.68-14.08 198.4-39.68 61.44-25.6 115.2-62.72 162.56-110.08 47.36-47.36 83.2-102.4 108.8-162.56 15.36-35.84 25.6-72.96 32-110.08l1.28-8.96 8.96-2.56c38.4-7.68 64-40.96 64-78.08 0-43.52-35.84-79.36-79.36-79.36z"
|
||||
p-id="1966" class="border"></path>
|
||||
<path
|
||||
d="M266.24 423.68h-69.12v-21.76h162.56v21.76h-69.12V627.2h-25.6V423.68zM382.72 401.92H409.6l38.4 124.16c7.68 26.88 12.8 47.36 21.76 74.24h1.28c8.96-26.88 14.08-47.36 23.04-74.24l37.12-124.16h25.6L483.84 627.2h-29.44l-71.68-225.28zM569.6 514.56c0-71.68 39.68-115.2 94.72-115.2 56.32 0 94.72 43.52 94.72 115.2s-39.68 117.76-94.72 117.76c-55.04-1.28-94.72-46.08-94.72-117.76z m163.84 0c0-57.6-26.88-93.44-69.12-93.44-40.96 0-69.12 35.84-69.12 93.44s26.88 94.72 69.12 94.72c42.24 0 69.12-37.12 69.12-94.72zM794.88 514.56c0-71.68 42.24-116.48 98.56-116.48 26.88 0 48.64 12.8 61.44 26.88l-14.08 16.64c-11.52-12.8-26.88-21.76-46.08-21.76-43.52 0-72.96 35.84-72.96 93.44s28.16 94.72 71.68 94.72c21.76 0 38.4-8.96 53.76-25.6l14.08 15.36c-17.92 20.48-39.68 32-69.12 32-56.32 1.28-97.28-42.24-97.28-115.2z"
|
||||
p-id="1967"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
36
src/views/screen/R_D_Environment1/component/svgWendu.vue
Normal file
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<svg t="1730777903037" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="2469" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M511.2 959.1c-59.7 0.1-118.7-11.9-173.6-35.3-53.2-22.6-101.1-54.9-142.3-96.1-41.2-41.2-73.5-89-96.1-142.3a441 441 0 0 1-35.3-173.6c0-74.9 21.2-154.3 59.6-223.6 4.3-6.9 13.1-11.9 21-11.9 1.6 0 4.6 0.2 6.7 1.8 8.5 6.4 13.5 19.5 6.9 30.4l-0.2 0.4-0.2 0.4c-34.9 65.4-52.6 133.5-52.6 202.5 0 223.9 182.2 406.1 406.1 406.1 223.9 0 406.1-182.2 406.1-406.1 0-223.9-182.2-406.1-406.1-406.1-69 0-137.1 17.7-202.5 52.6l-0.4 0.2-0.4 0.2c-4.3 2.6-8.9 4-13.3 4-6.4 0-11.7-2.8-15.3-8.2-3.4-9.8-3.2-23.3 8.3-30.4 69.3-38.4 148.7-59.6 223.6-59.6 59.7-0.1 118.7 11.9 173.6 35.3 53.2 22.6 101.1 54.9 142.3 96.1 41.2 41.2 73.5 89 96.1 142.3 23.4 55.1 35.3 113.5 35.3 173.6s-11.9 118.5-35.3 173.6c-22.6 53.2-54.9 101.1-96.1 142.3-41.2 41.2-89 73.5-142.3 96.1a441 441 0 0 1-173.6 35.3z m0 0"
|
||||
p-id="2470" class="border"></path>
|
||||
<path
|
||||
d="M531.5 583.1l-6-2.7V352.8c0-9.5-12-17.6-26.2-17.6s-26.2 8-26.2 17.6v227.7l-6.1 2.7c-28.8 12.9-47.5 41.9-47.5 73.8 0 44.5 35.8 80.7 79.7 80.7 43.9 0 79.7-36.2 79.7-80.7 0.1-31.9-18.5-61-47.4-73.9z m81.7-48.4l-3.2-3.1V286.8c0-24-12.3-47.2-33.8-63.6-20.7-15.9-48-24.6-76.9-24.6-28.9 0-56.2 8.7-76.9 24.6-21.5 16.5-33.8 39.7-33.8 63.6v244.9l-3.2 3.1c-33.1 31.6-52.1 76.2-52.1 122.3 0 44.9 17.3 87.1 48.6 118.9 31.4 31.8 73 49.2 117.4 49.2 44.3 0 86-17.5 117.4-49.2 31.4-31.8 48.6-74 48.6-118.9 0-46.2-19-90.8-52.1-122.4z m-113.9 263c-76.6 0-138.9-63.1-138.9-140.7 0-42.1 18.3-81.6 50.4-108.4l4.9-4.1V286.8c0-16.5 9.6-32.6 26.3-44.1 15.7-10.8 36.1-16.8 57.4-16.8 21.3 0 41.7 5.9 57.4 16.8 16.7 11.5 26.3 27.5 26.3 44.1v257.7l4.9 4.1c32 26.9 50.4 66.4 50.4 108.4-0.2 77.5-62.5 140.7-139.1 140.7zM642 304.5h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.8-4.8-8.7-10.6-8.7H642c-5.9 0-10.6 3.9-10.6 8.7 0 4.8 4.8 8.7 10.6 8.7z m36.4 20.6H642c-5.9 0-10.6 3.9-10.6 8.7 0 4.8 4.8 8.7 10.6 8.7h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.9-4.7-8.7-10.6-8.7z m0 37.9H642c-5.9 0-10.6 3.9-10.6 8.7 0 4.8 4.8 8.7 10.6 8.7h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.8-4.7-8.7-10.6-8.7z m0 37.9H642c-5.9 0-10.6 3.9-10.6 8.7 0 4.8 4.8 8.7 10.6 8.7h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.8-4.7-8.7-10.6-8.7z m0 38H642c-5.9 0-10.6 3.9-10.6 8.7s4.8 8.7 10.6 8.7h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.9-4.7-8.7-10.6-8.7z m0 37.9H642c-5.9 0-10.6 3.9-10.6 8.7 0 4.8 4.8 8.7 10.6 8.7h36.4c5.9 0 10.6-3.9 10.6-8.7 0-4.8-4.7-8.7-10.6-8.7z m0 0"
|
||||
p-id="2471"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
34
src/views/screen/R_D_Environment1/component/svgYanwu.vue
Normal file
@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<svg t="1730776964174" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="7087" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M631.466667 230.4l-17.066667-8.533333 17.066667-38.4 17.066666 8.533333c76.8 38.4 140.8 98.133333 179.2 174.933333l8.533334 17.066667-38.4 21.333333-8.533334-17.066666c-34.133333-68.266667-89.6-123.733333-157.866666-157.866667z m17.066666 601.6l-17.066666 8.533333-17.066667-38.4 17.066667-8.533333c68.266667-34.133333 123.733333-89.6 162.133333-157.866667l8.533333-17.066666 38.4 21.333333-8.533333 17.066667c-42.666667 76.8-106.666667 136.533333-183.466667 174.933333zM674.133333 170.666667l-17.066666-8.533334 17.066666-38.4 17.066667 8.533334c85.333333 42.666667 157.866667 110.933333 200.533333 196.266666l8.533334 17.066667-38.4 21.333333-8.533334-17.066666c-38.4-81.066667-102.4-140.8-179.2-179.2z m192 490.666666l38.4 21.333334-8.533333 17.066666c-42.666667 85.333333-115.2 153.6-200.533333 196.266667l-17.066667 8.533333-17.066667-38.4 17.066667-8.533333c76.8-38.4 140.8-98.133333 183.466667-174.933333l4.266666-21.333334zM392.533333 793.6l17.066667 8.533333-17.066667 38.4-17.066666-8.533333c-76.8-38.4-140.8-98.133333-179.2-174.933333l-12.8-17.066667 38.4-21.333333 8.533333 17.066666c38.4 68.266667 93.866667 123.733333 162.133333 157.866667z m0-610.133333l17.066667 38.4-17.066667 8.533333c-68.266667 34.133333-123.733333 89.6-162.133333 157.866667l-8.533333 17.066666-38.4-17.066666 8.533333-17.066667c42.666667-81.066667 106.666667-140.8 183.466667-179.2l17.066666-8.533333zM157.866667 366.933333l-38.4-21.333333 8.533333-17.066667c42.666667-85.333333 115.2-153.6 200.533333-196.266666l17.066667-8.533334 17.066667 38.4-12.8 8.533334c-76.8 38.4-145.066667 98.133333-183.466667 174.933333l-8.533333 21.333333z m192 490.666667l17.066666 8.533333-17.066666 38.4-17.066667-8.533333c-85.333333-42.666667-157.866667-110.933333-200.533333-196.266667l-8.533334-17.066666 38.4-21.333334 8.533334 17.066667c38.4 76.8 102.4 140.8 179.2 179.2zM512 981.333333C251.733333 981.333333 42.666667 772.266667 42.666667 512S251.733333 42.666667 512 42.666667s469.333333 213.333333 469.333333 469.333333-213.333333 469.333333-469.333333 469.333333z m0-981.333333C230.4 0 0 230.4 0 512s230.4 512 512 512 512-230.4 512-512S793.6 0 512 0z m426.666667 512c0 25.6-17.066667 42.666667-42.666667 42.666667s-42.666667-17.066667-42.666667-42.666667 17.066667-42.666667 42.666667-42.666667 42.666667 21.333333 42.666667 42.666667z m-426.666667 85.333333c-46.933333 0-85.333333-38.4-85.333333-85.333333s38.4-85.333333 85.333333-85.333333 85.333333 38.4 85.333333 85.333333-38.4 85.333333-85.333333 85.333333z m0-213.333333c-72.533333 0-128 59.733333-128 128s59.733333 128 128 128 128-59.733333 128-128-59.733333-128-128-128z m0 298.666667c-93.866667 0-170.666667-76.8-170.666667-170.666667s76.8-170.666667 170.666667-170.666667 170.666667 76.8 170.666667 170.666667-76.8 170.666667-170.666667 170.666667z m0-384c-119.466667 0-213.333333 93.866667-213.333333 213.333333s93.866667 213.333333 213.333333 213.333333 213.333333-93.866667 213.333333-213.333333-98.133333-213.333333-213.333333-213.333333z"
|
||||
p-id="7088" class="border"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg) ;
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
39
src/views/screen/R_D_Environment1/component/svgZaosheng.vue
Normal file
@ -0,0 +1,39 @@
|
||||
<template>
|
||||
<svg t="1730777460223" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="1806" width="256" height="256" :fill="prop.color">
|
||||
<path
|
||||
d="M204.8 869.171l29.491-29.491a431.923 431.923 0 0 1-33.382-31.54l-29.082 29.492q15.975 16.589 32.973 31.54z"
|
||||
p-id="1807"></path>
|
||||
<path
|
||||
d="M512 40.96a471.04 471.04 0 0 0-367.206 765.952l29.286-28.672a430.08 430.08 0 1 1 92.16 87.04l-28.672 29.491A471.04 471.04 0 1 0 512 40.96z"
|
||||
p-id="1808" class="border"></path>
|
||||
<path
|
||||
d="M522.24 634.88v-40.96a81.92 81.92 0 0 0 0-163.84v-40.96a122.88 122.88 0 0 1 0 245.76z m-40.96-350.003a20.48 20.48 0 0 0-4.096 0 86.835 86.835 0 0 0-67.584 24.78l-63.488 63.489H276.48a40.96 40.96 0 0 0-40.96 40.96v204.8a40.96 40.96 0 0 0 40.96 40.96h77.005l55.296 55.296a81.92 81.92 0 0 0 67.379 22.118 20.48 20.48 0 0 0 5.12 0 20.48 20.48 0 0 0 20.48-20.48V305.357a20.48 20.48 0 0 0-20.48-20.48zM460.8 697.549a40.96 40.96 0 0 1-23.142-11.264l-66.15-66.15H358.4v-1.23h-81.92v-204.8h27.648l-1.229 1.23h57.959l76.595-76.596A40.96 40.96 0 0 1 460.8 327.68v369.869z m266.24-201.933H768a20.48 20.48 0 0 1 0 40.96h-40.96a20.48 20.48 0 0 1 0-40.96z m-80.691-153.6l29.491-29.082a20.48 20.48 0 0 1 28.877 28.877l-28.877 29.082a20.48 20.48 0 0 1-28.877-28.877z m36.25 311.091l28.876 28.877a20.48 20.48 0 1 1-28.877 28.877l-28.876-28.877a20.48 20.48 0 1 1 28.876-28.877z"
|
||||
p-id="1809"></path>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
const prop = defineProps({
|
||||
color: '#469DE9'
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/** .border设置循环旋转动画效果 */
|
||||
.border {
|
||||
animation: rotate 3s linear infinite;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<div class="th-container">
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="47px" height="65px"
|
||||
xmlns="http://www.w3.org/2000/svg" class="svg1">
|
||||
<g transform="matrix(1 0 0 1 -61 -136 )">
|
||||
<path
|
||||
d="M 35.93451184846136 52.713638939642145 C 36.12334271529104 53.44934915784611 36.689835245706114 53.81720430107527 37.25632784619514 53.81720430107527 L 37.44515871302481 53.81720430107527 C 42.73242270395993 52.89756651125672 46.69787062708731 47.93152235068045 46.69787062708731 42.04584040028562 C 46.69787062708731 41.31013018208166 46.13137802659829 40.758347467237904 45.37605462935354 40.758347467237904 C 44.62073123210878 40.758347467237904 44.05423863161976 41.31013018208166 44.05423863161976 42.04584040028562 C 44.05423863161976 46.64402941763272 41.032944972566796 50.50650821677588 37.06749697936546 51.24221843497984 C 36.31217358212071 51.42614600659442 35.93451184846136 51.97792865318382 35.93451184846136 52.713638939642145 Z M 30.458417060770515 50.138653073546706 C 30.269586193940842 45.54046405619959 28.00361593213264 41.31013018208166 24 38.55121674437164 L 24 8.571024345808132 C 24.226998805760974 3.972835328461022 20.450381679389313 0.29428410093245916 15.729610288943224 0.29428410093245916 C 11.00883889849714 0.29428410093245916 7.232221772125477 3.972835328461021 8 8.571024345808132 L 8 37.815506526167674 C 2.889112115338741 40.574419963877695 0.24548011987118343 45.172608981224805 0.24548011987118343 50.138653073546706 C 0.24548011987118343 58.23146574680779 7.043390905295801 64.85285791540657 15.351948555283874 64.85285798366095 C 23.66050620527195 64.85285805191532 30.45841699069657 58.231465815062165 30.458417060770515 50.138653073546706 Z M 27.62595419847327 50.138653073546706 C 27.62595419847327 56.94397281376008 22.149859410782433 62.27787211756552 15.163117688454198 62.27787211756552 C 8.365206903029577 62.27787211756552 2.700281178435113 56.760045310399875 2.7002812485090626 50.13865307354671 C 2.7002812485090626 45.724391627814185 5.155082377146944 41.677985257056456 9.12053030027433 39.65478210580477 L 9.309361167104004 39.47085453419019 L 9.498192033933682 39.2869269625756 C 9.498192033933682 39.2869269625756 9.498192033933682 39.10299939096102 9.687022900763356 39.10299945921538 C 9.687022900763356 39.10299945921538 9.687022900763356 38.9190718876008 9.875853767593034 38.9190718876008 L 10 38.73514431598622 L 10 8.571024345808132 C 9.875853767593034 5.44425583312332 12.519485763060587 2.8692699670278903 15.729610288943224 2.8692699670278903 C 18.939734814825854 2.8692699670278903 21.583366810293413 5.44425583312332 21.583366810293413 8.571024345808132 L 21.583366810293413 12.801358219926076 L 17.051426286677 12.801358219926076 C 16.296102889432248 12.801358219926076 15.729610288943224 13.353140934769828 15.729610288943224 14.08885115297379 C 15.729610288943224 14.824561371177756 16.296102889432248 15.376344086021506 17.051426286677 15.376344086021506 L 21.583366810293413 15.376344086021506 L 21.583366810293413 21.26202603641633 L 17.051426286677 21.26202603641633 C 16.296102889432248 21.26202603641633 15.729610288943224 21.81380875126008 15.729610288943224 22.549518969464046 C 15.729610288943224 23.285229187668012 16.296102889432248 23.83701190251176 17.051426286677 23.83701190251176 L 21.583366810293413 23.83701190251176 L 21.583366810293413 29.170911138062834 L 17.051426286677 29.170911138062834 C 16.296102889432248 29.170911138062834 15.729610288943224 29.722693852906584 15.729610288943224 30.458404071110547 C 15.729610288943224 31.194114289314516 16.296102889432248 31.745897004158266 17.051426286677 31.745897004158266 L 21.583366810293413 31.745897004158266 L 21.583366810293413 38.73514431598622 C 21.394535943463737 39.10299945921538 21.583366810293413 39.65478210580477 21.96102854395276 39.83870967741935 L 22.149859410782437 40.022637249033934 C 25.548814803494746 42.2297679719002 27.62595419847327 46.09224677104336 27.62595419847327 50.138653073546706 Z "
|
||||
fill-rule="nonzero" fill="#80ffff" stroke="none" transform="matrix(1 0 0 1 61 136 )" />
|
||||
</g>
|
||||
</svg>
|
||||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="27px" height="59px"
|
||||
xmlns="http://www.w3.org/2000/svg" class="svg2">
|
||||
<g transform="matrix(1 0 0 1 -89 -139 )">
|
||||
<path
|
||||
d="M 26.7347368125 38.145126100221894 C 27.11368420312499 34.4702584469767 26.7347368125 32.44908126155695 25.787368406250007 29.876673965652735 C 25.597894710937503 29.876673965652735 25.597894710937503 29.876673965652735 25.787368406250007 29.876673965652735 L 12.524210507812501 3.233883496671594 C 11.576842101562496 1.3964497041420094 9.871578914062505 0.2939894149870526 7.976842101562506 0.2939894149870526 C 6.082105289062507 0.2939894149870526 4.376842101562501 1.396449704142008 3.429473695312507 3.233883496671594 L 0.2084210859375048 9.664901906897187 C -0.17052630468748817 10.216132085567674 0.2084210859375048 11.134848981832468 0.7768421015625062 11.31859230653661 C 1.345263187500006 11.686079092316938 2.2926315937500057 11.31859230653661 2.482105289062502 10.767362196052142 L 5.703157898437499 4.336343785826549 C 6.082105289062497 3.417626889561756 6.840000000000001 2.866396710891267 7.787368406249999 2.866396779077287 C 8.734736812500005 2.866396847263309 9.49263159375 3.4176269577477765 9.871578914062505 4.336343785826549 L 22.9452631875 30.97913425480769 C 23.892631593750007 33.1840548331176 24.271578984374997 35.021488693833206 24.271578914062495 37.96138277551775 C 24.271578914062495 47.88352537791235 16.882105218750006 55.96823425596338 7.787368406249999 55.968234187777355 L 6.082105289062507 55.968234187777355 C 5.324210578125005 55.968234187777355 4.755789492187504 56.335720973557684 4.566315796875003 57.07069447693231 C 4.566315796875003 57.80566798030694 4.945263187500001 58.35689815897744 5.703157898437499 58.5406415518676 C 6.271578984374998 58.5406415518676 7.029473695312502 58.724384944757766 7.5978947109374975 58.724384944757766 C 18.208421015625 58.724384944757766 26.7347368125 49.53721584573779 26.7347368125 38.145126100221894 Z "
|
||||
fill-rule="nonzero" fill="#80ffff" stroke="none" transform="matrix(1 0 0 1 89 139 )" />
|
||||
</g>
|
||||
</svg>
|
||||
<img :src="u829" width="100" height="50" alt="" class="img1">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import u829 from './../image/u829.png'
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.th-container {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
position: relative;
|
||||
.img1 {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
.svg1 {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
left: 23px;
|
||||
}
|
||||
.svg2 {
|
||||
position: absolute;
|
||||
top: 9px;
|
||||
left: 49px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
BIN
src/views/screen/R_D_Environment1/image/u796.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
src/views/screen/R_D_Environment1/image/u797.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
src/views/screen/R_D_Environment1/image/u798.png
Normal file
After Width: | Height: | Size: 33 KiB |