hart-estate-widget 0.0.10 → 0.0.11
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/build/api/index.js +24 -0
- package/build/assets/img/bricks.jpeg +0 -0
- package/build/assets/img/door-texture.jpeg +0 -0
- package/build/assets/img/door.jpeg +0 -0
- package/build/assets/img/exterior-wall-texture.jpeg +0 -0
- package/build/assets/img/floor-bathroom.jpg +0 -0
- package/build/assets/img/floor-dark.png +0 -0
- package/build/assets/img/floor-white.png +0 -0
- package/build/assets/img/floor.jpg +0 -0
- package/build/assets/img/ground.svg +9 -0
- package/build/assets/img/wall-texture.jpg +0 -0
- package/build/assets/sass/animation.sass +5 -0
- package/build/assets/sass/components/panorama.sass +2 -35
- package/build/assets/sass/components/tabs.sass +66 -0
- package/build/components/ModelTab.js +90 -85
- package/build/components/PanoramaTab.js +2 -2
- package/build/index.css +1 -1
- package/build/index.css.map +1 -1
- package/build/store/houseStore.js +675 -0
- package/build/store/modelStore.js +196 -0
- package/build/utils/csg/csg-lib.js +387 -0
- package/build/utils/csg/csg-worker.js +94 -0
- package/build/utils/csg/three-csg.js +280 -0
- package/build/utils/modelHelpers.js +79 -35
- package/package.json +1 -1
@@ -0,0 +1,280 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
4
|
+
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
|
10
|
+
require("core-js/modules/es.array-buffer.slice.js");
|
11
|
+
|
12
|
+
require("core-js/modules/es.typed-array.float32-array.js");
|
13
|
+
|
14
|
+
require("core-js/modules/es.typed-array.set.js");
|
15
|
+
|
16
|
+
require("core-js/modules/es.typed-array.sort.js");
|
17
|
+
|
18
|
+
require("core-js/modules/es.typed-array.to-locale-string.js");
|
19
|
+
|
20
|
+
var _react = _interopRequireDefault(require("react"));
|
21
|
+
|
22
|
+
var THREE = _interopRequireWildcard(require("three"));
|
23
|
+
|
24
|
+
var _csgLib = require("./csg-lib.js");
|
25
|
+
|
26
|
+
require("./csg-worker.js");
|
27
|
+
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
29
|
+
|
30
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
31
|
+
|
32
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
33
|
+
|
34
|
+
let {
|
35
|
+
Geometry,
|
36
|
+
BufferGeometry,
|
37
|
+
Vector3,
|
38
|
+
Vector2
|
39
|
+
} = THREE;
|
40
|
+
|
41
|
+
_csgLib.CSG.fromGeometry = function (geom, objectIndex) {
|
42
|
+
let polys = [];
|
43
|
+
|
44
|
+
if (geom.isGeometry) {
|
45
|
+
let fs = geom.faces;
|
46
|
+
let vs = geom.vertices;
|
47
|
+
let fm = ['a', 'b', 'c'];
|
48
|
+
|
49
|
+
for (let i = 0; i < fs.length; i++) {
|
50
|
+
let f = fs[i];
|
51
|
+
let vertices = [];
|
52
|
+
|
53
|
+
for (let j = 0; j < 3; j++) vertices.push(new _csgLib.Vertex(vs[f[fm[j]]], f.vertexNormals[j], geom.faceVertexUvs[0][i][j]));
|
54
|
+
|
55
|
+
polys.push(new _csgLib.Polygon(vertices, objectIndex));
|
56
|
+
}
|
57
|
+
} else if (geom.isBufferGeometry) {
|
58
|
+
let vertices, normals, uvs;
|
59
|
+
let posattr = geom.attributes.position;
|
60
|
+
let normalattr = geom.attributes.normal;
|
61
|
+
let uvattr = geom.attributes.uv;
|
62
|
+
let colorattr = geom.attributes.color;
|
63
|
+
let index;
|
64
|
+
if (geom.index) index = geom.index.array;else {
|
65
|
+
index = new Array(posattr.array.length / posattr.itemSize | 0);
|
66
|
+
|
67
|
+
for (let i = 0; i < index.length; i++) index[i] = i;
|
68
|
+
}
|
69
|
+
let triCount = index.length / 3 | 0;
|
70
|
+
polys = new Array(triCount);
|
71
|
+
|
72
|
+
for (let i = 0, pli = 0, l = index.length; i < l; i += 3, pli++) {
|
73
|
+
let vertices = new Array(3);
|
74
|
+
|
75
|
+
for (let j = 0; j < 3; j++) {
|
76
|
+
let vi = index[i + j];
|
77
|
+
let vp = vi * 3;
|
78
|
+
let vt = vi * 2;
|
79
|
+
let x = posattr.array[vp];
|
80
|
+
let y = posattr.array[vp + 1];
|
81
|
+
let z = posattr.array[vp + 2];
|
82
|
+
let nx = normalattr.array[vp];
|
83
|
+
let ny = normalattr.array[vp + 1];
|
84
|
+
let nz = normalattr.array[vp + 2]; //let u = uvattr.array[vt]
|
85
|
+
//let v = uvattr.array[vt + 1]
|
86
|
+
|
87
|
+
vertices[j] = new _csgLib.Vertex({
|
88
|
+
x,
|
89
|
+
y,
|
90
|
+
z
|
91
|
+
}, {
|
92
|
+
x: nx,
|
93
|
+
y: ny,
|
94
|
+
z: nz
|
95
|
+
}, uvattr && {
|
96
|
+
x: uvattr.array[vt],
|
97
|
+
y: uvattr.array[vt + 1],
|
98
|
+
z: 0
|
99
|
+
}, colorattr && {
|
100
|
+
x: colorattr.array[vt],
|
101
|
+
y: colorattr.array[vt + 1],
|
102
|
+
z: colorattr.array[vt + 2]
|
103
|
+
});
|
104
|
+
}
|
105
|
+
|
106
|
+
polys[pli] = new _csgLib.Polygon(vertices, objectIndex);
|
107
|
+
}
|
108
|
+
} else console.error("Unsupported CSG input type:" + geom.type);
|
109
|
+
|
110
|
+
return _csgLib.CSG.fromPolygons(polys);
|
111
|
+
};
|
112
|
+
|
113
|
+
let ttvv0 = new THREE.Vector3();
|
114
|
+
let tmpm3 = new THREE.Matrix3();
|
115
|
+
|
116
|
+
_csgLib.CSG.fromMesh = function (mesh, objectIndex) {
|
117
|
+
let csg = _csgLib.CSG.fromGeometry(mesh.geometry, objectIndex);
|
118
|
+
|
119
|
+
tmpm3.getNormalMatrix(mesh.matrix);
|
120
|
+
|
121
|
+
for (let i = 0; i < csg.polygons.length; i++) {
|
122
|
+
let p = csg.polygons[i];
|
123
|
+
|
124
|
+
for (let j = 0; j < p.vertices.length; j++) {
|
125
|
+
let v = p.vertices[j];
|
126
|
+
v.pos.copy(ttvv0.copy(v.pos).applyMatrix4(mesh.matrix));
|
127
|
+
v.normal.copy(ttvv0.copy(v.normal).applyMatrix3(tmpm3));
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
return csg;
|
132
|
+
};
|
133
|
+
|
134
|
+
let nbuf3 = ct => {
|
135
|
+
return {
|
136
|
+
top: 0,
|
137
|
+
array: new Float32Array(ct),
|
138
|
+
write: function write(v) {
|
139
|
+
this.array[this.top++] = v.x;
|
140
|
+
this.array[this.top++] = v.y;
|
141
|
+
this.array[this.top++] = v.z;
|
142
|
+
}
|
143
|
+
};
|
144
|
+
};
|
145
|
+
|
146
|
+
let nbuf2 = ct => {
|
147
|
+
return {
|
148
|
+
top: 0,
|
149
|
+
array: new Float32Array(ct),
|
150
|
+
write: function write(v) {
|
151
|
+
this.array[this.top++] = v.x;
|
152
|
+
this.array[this.top++] = v.y;
|
153
|
+
}
|
154
|
+
};
|
155
|
+
};
|
156
|
+
|
157
|
+
_csgLib.CSG.toGeometry = function (csg) {
|
158
|
+
let buffered = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
159
|
+
let ps = csg.polygons;
|
160
|
+
let geom;
|
161
|
+
let g2;
|
162
|
+
|
163
|
+
if (!buffered) //Old geometry path...
|
164
|
+
{
|
165
|
+
geom = new Geometry();
|
166
|
+
let vs = geom.vertices;
|
167
|
+
let fvuv = geom.faceVertexUvs[0];
|
168
|
+
|
169
|
+
for (let i = 0; i < ps.length; i++) {
|
170
|
+
let p = ps[i];
|
171
|
+
let pvs = p.vertices;
|
172
|
+
let v0 = vs.length;
|
173
|
+
let pvlen = pvs.length;
|
174
|
+
|
175
|
+
for (let j = 0; j < pvlen; j++) vs.push(new THREE.Vector3().copy(pvs[j].pos));
|
176
|
+
|
177
|
+
for (let j = 3; j <= pvlen; j++) {
|
178
|
+
let fc = new THREE.Face3();
|
179
|
+
let fuv = [];
|
180
|
+
fvuv.push(fuv);
|
181
|
+
let fnml = fc.vertexNormals;
|
182
|
+
fc.a = v0;
|
183
|
+
fc.b = v0 + j - 2;
|
184
|
+
fc.c = v0 + j - 1;
|
185
|
+
fnml.push(new THREE.Vector3().copy(pvs[0].normal));
|
186
|
+
fnml.push(new THREE.Vector3().copy(pvs[j - 2].normal));
|
187
|
+
fnml.push(new THREE.Vector3().copy(pvs[j - 1].normal));
|
188
|
+
fuv.push(new THREE.Vector3().copy(pvs[0].uv));
|
189
|
+
fuv.push(new THREE.Vector3().copy(pvs[j - 2].uv));
|
190
|
+
fuv.push(new THREE.Vector3().copy(pvs[j - 1].uv));
|
191
|
+
fc.normal = new THREE.Vector3().copy(p.plane.normal);
|
192
|
+
geom.faces.push(fc);
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
geom = new THREE.BufferGeometry().fromGeometry(geom);
|
197
|
+
geom.verticesNeedUpdate = geom.elementsNeedUpdate = geom.normalsNeedUpdate = true;
|
198
|
+
} else {
|
199
|
+
//BufferGeometry path
|
200
|
+
let triCount = 0;
|
201
|
+
ps.forEach(p => triCount += p.vertices.length - 2);
|
202
|
+
geom = new THREE.BufferGeometry();
|
203
|
+
let vertices = nbuf3(triCount * 3 * 3);
|
204
|
+
let normals = nbuf3(triCount * 3 * 3);
|
205
|
+
let uvs; // = nbuf2(triCount * 2 * 3)
|
206
|
+
|
207
|
+
let colors;
|
208
|
+
let grps = [];
|
209
|
+
ps.forEach(p => {
|
210
|
+
let pvs = p.vertices;
|
211
|
+
let pvlen = pvs.length;
|
212
|
+
|
213
|
+
if (p.shared !== undefined) {
|
214
|
+
if (!grps[p.shared]) grps[p.shared] = [];
|
215
|
+
}
|
216
|
+
|
217
|
+
if (pvlen) {
|
218
|
+
if (pvs[0].color !== undefined) {
|
219
|
+
if (!colors) colors = nbuf3(triCount * 3 * 3);
|
220
|
+
}
|
221
|
+
|
222
|
+
if (pvs[0].uv !== undefined) {
|
223
|
+
if (!uvs) uvs = nbuf2(triCount * 2 * 3);
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
for (let j = 3; j <= pvlen; j++) {
|
228
|
+
p.shared !== undefined && grps[p.shared].push(vertices.top / 3, vertices.top / 3 + 1, vertices.top / 3 + 2);
|
229
|
+
vertices.write(pvs[0].pos);
|
230
|
+
vertices.write(pvs[j - 2].pos);
|
231
|
+
vertices.write(pvs[j - 1].pos);
|
232
|
+
normals.write(pvs[0].normal);
|
233
|
+
normals.write(pvs[j - 2].normal);
|
234
|
+
normals.write(pvs[j - 1].normal);
|
235
|
+
uvs && pvs[0].uv && (uvs.write(pvs[0].uv) || uvs.write(pvs[j - 2].uv) || uvs.write(pvs[j - 1].uv));
|
236
|
+
colors && (colors.write(pvs[0].color) || colors.write(pvs[j - 2].color) || colors.write(pvs[j - 1].color));
|
237
|
+
}
|
238
|
+
});
|
239
|
+
geom.setAttribute('position', new THREE.BufferAttribute(vertices.array, 3));
|
240
|
+
geom.setAttribute('normal', new THREE.BufferAttribute(normals.array, 3));
|
241
|
+
uvs && geom.setAttribute('uv', new THREE.BufferAttribute(uvs.array, 2));
|
242
|
+
colors && geom.setAttribute('color', new THREE.BufferAttribute(colors.array, 3));
|
243
|
+
|
244
|
+
if (grps.length) {
|
245
|
+
let index = [];
|
246
|
+
let gbase = 0;
|
247
|
+
|
248
|
+
for (let gi = 0; gi < grps.length; gi++) {
|
249
|
+
geom.addGroup(gbase, grps[gi].length, gi);
|
250
|
+
gbase += grps[gi].length;
|
251
|
+
index = index.concat(grps[gi]);
|
252
|
+
}
|
253
|
+
|
254
|
+
geom.setIndex(index);
|
255
|
+
}
|
256
|
+
|
257
|
+
g2 = geom;
|
258
|
+
}
|
259
|
+
|
260
|
+
return geom;
|
261
|
+
};
|
262
|
+
|
263
|
+
_csgLib.CSG.toMesh = function (csg, toMatrix, toMaterial) {
|
264
|
+
let geom = _csgLib.CSG.toGeometry(csg);
|
265
|
+
|
266
|
+
let inv = new THREE.Matrix4().copy(toMatrix).invert();
|
267
|
+
geom.applyMatrix4(inv);
|
268
|
+
geom.computeBoundingSphere();
|
269
|
+
geom.computeBoundingBox();
|
270
|
+
let m = new THREE.Mesh(geom, toMaterial);
|
271
|
+
m.matrix.copy(toMatrix);
|
272
|
+
m.matrix.decompose(m.position, m.quaternion, m.scale);
|
273
|
+
m.rotation.setFromQuaternion(m.quaternion);
|
274
|
+
m.updateMatrixWorld();
|
275
|
+
m.castShadow = m.receiveShadow = true;
|
276
|
+
return m;
|
277
|
+
};
|
278
|
+
|
279
|
+
var _default = _csgLib.CSG;
|
280
|
+
exports.default = _default;
|
@@ -5,13 +5,19 @@ require("core-js/modules/web.dom-collections.iterator.js");
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
6
6
|
value: true
|
7
7
|
});
|
8
|
-
exports.
|
8
|
+
exports.getMinMaxCoordinates = exports.getKeyEvents = exports.getFloorParams = void 0;
|
9
9
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
11
11
|
|
12
12
|
var holdEvent = _interopRequireWildcard(require("hold-event"));
|
13
13
|
|
14
|
-
var
|
14
|
+
var _floor = _interopRequireDefault(require("../assets/img/floor.jpg"));
|
15
|
+
|
16
|
+
var _floorDark = _interopRequireDefault(require("../assets/img/floor-dark.png"));
|
17
|
+
|
18
|
+
var _floorWhite = _interopRequireDefault(require("../assets/img/floor-white.png"));
|
19
|
+
|
20
|
+
var _floorBathroom = _interopRequireDefault(require("../assets/img/floor-bathroom.jpg"));
|
15
21
|
|
16
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
17
23
|
|
@@ -19,17 +25,26 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
19
25
|
|
20
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
27
|
|
22
|
-
const
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
+
const FloorParams = {
|
29
|
+
'default': {
|
30
|
+
texture: _floorDark.default,
|
31
|
+
color: '#FFFFFF'
|
32
|
+
},
|
33
|
+
'Kitchen': {
|
34
|
+
texture: _floorWhite.default,
|
35
|
+
color: '#FFFFFF'
|
36
|
+
},
|
37
|
+
'Balcony': {
|
38
|
+
texture: _floor.default,
|
39
|
+
color: '#DADADA'
|
40
|
+
},
|
41
|
+
'Bathroom': {
|
42
|
+
texture: _floorBathroom.default,
|
43
|
+
color: '#FFFFFF'
|
44
|
+
}
|
28
45
|
};
|
29
46
|
|
30
|
-
|
31
|
-
|
32
|
-
const addKeyboardControls = controls => {
|
47
|
+
const getKeyEvents = controls => {
|
33
48
|
const KEYCODE = {
|
34
49
|
W: 87,
|
35
50
|
A: 65,
|
@@ -52,30 +67,59 @@ const addKeyboardControls = controls => {
|
|
52
67
|
const dKey = new holdEvent.KeyboardKeyHold(KEYCODE.D, 100);
|
53
68
|
const rightKey = new holdEvent.KeyboardKeyHold(KEYCODE.ARROW_RIGHT, 100);
|
54
69
|
const rightArr = [dKey, rightKey];
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
const keyEvents = [{
|
71
|
+
keys: upArr,
|
72
|
+
callback: () => controls.forward(1, true)
|
73
|
+
}, {
|
74
|
+
keys: leftArr,
|
75
|
+
callback: () => controls.truck(-1, 0, true)
|
76
|
+
}, {
|
77
|
+
keys: downArr,
|
78
|
+
callback: () => controls.forward(-1, true)
|
79
|
+
}, {
|
80
|
+
keys: rightArr,
|
81
|
+
callback: () => controls.truck(1, 0, true)
|
82
|
+
}];
|
83
|
+
return keyEvents;
|
84
|
+
};
|
85
|
+
|
86
|
+
exports.getKeyEvents = getKeyEvents;
|
87
|
+
|
88
|
+
const getFloorParams = type => {
|
89
|
+
const params = FloorParams[type];
|
90
|
+
if (!params) return FloorParams['default'];
|
91
|
+
return params;
|
92
|
+
};
|
93
|
+
|
94
|
+
exports.getFloorParams = getFloorParams;
|
95
|
+
|
96
|
+
const getMinMaxCoordinates = walls => {
|
97
|
+
let maxX = 0;
|
98
|
+
let minX = Infinity;
|
99
|
+
let maxY = 0;
|
100
|
+
let minY = Infinity;
|
101
|
+
walls.forEach(_ref => {
|
102
|
+
let {
|
103
|
+
start,
|
104
|
+
end
|
105
|
+
} = _ref;
|
106
|
+
// CALCULATE MAX COORDS
|
107
|
+
if (start.x > maxX) maxX = start.x;
|
108
|
+
if (start.x > maxX) maxX = start.x;
|
109
|
+
if (end.y > maxY) maxY = end.y;
|
110
|
+
if (end.y > maxY) maxY = end.y; // CALCULATE MIN COORDS
|
111
|
+
|
112
|
+
if (start.x < minX) minX = start.x;
|
113
|
+
if (start.x < minX) minX = start.x;
|
114
|
+
if (end.y < minY) minY = end.y;
|
115
|
+
if (end.y < minY) minY = end.y;
|
78
116
|
});
|
117
|
+
return {
|
118
|
+
maxX,
|
119
|
+
minX,
|
120
|
+
maxY,
|
121
|
+
minY
|
122
|
+
};
|
79
123
|
};
|
80
124
|
|
81
|
-
exports.
|
125
|
+
exports.getMinMaxCoordinates = getMinMaxCoordinates;
|