@combeenation/3d-viewer 20.0.0-alpha1 → 20.0.0-beta1
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/manager/camera-manager.d.ts +10 -0
- package/dist/lib-cjs/manager/camera-manager.js +40 -20
- package/dist/lib-cjs/manager/camera-manager.js.map +1 -1
- package/dist/lib-cjs/manager/scene-manager.d.ts +11 -1
- package/dist/lib-cjs/manager/scene-manager.js +6 -4
- package/dist/lib-cjs/manager/scene-manager.js.map +1 -1
- package/dist/lib-cjs/utils/viewer-utils.d.ts +40 -1
- package/dist/lib-cjs/utils/viewer-utils.js +48 -0
- package/dist/lib-cjs/utils/viewer-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/manager/camera-manager.ts +63 -20
- package/src/manager/scene-manager.ts +18 -4
- package/src/utils/viewer-utils.ts +84 -0
|
@@ -8,15 +8,25 @@ export declare type CameraPosition = {
|
|
|
8
8
|
export declare type AutofocusSettings = {
|
|
9
9
|
/** Can be used to customize the margins shown around the 3d model. Defaults to 1. */
|
|
10
10
|
radiusFactor?: number;
|
|
11
|
+
adjustLowerRadiusLimit?: boolean;
|
|
12
|
+
adjustMinZ?: boolean;
|
|
11
13
|
adjustWheelPrecision?: boolean;
|
|
12
14
|
adjustPanningSensibility?: boolean;
|
|
13
15
|
adjustPinchPrecision?: boolean;
|
|
16
|
+
adjustAlpha?: boolean;
|
|
17
|
+
adjustBeta?: boolean;
|
|
18
|
+
adjustRadius?: boolean;
|
|
14
19
|
/** Desired horizontal camera angle, this won't be overwritten by the autofocus function */
|
|
15
20
|
alpha?: number;
|
|
16
21
|
/** Desired vertical camera angle, this won't be overwritten by the autofocus function */
|
|
17
22
|
beta?: number;
|
|
18
23
|
/** Optional list of nodes to be excluded from camera distance calculation for autofocusing */
|
|
19
24
|
excludeNodes?: NodeDescription[];
|
|
25
|
+
/**
|
|
26
|
+
* Defines if HTML anchors should be considered for the autofocus camera distance calculation.\
|
|
27
|
+
* Default: `true`
|
|
28
|
+
*/
|
|
29
|
+
excludeHtmlAnchors?: boolean;
|
|
20
30
|
durationMs?: number;
|
|
21
31
|
};
|
|
22
32
|
export declare type ScreenshotSettings = {
|
|
@@ -29,6 +29,7 @@ class CameraManager {
|
|
|
29
29
|
autofocusActiveCamera(settings) {
|
|
30
30
|
var _a, _b, _c;
|
|
31
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
const { adjustLowerRadiusLimit, adjustMinZ, adjustWheelPrecision, adjustPanningSensibility, adjustPinchPrecision, adjustAlpha, adjustBeta, adjustRadius, excludeNodes, excludeHtmlAnchors, durationMs, } = settings !== null && settings !== void 0 ? settings : {};
|
|
32
33
|
const activeCamera = this.viewer.scene.activeCamera;
|
|
33
34
|
if (!(activeCamera instanceof index_1.ArcRotateCamera)) {
|
|
34
35
|
throw new index_1.ViewerError({
|
|
@@ -37,36 +38,50 @@ class CameraManager {
|
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
40
|
// get bounding box of all visible meshes, this is the base for the autofocus algorithm
|
|
40
|
-
const boundingInfo = this.viewer.sceneManager.calculateBoundingInfo(
|
|
41
|
+
const boundingInfo = this.viewer.sceneManager.calculateBoundingInfo({ excludeNodes, excludeHtmlAnchors });
|
|
41
42
|
// optionally show bounding sphere for debugging purpose
|
|
42
43
|
this.viewer.eventManager.fireEvent(index_1.ViewerEvent.AutofocusStart, boundingInfo.boundingSphere);
|
|
43
44
|
const distance = this._getAutofocusZoomingDistance(boundingInfo.boundingSphere, activeCamera);
|
|
44
|
-
const
|
|
45
|
-
const
|
|
45
|
+
const bBoxRadius = boundingInfo.boundingSphere.radius;
|
|
46
|
+
const bBoxCenter = boundingInfo.boundingSphere.center;
|
|
46
47
|
// set lower radius limit on edge of bounding sphere to make sure that we can't dive into the meshes
|
|
47
|
-
|
|
48
|
+
if (adjustLowerRadiusLimit !== false) {
|
|
49
|
+
activeCamera.lowerRadiusLimit = bBoxRadius;
|
|
50
|
+
}
|
|
48
51
|
// additional settings
|
|
49
52
|
// constants for division are taken directly from Babylon.js repository
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
if (adjustMinZ !== false) {
|
|
54
|
+
activeCamera.minZ = Math.min(bBoxRadius / CameraManager._AUTOFOCUS_CONSTANTS.minZ, 1);
|
|
55
|
+
}
|
|
56
|
+
if (adjustWheelPrecision !== false) {
|
|
57
|
+
activeCamera.wheelPrecision = CameraManager._AUTOFOCUS_CONSTANTS.wheelPrecision / bBoxRadius;
|
|
58
|
+
}
|
|
59
|
+
if (adjustPanningSensibility !== false) {
|
|
60
|
+
activeCamera.panningSensibility = CameraManager._AUTOFOCUS_CONSTANTS.panningSensibility / bBoxRadius;
|
|
61
|
+
}
|
|
62
|
+
if (adjustPinchPrecision !== false) {
|
|
63
|
+
activeCamera.pinchPrecision = CameraManager._AUTOFOCUS_CONSTANTS.pinchPrecision / bBoxRadius;
|
|
64
|
+
}
|
|
65
|
+
let alpha = activeCamera.alpha;
|
|
66
|
+
let beta = activeCamera.beta;
|
|
67
|
+
let radius = activeCamera.radius;
|
|
68
|
+
if (adjustAlpha !== false) {
|
|
69
|
+
alpha = (_a = settings === null || settings === void 0 ? void 0 : settings.alpha) !== null && _a !== void 0 ? _a : CameraManager.DEFAULT_CAMERA_POSITION.alpha;
|
|
53
70
|
}
|
|
54
|
-
if (
|
|
55
|
-
|
|
71
|
+
if (adjustBeta !== false) {
|
|
72
|
+
beta = (_b = settings === null || settings === void 0 ? void 0 : settings.beta) !== null && _b !== void 0 ? _b : CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
56
73
|
}
|
|
57
|
-
if (
|
|
58
|
-
|
|
74
|
+
if (adjustRadius !== false) {
|
|
75
|
+
const radiusFactor = (_c = settings === null || settings === void 0 ? void 0 : settings.radiusFactor) !== null && _c !== void 0 ? _c : CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
76
|
+
radius = distance * radiusFactor;
|
|
59
77
|
}
|
|
60
|
-
const radiusFactor = (_a = settings === null || settings === void 0 ? void 0 : settings.radiusFactor) !== null && _a !== void 0 ? _a : CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
61
|
-
const alpha = (_b = settings === null || settings === void 0 ? void 0 : settings.alpha) !== null && _b !== void 0 ? _b : CameraManager.DEFAULT_CAMERA_POSITION.alpha;
|
|
62
|
-
const beta = (_c = settings === null || settings === void 0 ? void 0 : settings.beta) !== null && _c !== void 0 ? _c : CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
63
78
|
const newCameraPosition = {
|
|
64
|
-
alpha
|
|
65
|
-
beta
|
|
66
|
-
radius
|
|
67
|
-
target:
|
|
79
|
+
alpha,
|
|
80
|
+
beta,
|
|
81
|
+
radius,
|
|
82
|
+
target: bBoxCenter,
|
|
68
83
|
};
|
|
69
|
-
yield this.moveActiveCameraTo(newCameraPosition,
|
|
84
|
+
yield this.moveActiveCameraTo(newCameraPosition, durationMs);
|
|
70
85
|
});
|
|
71
86
|
}
|
|
72
87
|
/**
|
|
@@ -125,7 +140,12 @@ class CameraManager {
|
|
|
125
140
|
return __awaiter(this, void 0, void 0, function* () {
|
|
126
141
|
const { width, height, alpha, beta, radius, target, autofocusScene, excludeNodes, excludeHtmlAnchorGroups, cropTransparentArea, fileName, samples, antialiasing, renderSprites, enableStencilBuffer, useLayerMask, quality, } = settings !== null && settings !== void 0 ? settings : {};
|
|
127
142
|
const screenshotCam = (_a = this.viewer.scene.activeCamera) === null || _a === void 0 ? void 0 : _a.clone(CameraManager._SCREENSHOT_CAMERA_NAME);
|
|
128
|
-
const boundingInfo = autofocusScene
|
|
143
|
+
const boundingInfo = autofocusScene
|
|
144
|
+
? this.viewer.sceneManager.calculateBoundingInfo({
|
|
145
|
+
excludeNodes,
|
|
146
|
+
excludeHtmlAnchors: excludeHtmlAnchorGroups === true,
|
|
147
|
+
})
|
|
148
|
+
: undefined;
|
|
129
149
|
if (alpha !== undefined) {
|
|
130
150
|
screenshotCam.alpha = alpha;
|
|
131
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-manager.js","sourceRoot":"","sources":["../../../src/manager/camera-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAYkB;AAClB,mEAAsE;AACtE,6DAAyD;AACzD,yDAAiE;AACjE,qEAAmF;
|
|
1
|
+
{"version":3,"file":"camera-manager.js","sourceRoot":"","sources":["../../../src/manager/camera-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,15 @@ export declare type UpdateShadowsSettings = {
|
|
|
61
61
|
*/
|
|
62
62
|
excludeReceiverNodes?: NodeDescription[];
|
|
63
63
|
};
|
|
64
|
+
export declare type CalculateBoundingInfoSettings = {
|
|
65
|
+
/** Optional list of nodes to be excluded from bounding info calculation */
|
|
66
|
+
excludeNodes?: NodeDescription[];
|
|
67
|
+
/**
|
|
68
|
+
* Defines if HTML anchors should be considered for the bounding info calculation.\
|
|
69
|
+
* Default: `true`
|
|
70
|
+
*/
|
|
71
|
+
excludeHtmlAnchors?: boolean;
|
|
72
|
+
};
|
|
64
73
|
/**
|
|
65
74
|
* Additional scene settings, which are not available in a basic `AssetContainer`.
|
|
66
75
|
* !!! IMPORTANT when adding a new property !!!
|
|
@@ -81,6 +90,7 @@ declare type SceneAsset = BaseAsset & {
|
|
|
81
90
|
*/
|
|
82
91
|
export declare class SceneManager {
|
|
83
92
|
protected viewer: Viewer;
|
|
93
|
+
protected static _DEFAULT_SCENE_ASSET_ENVIRONMENT_URL: string;
|
|
84
94
|
protected static _DEFAULT_SCENE_ASSET_NAME: string;
|
|
85
95
|
protected static _DEFAULT_GROUND_PLANE_NAME: string;
|
|
86
96
|
protected static _DEFAULT_GROUND_SIZING_FACTOR: number;
|
|
@@ -124,7 +134,7 @@ export declare class SceneManager {
|
|
|
124
134
|
* - do not have a material of type "BackgroundMaterial"
|
|
125
135
|
* - do not have an infinite distance (like sky boxes)
|
|
126
136
|
*/
|
|
127
|
-
calculateBoundingInfo(
|
|
137
|
+
calculateBoundingInfo(settings?: CalculateBoundingInfoSettings): BoundingInfo;
|
|
128
138
|
/**
|
|
129
139
|
* Adjusts position and scaling of a dedicated "ground" meshes according to the bounding sphere of the current scene
|
|
130
140
|
* content.\
|
|
@@ -38,7 +38,7 @@ class SceneManager {
|
|
|
38
38
|
},
|
|
39
39
|
environment: {
|
|
40
40
|
create: true,
|
|
41
|
-
url:
|
|
41
|
+
url: SceneManager._DEFAULT_SCENE_ASSET_ENVIRONMENT_URL,
|
|
42
42
|
intensity: 1,
|
|
43
43
|
},
|
|
44
44
|
};
|
|
@@ -178,7 +178,8 @@ class SceneManager {
|
|
|
178
178
|
* - do not have a material of type "BackgroundMaterial"
|
|
179
179
|
* - do not have an infinite distance (like sky boxes)
|
|
180
180
|
*/
|
|
181
|
-
calculateBoundingInfo(
|
|
181
|
+
calculateBoundingInfo(settings) {
|
|
182
|
+
const { excludeNodes, excludeHtmlAnchors } = settings !== null && settings !== void 0 ? settings : {};
|
|
182
183
|
// CB-6062: workaround for BoundingBox not respecting render loop
|
|
183
184
|
this.viewer.scene.render();
|
|
184
185
|
const { max, min } = this.viewer.scene.meshes
|
|
@@ -190,7 +191,7 @@ class SceneManager {
|
|
|
190
191
|
hasInvalidBoundingInfo: true,
|
|
191
192
|
hasInfiniteDistance: true,
|
|
192
193
|
isGeneratedBackgroundMesh: true,
|
|
193
|
-
isHtmlAnchorMesh:
|
|
194
|
+
isHtmlAnchorMesh: excludeHtmlAnchors !== false,
|
|
194
195
|
});
|
|
195
196
|
return !isExcluded;
|
|
196
197
|
})
|
|
@@ -213,7 +214,7 @@ class SceneManager {
|
|
|
213
214
|
*/
|
|
214
215
|
updateGround(settings) {
|
|
215
216
|
var _a, _b;
|
|
216
|
-
const bboxInfo = this.calculateBoundingInfo(settings === null || settings === void 0 ? void 0 : settings.excludeNodes);
|
|
217
|
+
const bboxInfo = this.calculateBoundingInfo({ excludeNodes: settings === null || settings === void 0 ? void 0 : settings.excludeNodes });
|
|
217
218
|
const groundMesh = (_a = settings === null || settings === void 0 ? void 0 : settings.groundMesh) !== null && _a !== void 0 ? _a : this.viewer.scene.getMeshByName(SceneManager._DEFAULT_GROUND_PLANE_NAME);
|
|
218
219
|
if (!groundMesh) {
|
|
219
220
|
console.warn("Can't update ground, as no ground mesh is available");
|
|
@@ -328,6 +329,7 @@ class SceneManager {
|
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
331
|
exports.SceneManager = SceneManager;
|
|
332
|
+
SceneManager._DEFAULT_SCENE_ASSET_ENVIRONMENT_URL = 'https://cbnpeuwstservice.blob.core.windows.net/viewer3d/static/studio.env';
|
|
331
333
|
SceneManager._DEFAULT_SCENE_ASSET_NAME = '$defaultScene';
|
|
332
334
|
SceneManager._DEFAULT_GROUND_PLANE_NAME = 'BackgroundPlane';
|
|
333
335
|
SceneManager._DEFAULT_GROUND_SIZING_FACTOR = 5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-manager.js","sourceRoot":"","sources":["../../../src/manager/scene-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAekB;AAClB,2DAAsF;AACtF,yDAAiE;AACjE,yCAAkC;
|
|
1
|
+
{"version":3,"file":"scene-manager.js","sourceRoot":"","sources":["../../../src/manager/scene-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FloatArray, Geometry, Mesh, MorphTarget, MorphTargetManager, TransformNode, Vector3, Viewer } from '../index';
|
|
1
|
+
import { FloatArray, Geometry, Mesh, MorphTarget, MorphTargetManager, Node, TransformNode, Vector3, Viewer } from '../index';
|
|
2
2
|
export declare type BakeGeometrySettings = {
|
|
3
3
|
keepTransformation?: boolean;
|
|
4
4
|
};
|
|
@@ -8,6 +8,31 @@ export declare type CreateTransformNodeSettings = {
|
|
|
8
8
|
rotation?: Vector3;
|
|
9
9
|
scaling?: Vector3;
|
|
10
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Expected metadata structure for find node functions {@link ViewerUtils.findChildNodes} and
|
|
13
|
+
* {@link ViewerUtils.findParentNode}
|
|
14
|
+
*/
|
|
15
|
+
export declare type MetadataObject = Record<string, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* Contains all constructor that derive from `Node`, e.g. `TransformNode`, `Mesh`
|
|
18
|
+
*/
|
|
19
|
+
export declare type DerivedNodeType<T extends Node> = new (...args: any[]) => T;
|
|
20
|
+
/**
|
|
21
|
+
* Criteria object for find node functions {@link ViewerUtils.findChildNodes} and {@link ViewerUtils.findParentNode}.\
|
|
22
|
+
* If property is omitted, the dedicated filter passes.
|
|
23
|
+
*
|
|
24
|
+
* @param nodeName has to match exactly
|
|
25
|
+
* @param tagName uses algorithm of `Tags.MatchesQuery`, in most cases this is just an exact string match check
|
|
26
|
+
* @param metadataObject has to be an object, filter passes if all property values of the given input object match the
|
|
27
|
+
* checked node
|
|
28
|
+
* @param type nodes type has to match (e.g. Mesh)
|
|
29
|
+
*/
|
|
30
|
+
export declare type FindNodeCriteria<T extends Node> = {
|
|
31
|
+
nodeName?: string;
|
|
32
|
+
tagName?: string;
|
|
33
|
+
metadataObject?: MetadataObject;
|
|
34
|
+
type?: DerivedNodeType<T>;
|
|
35
|
+
};
|
|
11
36
|
export declare class ViewerUtils {
|
|
12
37
|
protected viewer: Viewer;
|
|
13
38
|
/** @internal */
|
|
@@ -26,10 +51,24 @@ export declare class ViewerUtils {
|
|
|
26
51
|
* Optionally set a parent node for the new `TransformNode` right away.
|
|
27
52
|
*/
|
|
28
53
|
getOrCreateTransformNode(nodeName: string, settings?: CreateTransformNodeSettings): TransformNode;
|
|
54
|
+
/**
|
|
55
|
+
* Finds all child nodes (TransformNodes, Meshes, but also Lights, Cameras, etc...) that match a given criteria.
|
|
56
|
+
*
|
|
57
|
+
* @param node If left empty, all nodes of the scene are considered
|
|
58
|
+
* @param criteria If left empty, all child nodes are returned
|
|
59
|
+
*/
|
|
60
|
+
findChildNodes<T extends Node>(node?: Node, criteria?: FindNodeCriteria<T>): T[];
|
|
61
|
+
/**
|
|
62
|
+
* Finds nearest node that matches a given criteria.\
|
|
63
|
+
* Returns `undefined` if no node could be found.
|
|
64
|
+
*/
|
|
65
|
+
findParentNode<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): T | undefined;
|
|
29
66
|
/**
|
|
30
67
|
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
31
68
|
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
32
69
|
*/
|
|
33
70
|
protected _bakeMorphTargetManagerIntoVertices(kind: string, morphTargetManager: MorphTargetManager, geometry: Geometry): void;
|
|
34
71
|
protected _getVerticesDataFromMorphTarget(kind: string, morphTarget: MorphTarget): FloatArray | null;
|
|
72
|
+
protected _matchesFindNodeCriteria<T extends Node>(node: Node, criteria?: FindNodeCriteria<T>): boolean;
|
|
73
|
+
protected _matchesMetadata(metadata: unknown, filter: MetadataObject): boolean;
|
|
35
74
|
}
|
|
@@ -70,6 +70,39 @@ class ViewerUtils {
|
|
|
70
70
|
node.scaling = scaling !== null && scaling !== void 0 ? scaling : index_1.Vector3.One();
|
|
71
71
|
return node;
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Finds all child nodes (TransformNodes, Meshes, but also Lights, Cameras, etc...) that match a given criteria.
|
|
75
|
+
*
|
|
76
|
+
* @param node If left empty, all nodes of the scene are considered
|
|
77
|
+
* @param criteria If left empty, all child nodes are returned
|
|
78
|
+
*/
|
|
79
|
+
findChildNodes(node, criteria) {
|
|
80
|
+
const allNodes = node ? node.getChildren(undefined, false) : [...this.viewer.scene.getNodes()];
|
|
81
|
+
if (!criteria)
|
|
82
|
+
return allNodes;
|
|
83
|
+
const foundNodes = allNodes.filter(node => this._matchesFindNodeCriteria(node, criteria));
|
|
84
|
+
return foundNodes;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Finds nearest node that matches a given criteria.\
|
|
88
|
+
* Returns `undefined` if no node could be found.
|
|
89
|
+
*/
|
|
90
|
+
findParentNode(node, criteria) {
|
|
91
|
+
const parent = node.parent;
|
|
92
|
+
if (!parent) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
else if (!criteria) {
|
|
96
|
+
return parent;
|
|
97
|
+
}
|
|
98
|
+
const matchesCriteria = this._matchesFindNodeCriteria(parent, criteria);
|
|
99
|
+
if (matchesCriteria) {
|
|
100
|
+
return parent;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return this.findParentNode(parent, criteria);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
73
106
|
/**
|
|
74
107
|
* @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
|
|
75
108
|
* still other kinds (like normals or tangents) can be affected as well and can be provided on this input
|
|
@@ -107,6 +140,21 @@ class ViewerUtils {
|
|
|
107
140
|
}
|
|
108
141
|
return null;
|
|
109
142
|
}
|
|
143
|
+
_matchesFindNodeCriteria(node, criteria) {
|
|
144
|
+
if (!criteria)
|
|
145
|
+
return true;
|
|
146
|
+
const { nodeName, tagName, metadataObject, type } = criteria;
|
|
147
|
+
const nodeNameFits = !nodeName || node.name === nodeName;
|
|
148
|
+
const tagNameFits = !tagName || index_1.Tags.MatchesQuery(node, tagName);
|
|
149
|
+
const metadataFits = !metadataObject || this._matchesMetadata(node.metadata, metadataObject);
|
|
150
|
+
const typeFits = !type || node instanceof type;
|
|
151
|
+
return nodeNameFits && tagNameFits && metadataFits && typeFits;
|
|
152
|
+
}
|
|
153
|
+
_matchesMetadata(metadata, filter) {
|
|
154
|
+
if (!metadata || typeof metadata !== 'object')
|
|
155
|
+
return false;
|
|
156
|
+
return Object.entries(filter).every(([key, value]) => metadata[key] === value);
|
|
157
|
+
}
|
|
110
158
|
}
|
|
111
159
|
exports.ViewerUtils = ViewerUtils;
|
|
112
160
|
//# sourceMappingURL=viewer-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-utils.js","sourceRoot":"","sources":["../../../src/utils/viewer-utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"viewer-utils.js","sourceRoot":"","sources":["../../../src/utils/viewer-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -26,15 +26,25 @@ export type CameraPosition = {
|
|
|
26
26
|
export type AutofocusSettings = {
|
|
27
27
|
/** Can be used to customize the margins shown around the 3d model. Defaults to 1. */
|
|
28
28
|
radiusFactor?: number;
|
|
29
|
+
adjustLowerRadiusLimit?: boolean;
|
|
30
|
+
adjustMinZ?: boolean;
|
|
29
31
|
adjustWheelPrecision?: boolean;
|
|
30
32
|
adjustPanningSensibility?: boolean;
|
|
31
33
|
adjustPinchPrecision?: boolean;
|
|
34
|
+
adjustAlpha?: boolean;
|
|
35
|
+
adjustBeta?: boolean;
|
|
36
|
+
adjustRadius?: boolean;
|
|
32
37
|
/** Desired horizontal camera angle, this won't be overwritten by the autofocus function */
|
|
33
38
|
alpha?: number;
|
|
34
39
|
/** Desired vertical camera angle, this won't be overwritten by the autofocus function */
|
|
35
40
|
beta?: number;
|
|
36
41
|
/** Optional list of nodes to be excluded from camera distance calculation for autofocusing */
|
|
37
42
|
excludeNodes?: NodeDescription[];
|
|
43
|
+
/**
|
|
44
|
+
* Defines if HTML anchors should be considered for the autofocus camera distance calculation.\
|
|
45
|
+
* Default: `true`
|
|
46
|
+
*/
|
|
47
|
+
excludeHtmlAnchors?: boolean;
|
|
38
48
|
durationMs?: number;
|
|
39
49
|
};
|
|
40
50
|
|
|
@@ -152,6 +162,20 @@ export class CameraManager {
|
|
|
152
162
|
* Focuses the camera to see every visible mesh in scene and tries to optimize wheel precision and panning
|
|
153
163
|
*/
|
|
154
164
|
public async autofocusActiveCamera(settings?: AutofocusSettings): Promise<void> {
|
|
165
|
+
const {
|
|
166
|
+
adjustLowerRadiusLimit,
|
|
167
|
+
adjustMinZ,
|
|
168
|
+
adjustWheelPrecision,
|
|
169
|
+
adjustPanningSensibility,
|
|
170
|
+
adjustPinchPrecision,
|
|
171
|
+
adjustAlpha,
|
|
172
|
+
adjustBeta,
|
|
173
|
+
adjustRadius,
|
|
174
|
+
excludeNodes,
|
|
175
|
+
excludeHtmlAnchors,
|
|
176
|
+
durationMs,
|
|
177
|
+
} = settings ?? {};
|
|
178
|
+
|
|
155
179
|
const activeCamera = this.viewer.scene.activeCamera;
|
|
156
180
|
|
|
157
181
|
if (!(activeCamera instanceof ArcRotateCamera)) {
|
|
@@ -162,42 +186,56 @@ export class CameraManager {
|
|
|
162
186
|
}
|
|
163
187
|
|
|
164
188
|
// get bounding box of all visible meshes, this is the base for the autofocus algorithm
|
|
165
|
-
const boundingInfo = this.viewer.sceneManager.calculateBoundingInfo(
|
|
189
|
+
const boundingInfo = this.viewer.sceneManager.calculateBoundingInfo({ excludeNodes, excludeHtmlAnchors });
|
|
166
190
|
// optionally show bounding sphere for debugging purpose
|
|
167
191
|
this.viewer.eventManager.fireEvent(ViewerEvent.AutofocusStart, boundingInfo.boundingSphere);
|
|
168
192
|
|
|
169
193
|
const distance = this._getAutofocusZoomingDistance(boundingInfo.boundingSphere, activeCamera);
|
|
170
|
-
const
|
|
171
|
-
const
|
|
194
|
+
const bBoxRadius = boundingInfo.boundingSphere.radius;
|
|
195
|
+
const bBoxCenter = boundingInfo.boundingSphere.center;
|
|
172
196
|
|
|
173
197
|
// set lower radius limit on edge of bounding sphere to make sure that we can't dive into the meshes
|
|
174
|
-
|
|
198
|
+
if (adjustLowerRadiusLimit !== false) {
|
|
199
|
+
activeCamera.lowerRadiusLimit = bBoxRadius;
|
|
200
|
+
}
|
|
175
201
|
|
|
176
202
|
// additional settings
|
|
177
203
|
// constants for division are taken directly from Babylon.js repository
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
activeCamera.wheelPrecision = CameraManager._AUTOFOCUS_CONSTANTS.wheelPrecision / radius;
|
|
204
|
+
if (adjustMinZ !== false) {
|
|
205
|
+
activeCamera.minZ = Math.min(bBoxRadius / CameraManager._AUTOFOCUS_CONSTANTS.minZ, 1);
|
|
181
206
|
}
|
|
182
|
-
if (
|
|
183
|
-
activeCamera.
|
|
207
|
+
if (adjustWheelPrecision !== false) {
|
|
208
|
+
activeCamera.wheelPrecision = CameraManager._AUTOFOCUS_CONSTANTS.wheelPrecision / bBoxRadius;
|
|
184
209
|
}
|
|
185
|
-
if (
|
|
186
|
-
activeCamera.
|
|
210
|
+
if (adjustPanningSensibility !== false) {
|
|
211
|
+
activeCamera.panningSensibility = CameraManager._AUTOFOCUS_CONSTANTS.panningSensibility / bBoxRadius;
|
|
212
|
+
}
|
|
213
|
+
if (adjustPinchPrecision !== false) {
|
|
214
|
+
activeCamera.pinchPrecision = CameraManager._AUTOFOCUS_CONSTANTS.pinchPrecision / bBoxRadius;
|
|
187
215
|
}
|
|
188
216
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
217
|
+
let alpha = activeCamera.alpha;
|
|
218
|
+
let beta = activeCamera.beta;
|
|
219
|
+
let radius = activeCamera.radius;
|
|
220
|
+
if (adjustAlpha !== false) {
|
|
221
|
+
alpha = settings?.alpha ?? CameraManager.DEFAULT_CAMERA_POSITION.alpha;
|
|
222
|
+
}
|
|
223
|
+
if (adjustBeta !== false) {
|
|
224
|
+
beta = settings?.beta ?? CameraManager.DEFAULT_CAMERA_POSITION.beta;
|
|
225
|
+
}
|
|
226
|
+
if (adjustRadius !== false) {
|
|
227
|
+
const radiusFactor = settings?.radiusFactor ?? CameraManager._DEFAULT_AUTOFOCUS_RADIUS_FACTOR;
|
|
228
|
+
radius = distance * radiusFactor;
|
|
229
|
+
}
|
|
192
230
|
|
|
193
231
|
const newCameraPosition: CameraPosition = {
|
|
194
|
-
alpha
|
|
195
|
-
beta
|
|
196
|
-
radius
|
|
197
|
-
target:
|
|
232
|
+
alpha,
|
|
233
|
+
beta,
|
|
234
|
+
radius,
|
|
235
|
+
target: bBoxCenter,
|
|
198
236
|
};
|
|
199
237
|
|
|
200
|
-
await this.moveActiveCameraTo(newCameraPosition,
|
|
238
|
+
await this.moveActiveCameraTo(newCameraPosition, durationMs);
|
|
201
239
|
}
|
|
202
240
|
|
|
203
241
|
/**
|
|
@@ -314,7 +352,12 @@ export class CameraManager {
|
|
|
314
352
|
const screenshotCam = this.viewer.scene.activeCamera?.clone(
|
|
315
353
|
CameraManager._SCREENSHOT_CAMERA_NAME
|
|
316
354
|
) as ArcRotateCamera;
|
|
317
|
-
const boundingInfo = autofocusScene
|
|
355
|
+
const boundingInfo = autofocusScene
|
|
356
|
+
? this.viewer.sceneManager.calculateBoundingInfo({
|
|
357
|
+
excludeNodes,
|
|
358
|
+
excludeHtmlAnchors: excludeHtmlAnchorGroups === true,
|
|
359
|
+
})
|
|
360
|
+
: undefined;
|
|
318
361
|
|
|
319
362
|
if (alpha !== undefined) {
|
|
320
363
|
screenshotCam.alpha = alpha;
|