@combeenation/3d-viewer 16.0.0-alpha1 → 16.0.0-alpha2
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/dist/lib-cjs/buildinfo.json +1 -1
- package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
- package/dist/lib-cjs/helper/decals-helper.d.ts +27 -4
- package/dist/lib-cjs/helper/decals-helper.js +22 -10
- package/dist/lib-cjs/helper/decals-helper.js.map +1 -1
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.d.ts +0 -16
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js +14 -20
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js.map +1 -1
- package/dist/lib-cjs/manager/model-manager.d.ts +19 -2
- package/dist/lib-cjs/manager/model-manager.js +13 -8
- package/dist/lib-cjs/manager/model-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/helper/decals-helper.ts +42 -12
- package/src/internal/cbn-custom-babylon-loader-plugin.ts +19 -25
- package/src/manager/model-manager.ts +17 -16
|
@@ -1,13 +1,36 @@
|
|
|
1
1
|
import { IAssetContainer, Mesh, Tuple } from '..';
|
|
2
|
+
export declare const DEFAULT_DECAL_CONFIG: {
|
|
3
|
+
normal: number[];
|
|
4
|
+
angle: number;
|
|
5
|
+
offset: number;
|
|
6
|
+
scaling: number[];
|
|
7
|
+
captureUVS: boolean;
|
|
8
|
+
cullBackFaces: boolean;
|
|
9
|
+
localMode: boolean;
|
|
10
|
+
sideOrientation: number;
|
|
11
|
+
};
|
|
2
12
|
export declare type DecalConfiguration = {
|
|
3
13
|
name: string;
|
|
4
14
|
sourceMeshName: string;
|
|
5
15
|
position: Tuple<number, 3>;
|
|
6
|
-
normal: Tuple<number, 3>;
|
|
7
16
|
size: Tuple<number, 3>;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
17
|
+
/** Default `[0, 0, 1]` (forward direction) */
|
|
18
|
+
normal?: Tuple<number, 3>;
|
|
19
|
+
/** Default `0` */
|
|
20
|
+
angle?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Shifts decals away from source mesh in direction of "normal" vector
|
|
23
|
+
*
|
|
24
|
+
* Default `0.001` (1mm)
|
|
25
|
+
*/
|
|
26
|
+
offset?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Can be used for shifting the decal away from the source mesh as alternative to `offset`.\
|
|
29
|
+
* Use this setting when the offset should be applied in radial direction (e.g. cylinders)
|
|
30
|
+
*
|
|
31
|
+
* Default `[1, 1, 1]` (no offset through scaling)
|
|
32
|
+
*/
|
|
33
|
+
scaling?: Tuple<number, 3>;
|
|
11
34
|
/**
|
|
12
35
|
* `true`: Use UV mapping from source mesh\
|
|
13
36
|
* `false`: Use default box mapping from the decal
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDecalMesh = void 0;
|
|
3
|
+
exports.createDecalMesh = exports.DEFAULT_DECAL_CONFIG = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
+
exports.DEFAULT_DECAL_CONFIG = {
|
|
6
|
+
normal: [0, 0, 1],
|
|
7
|
+
angle: 0,
|
|
8
|
+
offset: 0.001,
|
|
9
|
+
scaling: [1, 1, 1],
|
|
10
|
+
captureUVS: false,
|
|
11
|
+
cullBackFaces: true,
|
|
12
|
+
localMode: true,
|
|
13
|
+
sideOrientation: __1.Material.ClockWiseSideOrientation,
|
|
14
|
+
};
|
|
5
15
|
/**
|
|
6
16
|
* Creates mesh from a decal configuration.\
|
|
7
17
|
* This is basically calling `MeshBuilder.CreateDecal`, with some extra steps:
|
|
@@ -10,7 +20,7 @@ const __1 = require("..");
|
|
|
10
20
|
* - move decal along the "normal" to avoid clipping
|
|
11
21
|
*/
|
|
12
22
|
function createDecalMesh(config, assetContainer, addToScene = true) {
|
|
13
|
-
var _a, _b, _c, _d, _e;
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
14
24
|
const sourceMesh = assetContainer.meshes.find(mesh => mesh.name === config.sourceMeshName);
|
|
15
25
|
if (!sourceMesh) {
|
|
16
26
|
throw new __1.ViewerError({
|
|
@@ -19,17 +29,17 @@ function createDecalMesh(config, assetContainer, addToScene = true) {
|
|
|
19
29
|
});
|
|
20
30
|
}
|
|
21
31
|
const position = __1.Vector3.FromArray(config.position);
|
|
22
|
-
const normal = __1.Vector3.FromArray(config.normal).normalizeToNew();
|
|
23
|
-
const localMode = (
|
|
32
|
+
const normal = __1.Vector3.FromArray((_a = config.normal) !== null && _a !== void 0 ? _a : exports.DEFAULT_DECAL_CONFIG.normal).normalizeToNew();
|
|
33
|
+
const localMode = (_b = config.localMode) !== null && _b !== void 0 ? _b : exports.DEFAULT_DECAL_CONFIG.localMode;
|
|
24
34
|
const worldNormal = localMode ? __1.Vector3.TransformNormal(normal, sourceMesh.getWorldMatrix()) : normal;
|
|
25
35
|
const decalMesh = __1.MeshBuilder.CreateDecal(config.name, sourceMesh, {
|
|
26
36
|
position: position,
|
|
27
37
|
normal: normal,
|
|
28
38
|
size: __1.Vector3.FromArray(config.size),
|
|
29
|
-
angle: config.angle,
|
|
30
|
-
captureUVS: (
|
|
31
|
-
cullBackFaces: (
|
|
32
|
-
localMode: (
|
|
39
|
+
angle: (_c = config.angle) !== null && _c !== void 0 ? _c : exports.DEFAULT_DECAL_CONFIG.angle,
|
|
40
|
+
captureUVS: (_d = config.captureUVS) !== null && _d !== void 0 ? _d : exports.DEFAULT_DECAL_CONFIG.captureUVS,
|
|
41
|
+
cullBackFaces: (_e = config.cullBackFaces) !== null && _e !== void 0 ? _e : exports.DEFAULT_DECAL_CONFIG.cullBackFaces,
|
|
42
|
+
localMode: (_f = config.localMode) !== null && _f !== void 0 ? _f : exports.DEFAULT_DECAL_CONFIG.localMode,
|
|
33
43
|
});
|
|
34
44
|
if (!addToScene) {
|
|
35
45
|
const scene = sourceMesh.getScene();
|
|
@@ -38,11 +48,13 @@ function createDecalMesh(config, assetContainer, addToScene = true) {
|
|
|
38
48
|
// make sure that the decal is part of the source mesh asset container
|
|
39
49
|
decalMesh._parentContainer = assetContainer;
|
|
40
50
|
assetContainer.meshes.push(decalMesh);
|
|
41
|
-
decalMesh.sideOrientation = (
|
|
51
|
+
decalMesh.sideOrientation = (_g = config.sideOrientation) !== null && _g !== void 0 ? _g : exports.DEFAULT_DECAL_CONFIG.sideOrientation;
|
|
42
52
|
// move decal away from mesh to avoid clipping
|
|
43
53
|
// NOTE: zOffset of material can't be used, since it's not supported in glTF and therefore not usable in AR
|
|
44
|
-
const offsetVector = worldNormal.scale(config.offset);
|
|
54
|
+
const offsetVector = worldNormal.scale((_h = config.offset) !== null && _h !== void 0 ? _h : exports.DEFAULT_DECAL_CONFIG.offset);
|
|
45
55
|
decalMesh.position.addInPlace(offsetVector);
|
|
56
|
+
// apply scaling, this is an alternative approach for creating an offset, which is preferred for round surfaces
|
|
57
|
+
decalMesh.scaling = __1.Vector3.FromArray((_j = config.scaling) !== null && _j !== void 0 ? _j : exports.DEFAULT_DECAL_CONFIG.scaling);
|
|
46
58
|
return decalMesh;
|
|
47
59
|
}
|
|
48
60
|
exports.createDecalMesh = createDecalMesh;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decals-helper.js","sourceRoot":"","sources":["../../../src/helper/decals-helper.ts"],"names":[],"mappings":";;;AAAA,0BAA+G;
|
|
1
|
+
{"version":3,"file":"decals-helper.js","sourceRoot":"","sources":["../../../src/helper/decals-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
import { AssetContainer, DecalConfiguration } from '../index';
|
|
2
|
-
/**
|
|
3
|
-
* Contains cbn custom data, like decals.
|
|
4
|
-
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
5
|
-
* altered by our file loader plugin.
|
|
6
|
-
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
7
|
-
*/
|
|
8
|
-
export declare class ExtendedAssetContainer extends AssetContainer {
|
|
9
|
-
cbnData?: CbnBabylonFileData;
|
|
10
|
-
}
|
|
11
|
-
export declare type CbnBabylonFileData = {
|
|
12
|
-
decals?: ParsedDecalConfiguration[];
|
|
13
|
-
};
|
|
14
|
-
export declare type ParsedDecalConfiguration = DecalConfiguration & {
|
|
15
|
-
materialId?: string;
|
|
16
|
-
};
|
|
17
1
|
/**
|
|
18
2
|
* Create and return a custom loader plugin to be registered with SceneLoader, that allows
|
|
19
3
|
* us to run our own code against the input data before using the standard procedure to
|
|
@@ -11,20 +11,12 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.registerCustomCbnBabylonLoaderPlugin =
|
|
14
|
+
exports.registerCustomCbnBabylonLoaderPlugin = void 0;
|
|
15
15
|
const index_1 = require("../index");
|
|
16
16
|
const metadata_helper_1 = require("./metadata-helper");
|
|
17
17
|
const tags_helper_1 = require("./tags-helper");
|
|
18
18
|
const lodash_es_1 = require("lodash-es");
|
|
19
|
-
|
|
20
|
-
* Contains cbn custom data, like decals.
|
|
21
|
-
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
22
|
-
* altered by our file loader plugin.
|
|
23
|
-
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
24
|
-
*/
|
|
25
|
-
class ExtendedAssetContainer extends index_1.AssetContainer {
|
|
26
|
-
}
|
|
27
|
-
exports.ExtendedAssetContainer = ExtendedAssetContainer;
|
|
19
|
+
let customLoader;
|
|
28
20
|
/**
|
|
29
21
|
* Create and return a custom loader plugin to be registered with SceneLoader, that allows
|
|
30
22
|
* us to run our own code against the input data before using the standard procedure to
|
|
@@ -37,11 +29,16 @@ exports.ExtendedAssetContainer = ExtendedAssetContainer;
|
|
|
37
29
|
* editor area
|
|
38
30
|
*/
|
|
39
31
|
function registerCustomCbnBabylonLoaderPlugin() {
|
|
32
|
+
if (customLoader) {
|
|
33
|
+
// create the custom loader only once, otherwise receiving the current .babylon plugin would return the custom
|
|
34
|
+
// loader, resulting in multiple calls of the plugin (e.g. decals will be created multiple times)
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
40
37
|
// get original plugin for babylon files
|
|
41
38
|
// we only want to manipulate Combeenation 3d assets, which are represented as babylon files
|
|
42
39
|
// the plugin is not used for GLB files, "local" babylon are also not really affected by this plugin
|
|
43
40
|
const previousLoaderPlugin = index_1.SceneLoader.GetPluginForExtension('.babylon');
|
|
44
|
-
|
|
41
|
+
customLoader = {
|
|
45
42
|
name: 'cbnCustomBabylonLoader',
|
|
46
43
|
extensions: '.babylon',
|
|
47
44
|
importMesh: previousLoaderPlugin.importMesh,
|
|
@@ -79,13 +76,7 @@ function _isMeshInstanceData(data) {
|
|
|
79
76
|
return hasName && hasValidTags;
|
|
80
77
|
}
|
|
81
78
|
function _isDecalConfiguration(data) {
|
|
82
|
-
const hasValidProps = (0, lodash_es_1.isString)(data.name) &&
|
|
83
|
-
(0, lodash_es_1.isString)(data.sourceMeshName) &&
|
|
84
|
-
(0, lodash_es_1.isArray)(data.position) &&
|
|
85
|
-
(0, lodash_es_1.isArray)(data.normal) &&
|
|
86
|
-
(0, lodash_es_1.isArray)(data.size) &&
|
|
87
|
-
(0, lodash_es_1.isNumber)(data.angle) &&
|
|
88
|
-
(0, lodash_es_1.isNumber)(data.offset);
|
|
79
|
+
const hasValidProps = (0, lodash_es_1.isString)(data.name) && (0, lodash_es_1.isString)(data.sourceMeshName) && (0, lodash_es_1.isArray)(data.position) && (0, lodash_es_1.isArray)(data.size);
|
|
89
80
|
if (!hasValidProps) {
|
|
90
81
|
throw new index_1.ViewerError({
|
|
91
82
|
id: index_1.ViewerErrorIds.InvalidDecalConfiguration,
|
|
@@ -167,13 +158,16 @@ function _createDecals(dataParsed, container) {
|
|
|
167
158
|
const validatedDecals = dataParsed.cbnData.decals.filter(_isDecalConfiguration);
|
|
168
159
|
validatedDecals.forEach(decalConfig => {
|
|
169
160
|
var _a;
|
|
170
|
-
const { materialId } = decalConfig, decalMeshConfig = __rest(decalConfig, ["materialId"]);
|
|
161
|
+
const { materialId, tags } = decalConfig, decalMeshConfig = __rest(decalConfig, ["materialId", "tags"]);
|
|
171
162
|
const decalMesh = (0, index_1.createDecalMesh)(decalMeshConfig, container, false);
|
|
172
|
-
// optionally set material directly
|
|
163
|
+
// optionally set material and tags directly
|
|
173
164
|
if (materialId) {
|
|
174
165
|
(_a = window.Cbn) === null || _a === void 0 ? void 0 : _a.Assets.assertMaterialExists(materialId);
|
|
175
166
|
(0, metadata_helper_1.setInternalMetadataValue)(decalMesh, 'deferredMaterial', materialId);
|
|
176
167
|
}
|
|
168
|
+
if (tags) {
|
|
169
|
+
(0, tags_helper_1.setTagsAsString)(decalMesh, tags);
|
|
170
|
+
}
|
|
177
171
|
});
|
|
178
172
|
}
|
|
179
173
|
//# sourceMappingURL=cbn-custom-babylon-loader-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cbn-custom-babylon-loader-plugin.js","sourceRoot":"","sources":["../../../src/internal/cbn-custom-babylon-loader-plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"cbn-custom-babylon-loader-plugin.js","sourceRoot":"","sources":["../../../src/internal/cbn-custom-babylon-loader-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { AssetContainer, DecalConfiguration, TransformNode, Viewer } from '../index';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Contains cbn custom data, like decals.
|
|
4
|
+
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
5
|
+
* altered by our file loader plugin.
|
|
6
|
+
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class ExtendedAssetContainer extends AssetContainer {
|
|
11
|
+
cbnData?: CbnBabylonFileData;
|
|
12
|
+
}
|
|
13
|
+
declare type CbnBabylonFileData = {
|
|
14
|
+
decals?: ParsedDecalConfiguration[];
|
|
15
|
+
};
|
|
16
|
+
export declare type ParsedDecalConfiguration = DecalConfiguration & {
|
|
17
|
+
materialId?: string;
|
|
18
|
+
tags?: string;
|
|
19
|
+
};
|
|
3
20
|
export declare type ModelAssetDefinition = {
|
|
4
21
|
name: string;
|
|
5
22
|
url: string;
|
|
@@ -120,7 +137,7 @@ export declare class ModelManager {
|
|
|
120
137
|
* Decals are already converted to "normal" meshes when loading a model, still the original decals configuration can
|
|
121
138
|
* be useful e.g. for alterning decals.
|
|
122
139
|
*/
|
|
123
|
-
getDecalsConfigurationOfModel(name: string): Promise<
|
|
140
|
+
getDecalsConfigurationOfModel(name: string): Promise<ParsedDecalConfiguration[]>;
|
|
124
141
|
/**
|
|
125
142
|
* Get model by name
|
|
126
143
|
*/
|
|
@@ -9,11 +9,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.ModelManager = void 0;
|
|
12
|
+
exports.ModelManager = exports.ExtendedAssetContainer = void 0;
|
|
13
13
|
const index_1 = require("../index");
|
|
14
14
|
const cloning_helper_1 = require("../internal/cloning-helper");
|
|
15
15
|
const metadata_helper_1 = require("../internal/metadata-helper");
|
|
16
16
|
const lodash_es_1 = require("lodash-es");
|
|
17
|
+
/**
|
|
18
|
+
* Contains cbn custom data, like decals.
|
|
19
|
+
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
20
|
+
* altered by our file loader plugin.
|
|
21
|
+
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
class ExtendedAssetContainer extends index_1.AssetContainer {
|
|
26
|
+
}
|
|
27
|
+
exports.ExtendedAssetContainer = ExtendedAssetContainer;
|
|
17
28
|
/**
|
|
18
29
|
* Manager for handling 3d models.\
|
|
19
30
|
* Responsible for loading models and handling their visibility.\
|
|
@@ -307,13 +318,7 @@ class ModelManager {
|
|
|
307
318
|
if (model.state !== 'inScene') {
|
|
308
319
|
yield this._prepareModelForScene(model);
|
|
309
320
|
}
|
|
310
|
-
|
|
311
|
-
const decals = ((_b = (_a = model.cbnBabylonFileData) === null || _a === void 0 ? void 0 : _a.decals) !== null && _b !== void 0 ? _b : []).map(parsedDecal => {
|
|
312
|
-
const croppedDecal = parsedDecal;
|
|
313
|
-
delete croppedDecal.materialId;
|
|
314
|
-
return croppedDecal;
|
|
315
|
-
});
|
|
316
|
-
return decals;
|
|
321
|
+
return (_b = (_a = model.cbnBabylonFileData) === null || _a === void 0 ? void 0 : _a.decals) !== null && _b !== void 0 ? _b : [];
|
|
317
322
|
});
|
|
318
323
|
}
|
|
319
324
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../src/manager/model-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../src/manager/model-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
import { IAssetContainer, Material, Mesh, MeshBuilder, Tuple, Vector3, ViewerError, ViewerErrorIds } from '..';
|
|
2
2
|
|
|
3
|
+
export const DEFAULT_DECAL_CONFIG = {
|
|
4
|
+
normal: [0, 0, 1],
|
|
5
|
+
angle: 0,
|
|
6
|
+
offset: 0.001,
|
|
7
|
+
scaling: [1, 1, 1],
|
|
8
|
+
captureUVS: false,
|
|
9
|
+
cullBackFaces: true,
|
|
10
|
+
localMode: true,
|
|
11
|
+
sideOrientation: Material.ClockWiseSideOrientation,
|
|
12
|
+
};
|
|
13
|
+
|
|
3
14
|
export type DecalConfiguration = {
|
|
4
15
|
// basic settings for decal creation
|
|
5
16
|
name: string;
|
|
6
17
|
sourceMeshName: string;
|
|
7
18
|
position: Tuple<number, 3>;
|
|
8
|
-
normal: Tuple<number, 3>;
|
|
9
19
|
size: Tuple<number, 3>;
|
|
10
|
-
angle: number;
|
|
11
20
|
|
|
12
|
-
/**
|
|
13
|
-
|
|
21
|
+
/** Default `[0, 0, 1]` (forward direction) */
|
|
22
|
+
normal?: Tuple<number, 3>;
|
|
23
|
+
|
|
24
|
+
/** Default `0` */
|
|
25
|
+
angle?: number;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Shifts decals away from source mesh in direction of "normal" vector
|
|
29
|
+
*
|
|
30
|
+
* Default `0.001` (1mm)
|
|
31
|
+
*/
|
|
32
|
+
offset?: number;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Can be used for shifting the decal away from the source mesh as alternative to `offset`.\
|
|
36
|
+
* Use this setting when the offset should be applied in radial direction (e.g. cylinders)
|
|
37
|
+
*
|
|
38
|
+
* Default `[1, 1, 1]` (no offset through scaling)
|
|
39
|
+
*/
|
|
40
|
+
scaling?: Tuple<number, 3>;
|
|
14
41
|
|
|
15
42
|
/**
|
|
16
43
|
* `true`: Use UV mapping from source mesh\
|
|
@@ -60,19 +87,19 @@ export function createDecalMesh(config: DecalConfiguration, assetContainer: IAss
|
|
|
60
87
|
}
|
|
61
88
|
|
|
62
89
|
const position = Vector3.FromArray(config.position);
|
|
63
|
-
const normal = Vector3.FromArray(config.normal).normalizeToNew();
|
|
90
|
+
const normal = Vector3.FromArray(config.normal ?? DEFAULT_DECAL_CONFIG.normal).normalizeToNew();
|
|
64
91
|
|
|
65
|
-
const localMode = config.localMode ??
|
|
92
|
+
const localMode = config.localMode ?? DEFAULT_DECAL_CONFIG.localMode;
|
|
66
93
|
const worldNormal = localMode ? Vector3.TransformNormal(normal, sourceMesh.getWorldMatrix()) : normal;
|
|
67
94
|
|
|
68
95
|
const decalMesh = MeshBuilder.CreateDecal(config.name, sourceMesh, {
|
|
69
96
|
position: position,
|
|
70
97
|
normal: normal,
|
|
71
98
|
size: Vector3.FromArray(config.size),
|
|
72
|
-
angle: config.angle,
|
|
73
|
-
captureUVS: config.captureUVS ??
|
|
74
|
-
cullBackFaces: config.cullBackFaces ??
|
|
75
|
-
localMode: config.localMode ??
|
|
99
|
+
angle: config.angle ?? DEFAULT_DECAL_CONFIG.angle,
|
|
100
|
+
captureUVS: config.captureUVS ?? DEFAULT_DECAL_CONFIG.captureUVS,
|
|
101
|
+
cullBackFaces: config.cullBackFaces ?? DEFAULT_DECAL_CONFIG.cullBackFaces,
|
|
102
|
+
localMode: config.localMode ?? DEFAULT_DECAL_CONFIG.localMode,
|
|
76
103
|
});
|
|
77
104
|
|
|
78
105
|
if (!addToScene) {
|
|
@@ -84,12 +111,15 @@ export function createDecalMesh(config: DecalConfiguration, assetContainer: IAss
|
|
|
84
111
|
decalMesh._parentContainer = assetContainer;
|
|
85
112
|
assetContainer.meshes.push(decalMesh);
|
|
86
113
|
|
|
87
|
-
decalMesh.sideOrientation = config.sideOrientation ??
|
|
114
|
+
decalMesh.sideOrientation = config.sideOrientation ?? DEFAULT_DECAL_CONFIG.sideOrientation;
|
|
88
115
|
|
|
89
116
|
// move decal away from mesh to avoid clipping
|
|
90
117
|
// NOTE: zOffset of material can't be used, since it's not supported in glTF and therefore not usable in AR
|
|
91
|
-
const offsetVector = worldNormal.scale(config.offset);
|
|
118
|
+
const offsetVector = worldNormal.scale(config.offset ?? DEFAULT_DECAL_CONFIG.offset);
|
|
92
119
|
decalMesh.position.addInPlace(offsetVector);
|
|
93
120
|
|
|
121
|
+
// apply scaling, this is an alternative approach for creating an offset, which is preferred for round surfaces
|
|
122
|
+
decalMesh.scaling = Vector3.FromArray(config.scaling ?? DEFAULT_DECAL_CONFIG.scaling);
|
|
123
|
+
|
|
94
124
|
return decalMesh;
|
|
95
125
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AssetContainer,
|
|
3
|
-
|
|
3
|
+
ExtendedAssetContainer,
|
|
4
4
|
ISceneLoaderPlugin,
|
|
5
5
|
InstancedMesh,
|
|
6
|
+
ParsedDecalConfiguration,
|
|
6
7
|
SceneLoader,
|
|
7
8
|
ViewerError,
|
|
8
9
|
ViewerErrorIds,
|
|
@@ -10,20 +11,7 @@ import {
|
|
|
10
11
|
} from '../index';
|
|
11
12
|
import { setInternalMetadataValue } from './metadata-helper';
|
|
12
13
|
import { deleteAllTags, getTags, setTagsAsString } from './tags-helper';
|
|
13
|
-
import { isArray,
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Contains cbn custom data, like decals.
|
|
17
|
-
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
18
|
-
* altered by our file loader plugin.
|
|
19
|
-
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
20
|
-
*/
|
|
21
|
-
export class ExtendedAssetContainer extends AssetContainer {
|
|
22
|
-
cbnData?: CbnBabylonFileData;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type CbnBabylonFileData = { decals?: ParsedDecalConfiguration[] };
|
|
26
|
-
export type ParsedDecalConfiguration = DecalConfiguration & { materialId?: string };
|
|
14
|
+
import { isArray, isString } from 'lodash-es';
|
|
27
15
|
|
|
28
16
|
type DataWithMeshes = { meshes: unknown[] };
|
|
29
17
|
type DataWithDecalConfigurations = { cbnData: { decals: unknown[] } };
|
|
@@ -39,6 +27,8 @@ type InstanceData = {
|
|
|
39
27
|
tags?: string;
|
|
40
28
|
};
|
|
41
29
|
|
|
30
|
+
let customLoader: ISceneLoaderPlugin;
|
|
31
|
+
|
|
42
32
|
/**
|
|
43
33
|
* Create and return a custom loader plugin to be registered with SceneLoader, that allows
|
|
44
34
|
* us to run our own code against the input data before using the standard procedure to
|
|
@@ -51,12 +41,18 @@ type InstanceData = {
|
|
|
51
41
|
* editor area
|
|
52
42
|
*/
|
|
53
43
|
export function registerCustomCbnBabylonLoaderPlugin(): void {
|
|
44
|
+
if (customLoader) {
|
|
45
|
+
// create the custom loader only once, otherwise receiving the current .babylon plugin would return the custom
|
|
46
|
+
// loader, resulting in multiple calls of the plugin (e.g. decals will be created multiple times)
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
54
50
|
// get original plugin for babylon files
|
|
55
51
|
// we only want to manipulate Combeenation 3d assets, which are represented as babylon files
|
|
56
52
|
// the plugin is not used for GLB files, "local" babylon are also not really affected by this plugin
|
|
57
53
|
const previousLoaderPlugin = SceneLoader.GetPluginForExtension('.babylon') as ISceneLoaderPlugin;
|
|
58
54
|
|
|
59
|
-
|
|
55
|
+
customLoader = {
|
|
60
56
|
name: 'cbnCustomBabylonLoader',
|
|
61
57
|
extensions: '.babylon',
|
|
62
58
|
importMesh: previousLoaderPlugin.importMesh,
|
|
@@ -104,13 +100,7 @@ function _isMeshInstanceData(data: any): data is InstanceData {
|
|
|
104
100
|
|
|
105
101
|
function _isDecalConfiguration(data: any): data is ParsedDecalConfiguration {
|
|
106
102
|
const hasValidProps =
|
|
107
|
-
isString(data.name) &&
|
|
108
|
-
isString(data.sourceMeshName) &&
|
|
109
|
-
isArray(data.position) &&
|
|
110
|
-
isArray(data.normal) &&
|
|
111
|
-
isArray(data.size) &&
|
|
112
|
-
isNumber(data.angle) &&
|
|
113
|
-
isNumber(data.offset);
|
|
103
|
+
isString(data.name) && isString(data.sourceMeshName) && isArray(data.position) && isArray(data.size);
|
|
114
104
|
|
|
115
105
|
if (!hasValidProps) {
|
|
116
106
|
throw new ViewerError({
|
|
@@ -200,13 +190,17 @@ function _createDecals(dataParsed: unknown, container: AssetContainer): void {
|
|
|
200
190
|
const validatedDecals = dataParsed.cbnData.decals.filter(_isDecalConfiguration);
|
|
201
191
|
|
|
202
192
|
validatedDecals.forEach(decalConfig => {
|
|
203
|
-
const { materialId, ...decalMeshConfig } = decalConfig;
|
|
193
|
+
const { materialId, tags, ...decalMeshConfig } = decalConfig;
|
|
204
194
|
const decalMesh = createDecalMesh(decalMeshConfig, container, false);
|
|
205
195
|
|
|
206
|
-
// optionally set material directly
|
|
196
|
+
// optionally set material and tags directly
|
|
207
197
|
if (materialId) {
|
|
208
198
|
window.Cbn?.Assets.assertMaterialExists(materialId);
|
|
209
199
|
setInternalMetadataValue(decalMesh, 'deferredMaterial', materialId);
|
|
210
200
|
}
|
|
201
|
+
|
|
202
|
+
if (tags) {
|
|
203
|
+
setTagsAsString(decalMesh, tags);
|
|
204
|
+
}
|
|
211
205
|
});
|
|
212
206
|
}
|
|
@@ -11,15 +11,25 @@ import {
|
|
|
11
11
|
ViewerError,
|
|
12
12
|
ViewerErrorIds,
|
|
13
13
|
} from '../index';
|
|
14
|
-
import {
|
|
15
|
-
CbnBabylonFileData,
|
|
16
|
-
ExtendedAssetContainer,
|
|
17
|
-
ParsedDecalConfiguration,
|
|
18
|
-
} from '../internal/cbn-custom-babylon-loader-plugin';
|
|
19
14
|
import { cloneModelAssetContainer } from '../internal/cloning-helper';
|
|
20
15
|
import { getInternalMetadataValue } from '../internal/metadata-helper';
|
|
21
16
|
import { isArray } from 'lodash-es';
|
|
22
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Contains cbn custom data, like decals.
|
|
20
|
+
* This is just a temporary type, as the `loadAssetContainer` function only returns an asset container, which can be
|
|
21
|
+
* altered by our file loader plugin.
|
|
22
|
+
* After loading the model, `cbnData` is cropped and a pure asset container is available for further processing.
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export class ExtendedAssetContainer extends AssetContainer {
|
|
27
|
+
cbnData?: CbnBabylonFileData;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type CbnBabylonFileData = { decals?: ParsedDecalConfiguration[] };
|
|
31
|
+
export type ParsedDecalConfiguration = DecalConfiguration & { materialId?: string; tags?: string };
|
|
32
|
+
|
|
23
33
|
export type ModelAssetDefinition = {
|
|
24
34
|
name: string;
|
|
25
35
|
url: string;
|
|
@@ -372,7 +382,7 @@ export class ModelManager {
|
|
|
372
382
|
* Decals are already converted to "normal" meshes when loading a model, still the original decals configuration can
|
|
373
383
|
* be useful e.g. for alterning decals.
|
|
374
384
|
*/
|
|
375
|
-
public async getDecalsConfigurationOfModel(name: string): Promise<
|
|
385
|
+
public async getDecalsConfigurationOfModel(name: string): Promise<ParsedDecalConfiguration[]> {
|
|
376
386
|
const model = this._getModel(name);
|
|
377
387
|
if (!model) {
|
|
378
388
|
throw new ViewerError({
|
|
@@ -391,16 +401,7 @@ export class ModelManager {
|
|
|
391
401
|
await this._prepareModelForScene(model);
|
|
392
402
|
}
|
|
393
403
|
|
|
394
|
-
|
|
395
|
-
const decals = ((model.cbnBabylonFileData?.decals ?? []) as ParsedDecalConfiguration[]).map<DecalConfiguration>(
|
|
396
|
-
parsedDecal => {
|
|
397
|
-
const croppedDecal = parsedDecal;
|
|
398
|
-
delete croppedDecal.materialId;
|
|
399
|
-
return croppedDecal;
|
|
400
|
-
}
|
|
401
|
-
);
|
|
402
|
-
|
|
403
|
-
return decals;
|
|
404
|
+
return model.cbnBabylonFileData?.decals ?? [];
|
|
404
405
|
}
|
|
405
406
|
|
|
406
407
|
/**
|