@combeenation/3d-viewer 18.4.0 → 18.5.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.
@@ -1,8 +1,8 @@
1
- import { Color3, LinesMesh, TransformNode, Vector3, Viewer } from '../index';
1
+ import { Color3, HtmlAnchorOptions, LinesMesh, TransformNode, Vector3, Viewer } from '../index';
2
2
  /**
3
3
  * Options for dimension line creation
4
4
  */
5
- export declare type DimensionLineOptions = {
5
+ export declare type DimensionLineOptions = Pick<HtmlAnchorOptions, 'occlusion' | 'scaling'> & {
6
6
  /**
7
7
  * Default: `Color3.Black()`
8
8
  */
@@ -25,20 +25,6 @@ export declare type DimensionLineOptions = {
25
25
  * Default: no parent node set
26
26
  */
27
27
  parentNode?: TransformNode;
28
- /**
29
- * `true`: html elements can be occluded by other meshes
30
- * `false`: html elements will always be shown in front of the scene
31
- *
32
- * Default: `false`
33
- */
34
- hideIfOccluded: boolean;
35
- /**
36
- * `true`: html element size is relative to camera distance, just like a "normal" 3d object
37
- * `false`: html element size remains constant
38
- *
39
- * Default: `false`
40
- */
41
- scaleWithCameraDistance: boolean;
42
28
  /**
43
29
  * Optional callback for label text creation.\
44
30
  * Provides calculated length from `startPoint` and `endPoint` as parameter in meters.
@@ -13,8 +13,6 @@ class DimensionLineManager {
13
13
  this._defaultLineOptions = {
14
14
  lineColor: index_1.Color3.Black(),
15
15
  closingLineHeight: 0.05,
16
- hideIfOccluded: false,
17
- scaleWithCameraDistance: false,
18
16
  labelTextCb: (lengthM) => {
19
17
  const lengthRounded = Math.round(lengthM * 1000 * 100) / 100;
20
18
  return `${lengthRounded} mm`;
@@ -50,7 +48,7 @@ class DimensionLineManager {
50
48
  }
51
49
  const resDefaultOptions = Object.assign({}, this._defaultLineOptions);
52
50
  (0, lodash_es_1.merge)(resDefaultOptions, options);
53
- const { lineColor, closingLineHeight, closingLineDirection: closingLineDirectionIn, parentNode, hideIfOccluded, scaleWithCameraDistance, labelTextCb, labelCssClass, } = resDefaultOptions;
51
+ const { lineColor, closingLineHeight, closingLineDirection: closingLineDirectionIn, parentNode, occlusion, scaling, labelTextCb, labelCssClass, } = resDefaultOptions;
54
52
  let closingLineDirection = closingLineDirectionIn;
55
53
  if (!closingLineDirection) {
56
54
  // evaluate closing line direction if not given
@@ -71,7 +69,7 @@ class DimensionLineManager {
71
69
  linesMesh.position = lineCenter;
72
70
  linesMesh.color = lineColor;
73
71
  // rendering group id 1 reserved for html anchor meshes, which are required for occlusion checking
74
- linesMesh.renderingGroupId = hideIfOccluded ? 0 : 2;
72
+ linesMesh.renderingGroupId = (occlusion === null || occlusion === void 0 ? void 0 : occlusion.hideIfOccluded) ? 0 : 2;
75
73
  // tag can be used to exclude dimension lines from autofocus or gltf export
76
74
  index_1.Tags.AddTagsTo(linesMesh, DimensionLineManager.DIMENSION_LINE_KEY);
77
75
  if (parentNode) {
@@ -102,8 +100,8 @@ class DimensionLineManager {
102
100
  this.viewer.htmlAnchorManager.addHtmlAnchor(name, span, index_1.Vector3.Zero(), {
103
101
  parentNode: linesMesh,
104
102
  group: DimensionLineManager.DIMENSION_LINE_KEY,
105
- hideIfOccluded,
106
- scaleWithCameraDistance,
103
+ occlusion,
104
+ scaling,
107
105
  });
108
106
  this._dimensionLineObjs[name] = { linesMesh, htmlLabelName };
109
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dimension-line-manager.js","sourceRoot":"","sources":["../../../src/manager/dimension-line-manager.ts"],"names":[],"mappings":";;;AAAA,oCAAgG;AAChG,yCAAkC;AAwDlC;;GAEG;AACH,MAAa,oBAAoB;IAiC/B,gBAAgB;IAChB,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QA/BjC,wBAAmB,GAAyB;YACpD,SAAS,EAAE,cAAM,CAAC,KAAK,EAAE;YACzB,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,KAAK;YACrB,uBAAuB,EAAE,KAAK;YAC9B,WAAW,EAAE,CAAC,OAAO,EAAU,EAAE;gBAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC7D,OAAO,GAAG,aAAa,KAAK,CAAC;YAC/B,CAAC;YACD,aAAa,EAAE,EAAE;SAClB,CAAC;QAEF,uEAAuE;QACvE,sDAAsD;QAC5C,uBAAkB,GAKxB,EAAE,CAAC;IAYuC,CAAC;IAV/C;;;;OAIG;IACI,MAAM,CAAC,mBAAmB,CAAC,IAAmB;QACnD,OAAO,YAAI,CAAC,YAAY,CAAC,IAAI,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IAKD;;;OAGG;IACI,8BAA8B,CAAC,kBAAiD;QACrF,IAAA,iBAAK,EAAC,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,gBAAgB,CACrB,IAAY,EACZ,UAAmB,EACnB,QAAiB,EACjB,OAAuC;QAEvC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,kBAAkB,CAAC,CAAC;YACxD,OAAO;SACR;QAED,MAAM,iBAAiB,qBAAQ,IAAI,CAAC,mBAAmB,CAAE,CAAC;QAC1D,IAAA,iBAAK,EAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,EACJ,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EAAE,sBAAsB,EAC5C,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,aAAa,GACd,GAAG,iBAAiB,CAAC;QAEtB,IAAI,oBAAoB,GAAG,sBAAsB,CAAC;QAClD,IAAI,CAAC,oBAAoB,EAAE;YACzB,+CAA+C;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5G,oBAAoB,GAAG,gBAAgB,CAAC,CAAC,CAAC,eAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,eAAO,CAAC,EAAE,EAAE,CAAC;SAC1E;QAED,8CAA8C;QAC9C,MAAM,UAAU,GAAG,eAAO,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACnG,MAAM,mBAAmB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpH,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAE9G,MAAM,SAAS,GAAG,mBAAW,CAAC,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,kBAAkB,IAAI,IAAI,EAAE,EAAE;YACnG,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;SACxE,CAAC,CAAC;QACH,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC;QAC5B,kGAAkG;QAClG,SAAS,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,2EAA2E;QAC3E,YAAI,CAAC,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE;YACd,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC;SAC/B;QAED,MAAM,OAAO,GAAG,eAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEvC,8BAA8B;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAE7B,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;SACnC;aAAM;YACL,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,WAAW,IAAI,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;SACjC;QAED,MAAM,aAAa,GAAG,GAAG,oBAAoB,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,eAAO,CAAC,IAAI,EAAE,EAAE;YACtE,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,oBAAoB,CAAC,kBAAkB;YAC9C,cAAc;YACd,uBAAuB;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,IAAY;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,mBAAmB,IAAI,kBAAkB,CAAC,CAAC;YACxD,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrD,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,uBAAuB;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACzD,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;;AA7JH,oDA8JC;AA7JwB,uCAAkB,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"dimension-line-manager.js","sourceRoot":"","sources":["../../../src/manager/dimension-line-manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,51 @@
1
1
  import { AbstractMesh, ArcRotateCamera, Camera, NodeDescription, ScreenshotSize, StandardMaterial, TransformNode, Vector3, Viewer } from '..';
2
+ export declare type HtmlAnchorOcclusionOptions = {
3
+ /**
4
+ * `true`: html elements can be occluded by other meshes
5
+ * `false`: html elements will always be shown in front of the scene
6
+ *
7
+ * Default: `false`
8
+ */
9
+ hideIfOccluded: boolean;
10
+ /**
11
+ * Size of dummy mesh for occlusion check
12
+ * Smaller values result in a more precise occlusion check around the center of the anchor.
13
+ * Too small values can lead to flickering of the html element.
14
+ *
15
+ * Default: 0.01
16
+ */
17
+ anchorMeshSize?: number;
18
+ };
19
+ export declare type HtmlAnchorScalingOptions = {
20
+ /**
21
+ * `true`: html element size is relative to camera distance, just like a "normal" 3d object
22
+ * `false`: html element size remains constant and `referenceScale`, `minScale` and `maxScale` will have no effect
23
+ *
24
+ * Default: `false`
25
+ */
26
+ scaleWithCameraDistance: boolean;
27
+ /**
28
+ * Basis factor for converting camera distance in Babylon.js units to pixels.
29
+ * Find a suitable value for your project by trial and error, whereas larger values will make the html anchor elements
30
+ * larger as well.
31
+ *
32
+ * Default: 1
33
+ */
34
+ referenceScale?: number;
35
+ /**
36
+ * Can be used to limit the calculated scale value so that a html anchor element is still readable/clickable if the
37
+ * camera is far zoomed out.
38
+ *
39
+ * Default: undefined (no limit)
40
+ */
41
+ minScale?: number;
42
+ /**
43
+ * Max limit cap when zooming the camera in to avoid html anchor elements getting too large.
44
+ *
45
+ * Default: undefined (no limit)
46
+ */
47
+ maxScale?: number;
48
+ };
2
49
  export declare type HtmlAnchorOptions = {
3
50
  /**
4
51
  * Associated anchor mesh will be created underneath this parent node.\
@@ -10,19 +57,13 @@ export declare type HtmlAnchorOptions = {
10
57
  */
11
58
  group?: string;
12
59
  /**
13
- * `true`: html elements can be occluded by other meshes
14
- * `false`: html elements will always be shown in front of the scene
15
- *
16
- * Default: `false`
60
+ * Occlusion options, see {@link HtmlAnchorOcclusionOptions}
17
61
  */
18
- hideIfOccluded?: boolean;
62
+ occlusion?: HtmlAnchorOcclusionOptions;
19
63
  /**
20
- * `true`: html element size is relative to camera distance, just like a "normal" 3d object
21
- * `false`: html element size remains constant
22
- *
23
- * Default: `false`
64
+ * Scaling options, see {@link HtmlAnchorScalingOptions}
24
65
  */
25
- scaleWithCameraDistance?: boolean;
66
+ scaling?: HtmlAnchorScalingOptions;
26
67
  /**
27
68
  * Activates/deactivates `pointer-events` CSS class of anchor element.\
28
69
  * Set this to `true` if the html element should be interactive (e.g. button)
@@ -61,6 +61,7 @@ class HtmlAnchorManager {
61
61
  * mesh within the scene.
62
62
  */
63
63
  addHtmlAnchor(name, htmlElement, position, options) {
64
+ var _a;
64
65
  if (!this.viewer.canvas) {
65
66
  return;
66
67
  }
@@ -68,7 +69,7 @@ class HtmlAnchorManager {
68
69
  console.warn(`Html anchor "${name}" already exists`);
69
70
  return;
70
71
  }
71
- const { parentNode, enablePointerEvents } = options !== null && options !== void 0 ? options : {};
72
+ const { parentNode, occlusion, enablePointerEvents } = options !== null && options !== void 0 ? options : {};
72
73
  // create a parent for the input html element, which will receive the updated style and transform data
73
74
  // in this way the original input element remains untouched
74
75
  const parentHtmlElement = document.createElement('div');
@@ -85,7 +86,9 @@ class HtmlAnchorManager {
85
86
  this.viewer.canvas.insertAdjacentElement('afterend', parentHtmlElement);
86
87
  // NOTE: creates a sphere with fixed size, which could be problematic in scene with "strange" dimensions
87
88
  // add a property for the sphere size if required
88
- const anchorMesh = __1.MeshBuilder.CreateSphere(`${HtmlAnchorManager._HTML_ANCHOR_KEY}_${name}`, { diameter: 0.01 });
89
+ const anchorMesh = __1.MeshBuilder.CreateSphere(`${HtmlAnchorManager._HTML_ANCHOR_KEY}_${name}`, {
90
+ diameter: (_a = occlusion === null || occlusion === void 0 ? void 0 : occlusion.anchorMeshSize) !== null && _a !== void 0 ? _a : 0.01,
91
+ });
89
92
  anchorMesh.position = position;
90
93
  anchorMesh.parent = parentNode !== null && parentNode !== void 0 ? parentNode : null;
91
94
  // anchor mesh will be invisible, we only need it for positioning and occlusion check
@@ -194,26 +197,34 @@ class HtmlAnchorManager {
194
197
  return anchorKeys;
195
198
  }
196
199
  _updateHtmlAnchor(parentHtmlElement, anchorMesh, camera, width, height, baseScale, useRayHitTestForOcclusionCheck, options, excludeNodes) {
197
- const { hideIfOccluded, scaleWithCameraDistance } = options !== null && options !== void 0 ? options : {};
200
+ const { occlusion, scaling } = options !== null && options !== void 0 ? options : {};
201
+ const { hideIfOccluded } = occlusion !== null && occlusion !== void 0 ? occlusion : {};
202
+ const { scaleWithCameraDistance, referenceScale, minScale, maxScale } = scaling !== null && scaling !== void 0 ? scaling : {};
198
203
  const viewMatrix = camera.getViewMatrix();
199
204
  const projectionMatrix = camera.getProjectionMatrix();
200
205
  const transformMatrix = viewMatrix.multiply(projectionMatrix);
201
206
  // convert into 2d space
202
207
  const vertexScreenCoords = __1.Vector3.Project(__1.Vector3.Zero(), anchorMesh.getWorldMatrix(), transformMatrix, new __1.Viewport(0, 0, width, height));
208
+ const meshWorldPos = anchorMesh.getAbsolutePosition();
209
+ // calculate camera world position manually, as there is no help function like for meshes
210
+ const camWorldMatrix = camera.computeWorldMatrix();
211
+ const camWorldPos = camWorldMatrix.getTranslation();
212
+ const distance = __1.Vector3.Distance(meshWorldPos, camWorldPos);
213
+ const camYWindow = distance * Math.tan(camera.fov / 2);
203
214
  // base scale is used if width and height don't equal the viewer canvas, which is the case for screenshots
204
215
  let scale = baseScale;
205
216
  if (scaleWithCameraDistance) {
206
- const meshWorldPos = anchorMesh.getAbsolutePosition();
207
- // calculate camera world position manually, as there is no help function like for meshes
208
- const camWorldMatrix = camera.computeWorldMatrix();
209
- const camWorldPos = camWorldMatrix.getTranslation();
210
- const distance = __1.Vector3.Distance(meshWorldPos, camWorldPos);
211
- const frustumSlopeY = Math.tan(camera.fov / 2);
212
217
  // if the distance from camera to mesh gets larger, the html elements scaling will be decreased
213
218
  // we also consider the cameras FOV, so scale 1 means, that the resulting vertical frustum of the camera
214
219
  // distance equals 1
215
- // ...this is probably too small in some scenarios, so we might have to add a general scale setting here
216
- scale *= 1 / (distance * frustumSlopeY);
220
+ scale *= (referenceScale !== null && referenceScale !== void 0 ? referenceScale : 1) / camYWindow;
221
+ // apply scale caps
222
+ if (minScale !== undefined) {
223
+ scale = Math.max(scale, minScale);
224
+ }
225
+ if (maxScale !== undefined) {
226
+ scale = Math.min(scale, maxScale);
227
+ }
217
228
  }
218
229
  const elementXOffset = (parentHtmlElement.offsetWidth * scale) / 2;
219
230
  const elementYOffset = (parentHtmlElement.offsetHeight * scale) / 2;
@@ -1 +1 @@
1
- {"version":3,"file":"html-anchor-manager.js","sourceRoot":"","sources":["../../../src/manager/html-anchor-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-anchor-manager.js","sourceRoot":"","sources":["../../../src/manager/html-anchor-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,0BAcY;AACZ,iEAAiG;AACjG,yDAAiE;AACjE,8DAAsC;AA8EtC;;;;;;;;GAQG;AACH,MAAa,iBAAiB;IAsB5B,gBAAgB;IAChB,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QApBjC,iBAAY,GAMlB,EAAE,CAAC;QAEG,wBAAmB,GAA4B,IAAI,CAAC;QAa5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,0EAA0E;QAC1E,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,GAAG,CAAC,GAAG,EAAE;YAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;gBACtF,IAAI,CAAC,iBAAiB,CACpB,iBAAiB,EACjB,UAAU,EACV,MAAM,CAAC,KAAK,CAAC,YAAa;gBAC1B,2GAA2G;gBAC3G,6BAA6B;gBAC7B,8GAA8G;gBAC9G,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,YAAY,EACnB,CAAC,EACD,KAAK,EACL,OAAO,CACR,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAlCD;;;;OAIG;IACI,MAAM,CAAC,gBAAgB,CAAC,IAAmB;QAChD,OAAO,CAAC,CAAC,IAAA,0CAAwB,EAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAC9D,CAAC;IA6BD;;;;OAIG;IACI,aAAa,CAAC,IAAY,EAAE,WAAwB,EAAE,QAAiB,EAAE,OAA2B;;QACzG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACvB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,CAAC;YACrD,OAAO;SACR;QAED,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;QAErE,sGAAsG;QACtG,2DAA2D;QAC3D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,iBAAiB,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAC5C,iBAAiB,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC9C,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACrC,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,mBAAmB,EAAE;YACxB,iBAAiB,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;SAChD;QACD,kFAAkF;QAClF,wGAAwG;QACxG,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAExE,wGAAwG;QACxG,iDAAiD;QACjD,MAAM,UAAU,GAAG,eAAW,CAAC,YAAY,CAAC,GAAG,iBAAiB,CAAC,gBAAgB,IAAI,IAAI,EAAE,EAAE;YAC3F,QAAQ,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc,mCAAI,IAAI;SAC5C,CAAC,CAAC;QACH,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC/B,UAAU,CAAC,MAAM,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC;QACvC,qFAAqF;QACrF,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAE5D,gGAAgG;QAChG,gHAAgH;QAChH,iEAAiE;QACjE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,gHAAgH;QAChH,oDAAoD;QACpD,UAAU,CAAC,aAAa,GAAG,gBAAY,CAAC,qBAAqB,CAAC;QAC9D,iHAAiH;QACjH,kCAAkC;QAClC,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAChC,IAAA,0CAAwB,EAAC,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAY;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,CAAC;YACrD,OAAO;SACR;QAED,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;QACtC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,MAAiB;QAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAC/C,MAAM,EACN,SAAS;QACT,uEAAuE;QACvE,+DAA+D;QAC/D,KAAK,CACN,CAAC;QAEF,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACU,sBAAsB,CACjC,IAAoB,EACpB,MAAuB,EACvB,cAAwB,EACxB,YAAgC;;;YAEhC,MAAM,uBAAuB,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,aAAa,CAAC;YAClE,IAAI,CAAC,uBAAuB,EAAE;gBAC5B,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACrD,OAAO,IAAI,iBAAiB,EAAE,CAAC;aAChC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpD,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;YACpD,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC;YAEtD,uEAAuE;YACvE,oEAAoE;YACpE,6DAA6D;YAC7D,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACpC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC1C,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC;YAEpD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAE1E,iGAAiG;gBACjG,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAmB,CAAC;gBAC3E,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAErC,sFAAsF;gBACtF,0FAA0F;gBAC1F,6GAA6G;gBAC7G,+BAA+B;gBAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,YAAY,CAAC;gBACvE,IAAI,CAAC,iBAAiB,CACpB,cAAc,EACd,UAAU,EACV,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,EACjB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,YAAY,CACb,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,GAAG,MAAM,IAAA,qBAAW,EAAC,aAAa,EAAE;gBAC5D,KAAK,EAAE,IAAI,CAAC,UAAU;gBACtB,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,uDAAuD;gBACvD,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC3C,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;gBAC7C,OAAO,EAAE,KAAK;gBACd,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,aAAa,CAAC,MAAM,EAAE,CAAC;YAEvB,OAAO,oBAAoB,CAAC;;KAC7B;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,aAAwB,EAAE,aAAwB,EAAE,iBAA2B;QACtG,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;;YAC9D,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,0CAAE,KAAK,CAAC;YACrD,MAAM,sBAAsB,GAC1B,aAAa,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,MAAM,sBAAsB,GAC1B,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvF,oDAAoD;YACpD,MAAM,qBAAqB,GAAG,iBAAiB,IAAI,KAAK,KAAK,wBAAoB,CAAC,kBAAkB,CAAC;YAErG,OAAO,sBAAsB,IAAI,sBAAsB,IAAI,qBAAqB,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAES,iBAAiB,CACzB,iBAAiC,EACjC,UAAwB,EACxB,MAAc,EACd,KAAa,EACb,MAAc,EACd,SAAiB,EACjB,8BAAuC,EACvC,OAA2B,EAC3B,YAAgC;QAEhC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;QAC7C,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;QAC3C,MAAM,EAAE,uBAAuB,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;QAEtF,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAE9D,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,WAAO,CAAC,OAAO,CACxC,WAAO,CAAC,IAAI,EAAE,EACd,UAAU,CAAC,cAAc,EAAE,EAC3B,eAAe,EACf,IAAI,YAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAClC,CAAC;QAEF,MAAM,YAAY,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACtD,yFAAyF;QACzF,MAAM,cAAc,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,WAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAEvD,0GAA0G;QAC1G,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,IAAI,uBAAuB,EAAE;YAC3B,+FAA+F;YAC/F,wGAAwG;YACxG,oBAAoB;YACpB,KAAK,IAAI,CAAC,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,CAAC,CAAC,GAAG,UAAU,CAAC;YAC5C,mBAAmB;YACnB,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aACnC;YACD,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aACnC;SACF;QAED,MAAM,cAAc,GAAG,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACpE,0CAA0C;QAC1C,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,oBAAoB,kBAAkB,CAAC,CAAC,mBAAmB,kBAAkB,CAAC,CAAC,yBAAyB,KAAK,GAAG,CAAC;QAErJ,iCAAiC;QACjC,6EAA6E;QAC7E,MAAM,YAAY,GAChB,kBAAkB,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC;YACzC,kBAAkB,CAAC,CAAC,GAAG,cAAc,GAAG,KAAK;YAC7C,kBAAkB,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC;YACzC,kBAAkB,CAAC,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC;QAEjD,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,cAAc,EAAE;YAClB,IAAI,8BAA8B,EAAE;gBAClC,2DAA2D;gBAC3D,gHAAgH;gBAChH,SAAS;gBACT,8GAA8G;gBAC9G,2CAA2C;gBAC3C,sGAAsG;gBACtG,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;gBACxE,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,OAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CACvC,GAAG,EACH,IAAI,CAAC,EAAE,CAAC,CAAC,IAAA,oCAAsB,EAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EACxF,KAAK,CACN,CAAC;gBACF,UAAU,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,MAAK,UAAU,CAAC;aAC7C;iBAAM;gBACL,uCAAuC;gBACvC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;aACpC;SACF;QAED,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,CAAC;IAES,8BAA8B;QACtC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC;SACjC;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,oBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAClE,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;;AAxUH,8CAyUC;AAxU2B,kCAAgB,GAAG,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@combeenation/3d-viewer",
3
- "version": "18.4.0",
3
+ "version": "18.5.0",
4
4
  "description": "Combeenation 3D Viewer",
5
5
  "homepage": "https://github.com/Combeenation/3d-viewer#readme",
6
6
  "bugs": {
@@ -1,10 +1,10 @@
1
- import { Color3, LinesMesh, MeshBuilder, Tags, TransformNode, Vector3, Viewer } from '../index';
1
+ import { Color3, HtmlAnchorOptions, LinesMesh, MeshBuilder, Tags, TransformNode, Vector3, Viewer } from '../index';
2
2
  import { merge } from 'lodash-es';
3
3
 
4
4
  /**
5
5
  * Options for dimension line creation
6
6
  */
7
- export type DimensionLineOptions = {
7
+ export type DimensionLineOptions = Pick<HtmlAnchorOptions, 'occlusion' | 'scaling'> & {
8
8
  /**
9
9
  * Default: `Color3.Black()`
10
10
  */
@@ -27,20 +27,6 @@ export type DimensionLineOptions = {
27
27
  * Default: no parent node set
28
28
  */
29
29
  parentNode?: TransformNode;
30
- /**
31
- * `true`: html elements can be occluded by other meshes
32
- * `false`: html elements will always be shown in front of the scene
33
- *
34
- * Default: `false`
35
- */
36
- hideIfOccluded: boolean;
37
- /**
38
- * `true`: html element size is relative to camera distance, just like a "normal" 3d object
39
- * `false`: html element size remains constant
40
- *
41
- * Default: `false`
42
- */
43
- scaleWithCameraDistance: boolean;
44
30
  /**
45
31
  * Optional callback for label text creation.\
46
32
  * Provides calculated length from `startPoint` and `endPoint` as parameter in meters.
@@ -64,8 +50,6 @@ export class DimensionLineManager {
64
50
  protected _defaultLineOptions: DimensionLineOptions = {
65
51
  lineColor: Color3.Black(),
66
52
  closingLineHeight: 0.05,
67
- hideIfOccluded: false,
68
- scaleWithCameraDistance: false,
69
53
  labelTextCb: (lengthM): string => {
70
54
  const lengthRounded = Math.round(lengthM * 1000 * 100) / 100;
71
55
  return `${lengthRounded} mm`;
@@ -123,8 +107,8 @@ export class DimensionLineManager {
123
107
  closingLineHeight,
124
108
  closingLineDirection: closingLineDirectionIn,
125
109
  parentNode,
126
- hideIfOccluded,
127
- scaleWithCameraDistance,
110
+ occlusion,
111
+ scaling,
128
112
  labelTextCb,
129
113
  labelCssClass,
130
114
  } = resDefaultOptions;
@@ -151,7 +135,7 @@ export class DimensionLineManager {
151
135
  linesMesh.position = lineCenter;
152
136
  linesMesh.color = lineColor;
153
137
  // rendering group id 1 reserved for html anchor meshes, which are required for occlusion checking
154
- linesMesh.renderingGroupId = hideIfOccluded ? 0 : 2;
138
+ linesMesh.renderingGroupId = occlusion?.hideIfOccluded ? 0 : 2;
155
139
  // tag can be used to exclude dimension lines from autofocus or gltf export
156
140
  Tags.AddTagsTo(linesMesh, DimensionLineManager.DIMENSION_LINE_KEY);
157
141
  if (parentNode) {
@@ -185,8 +169,8 @@ export class DimensionLineManager {
185
169
  this.viewer.htmlAnchorManager.addHtmlAnchor(name, span, Vector3.Zero(), {
186
170
  parentNode: linesMesh,
187
171
  group: DimensionLineManager.DIMENSION_LINE_KEY,
188
- hideIfOccluded,
189
- scaleWithCameraDistance,
172
+ occlusion,
173
+ scaling,
190
174
  });
191
175
 
192
176
  this._dimensionLineObjs[name] = { linesMesh, htmlLabelName };
@@ -17,6 +17,55 @@ import { getInternalMetadataValue, setInternalMetadataValue } from '../internal/
17
17
  import { nodeMatchesAnyCriteria } from '../internal/node-helper';
18
18
  import html2canvas from 'html2canvas';
19
19
 
20
+ export type HtmlAnchorOcclusionOptions = {
21
+ /**
22
+ * `true`: html elements can be occluded by other meshes
23
+ * `false`: html elements will always be shown in front of the scene
24
+ *
25
+ * Default: `false`
26
+ */
27
+ hideIfOccluded: boolean;
28
+ /**
29
+ * Size of dummy mesh for occlusion check
30
+ * Smaller values result in a more precise occlusion check around the center of the anchor.
31
+ * Too small values can lead to flickering of the html element.
32
+ *
33
+ * Default: 0.01
34
+ */
35
+ anchorMeshSize?: number;
36
+ };
37
+
38
+ export type HtmlAnchorScalingOptions = {
39
+ /**
40
+ * `true`: html element size is relative to camera distance, just like a "normal" 3d object
41
+ * `false`: html element size remains constant and `referenceScale`, `minScale` and `maxScale` will have no effect
42
+ *
43
+ * Default: `false`
44
+ */
45
+ scaleWithCameraDistance: boolean;
46
+ /**
47
+ * Basis factor for converting camera distance in Babylon.js units to pixels.
48
+ * Find a suitable value for your project by trial and error, whereas larger values will make the html anchor elements
49
+ * larger as well.
50
+ *
51
+ * Default: 1
52
+ */
53
+ referenceScale?: number;
54
+ /**
55
+ * Can be used to limit the calculated scale value so that a html anchor element is still readable/clickable if the
56
+ * camera is far zoomed out.
57
+ *
58
+ * Default: undefined (no limit)
59
+ */
60
+ minScale?: number;
61
+ /**
62
+ * Max limit cap when zooming the camera in to avoid html anchor elements getting too large.
63
+ *
64
+ * Default: undefined (no limit)
65
+ */
66
+ maxScale?: number;
67
+ };
68
+
20
69
  export type HtmlAnchorOptions = {
21
70
  /**
22
71
  * Associated anchor mesh will be created underneath this parent node.\
@@ -28,19 +77,13 @@ export type HtmlAnchorOptions = {
28
77
  */
29
78
  group?: string;
30
79
  /**
31
- * `true`: html elements can be occluded by other meshes
32
- * `false`: html elements will always be shown in front of the scene
33
- *
34
- * Default: `false`
80
+ * Occlusion options, see {@link HtmlAnchorOcclusionOptions}
35
81
  */
36
- hideIfOccluded?: boolean;
82
+ occlusion?: HtmlAnchorOcclusionOptions;
37
83
  /**
38
- * `true`: html element size is relative to camera distance, just like a "normal" 3d object
39
- * `false`: html element size remains constant
40
- *
41
- * Default: `false`
84
+ * Scaling options, see {@link HtmlAnchorScalingOptions}
42
85
  */
43
- scaleWithCameraDistance?: boolean;
86
+ scaling?: HtmlAnchorScalingOptions;
44
87
  /**
45
88
  * Activates/deactivates `pointer-events` CSS class of anchor element.\
46
89
  * Set this to `true` if the html element should be interactive (e.g. button)
@@ -123,7 +166,7 @@ export class HtmlAnchorManager {
123
166
  return;
124
167
  }
125
168
 
126
- const { parentNode, enablePointerEvents } = options ?? {};
169
+ const { parentNode, occlusion, enablePointerEvents } = options ?? {};
127
170
 
128
171
  // create a parent for the input html element, which will receive the updated style and transform data
129
172
  // in this way the original input element remains untouched
@@ -142,7 +185,9 @@ export class HtmlAnchorManager {
142
185
 
143
186
  // NOTE: creates a sphere with fixed size, which could be problematic in scene with "strange" dimensions
144
187
  // add a property for the sphere size if required
145
- const anchorMesh = MeshBuilder.CreateSphere(`${HtmlAnchorManager._HTML_ANCHOR_KEY}_${name}`, { diameter: 0.01 });
188
+ const anchorMesh = MeshBuilder.CreateSphere(`${HtmlAnchorManager._HTML_ANCHOR_KEY}_${name}`, {
189
+ diameter: occlusion?.anchorMeshSize ?? 0.01,
190
+ });
146
191
  anchorMesh.position = position;
147
192
  anchorMesh.parent = parentNode ?? null;
148
193
  // anchor mesh will be invisible, we only need it for positioning and occlusion check
@@ -297,7 +342,9 @@ export class HtmlAnchorManager {
297
342
  options?: HtmlAnchorOptions,
298
343
  excludeNodes?: NodeDescription[]
299
344
  ): void {
300
- const { hideIfOccluded, scaleWithCameraDistance } = options ?? {};
345
+ const { occlusion, scaling } = options ?? {};
346
+ const { hideIfOccluded } = occlusion ?? {};
347
+ const { scaleWithCameraDistance, referenceScale, minScale, maxScale } = scaling ?? {};
301
348
 
302
349
  const viewMatrix = camera.getViewMatrix();
303
350
  const projectionMatrix = camera.getProjectionMatrix();
@@ -311,20 +358,27 @@ export class HtmlAnchorManager {
311
358
  new Viewport(0, 0, width, height)
312
359
  );
313
360
 
361
+ const meshWorldPos = anchorMesh.getAbsolutePosition();
362
+ // calculate camera world position manually, as there is no help function like for meshes
363
+ const camWorldMatrix = camera.computeWorldMatrix();
364
+ const camWorldPos = camWorldMatrix.getTranslation();
365
+ const distance = Vector3.Distance(meshWorldPos, camWorldPos);
366
+ const camYWindow = distance * Math.tan(camera.fov / 2);
367
+
314
368
  // base scale is used if width and height don't equal the viewer canvas, which is the case for screenshots
315
369
  let scale = baseScale;
316
370
  if (scaleWithCameraDistance) {
317
- const meshWorldPos = anchorMesh.getAbsolutePosition();
318
- // calculate camera world position manually, as there is no help function like for meshes
319
- const camWorldMatrix = camera.computeWorldMatrix();
320
- const camWorldPos = camWorldMatrix.getTranslation();
321
- const distance = Vector3.Distance(meshWorldPos, camWorldPos);
322
- const frustumSlopeY = Math.tan(camera.fov / 2);
323
371
  // if the distance from camera to mesh gets larger, the html elements scaling will be decreased
324
372
  // we also consider the cameras FOV, so scale 1 means, that the resulting vertical frustum of the camera
325
373
  // distance equals 1
326
- // ...this is probably too small in some scenarios, so we might have to add a general scale setting here
327
- scale *= 1 / (distance * frustumSlopeY);
374
+ scale *= (referenceScale ?? 1) / camYWindow;
375
+ // apply scale caps
376
+ if (minScale !== undefined) {
377
+ scale = Math.max(scale, minScale);
378
+ }
379
+ if (maxScale !== undefined) {
380
+ scale = Math.min(scale, maxScale);
381
+ }
328
382
  }
329
383
 
330
384
  const elementXOffset = (parentHtmlElement.offsetWidth * scale) / 2;