@things-factory/scene-visualizer 6.0.1 → 6.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/index.js +2 -6
- package/src/mesh.js +1 -7
- package/src/object3d.js +1 -7
- package/src/rack-table-cell.js +4 -4
- package/src/visualizer.js +4 -49
- package/assets/canvasicon-cj-truck-small.png +0 -0
- package/assets/canvasicon-cj-truck.png +0 -0
- package/assets/canvasicon-conveyor.png +0 -0
- package/assets/canvasicon-inspection-desk.png +0 -0
- package/assets/canvasicon-pallet-jockey.png +0 -0
- package/assets/canvasicon-pallet.png +0 -0
- package/assets/canvasicon-worker-1.png +0 -0
- package/assets/canvasicon-worker-2.png +0 -0
- package/assets/canvasicon-worker-3.png +0 -0
- package/assets/cj-truck-small.png +0 -0
- package/assets/cj-truck.png +0 -0
- package/assets/glTF_100px.png +0 -0
- package/assets/inspection-desk.png +0 -0
- package/assets/pallet-jockey.png +0 -0
- package/assets/pallet.png +0 -0
- package/assets/pallet_symbol.png +0 -0
- package/assets/roller-conveyor.png +0 -0
- package/assets/worker-2.png +0 -0
- package/assets/worker-3.png +0 -0
- package/assets/worker.png +0 -0
- package/src/cone.js +0 -88
- package/src/door.js +0 -52
- package/src/floor.js +0 -162
- package/src/humidity-sensor.js +0 -267
- package/src/loaders/ColladaLoader.js +0 -3166
- package/src/loaders/TGALoader.js +0 -461
- package/src/mixins/visible.js +0 -185
- package/src/path.js +0 -167
- package/src/video-player-360.js +0 -460
- package/src/webgl-3d-viewer.js +0 -349
- package/templates/pallet-jockey.js +0 -20
- package/templates/roller-conveyor.js +0 -20
package/src/humidity-sensor.js
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import { Component, Ellipse } from '@hatiolab/things-scene'
|
|
5
|
-
import * as THREE from 'three'
|
|
6
|
-
import Component3d from './component-3d'
|
|
7
|
-
import Object3D from './object3d'
|
|
8
|
-
|
|
9
|
-
const STATUS_COLORS = ['#6666ff', '#ccccff', '#ffcccc', '#cc3300']
|
|
10
|
-
|
|
11
|
-
const NATURE = {
|
|
12
|
-
mutable: false,
|
|
13
|
-
resizable: true,
|
|
14
|
-
rotatable: true,
|
|
15
|
-
properties: [
|
|
16
|
-
{
|
|
17
|
-
type: 'number',
|
|
18
|
-
label: 'z-pos',
|
|
19
|
-
name: 'zPos',
|
|
20
|
-
property: 'zPos'
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
type: 'string',
|
|
24
|
-
label: 'location',
|
|
25
|
-
name: 'location',
|
|
26
|
-
property: 'location'
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default class HumiditySensor extends Object3D {
|
|
32
|
-
constructor(model, canvasSize, visualizer) {
|
|
33
|
-
super(model, canvasSize, visualizer)
|
|
34
|
-
this.userData.temperature = model.humidity ? model.humidity[0] : 0
|
|
35
|
-
this.userData.humidity = model.humidity ? model.humidity[1] : 0
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
get cx() {
|
|
39
|
-
var { cx = 0 } = this.model
|
|
40
|
-
if (!this._cx) this._cx = cx - this._canvasSize.width / 2
|
|
41
|
-
|
|
42
|
-
return this._cx
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
get cy() {
|
|
46
|
-
var { cy = 0 } = this.model
|
|
47
|
-
if (!this._cy) this._cy = cy - this._canvasSize.height / 2
|
|
48
|
-
|
|
49
|
-
return this._cy
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
get cz() {
|
|
53
|
-
var { zPos = 0, rx = 0 } = this.model
|
|
54
|
-
|
|
55
|
-
if (!this._cz) this._cz = zPos + rx
|
|
56
|
-
|
|
57
|
-
return this._cz
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async createObject(canvasSize) {
|
|
61
|
-
var { depth, cx, cy, rx, ry, rotation = 0, location } = this.model
|
|
62
|
-
|
|
63
|
-
this.type = 'humidity-sensor'
|
|
64
|
-
|
|
65
|
-
if (location) this.name = location
|
|
66
|
-
|
|
67
|
-
for (var i = 0; i < 3; i++) {
|
|
68
|
-
let mesh = this.createSensor(rx * (1 + 0.5 * i), ry * (1 + 0.5 * i), depth * (1 + 0.5 * i), i)
|
|
69
|
-
mesh.material.opacity = 0.5 - i * 0.15
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (this._visualizer._heatmap) {
|
|
73
|
-
this._visualizer._heatmap.addData({
|
|
74
|
-
x: Math.floor(cx),
|
|
75
|
-
y: Math.floor(cy),
|
|
76
|
-
value: this.userData.temperature
|
|
77
|
-
})
|
|
78
|
-
this._visualizer.updateHeatmapTexture()
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// var self = this
|
|
82
|
-
//
|
|
83
|
-
// setInterval(function(){
|
|
84
|
-
//
|
|
85
|
-
// var data = self._visualizer._heatmap._store._data
|
|
86
|
-
//
|
|
87
|
-
// // var value = self._visualizer._heatmap.getValueAt({x:model.cx, y: model.cy})
|
|
88
|
-
// var value = data[model.cx][model.cy]
|
|
89
|
-
//
|
|
90
|
-
// self._visualizer._heatmap.addData({
|
|
91
|
-
// x: model.cx,
|
|
92
|
-
// y: model.cy,
|
|
93
|
-
// // min: -100,
|
|
94
|
-
// // value: -1
|
|
95
|
-
// value: (Math.random() * 40 - 10) - value
|
|
96
|
-
// })
|
|
97
|
-
// self._visualizer._heatmap.repaint()
|
|
98
|
-
//
|
|
99
|
-
// self._visualizer.render_threed()
|
|
100
|
-
// }, 1000)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
createSensor(w, h, d, i) {
|
|
104
|
-
var isFirst = i === 0
|
|
105
|
-
|
|
106
|
-
let geometry = new THREE.SphereBufferGeometry(w, 32, 32)
|
|
107
|
-
// let geometry = new THREE.SphereGeometry(w, d, h);
|
|
108
|
-
var material
|
|
109
|
-
if (isFirst) {
|
|
110
|
-
// var texture = new THREE.TextureLoader().load('./images/drop-34055_1280.png')
|
|
111
|
-
// texture.repeat.set(1,1)
|
|
112
|
-
// // texture.premultiplyAlpha = true
|
|
113
|
-
// material = new THREE.MeshStandardMaterial( { color : '#cc3300', side: THREE.FrontSide, wireframe: true, wireframeLinewidth : 1} );
|
|
114
|
-
material = new THREE.MeshStandardMaterial({ color: '#cc3300', side: THREE.FrontSide })
|
|
115
|
-
// material = new THREE.MeshStandardMaterial( { color : '#74e98a', side: THREE.FrontSide} );
|
|
116
|
-
} else {
|
|
117
|
-
material = new THREE.MeshStandardMaterial({
|
|
118
|
-
color: '#cc3300',
|
|
119
|
-
side: THREE.FrontSide,
|
|
120
|
-
wireframe: true,
|
|
121
|
-
wireframeLinewidth: 1
|
|
122
|
-
})
|
|
123
|
-
// material = new THREE.MeshStandardMaterial( { color : '#74e98a', side: THREE.FrontSide, wireframe: true, wireframeLinewidth : 1} );
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// let material = new THREE.MeshStandardMaterial( { color : '#ff3300', side: THREE.DoubleSide, wireframe: true, wireframeLinewidth : 1} );
|
|
127
|
-
|
|
128
|
-
var mesh = new THREE.Mesh(geometry, material)
|
|
129
|
-
mesh.material.transparent = true
|
|
130
|
-
|
|
131
|
-
if (isFirst) mesh.onmousemove = this.onmousemove
|
|
132
|
-
else mesh.raycast = function() {}
|
|
133
|
-
|
|
134
|
-
this.add(mesh)
|
|
135
|
-
|
|
136
|
-
return mesh
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
onUserDataChanged() {
|
|
140
|
-
super.onUserDataChanged()
|
|
141
|
-
|
|
142
|
-
var { cx, cy } = this._model
|
|
143
|
-
cx = Math.floor(cx)
|
|
144
|
-
cy = Math.floor(cy)
|
|
145
|
-
|
|
146
|
-
var temperature = this.userData.temperature
|
|
147
|
-
|
|
148
|
-
for (let sphere of this.children) {
|
|
149
|
-
var colorIndex = 0
|
|
150
|
-
if (temperature < 0) {
|
|
151
|
-
colorIndex = 0
|
|
152
|
-
} else if (temperature < 10) {
|
|
153
|
-
colorIndex = 1
|
|
154
|
-
} else if (temperature < 20) {
|
|
155
|
-
colorIndex = 2
|
|
156
|
-
} else {
|
|
157
|
-
colorIndex = 3
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
sphere.material.color.set(STATUS_COLORS[colorIndex])
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (!this._visualizer._heatmap) return
|
|
164
|
-
|
|
165
|
-
var data = this._visualizer._heatmap._store._data
|
|
166
|
-
|
|
167
|
-
// var value = self._visualizer._heatmap.getValueAt({x:model.cx, y: model.cy})
|
|
168
|
-
var value = data[cx][cy]
|
|
169
|
-
|
|
170
|
-
this._visualizer._heatmap.addData({
|
|
171
|
-
x: cx,
|
|
172
|
-
y: cy,
|
|
173
|
-
// min: -100,
|
|
174
|
-
// value: -1
|
|
175
|
-
value: temperature - value
|
|
176
|
-
})
|
|
177
|
-
this._visualizer._heatmap.repaint()
|
|
178
|
-
|
|
179
|
-
// this._visualizer.render_threed()
|
|
180
|
-
this._visualizer.updateHeatmapTexture()
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
onmousemove(e, visualizer) {
|
|
184
|
-
var tooltip = visualizer.tooltip || visualizer._scene2d.getObjectByName('tooltip')
|
|
185
|
-
|
|
186
|
-
if (tooltip) {
|
|
187
|
-
visualizer._scene2d.remove(tooltip)
|
|
188
|
-
visualizer.tooltip = null
|
|
189
|
-
visualizer.render_threed()
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
if (!this.parent.visible) return
|
|
193
|
-
|
|
194
|
-
if (!this.parent.userData) this.parent.userData = {}
|
|
195
|
-
|
|
196
|
-
var tooltipText = ''
|
|
197
|
-
|
|
198
|
-
for (let key in this.parent.userData) {
|
|
199
|
-
if (this.parent.userData[key]) tooltipText += key + ': ' + this.parent.userData[key] + '\n'
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// tooltipText = 'loc : ' + loc
|
|
203
|
-
|
|
204
|
-
// currentLabel.lookAt( camera.position );
|
|
205
|
-
|
|
206
|
-
if (tooltipText.length > 0) {
|
|
207
|
-
tooltip = visualizer.tooltip = visualizer.makeTextSprite(tooltipText)
|
|
208
|
-
|
|
209
|
-
var vector = new THREE.Vector3()
|
|
210
|
-
var vector2 = tooltip.getWorldScale().clone()
|
|
211
|
-
|
|
212
|
-
var widthMultiplier = vector2.x / visualizer.model.width
|
|
213
|
-
var heightMultiplier = vector2.y / visualizer.model.height
|
|
214
|
-
|
|
215
|
-
vector.set(visualizer._mouse.x, visualizer._mouse.y, 0.5)
|
|
216
|
-
vector2.normalize()
|
|
217
|
-
|
|
218
|
-
vector2.x = (vector2.x / 2) * widthMultiplier
|
|
219
|
-
vector2.y = (-vector2.y / 2) * heightMultiplier
|
|
220
|
-
vector2.z = 0
|
|
221
|
-
|
|
222
|
-
vector.add(vector2)
|
|
223
|
-
|
|
224
|
-
vector.unproject(visualizer._2dCamera)
|
|
225
|
-
tooltip.position.set(vector.x, vector.y, vector.z)
|
|
226
|
-
tooltip.name = 'tooltip'
|
|
227
|
-
|
|
228
|
-
tooltip.scale.x = tooltip.scale.x * widthMultiplier
|
|
229
|
-
tooltip.scale.y = tooltip.scale.y * heightMultiplier
|
|
230
|
-
|
|
231
|
-
// tooltip.position.set(this.getWorldPosition().x, this.getWorldPosition().y, this.getWorldPosition().z)
|
|
232
|
-
// visualizer._scene3d.add(tooltip)
|
|
233
|
-
|
|
234
|
-
visualizer._scene2d.add(tooltip)
|
|
235
|
-
visualizer._renderer && visualizer._renderer.render(visualizer._scene2d, visualizer._2dCamera)
|
|
236
|
-
visualizer.invalidate()
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
export class Sensor extends Ellipse {
|
|
242
|
-
is3dish() {
|
|
243
|
-
return true
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
_draw(context) {
|
|
247
|
-
var { left, top, width, height } = this.bounds
|
|
248
|
-
|
|
249
|
-
context.beginPath()
|
|
250
|
-
context.rect(left, top, width, height)
|
|
251
|
-
|
|
252
|
-
this.model.fillStyle = {
|
|
253
|
-
type: 'pattern',
|
|
254
|
-
fitPattern: true,
|
|
255
|
-
image:
|
|
256
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABBCAYAAACTiffeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0E1QkUzRTRDMDcxMUU2QkMyRDk3MzlGN0EzMTI2NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0E1QkUzRjRDMDcxMUU2QkMyRDk3MzlGN0EzMTI2NSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjJFQ0Q4QzE5NEI1MjExRTZCQzJEOTczOUY3QTMxMjY1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJFQ0Q4QzFBNEI1MjExRTZCQzJEOTczOUY3QTMxMjY1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+tgU1kQAAB4pJREFU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'
|
|
257
|
-
}
|
|
258
|
-
this.drawFill(context)
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
get nature() {
|
|
262
|
-
return NATURE
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
Component.register('humidity-sensor', Sensor)
|
|
267
|
-
Component3d.register('humidity-sensor', HumiditySensor)
|