@colijnit/configurator 1.0.17 → 1.0.18
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/app/builder.d.ts +53 -53
- package/app/components/answers/answer/answer.component.d.ts +11 -11
- package/app/components/answers/answers.component.d.ts +8 -8
- package/app/components/answers/answers.module.d.ts +2 -2
- package/app/components/selections/selections.component.d.ts +22 -22
- package/app/components/selections/selections.module.d.ts +2 -2
- package/app/components/shared/loader/loader.component.d.ts +2 -2
- package/app/components/shared/shared.module.d.ts +2 -2
- package/app/directives/visibility-observer-master.directive.d.ts +9 -9
- package/app/directives/visibility-observer.directive.d.ts +13 -13
- package/app/services/configurator.service.d.ts +22 -22
- package/app/services/image-cache.service.d.ts +10 -10
- package/app/services/locator.service.d.ts +4 -4
- package/bundles/colijnit-configurator.umd.js +2455 -2455
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/bundles/colijnit-configurator.umd.min.js +1 -1
- package/bundles/colijnit-configurator.umd.min.js.map +1 -1
- package/colijnit-configurator.d.ts +10 -10
- package/colijnit-configurator.metadata.json +1 -1
- package/esm2015/app/builder.js +477 -477
- package/esm2015/app/components/answers/answer/answer.component.js +51 -51
- package/esm2015/app/components/answers/answers.component.js +25 -25
- package/esm2015/app/components/answers/answers.module.js +28 -28
- package/esm2015/app/components/selections/selections.component.js +85 -85
- package/esm2015/app/components/selections/selections.module.js +22 -22
- package/esm2015/app/components/shared/loader/loader.component.js +12 -12
- package/esm2015/app/components/shared/shared.module.js +20 -20
- package/esm2015/app/directives/visibility-observer-master.directive.js +50 -50
- package/esm2015/app/directives/visibility-observer.directive.js +56 -56
- package/esm2015/app/services/configurator.service.js +94 -94
- package/esm2015/app/services/image-cache.service.js +66 -66
- package/esm2015/app/services/locator.service.js +9 -9
- package/esm2015/colijnit-configurator.js +10 -10
- package/esm2015/helper/variation-helper.js +215 -215
- package/esm2015/model/material.js +10 -10
- package/esm2015/model/variation-settings.js +5 -5
- package/esm2015/model/variation.js +2 -2
- package/esm2015/public_api.js +6 -6
- package/esm2015/utils/asset.utils.js +73 -73
- package/esm2015/utils/file.utils.js +138 -138
- package/esm2015/utils/image.utils.js +51 -51
- package/esm2015/utils/object.utils.js +48 -48
- package/esm2015/utils/scene-utils.js +93 -93
- package/esm2015/utils/threed.utils.js +221 -221
- package/esm2015/utils/variation-utils.js +223 -223
- package/esm5/app/builder.js +591 -591
- package/esm5/app/components/answers/answer/answer.component.js +63 -63
- package/esm5/app/components/answers/answers.component.js +26 -26
- package/esm5/app/components/answers/answers.module.js +31 -31
- package/esm5/app/components/selections/selections.component.js +103 -103
- package/esm5/app/components/selections/selections.module.js +25 -25
- package/esm5/app/components/shared/loader/loader.component.js +15 -15
- package/esm5/app/components/shared/shared.module.js +23 -23
- package/esm5/app/directives/visibility-observer-master.directive.js +63 -63
- package/esm5/app/directives/visibility-observer.directive.js +58 -58
- package/esm5/app/services/configurator.service.js +160 -160
- package/esm5/app/services/image-cache.service.js +69 -69
- package/esm5/app/services/locator.service.js +12 -12
- package/esm5/colijnit-configurator.js +10 -10
- package/esm5/helper/variation-helper.js +267 -267
- package/esm5/model/material.js +12 -12
- package/esm5/model/variation-settings.js +7 -7
- package/esm5/model/variation.js +6 -6
- package/esm5/public_api.js +6 -6
- package/esm5/utils/asset.utils.js +105 -105
- package/esm5/utils/file.utils.js +150 -150
- package/esm5/utils/image.utils.js +55 -55
- package/esm5/utils/object.utils.js +55 -55
- package/esm5/utils/scene-utils.js +97 -97
- package/esm5/utils/threed.utils.js +278 -278
- package/esm5/utils/variation-utils.js +326 -326
- package/fesm2015/colijnit-configurator.js +1946 -1946
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/fesm5/colijnit-configurator.js +2457 -2457
- package/fesm5/colijnit-configurator.js.map +1 -1
- package/helper/variation-helper.d.ts +14 -14
- package/model/material.d.ts +17 -17
- package/model/variation-settings.d.ts +14 -14
- package/model/variation.d.ts +10 -10
- package/package.json +3 -2
- package/public_api.d.ts +6 -6
- package/utils/asset.utils.d.ts +13 -13
- package/utils/file.utils.d.ts +27 -27
- package/utils/image.utils.d.ts +8 -8
- package/utils/object.utils.d.ts +7 -7
- package/utils/scene-utils.d.ts +7 -7
- package/utils/threed.utils.d.ts +16 -16
- package/utils/variation-utils.d.ts +12 -12
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
// @dynamic
|
|
3
|
-
var ImageUtils = /** @class */ (function () {
|
|
4
|
-
function ImageUtils() {
|
|
5
|
-
}
|
|
6
|
-
ImageUtils.CreateTextureFromBase64 = function (id, base64, material) {
|
|
7
|
-
return new Promise(function (resolve) {
|
|
8
|
-
if (ImageUtils.textures.has(id)) {
|
|
9
|
-
resolve(ImageUtils.textures.get(id));
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
if (!base64) {
|
|
13
|
-
resolve(new THREE.Texture());
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
var loader = new THREE.TextureLoader();
|
|
17
|
-
loader.load(base64, function (texture) {
|
|
18
|
-
texture.anisotropy = 16;
|
|
19
|
-
texture.wrapS = THREE.RepeatWrapping;
|
|
20
|
-
texture.wrapT = THREE.RepeatWrapping;
|
|
21
|
-
texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);
|
|
22
|
-
texture.needsUpdate = true;
|
|
23
|
-
ImageUtils.textures.set(id, texture);
|
|
24
|
-
resolve(texture);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
ImageUtils.getDocBodyWithMimeTypeDefinition = function (fileName, documentBody) {
|
|
31
|
-
if (documentBody === null) {
|
|
32
|
-
return documentBody;
|
|
33
|
-
}
|
|
34
|
-
var fileExtension = fileName.substr(fileName.lastIndexOf('.') + 1);
|
|
35
|
-
switch (fileExtension.toLowerCase()) {
|
|
36
|
-
case "jpg":
|
|
37
|
-
case "jpeg":
|
|
38
|
-
return "data:image/jpg;base64," + documentBody;
|
|
39
|
-
case "png":
|
|
40
|
-
return "data:image/png;base64," + documentBody;
|
|
41
|
-
case "gif":
|
|
42
|
-
return "data:image/gif;base64," + documentBody;
|
|
43
|
-
case "bmp":
|
|
44
|
-
return "data:image/bmp;base64," + documentBody;
|
|
45
|
-
default:
|
|
46
|
-
return "data:image/png;base64," + documentBody;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
ImageUtils.getFixedImageFilepathUrl = function (imageFilepathUrl) {
|
|
50
|
-
return imageFilepathUrl.replace("/content/", "/content43/");
|
|
51
|
-
};
|
|
52
|
-
ImageUtils.textures = new Map();
|
|
53
|
-
return ImageUtils;
|
|
54
|
-
}());
|
|
55
|
-
export { ImageUtils };
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
// @dynamic
|
|
3
|
+
var ImageUtils = /** @class */ (function () {
|
|
4
|
+
function ImageUtils() {
|
|
5
|
+
}
|
|
6
|
+
ImageUtils.CreateTextureFromBase64 = function (id, base64, material) {
|
|
7
|
+
return new Promise(function (resolve) {
|
|
8
|
+
if (ImageUtils.textures.has(id)) {
|
|
9
|
+
resolve(ImageUtils.textures.get(id));
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
if (!base64) {
|
|
13
|
+
resolve(new THREE.Texture());
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
var loader = new THREE.TextureLoader();
|
|
17
|
+
loader.load(base64, function (texture) {
|
|
18
|
+
texture.anisotropy = 16;
|
|
19
|
+
texture.wrapS = THREE.RepeatWrapping;
|
|
20
|
+
texture.wrapT = THREE.RepeatWrapping;
|
|
21
|
+
texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);
|
|
22
|
+
texture.needsUpdate = true;
|
|
23
|
+
ImageUtils.textures.set(id, texture);
|
|
24
|
+
resolve(texture);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
ImageUtils.getDocBodyWithMimeTypeDefinition = function (fileName, documentBody) {
|
|
31
|
+
if (documentBody === null) {
|
|
32
|
+
return documentBody;
|
|
33
|
+
}
|
|
34
|
+
var fileExtension = fileName.substr(fileName.lastIndexOf('.') + 1);
|
|
35
|
+
switch (fileExtension.toLowerCase()) {
|
|
36
|
+
case "jpg":
|
|
37
|
+
case "jpeg":
|
|
38
|
+
return "data:image/jpg;base64," + documentBody;
|
|
39
|
+
case "png":
|
|
40
|
+
return "data:image/png;base64," + documentBody;
|
|
41
|
+
case "gif":
|
|
42
|
+
return "data:image/gif;base64," + documentBody;
|
|
43
|
+
case "bmp":
|
|
44
|
+
return "data:image/bmp;base64," + documentBody;
|
|
45
|
+
default:
|
|
46
|
+
return "data:image/png;base64," + documentBody;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
ImageUtils.getFixedImageFilepathUrl = function (imageFilepathUrl) {
|
|
50
|
+
return imageFilepathUrl.replace("/content/", "/content43/");
|
|
51
|
+
};
|
|
52
|
+
ImageUtils.textures = new Map();
|
|
53
|
+
return ImageUtils;
|
|
54
|
+
}());
|
|
55
|
+
export { ImageUtils };
|
|
56
56
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29saWpuaXQvY29uZmlndXJhdG9yLyIsInNvdXJjZXMiOlsidXRpbHMvaW1hZ2UudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsV0FBVztBQUNYO0lBQUE7SUFrREEsQ0FBQztJQTlDZSxrQ0FBdUIsR0FBckMsVUFBc0MsRUFBVSxFQUFFLE1BQWMsRUFBRSxRQUFrQjtRQUNsRixPQUFPLElBQUksT0FBTyxDQUFnQixVQUFDLE9BQU87WUFDeEMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsSUFBTSxNQUFNLEdBQXdCLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFDLE9BQXNCO3dCQUN6QyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO3dCQUNyQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7d0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3JDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVhLDJDQUFnQyxHQUE5QyxVQUErQyxRQUFnQixFQUFFLFlBQW9CO1FBQ25GLElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtZQUN6QixPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUNELElBQU0sYUFBYSxHQUFXLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RSxRQUFRLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuQyxLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDVCxPQUFPLHdCQUF3QixHQUFHLFlBQVksQ0FBQztZQUNqRCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyx3QkFBd0IsR0FBRyxZQUFZLENBQUM7WUFDakQsS0FBSyxLQUFLO2dCQUNSLE9BQU8sd0JBQXdCLEdBQUcsWUFBWSxDQUFDO1lBQ2pELEtBQUssS0FBSztnQkFDUixPQUFPLHdCQUF3QixHQUFHLFlBQVksQ0FBQztZQUNqRDtnQkFDRSxPQUFPLHdCQUF3QixHQUFHLFlBQVksQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFYSxtQ0FBd0IsR0FBdEMsVUFBdUMsZ0JBQXdCO1FBQzdELE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBL0NhLG1CQUFRLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFnRGpFLGlCQUFDO0NBQUEsQUFsREQsSUFrREM7U0FsRFksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7TWF0ZXJpYWx9IGZyb20gJy4uL21vZGVsL21hdGVyaWFsJztcbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgSW1hZ2VVdGlscyB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZXh0dXJlczogTWFwPHN0cmluZywgVEhSRUUuVGV4dHVyZT4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIHN0YXRpYyBDcmVhdGVUZXh0dXJlRnJvbUJhc2U2NChpZDogc3RyaW5nLCBiYXNlNjQ6IHN0cmluZywgbWF0ZXJpYWw6IE1hdGVyaWFsKTogUHJvbWlzZTxUSFJFRS5UZXh0dXJlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRIUkVFLlRleHR1cmU+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoSW1hZ2VVdGlscy50ZXh0dXJlcy5oYXMoaWQpKSB7XG4gICAgICAgIHJlc29sdmUoSW1hZ2VVdGlscy50ZXh0dXJlcy5nZXQoaWQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghYmFzZTY0KSB7XG4gICAgICAgICAgcmVzb2x2ZShuZXcgVEhSRUUuVGV4dHVyZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBsb2FkZXI6IFRIUkVFLlRleHR1cmVMb2FkZXIgPSBuZXcgVEhSRUUuVGV4dHVyZUxvYWRlcigpO1xuICAgICAgICAgIGxvYWRlci5sb2FkKGJhc2U2NCwgKHRleHR1cmU6IFRIUkVFLlRleHR1cmUpID0+IHtcbiAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9weSA9IDE2O1xuICAgICAgICAgICAgdGV4dHVyZS53cmFwUyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuICAgICAgICAgICAgdGV4dHVyZS53cmFwVCA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuICAgICAgICAgICAgdGV4dHVyZS5yZXBlYXQgPSBuZXcgVEhSRUUuVmVjdG9yMihtYXRlcmlhbCA/IG1hdGVyaWFsLnJlcGVhdFggOiAxLCBtYXRlcmlhbCA/IG1hdGVyaWFsLnJlcGVhdFkgOiAxKTtcbiAgICAgICAgICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgSW1hZ2VVdGlscy50ZXh0dXJlcy5zZXQoaWQsIHRleHR1cmUpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXREb2NCb2R5V2l0aE1pbWVUeXBlRGVmaW5pdGlvbihmaWxlTmFtZTogc3RyaW5nLCBkb2N1bWVudEJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGRvY3VtZW50Qm9keSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50Qm9keTtcbiAgICB9XG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbjogc3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICBzd2l0Y2ggKGZpbGVFeHRlbnNpb24udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSBcImpwZ1wiOlxuICAgICAgY2FzZSBcImpwZWdcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0YTppbWFnZS9qcGc7YmFzZTY0LFwiICsgZG9jdW1lbnRCb2R5O1xuICAgICAgY2FzZSBcInBuZ1wiOlxuICAgICAgICByZXR1cm4gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIgKyBkb2N1bWVudEJvZHk7XG4gICAgICBjYXNlIFwiZ2lmXCI6XG4gICAgICAgIHJldHVybiBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxcIiArIGRvY3VtZW50Qm9keTtcbiAgICAgIGNhc2UgXCJibXBcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0YTppbWFnZS9ibXA7YmFzZTY0LFwiICsgZG9jdW1lbnRCb2R5O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFwiICsgZG9jdW1lbnRCb2R5O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rml4ZWRJbWFnZUZpbGVwYXRoVXJsKGltYWdlRmlsZXBhdGhVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGltYWdlRmlsZXBhdGhVcmwucmVwbGFjZShcIi9jb250ZW50L1wiLCBcIi9jb250ZW50NDMvXCIpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { Mesh } from "three";
|
|
2
|
-
var ObjectUtils = /** @class */ (function () {
|
|
3
|
-
function ObjectUtils() {
|
|
4
|
-
}
|
|
5
|
-
ObjectUtils.DisposeMaterial = function (material) {
|
|
6
|
-
var _this = this;
|
|
7
|
-
if (!material) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
if (Array.isArray(material)) {
|
|
11
|
-
material.forEach(function (mtrl) {
|
|
12
|
-
_this.materialProps
|
|
13
|
-
.filter(function (mapType) { return mtrl[mapType]; })
|
|
14
|
-
.forEach(function (mapType) { return mtrl[mapType].dispose(); });
|
|
15
|
-
mtrl.dispose();
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
this.materialProps
|
|
20
|
-
.filter(function (mapType) { return material[mapType] && material[mapType].dispose; })
|
|
21
|
-
.forEach(function (mapType) { return material[mapType].dispose(); });
|
|
22
|
-
if (material.dispose) {
|
|
23
|
-
material.dispose();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
ObjectUtils.DisposeObject = function (object) {
|
|
28
|
-
var _this = this;
|
|
29
|
-
if (!object) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (object.children.length) {
|
|
33
|
-
object.children.forEach(function (child) { return _this.DisposeObject(child); });
|
|
34
|
-
}
|
|
35
|
-
this.DisposeNode(object);
|
|
36
|
-
};
|
|
37
|
-
ObjectUtils.DisposeNode = function (node) {
|
|
38
|
-
var _this = this;
|
|
39
|
-
node.traverse(function (obj) {
|
|
40
|
-
if (obj instanceof Mesh) {
|
|
41
|
-
if (obj.geometry) {
|
|
42
|
-
obj.geometry.dispose();
|
|
43
|
-
}
|
|
44
|
-
_this.DisposeMaterial(obj.material);
|
|
45
|
-
}
|
|
46
|
-
if (typeof obj.dispose === 'function') {
|
|
47
|
-
// @ts-ignore
|
|
48
|
-
obj.dispose();
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
ObjectUtils.materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];
|
|
53
|
-
return ObjectUtils;
|
|
54
|
-
}());
|
|
55
|
-
export { ObjectUtils };
|
|
1
|
+
import { Mesh } from "three";
|
|
2
|
+
var ObjectUtils = /** @class */ (function () {
|
|
3
|
+
function ObjectUtils() {
|
|
4
|
+
}
|
|
5
|
+
ObjectUtils.DisposeMaterial = function (material) {
|
|
6
|
+
var _this = this;
|
|
7
|
+
if (!material) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(material)) {
|
|
11
|
+
material.forEach(function (mtrl) {
|
|
12
|
+
_this.materialProps
|
|
13
|
+
.filter(function (mapType) { return mtrl[mapType]; })
|
|
14
|
+
.forEach(function (mapType) { return mtrl[mapType].dispose(); });
|
|
15
|
+
mtrl.dispose();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.materialProps
|
|
20
|
+
.filter(function (mapType) { return material[mapType] && material[mapType].dispose; })
|
|
21
|
+
.forEach(function (mapType) { return material[mapType].dispose(); });
|
|
22
|
+
if (material.dispose) {
|
|
23
|
+
material.dispose();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
ObjectUtils.DisposeObject = function (object) {
|
|
28
|
+
var _this = this;
|
|
29
|
+
if (!object) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (object.children.length) {
|
|
33
|
+
object.children.forEach(function (child) { return _this.DisposeObject(child); });
|
|
34
|
+
}
|
|
35
|
+
this.DisposeNode(object);
|
|
36
|
+
};
|
|
37
|
+
ObjectUtils.DisposeNode = function (node) {
|
|
38
|
+
var _this = this;
|
|
39
|
+
node.traverse(function (obj) {
|
|
40
|
+
if (obj instanceof Mesh) {
|
|
41
|
+
if (obj.geometry) {
|
|
42
|
+
obj.geometry.dispose();
|
|
43
|
+
}
|
|
44
|
+
_this.DisposeMaterial(obj.material);
|
|
45
|
+
}
|
|
46
|
+
if (typeof obj.dispose === 'function') {
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
obj.dispose();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
ObjectUtils.materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];
|
|
53
|
+
return ObjectUtils;
|
|
54
|
+
}());
|
|
55
|
+
export { ObjectUtils };
|
|
56
56
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvbGlqbml0L2NvbmZpZ3VyYXRvci8iLCJzb3VyY2VzIjpbInV0aWxzL29iamVjdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsSUFBSSxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBRS9DO0lBQUE7SUFpREEsQ0FBQztJQTlDaUIsMkJBQWUsR0FBN0IsVUFBOEIsUUFBK0I7UUFBN0QsaUJBbUJDO1FBbEJHLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7Z0JBQ2pCLEtBQUksQ0FBQyxhQUFhO3FCQUNiLE1BQU0sQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBYixDQUFhLENBQUM7cUJBQ2hDLE9BQU8sQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBdkIsQ0FBdUIsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWE7aUJBQ2IsTUFBTSxDQUFDLFVBQUEsT0FBTyxJQUFJLE9BQUEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQTlDLENBQThDLENBQUM7aUJBQ2pFLE9BQU8sQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBM0IsQ0FBMkIsQ0FBQyxDQUFDO1lBQ3JELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7SUFDTCxDQUFDO0lBRWEseUJBQWEsR0FBM0IsVUFBNEIsTUFBdUI7UUFBbkQsaUJBUUM7UUFQRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQXpCLENBQXlCLENBQUMsQ0FBQztTQUMvRDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVjLHVCQUFXLEdBQTFCLFVBQTJCLElBQXFCO1FBQWhELGlCQWFDO1FBWkcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFDLEdBQWE7WUFDeEIsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFO2dCQUNyQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDMUI7Z0JBQ0QsS0FBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdEM7WUFDRCxJQUFJLE9BQVEsR0FBVyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7Z0JBQzVDLGFBQWE7Z0JBQ2IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBOUNNLHlCQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBZ0R6SSxrQkFBQztDQUFBLEFBakRELElBaURDO1NBakRZLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hdGVyaWFsLCBNZXNoLCBPYmplY3QzRH0gZnJvbSBcInRocmVlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgT2JqZWN0VXRpbHMge1xyXG4gICAgc3RhdGljIG1hdGVyaWFsUHJvcHMgPSBbJ21hcCcsICdsaWdodE1hcCcsICdidW1wTWFwJywgJ25vcm1hbE1hcCcsICdzcGVjdWxhck1hcCcsICdlbnZNYXAnLCAnYW9NYXAnLCAncm91Z2huZXNzTWFwJywgJ21ldGFsbmVzc01hcCddO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRGlzcG9zZU1hdGVyaWFsKG1hdGVyaWFsOiBNYXRlcmlhbCB8IE1hdGVyaWFsW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0ZXJpYWwpKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmZvckVhY2gobXRybCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsUHJvcHNcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG1hcFR5cGUgPT4gbXRybFttYXBUeXBlXSlcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChtYXBUeXBlID0+IG10cmxbbWFwVHlwZV0uZGlzcG9zZSgpKTtcclxuICAgICAgICAgICAgICAgIG10cmwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsUHJvcHNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIobWFwVHlwZSA9PiBtYXRlcmlhbFttYXBUeXBlXSAmJiBtYXRlcmlhbFttYXBUeXBlXS5kaXNwb3NlKVxyXG4gICAgICAgICAgICAgICAgLmZvckVhY2gobWFwVHlwZSA9PiBtYXRlcmlhbFttYXBUeXBlXS5kaXNwb3NlKCkpO1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRGlzcG9zZU9iamVjdChvYmplY3Q6IE9iamVjdDNEIHwgTWVzaCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gdGhpcy5EaXNwb3NlT2JqZWN0KGNoaWxkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuRGlzcG9zZU5vZGUob2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBEaXNwb3NlTm9kZShub2RlOiBPYmplY3QzRCB8IE1lc2gpOiB2b2lkIHtcclxuICAgICAgICBub2RlLnRyYXZlcnNlKChvYmo6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuRGlzcG9zZU1hdGVyaWFsKG9iai5tYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAob2JqIGFzIGFueSkuZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgb2JqLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
var SceneUtils = /** @class */ (function () {
|
|
3
|
-
function SceneUtils() {
|
|
4
|
-
}
|
|
5
|
-
SceneUtils.TrySelectorConnection = function (scene, parent, part1, part2, createAddableFn) {
|
|
6
|
-
var addable;
|
|
7
|
-
if (createAddableFn) {
|
|
8
|
-
addable = part2;
|
|
9
|
-
part2 = createAddableFn(addable);
|
|
10
|
-
}
|
|
11
|
-
for (var i = 0; i < part1.children.length; i++) {
|
|
12
|
-
for (var ii = 0; ii < part2.children.length; ii++) {
|
|
13
|
-
var con1 = part1.children[i];
|
|
14
|
-
var con2 = part2.children[ii];
|
|
15
|
-
// if these connectors can connect connect them
|
|
16
|
-
if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {
|
|
17
|
-
// if addable, continue this loop with a new addable
|
|
18
|
-
if (addable) {
|
|
19
|
-
var newPart2 = createAddableFn(addable, part2, part1);
|
|
20
|
-
// reference of part2 changed, so refresh con2
|
|
21
|
-
this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return this.SelectorConnect(scene, parent, con1, con2);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return false;
|
|
30
|
-
};
|
|
31
|
-
SceneUtils.Convert3DPointToScreenPoint = function (point, camera, width, height) {
|
|
32
|
-
if (!point) {
|
|
33
|
-
return new THREE.Vector2();
|
|
34
|
-
}
|
|
35
|
-
var vector = point.clone().project(camera);
|
|
36
|
-
vector.x = (vector.x + 1) / 2 * width;
|
|
37
|
-
vector.y = -(vector.y - 1) / 2 * height;
|
|
38
|
-
return new THREE.Vector2(vector.x, vector.y);
|
|
39
|
-
};
|
|
40
|
-
SceneUtils.CanSelectorConnect = function (con1, con2) {
|
|
41
|
-
var con1Name = con1 instanceof THREE.Object3D ? con1.name : con1.connector;
|
|
42
|
-
var con2Name = con2 instanceof THREE.Object3D ? con2.name : con2.connector;
|
|
43
|
-
var sameParent = con1 instanceof THREE.Object3D && con2 instanceof THREE.Object3D ? con1.parent === con2.parent : false;
|
|
44
|
-
var parts1 = con1Name.toUpperCase().split('_'), parts2 = con2Name.toUpperCase().split('_');
|
|
45
|
-
if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {
|
|
46
|
-
var connectable = parts1[0] === 'C' && parts2[0] === 'C' &&
|
|
47
|
-
parts1[1] === parts2[1] && parts1[2] !== parts2[2];
|
|
48
|
-
return connectable;
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
};
|
|
52
|
-
SceneUtils.SelectorConnect = function (scene, parent, con1, con2) {
|
|
53
|
-
if (!scene || !parent) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
con1['connectedTo'] = con2.parent.name;
|
|
57
|
-
con2['connectedTo'] = con1.parent.name;
|
|
58
|
-
var motherRotation = new THREE.Euler(0, 0, 0);
|
|
59
|
-
var motherPosition = new THREE.Vector3(0, 0, 0);
|
|
60
|
-
scene.updateMatrixWorld(true);
|
|
61
|
-
motherRotation.copy(parent.rotation);
|
|
62
|
-
parent.getWorldPosition(motherPosition);
|
|
63
|
-
parent.rotation.set(0, 0, 0);
|
|
64
|
-
parent.position.set(0, 0, 0);
|
|
65
|
-
var con1Quat = new THREE.Quaternion();
|
|
66
|
-
con1.getWorldQuaternion(con1Quat);
|
|
67
|
-
var con2Quat = new THREE.Quaternion();
|
|
68
|
-
con2.getWorldQuaternion(con2Quat);
|
|
69
|
-
var con1QuatParent = new THREE.Quaternion();
|
|
70
|
-
con1.parent.getWorldQuaternion(con1QuatParent);
|
|
71
|
-
var con2QuatParent = new THREE.Quaternion();
|
|
72
|
-
con2.parent.getWorldQuaternion(con2QuatParent);
|
|
73
|
-
var rotation = new THREE.Quaternion().multiplyQuaternions(con1Quat.invert(), con2Quat).multiply(new THREE.Quaternion().multiplyQuaternions(con1QuatParent, con1QuatParent));
|
|
74
|
-
con2.parent.quaternion.copy(rotation);
|
|
75
|
-
// Update because the matrix has been tempered with
|
|
76
|
-
scene.updateMatrixWorld(true);
|
|
77
|
-
// Move the connectors towards eachother
|
|
78
|
-
var con1Pos = new THREE.Vector3();
|
|
79
|
-
con1.getWorldPosition(con1Pos);
|
|
80
|
-
var con2Pos = new THREE.Vector3();
|
|
81
|
-
con2.getWorldPosition(con2Pos);
|
|
82
|
-
var move = con1Pos.sub(con2Pos);
|
|
83
|
-
con2.parent.position.x += move.x;
|
|
84
|
-
con2.parent.position.y += move.y;
|
|
85
|
-
con2.parent.position.z += move.z;
|
|
86
|
-
// reset parent's objects rotation and position
|
|
87
|
-
parent.rotation.copy(motherRotation);
|
|
88
|
-
parent.position.copy(motherPosition);
|
|
89
|
-
scene.updateMatrixWorld(true);
|
|
90
|
-
// Set the connected flag
|
|
91
|
-
con1['connected'] = true;
|
|
92
|
-
con2['connected'] = true;
|
|
93
|
-
return true;
|
|
94
|
-
};
|
|
95
|
-
return SceneUtils;
|
|
96
|
-
}());
|
|
97
|
-
export { SceneUtils };
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
var SceneUtils = /** @class */ (function () {
|
|
3
|
+
function SceneUtils() {
|
|
4
|
+
}
|
|
5
|
+
SceneUtils.TrySelectorConnection = function (scene, parent, part1, part2, createAddableFn) {
|
|
6
|
+
var addable;
|
|
7
|
+
if (createAddableFn) {
|
|
8
|
+
addable = part2;
|
|
9
|
+
part2 = createAddableFn(addable);
|
|
10
|
+
}
|
|
11
|
+
for (var i = 0; i < part1.children.length; i++) {
|
|
12
|
+
for (var ii = 0; ii < part2.children.length; ii++) {
|
|
13
|
+
var con1 = part1.children[i];
|
|
14
|
+
var con2 = part2.children[ii];
|
|
15
|
+
// if these connectors can connect connect them
|
|
16
|
+
if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {
|
|
17
|
+
// if addable, continue this loop with a new addable
|
|
18
|
+
if (addable) {
|
|
19
|
+
var newPart2 = createAddableFn(addable, part2, part1);
|
|
20
|
+
// reference of part2 changed, so refresh con2
|
|
21
|
+
this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return this.SelectorConnect(scene, parent, con1, con2);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
31
|
+
SceneUtils.Convert3DPointToScreenPoint = function (point, camera, width, height) {
|
|
32
|
+
if (!point) {
|
|
33
|
+
return new THREE.Vector2();
|
|
34
|
+
}
|
|
35
|
+
var vector = point.clone().project(camera);
|
|
36
|
+
vector.x = (vector.x + 1) / 2 * width;
|
|
37
|
+
vector.y = -(vector.y - 1) / 2 * height;
|
|
38
|
+
return new THREE.Vector2(vector.x, vector.y);
|
|
39
|
+
};
|
|
40
|
+
SceneUtils.CanSelectorConnect = function (con1, con2) {
|
|
41
|
+
var con1Name = con1 instanceof THREE.Object3D ? con1.name : con1.connector;
|
|
42
|
+
var con2Name = con2 instanceof THREE.Object3D ? con2.name : con2.connector;
|
|
43
|
+
var sameParent = con1 instanceof THREE.Object3D && con2 instanceof THREE.Object3D ? con1.parent === con2.parent : false;
|
|
44
|
+
var parts1 = con1Name.toUpperCase().split('_'), parts2 = con2Name.toUpperCase().split('_');
|
|
45
|
+
if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {
|
|
46
|
+
var connectable = parts1[0] === 'C' && parts2[0] === 'C' &&
|
|
47
|
+
parts1[1] === parts2[1] && parts1[2] !== parts2[2];
|
|
48
|
+
return connectable;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
};
|
|
52
|
+
SceneUtils.SelectorConnect = function (scene, parent, con1, con2) {
|
|
53
|
+
if (!scene || !parent) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
con1['connectedTo'] = con2.parent.name;
|
|
57
|
+
con2['connectedTo'] = con1.parent.name;
|
|
58
|
+
var motherRotation = new THREE.Euler(0, 0, 0);
|
|
59
|
+
var motherPosition = new THREE.Vector3(0, 0, 0);
|
|
60
|
+
scene.updateMatrixWorld(true);
|
|
61
|
+
motherRotation.copy(parent.rotation);
|
|
62
|
+
parent.getWorldPosition(motherPosition);
|
|
63
|
+
parent.rotation.set(0, 0, 0);
|
|
64
|
+
parent.position.set(0, 0, 0);
|
|
65
|
+
var con1Quat = new THREE.Quaternion();
|
|
66
|
+
con1.getWorldQuaternion(con1Quat);
|
|
67
|
+
var con2Quat = new THREE.Quaternion();
|
|
68
|
+
con2.getWorldQuaternion(con2Quat);
|
|
69
|
+
var con1QuatParent = new THREE.Quaternion();
|
|
70
|
+
con1.parent.getWorldQuaternion(con1QuatParent);
|
|
71
|
+
var con2QuatParent = new THREE.Quaternion();
|
|
72
|
+
con2.parent.getWorldQuaternion(con2QuatParent);
|
|
73
|
+
var rotation = new THREE.Quaternion().multiplyQuaternions(con1Quat.invert(), con2Quat).multiply(new THREE.Quaternion().multiplyQuaternions(con1QuatParent, con1QuatParent));
|
|
74
|
+
con2.parent.quaternion.copy(rotation);
|
|
75
|
+
// Update because the matrix has been tempered with
|
|
76
|
+
scene.updateMatrixWorld(true);
|
|
77
|
+
// Move the connectors towards eachother
|
|
78
|
+
var con1Pos = new THREE.Vector3();
|
|
79
|
+
con1.getWorldPosition(con1Pos);
|
|
80
|
+
var con2Pos = new THREE.Vector3();
|
|
81
|
+
con2.getWorldPosition(con2Pos);
|
|
82
|
+
var move = con1Pos.sub(con2Pos);
|
|
83
|
+
con2.parent.position.x += move.x;
|
|
84
|
+
con2.parent.position.y += move.y;
|
|
85
|
+
con2.parent.position.z += move.z;
|
|
86
|
+
// reset parent's objects rotation and position
|
|
87
|
+
parent.rotation.copy(motherRotation);
|
|
88
|
+
parent.position.copy(motherPosition);
|
|
89
|
+
scene.updateMatrixWorld(true);
|
|
90
|
+
// Set the connected flag
|
|
91
|
+
con1['connected'] = true;
|
|
92
|
+
con2['connected'] = true;
|
|
93
|
+
return true;
|
|
94
|
+
};
|
|
95
|
+
return SceneUtils;
|
|
96
|
+
}());
|
|
97
|
+
export { SceneUtils };
|
|
98
98
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtdXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29saWpuaXQvY29uZmlndXJhdG9yLyIsInNvdXJjZXMiOlsidXRpbHMvc2NlbmUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0I7SUFBQTtJQW9IQSxDQUFDO0lBbEhpQixnQ0FBcUIsR0FBbkMsVUFBb0MsS0FBa0IsRUFBRSxNQUFzQixFQUMxRSxLQUFVLEVBQUUsS0FBVSxFQUFFLGVBQTBCO1FBQ2xELElBQUksT0FBWSxDQUFDO1FBQ2pCLElBQUksZUFBZSxFQUFFO1lBQ2pCLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEIsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQy9DLElBQU0sSUFBSSxHQUFtQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFNLElBQUksR0FBbUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsK0NBQStDO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ2pGLG9EQUFvRDtvQkFDcEQsSUFBSSxPQUFPLEVBQUU7d0JBQ1QsSUFBTSxRQUFRLEdBQW1CLGVBQWUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxF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QztRQUVyQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUIseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUwsaUJBQUM7QUFBRCxDQUFDLEFBcEhELElBb0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNjZW5lVXRpbHMge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHNjZW5lOiBUSFJFRS5TY2VuZSwgcGFyZW50OiBUSFJFRS5PYmplY3QzRCxcclxuICAgICAgICBwYXJ0MTogYW55LCBwYXJ0MjogYW55LCBjcmVhdGVBZGRhYmxlRm4/OiBGdW5jdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgaWYgKGNyZWF0ZUFkZGFibGVGbikge1xyXG4gICAgICAgICAgICBhZGRhYmxlID0gcGFydDI7XHJcbiAgICAgICAgICAgIHBhcnQyID0gY3JlYXRlQWRkYWJsZUZuKGFkZGFibGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnQxLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBwYXJ0Mi5jaGlsZHJlbi5sZW5ndGg7IGlpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbjE6IFRIUkVFLk9iamVjdDNEID0gcGFydDEuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb24yOiBUSFJFRS5PYmplY3QzRCA9IHBhcnQyLmNoaWxkcmVuW2lpXTtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXNlIGNvbm5lY3RvcnMgY2FuIGNvbm5lY3QgY29ubmVjdCB0aGVtXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbjFbJ2Nvbm5lY3RlZCddICYmICFjb24yWydjb25uZWN0ZWQnXSAmJiB0aGlzLkNhblNlbGVjdG9yQ29ubmVjdChjb24xLCBjb24yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFkZGFibGUsIGNvbnRpbnVlIHRoaXMgbG9vcCB3aXRoIGEgbmV3IGFkZGFibGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXJ0MjogVEhSRUUuT2JqZWN0M0QgPSBjcmVhdGVBZGRhYmxlRm4oYWRkYWJsZSwgcGFydDIsIHBhcnQxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIG9mIHBhcnQyIGNoYW5nZWQsIHNvIHJlZnJlc2ggY29uMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlbGVjdG9yQ29ubmVjdChzY2VuZSwgcGFyZW50LCBjb24xLCBuZXdQYXJ0Mi5jaGlsZHJlbltpaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlNlbGVjdG9yQ29ubmVjdChzY2VuZSwgcGFyZW50LCBjb24xLCBjb24yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ29udmVydDNEUG9pbnRUb1NjcmVlblBvaW50KHBvaW50OiBUSFJFRS5WZWN0b3IzLCBjYW1lcmE6IFRIUkVFLkNhbWVyYSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBUSFJFRS5WZWN0b3IyIHtcclxuICAgICAgICBpZiAoIXBvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2ZWN0b3I6IFRIUkVFLlZlY3RvcjMgPSBwb2ludC5jbG9uZSgpLnByb2plY3QoY2FtZXJhKTtcclxuICAgICAgICB2ZWN0b3IueCA9ICh2ZWN0b3IueCArIDEpIC8gMiAqIHdpZHRoO1xyXG4gICAgICAgIHZlY3Rvci55ID0gLSh2ZWN0b3IueSAtIDEpIC8gMiAqIGhlaWdodDtcclxuICAgICAgICByZXR1cm4gbmV3IFRIUkVFLlZlY3RvcjIodmVjdG9yLngsIHZlY3Rvci55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENhblNlbGVjdG9yQ29ubmVjdChjb24xOiBUSFJFRS5PYmplY3QzRCB8IGFueSwgY29uMjogVEhSRUUuT2JqZWN0M0QgfCBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb24xTmFtZTogc3RyaW5nID0gY29uMSBpbnN0YW5jZW9mIFRIUkVFLk9iamVjdDNEID8gY29uMS5uYW1lIDogY29uMS5jb25uZWN0b3I7XHJcbiAgICAgICAgY29uc3QgY29uMk5hbWU6IHN0cmluZyA9IGNvbjIgaW5zdGFuY2VvZiBUSFJFRS5PYmplY3QzRCA/IGNvbjIubmFtZSA6IGNvbjIuY29ubmVjdG9yO1xyXG4gICAgICAgIGNvbnN0IHNhbWVQYXJlbnQ6IGJvb2xlYW4gPSBjb24xIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0QgJiYgY29uMiBpbnN0YW5jZW9mIFRIUkVFLk9iamVjdDNEID8gY29uMS5wYXJlbnQgPT09IGNvbjIucGFyZW50IDogZmFsc2U7XHJcbiAgICAgICAgY29uc3QgcGFydHMxOiBzdHJpbmdbXSA9IGNvbjFOYW1lLnRvVXBwZXJDYXNlKCkuc3BsaXQoJ18nKSxcclxuICAgICAgICAgICAgcGFydHMyOiBzdHJpbmdbXSA9IGNvbjJOYW1lLnRvVXBwZXJDYXNlKCkuc3BsaXQoJ18nKTtcclxuICAgICAgICBpZiAocGFydHMxLmxlbmd0aCA+PSAzICYmIHBhcnRzMi5sZW5ndGggPj0gMyAmJiAhc2FtZVBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0YWJsZTogYm9vbGVhbiA9IHBhcnRzMVswXSA9PT0gJ0MnICYmIHBhcnRzMlswXSA9PT0gJ0MnICYmXHJcbiAgICAgICAgICAgICAgICBwYXJ0czFbMV0gPT09IHBhcnRzMlsxXSAmJiBwYXJ0czFbMl0gIT09IHBhcnRzMlsyXTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3RhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgU2VsZWN0b3JDb25uZWN0KHNjZW5lOiBUSFJFRS5TY2VuZSwgcGFyZW50OiBUSFJFRS5PYmplY3QzRCwgY29uMTogVEhSRUUuT2JqZWN0M0QsIGNvbjI6IFRIUkVFLk9iamVjdDNEKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzY2VuZSB8fCAhcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uMVsnY29ubmVjdGVkVG8nXSA9IGNvbjIucGFyZW50Lm5hbWU7XHJcbiAgICAgICAgY29uMlsnY29ubmVjdGVkVG8nXSA9IGNvbjEucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vdGhlclJvdGF0aW9uOiBUSFJFRS5FdWxlciA9IG5ldyBUSFJFRS5FdWxlcigwLCAwLCAwKTtcclxuICAgICAgICBjb25zdCBtb3RoZXJQb3NpdGlvbjogVEhSRUUuVmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApO1xyXG5cclxuICAgICAgICBzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcclxuICAgICAgICBtb3RoZXJSb3RhdGlvbi5jb3B5KHBhcmVudC5yb3RhdGlvbik7XHJcbiAgICAgICAgcGFyZW50LmdldFdvcmxkUG9zaXRpb24obW90aGVyUG9zaXRpb24pO1xyXG5cclxuICAgICAgICBwYXJlbnQucm90YXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIHBhcmVudC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbjFRdWF0OiBUSFJFRS5RdWF0ZXJuaW9uID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcclxuICAgICAgICBjb24xLmdldFdvcmxkUXVhdGVybmlvbihjb24xUXVhdCk7XHJcbiAgICAgICAgY29uc3QgY29uMlF1YXQ6IFRIUkVFLlF1YXRlcm5pb24gPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xyXG4gICAgICAgIGNvbjIuZ2V0V29ybGRRdWF0ZXJuaW9uKGNvbjJRdWF0KTtcclxuICAgICAgICBjb25zdCBjb24xUXVhdFBhcmVudDogVEhSRUUuUXVhdGVybmlvbiA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XHJcbiAgICAgICAgY29uMS5wYXJlbnQuZ2V0V29ybGRRdWF0ZXJuaW9uKGNvbjFRdWF0UGFyZW50KTtcclxuICAgICAgICBjb25zdCBjb24yUXVhdFBhcmVudDogVEhSRUUuUXVhdGVybmlvbiA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XHJcbiAgICAgICAgY29uMi5wYXJlbnQuZ2V0V29ybGRRdWF0ZXJuaW9uKGNvbjJRdWF0UGFyZW50KTtcclxuXHJcbiAgICAgICAgY29uc3Qgcm90YXRpb246IFRIUkVFLlF1YXRlcm5pb24gPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpLm11bHRpcGx5UXVhdGVybmlvbnMoXHJcbiAgICAgICAgICAgIGNvbjFRdWF0LmludmVydCgpLFxyXG4gICAgICAgICAgICBjb24yUXVhdFxyXG4gICAgICAgICkubXVsdGlwbHkoXHJcbiAgICAgICAgICAgIG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkubXVsdGlwbHlRdWF0ZXJuaW9ucyhcclxuICAgICAgICAgICAgICAgIGNvbjFRdWF0UGFyZW50LFxyXG4gICAgICAgICAgICAgICAgY29uMVF1YXRQYXJlbnRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbjIucGFyZW50LnF1YXRlcm5pb24uY29weShyb3RhdGlvbik7XHJcbiAgICAgICAgLy8gVXBkYXRlIGJlY2F1c2UgdGhlIG1hdHJpeCBoYXMgYmVlbiB0ZW1wZXJlZCB3aXRoXHJcbiAgICAgICAgc2NlbmUudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIE1vdmUgdGhlIGNvbm5lY3RvcnMgdG93YXJkcyBlYWNob3RoZXJcclxuICAgICAgICBjb25zdCBjb24xUG9zOiBUSFJFRS5WZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICBjb24xLmdldFdvcmxkUG9zaXRpb24oY29uMVBvcyk7XHJcbiAgICAgICAgY29uc3QgY29uMlBvczogVEhSRUUuVmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICAgICAgY29uMi5nZXRXb3JsZFBvc2l0aW9uKGNvbjJQb3MpO1xyXG5cclxuICAgICAgICBjb25zdCBtb3ZlOiBUSFJFRS5WZWN0b3IzID0gY29uMVBvcy5zdWIoY29uMlBvcyk7XHJcbiAgICAgICAgY29uMi5wYXJlbnQucG9zaXRpb24ueCArPSBtb3ZlLng7XHJcbiAgICAgICAgY29uMi5wYXJlbnQucG9zaXRpb24ueSArPSBtb3ZlLnk7XHJcbiAgICAgICAgY29uMi5wYXJlbnQucG9zaXRpb24ueiArPSBtb3ZlLno7XHJcblxyXG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCdzIG9iamVjdHMgcm90YXRpb24gYW5kIHBvc2l0aW9uXHJcbiAgICAgICAgcGFyZW50LnJvdGF0aW9uLmNvcHkobW90aGVyUm90YXRpb24pO1xyXG4gICAgICAgIHBhcmVudC5wb3NpdGlvbi5jb3B5KG1vdGhlclBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgc2NlbmUudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgY29ubmVjdGVkIGZsYWdcclxuICAgICAgICBjb24xWydjb25uZWN0ZWQnXSA9IHRydWU7XHJcbiAgICAgICAgY29uMlsnY29ubmVjdGVkJ10gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|