@combeenation/3d-viewer 18.1.0-beta1 → 18.1.0
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/internal/screenshot-helper.js +1 -1
- package/dist/lib-cjs/internal/screenshot-helper.js.map +1 -1
- package/dist/lib-cjs/manager/html-anchor-manager.d.ts +1 -1
- package/dist/lib-cjs/manager/html-anchor-manager.js +24 -5
- package/dist/lib-cjs/manager/html-anchor-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/internal/screenshot-helper.ts +1 -1
- package/src/manager/html-anchor-manager.ts +31 -2
|
@@ -28,7 +28,7 @@ function createScreenshotCanvas(imageStr3d, screenshotSize, screenshotHtmlCanvas
|
|
|
28
28
|
screenshotCombinedCanvas.width = screenshotSize.imageWidth;
|
|
29
29
|
screenshotCombinedCanvas.height = screenshotSize.imageHeight;
|
|
30
30
|
// draw main and html screenshot on a new canvas and get the base64 string from it
|
|
31
|
-
const context = screenshotCombinedCanvas.getContext('2d');
|
|
31
|
+
const context = screenshotCombinedCanvas.getContext('2d', { willReadFrequently: true });
|
|
32
32
|
context.drawImage(screenshot3dImg, 0, 0, screenshotSize.imageWidth, screenshotSize.imageHeight);
|
|
33
33
|
if (screenshotHtmlCanvas) {
|
|
34
34
|
context.drawImage(screenshotHtmlCanvas, 0, 0, screenshotSize.imageWidth, screenshotSize.imageHeight);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot-helper.js","sourceRoot":"","sources":["../../../src/internal/screenshot-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA;;;;;GAKG;AACH,SAAsB,sBAAsB,CAC1C,UAAkB,EAClB,cAA8B,EAC9B,oBAAwC;;QAExC,2FAA2F;QAC3F,MAAM,eAAe,GAAG,IAAI,KAAK,EAAE,CAAC;QACpC,eAAe,CAAC,GAAG,GAAG,UAAU,CAAC;QACjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClE,wBAAwB,CAAC,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC;QAC3D,wBAAwB,CAAC,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;QAE7D,kFAAkF;QAClF,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshot-helper.js","sourceRoot":"","sources":["../../../src/internal/screenshot-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,6 @@ export declare class HtmlAnchorManager {
|
|
|
88
88
|
* @internal
|
|
89
89
|
*/
|
|
90
90
|
isHtmlAnchorMesh(mesh: AbstractMesh): boolean;
|
|
91
|
-
protected _updateHtmlAnchor(parentHtmlElement: HTMLDivElement, anchorMesh: AbstractMesh, camera: Camera, width: number, height: number, baseScale: number, options?: HtmlAnchorOptions): void;
|
|
91
|
+
protected _updateHtmlAnchor(parentHtmlElement: HTMLDivElement, anchorMesh: AbstractMesh, camera: Camera, width: number, height: number, baseScale: number, useRayHitTestForOcclusionCheck: boolean, options?: HtmlAnchorOptions): void;
|
|
92
92
|
protected _getOrCreateAnchorMeshMaterial(): StandardMaterial;
|
|
93
93
|
}
|
|
@@ -41,7 +41,7 @@ class HtmlAnchorManager {
|
|
|
41
41
|
// it's import to use `clientWidth` and `clientHeight` as it makes a difference on mobile devices that have
|
|
42
42
|
// hardware scaling activated
|
|
43
43
|
// => `width`/`height` return the upscaled values, but the basis html element for the anchors remains unscaled
|
|
44
|
-
canvas.clientWidth, canvas.clientHeight, 1, options);
|
|
44
|
+
canvas.clientWidth, canvas.clientHeight, 1, false, options);
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
47
|
}
|
|
@@ -144,7 +144,7 @@ class HtmlAnchorManager {
|
|
|
144
144
|
// => `height` returns the upscaled value, but the basis html element for the anchors remains
|
|
145
145
|
// unscaled
|
|
146
146
|
const baseScale = size.canvasHeight / this.viewer.canvas.clientHeight;
|
|
147
|
-
this._updateHtmlAnchor(clonedHtmlNode, anchorMesh, camera, size.canvasWidth, size.canvasHeight, baseScale, options);
|
|
147
|
+
this._updateHtmlAnchor(clonedHtmlNode, anchorMesh, camera, size.canvasWidth, size.canvasHeight, baseScale, true, options);
|
|
148
148
|
});
|
|
149
149
|
const screenshotHtmlCanvas = yield (0, html2canvas_1.default)(htmlContainer, {
|
|
150
150
|
width: size.imageWidth,
|
|
@@ -183,9 +183,9 @@ class HtmlAnchorManager {
|
|
|
183
183
|
* @internal
|
|
184
184
|
*/
|
|
185
185
|
isHtmlAnchorMesh(mesh) {
|
|
186
|
-
return mesh.material === this._anchorMeshMaterial;
|
|
186
|
+
return !!this._anchorMeshMaterial && mesh.material === this._anchorMeshMaterial;
|
|
187
187
|
}
|
|
188
|
-
_updateHtmlAnchor(parentHtmlElement, anchorMesh, camera, width, height, baseScale, options) {
|
|
188
|
+
_updateHtmlAnchor(parentHtmlElement, anchorMesh, camera, width, height, baseScale, useRayHitTestForOcclusionCheck, options) {
|
|
189
189
|
const { hideIfOccluded, scaleWithCameraDistance } = options !== null && options !== void 0 ? options : {};
|
|
190
190
|
const viewMatrix = camera.getViewMatrix();
|
|
191
191
|
const projectionMatrix = camera.getProjectionMatrix();
|
|
@@ -217,7 +217,26 @@ class HtmlAnchorManager {
|
|
|
217
217
|
vertexScreenCoords.x + elementXOffset < width &&
|
|
218
218
|
vertexScreenCoords.y - elementYOffset > 0 &&
|
|
219
219
|
vertexScreenCoords.y + elementYOffset < height;
|
|
220
|
-
|
|
220
|
+
let isOccluded = false;
|
|
221
|
+
if (hideIfOccluded) {
|
|
222
|
+
if (useRayHitTestForOcclusionCheck) {
|
|
223
|
+
// ray test has to be used for synchronous occlusion checks
|
|
224
|
+
// this is the case for screenshots, where the screenshot camera might be on a different position than the scene
|
|
225
|
+
// camera
|
|
226
|
+
// default occlusion query is too slow and there is no way to know when the occlusion check is finished, so we
|
|
227
|
+
// fall back to this alternative technology
|
|
228
|
+
// however, this tech has higher performance impact, so we don't use it for the cyclic occlusion check
|
|
229
|
+
const meshCenter = anchorMesh.getBoundingInfo().boundingBox.centerWorld;
|
|
230
|
+
const camDirection = meshCenter.subtract(camera.position);
|
|
231
|
+
const ray = new __1.Ray(camera.position, camDirection);
|
|
232
|
+
const hit = this.viewer.scene.pickWithRay(ray, mesh => !__1.Tags.MatchesQuery(mesh, __1.DimensionLineManager.DIMENSION_LINE_KEY), false);
|
|
233
|
+
isOccluded = (hit === null || hit === void 0 ? void 0 : hit.pickedMesh) !== anchorMesh;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// use default occlusion check from GPU
|
|
237
|
+
isOccluded = anchorMesh.isOccluded;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
221
240
|
parentHtmlElement.style.opacity = isInViewport && !isOccluded ? '1' : '0';
|
|
222
241
|
}
|
|
223
242
|
_getOrCreateAnchorMeshMaterial() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-anchor-manager.js","sourceRoot":"","sources":["../../../src/manager/html-anchor-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"html-anchor-manager.js","sourceRoot":"","sources":["../../../src/manager/html-anchor-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@ export async function createScreenshotCanvas(
|
|
|
23
23
|
screenshotCombinedCanvas.height = screenshotSize.imageHeight;
|
|
24
24
|
|
|
25
25
|
// draw main and html screenshot on a new canvas and get the base64 string from it
|
|
26
|
-
const context = screenshotCombinedCanvas.getContext('2d')!;
|
|
26
|
+
const context = screenshotCombinedCanvas.getContext('2d', { willReadFrequently: true })!;
|
|
27
27
|
context.drawImage(screenshot3dImg, 0, 0, screenshotSize.imageWidth, screenshotSize.imageHeight);
|
|
28
28
|
|
|
29
29
|
if (screenshotHtmlCanvas) {
|
|
@@ -4,8 +4,10 @@ import {
|
|
|
4
4
|
Camera,
|
|
5
5
|
DimensionLineManager,
|
|
6
6
|
MeshBuilder,
|
|
7
|
+
Ray,
|
|
7
8
|
ScreenshotSize,
|
|
8
9
|
StandardMaterial,
|
|
10
|
+
Tags,
|
|
9
11
|
TransformNode,
|
|
10
12
|
Vector3,
|
|
11
13
|
Viewer,
|
|
@@ -88,6 +90,7 @@ export class HtmlAnchorManager {
|
|
|
88
90
|
canvas.clientWidth,
|
|
89
91
|
canvas.clientHeight,
|
|
90
92
|
1,
|
|
93
|
+
false,
|
|
91
94
|
options
|
|
92
95
|
);
|
|
93
96
|
});
|
|
@@ -221,6 +224,7 @@ export class HtmlAnchorManager {
|
|
|
221
224
|
size.canvasWidth,
|
|
222
225
|
size.canvasHeight,
|
|
223
226
|
baseScale,
|
|
227
|
+
true,
|
|
224
228
|
options
|
|
225
229
|
);
|
|
226
230
|
});
|
|
@@ -268,7 +272,7 @@ export class HtmlAnchorManager {
|
|
|
268
272
|
* @internal
|
|
269
273
|
*/
|
|
270
274
|
public isHtmlAnchorMesh(mesh: AbstractMesh): boolean {
|
|
271
|
-
return mesh.material === this._anchorMeshMaterial;
|
|
275
|
+
return !!this._anchorMeshMaterial && mesh.material === this._anchorMeshMaterial;
|
|
272
276
|
}
|
|
273
277
|
|
|
274
278
|
protected _updateHtmlAnchor(
|
|
@@ -278,6 +282,7 @@ export class HtmlAnchorManager {
|
|
|
278
282
|
width: number,
|
|
279
283
|
height: number,
|
|
280
284
|
baseScale: number,
|
|
285
|
+
useRayHitTestForOcclusionCheck: boolean,
|
|
281
286
|
options?: HtmlAnchorOptions
|
|
282
287
|
): void {
|
|
283
288
|
const { hideIfOccluded, scaleWithCameraDistance } = options ?? {};
|
|
@@ -322,7 +327,31 @@ export class HtmlAnchorManager {
|
|
|
322
327
|
vertexScreenCoords.x + elementXOffset < width &&
|
|
323
328
|
vertexScreenCoords.y - elementYOffset > 0 &&
|
|
324
329
|
vertexScreenCoords.y + elementYOffset < height;
|
|
325
|
-
|
|
330
|
+
|
|
331
|
+
let isOccluded = false;
|
|
332
|
+
if (hideIfOccluded) {
|
|
333
|
+
if (useRayHitTestForOcclusionCheck) {
|
|
334
|
+
// ray test has to be used for synchronous occlusion checks
|
|
335
|
+
// this is the case for screenshots, where the screenshot camera might be on a different position than the scene
|
|
336
|
+
// camera
|
|
337
|
+
// default occlusion query is too slow and there is no way to know when the occlusion check is finished, so we
|
|
338
|
+
// fall back to this alternative technology
|
|
339
|
+
// however, this tech has higher performance impact, so we don't use it for the cyclic occlusion check
|
|
340
|
+
const meshCenter = anchorMesh.getBoundingInfo().boundingBox.centerWorld;
|
|
341
|
+
const camDirection = meshCenter.subtract(camera.position);
|
|
342
|
+
const ray = new Ray(camera.position, camDirection);
|
|
343
|
+
const hit = this.viewer.scene.pickWithRay(
|
|
344
|
+
ray,
|
|
345
|
+
mesh => !Tags.MatchesQuery(mesh, DimensionLineManager.DIMENSION_LINE_KEY),
|
|
346
|
+
false
|
|
347
|
+
);
|
|
348
|
+
isOccluded = hit?.pickedMesh !== anchorMesh;
|
|
349
|
+
} else {
|
|
350
|
+
// use default occlusion check from GPU
|
|
351
|
+
isOccluded = anchorMesh.isOccluded;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
326
355
|
parentHtmlElement.style.opacity = isInViewport && !isOccluded ? '1' : '0';
|
|
327
356
|
}
|
|
328
357
|
|