提交 3b6a4a58 编写于 作者: W wq1234wq

设备删除提示

上级 c5b6bcd9
...@@ -226,7 +226,7 @@ namespace IoTSharp.TaskAction ...@@ -226,7 +226,7 @@ namespace IoTSharp.TaskAction
public string Url { get; set; } public string Url { get; set; }
public string BaseUrl { get; set; } public string BaseUrl { get; set; }
public string Method { get; set; } public string Method { get; set; }
public string Passwoid { get; set; } public string Password { get; set; }
public string UserName { get; set; } public string UserName { get; set; }
public string Token { get; set; } public string Token { get; set; }
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
"ngx-ueditor": "^12.0.0", "ngx-ueditor": "^12.0.0",
"rxjs": "~6.6.0", "rxjs": "~6.6.0",
"screenfull": "^5.1.0", "screenfull": "^5.1.0",
"three": "^0.134.0", "three": "^0.138.3",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.11.4" "zone.js": "~0.11.4"
}, },
......
...@@ -157,9 +157,16 @@ export class DevicelistComponent implements OnInit, OnDestroy { ...@@ -157,9 +157,16 @@ export class DevicelistComponent implements OnInit, OnDestroy {
}, },
{ {
acl: 110, acl: 110,
text: '删除', text: '删除', pop: {
title: '确认删除设备?',
okType: 'danger',
icon: 'warning',
},
click: (item: any) => { click: (item: any) => {
this.delete(item.id);
this.delete(item.id);
} }
} }
] ]
......
import * as THREE from 'three'; import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
import { ElementRef, Injectable, NgZone, OnDestroy } from '@angular/core'; import { ElementRef, Injectable, NgZone, OnDestroy } from '@angular/core';
import { _HttpClient } from '@delon/theme';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class DeviceSceneService implements OnDestroy { export class DeviceSceneService implements OnDestroy {
private canvas!: HTMLCanvasElement; private canvas!: HTMLCanvasElement;
...@@ -9,12 +15,22 @@ export class DeviceSceneService implements OnDestroy { ...@@ -9,12 +15,22 @@ export class DeviceSceneService implements OnDestroy {
private light!: THREE.AmbientLight; private light!: THREE.AmbientLight;
private cube!: THREE.Mesh; private cube!: THREE.Mesh;
debugObject = { clearColor: '', portalColorStart: '', portalColorEnd: '' };
private frameId: number = 1; private frameId: number = 1;
sizes = {
width: window.innerWidth,
height: window.innerHeight
};
private marginleft = 200; private marginleft = 200;
private margintop = 64; private margintop = 64;
public constructor(private ngZone: NgZone) {}
fragment = '';
public constructor(private ngZone: NgZone, private http: _HttpClient) {
http.get('assets/fragment.glsl').subscribe(next => {
console.log(next);
this.fragment = next;
});
}
public ngOnDestroy(): void { public ngOnDestroy(): void {
if (this.frameId != null) { if (this.frameId != null) {
...@@ -23,40 +39,67 @@ export class DeviceSceneService implements OnDestroy { ...@@ -23,40 +39,67 @@ export class DeviceSceneService implements OnDestroy {
} }
public createScene(canvas: ElementRef<HTMLCanvasElement>): void { public createScene(canvas: ElementRef<HTMLCanvasElement>): void {
// The first step is to get the reference of the canvas element from our HTML document
this.canvas = canvas.nativeElement; this.canvas = canvas.nativeElement;
this.renderer = new THREE.WebGLRenderer({ this.renderer = new THREE.WebGLRenderer({
canvas: this.canvas, canvas: this.canvas,
alpha: true, // transparent background antialias: true
antialias: true, // smooth edges
}); });
this.renderer.setSize(window.innerWidth, window.innerHeight); this.renderer.setSize(window.innerWidth, window.innerHeight);
// create the scene // create the scene
this.scene = new THREE.Scene(); this.scene = new THREE.Scene();
const textureLoader = new THREE.TextureLoader();
this.camera = new THREE.PerspectiveCamera(150, window.innerWidth / window.innerHeight, 0.1, 1000); const bakedTexture = textureLoader.load('./assets/bg.jpg');
this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 100);
this.camera.position.z = 2; this.camera.position.z = 2;
this.camera.position.y = 2; this.camera.position.y = 2;
this.camera.position.x = 2; this.camera.position.x = 2;
this.scene.add(this.camera); this.scene.add(this.camera);
const controls = new OrbitControls(this.camera, this.canvas);
// soft white light controls.enableDamping = true;
this.light = new THREE.AmbientLight(0x404040);
this.light.position.z = 10;
this.scene.add(this.light);
const geometry = new THREE.BoxGeometry(1, 1, 1); const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ffff }); const material = new THREE.MeshBasicMaterial({ color: 0x00ffff });
this.cube = new THREE.Mesh(geometry, material); this.cube = new THREE.Mesh(geometry, material);
this.scene.add(this.cube); this.scene.add(this.cube);
const poleLightMaterial = new THREE.MeshBasicMaterial({ color: 0xffffe5 });
const clock = new THREE.Clock();
this.renderer.render(this.scene, this.camera); this.renderer.render(this.scene, this.camera);
const gltfLoader = new GLTFLoader();
const bakedMaterial = new THREE.MeshBasicMaterial({ map: bakedTexture });
const portalLightMaterial = new THREE.ShaderMaterial({
uniforms: {
uTime: { value: 0 },
uColorStart: { value: new THREE.Color(this.debugObject.portalColorStart) },
uColorEnd: { value: new THREE.Color(this.debugObject.portalColorEnd) }
},
vertexShader:
'varying vec2 vUv; void main() { vec4 modelPosition = modelMatrix * vec4(position, 1.0); vec4 viewPosition = viewMatrix * modelPosition; vec4 projectionPosition = projectionMatrix * viewPosition; gl_Position = projectionPosition; vUv = uv;}',
fragmentShader:
'uniform float uTime; uniform vec3 uColorStart; uniform vec3 uColorEnd; varying vec2 vUv; vec4 permute(vec4 x){ return mod(((x*34.0)+1.0)*x, 289.0); } vec4 taylorInvSqrt(vec4 r){ return 1.79284291400159 - 0.85373472095314 * r; } vec3 fade(vec3 t) { return t*t*t*(t*(t*6.0-15.0)+10.0); } float cnoise(vec3 P) { vec3 Pi0 = floor(P); vec3 Pi1 = Pi0 + vec3(1.0); Pi0 = mod(Pi0, 289.0); Pi1 = mod(Pi1, 289.0); vec3 Pf0 = fract(P); vec3 Pf1 = Pf0 - vec3(1.0); vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); vec4 iy = vec4(Pi0.yy, Pi1.yy); vec4 iz0 = Pi0.zzzz; vec4 iz1 = Pi1.zzzz; vec4 ixy = permute(permute(ix) + iy); vec4 ixy0 = permute(ixy + iz0); vec4 ixy1 = permute(ixy + iz1); vec4 gx0 = ixy0 / 7.0; vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5; gx0 = fract(gx0); vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); vec4 sz0 = step(gz0, vec4(0.0)); gx0 -= sz0 * (step(0.0, gx0) - 0.5); gy0 -= sz0 * (step(0.0, gy0) - 0.5); vec4 gx1 = ixy1 / 7.0; vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5; gx1 = fract(gx1); vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); vec4 sz1 = step(gz1, vec4(0.0)); gx1 -= sz1 * (step(0.0, gx1) - 0.5); gy1 -= sz1 * (step(0.0, gy1) - 0.5); vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); g000 *= norm0.x; g010 *= norm0.y; g100 *= norm0.z; g110 *= norm0.w; vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); g001 *= norm1.x; g011 *= norm1.y; g101 *= norm1.z; g111 *= norm1.w; float n000 = dot(g000, Pf0); float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); float n111 = dot(g111, Pf1); vec3 fade_xyz = fade(Pf0); vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); return 2.2 * n_xyz; } void main() { vec2 displacedUv = vUv + cnoise(vec3(vUv * 5.0, uTime * 0.1)); float strength = cnoise(vec3(displacedUv * 5.0, uTime * 0.2)); float outerGlow = distance(vUv, vec2(0.5)) * 5.0 - 1.4; strength += outerGlow; strength += step(- 0.2, strength) * 0.8; vec3 color = mix(uColorStart, uColorEnd, strength); gl_FragColor = vec4(color, 1.0); }'
});
gltfLoader.load('./assets/portal.gltf', gltf => {
this.scene.add(gltf.scene);
const bakedMesh = gltf.scene.children.find(child => child.name === 'baked');
const portalLightMesh = gltf.scene.children.find(child => child.name === 'portalLight');
const poleLightAMesh = gltf.scene.children.find(child => child.name === 'poleLightA');
const poleLightBMesh = gltf.scene.children.find(child => child.name === 'poleLightB');
bakedMesh['material'] = bakedMaterial;
portalLightMesh['material'] = portalLightMaterial;
poleLightAMesh['material'] = poleLightMaterial;
poleLightBMesh['material'] = poleLightMaterial;
});
var tick = () => {
const elapsedTime = clock.getElapsedTime();
controls.update();
this.renderer.render(this.scene, this.camera);
window.requestAnimationFrame(tick);
};
tick();
} }
public animate(): void { public animate(): void {
// We have to run this outside angular zones,
// because it could trigger heavy changeDetection cycles.
this.ngZone.runOutsideAngular(() => { this.ngZone.runOutsideAngular(() => {
if (document.readyState !== 'loading') { if (document.readyState !== 'loading') {
this.render(); this.render();
...@@ -65,7 +108,6 @@ export class DeviceSceneService implements OnDestroy { ...@@ -65,7 +108,6 @@ export class DeviceSceneService implements OnDestroy {
this.render(); this.render();
}); });
} }
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
this.resize(); this.resize();
}); });
...@@ -83,12 +125,9 @@ export class DeviceSceneService implements OnDestroy { ...@@ -83,12 +125,9 @@ export class DeviceSceneService implements OnDestroy {
} }
public resize(): void { public resize(): void {
const width = window.innerWidth; this.camera.aspect = this.sizes.width / this.sizes.height;
const height = window.innerHeight;
this.camera.aspect = width / height;
this.camera.updateProjectionMatrix(); this.camera.updateProjectionMatrix();
this.renderer.setSize(width, height); this.renderer.setSize(this.sizes.width, this.sizes.height);
} }
} }
<div class="modal-header"> <div class="modal-header">
<div class="modal-title">Custom component</div> <div class="modal-title">获取Token</div>
</div> </div>
<p>Token:{{ record.identityId }}</p> <p>Token:{{ record.identityId }}</p>
<div class="modal-footer"> <div class="modal-footer">
......
# 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)
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册