@xeokit/xeokit-sdk 2.5.2-beta-5 → 2.5.2-beta-8
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/xeokit-sdk.cjs.js +45 -29
- package/dist/xeokit-sdk.es.js +45 -29
- package/dist/xeokit-sdk.es5.js +22 -15
- package/dist/xeokit-sdk.min.cjs.js +2 -2
- package/dist/xeokit-sdk.min.es.js +2 -2
- package/dist/xeokit-sdk.min.es5.js +2 -2
- package/package.json +1 -1
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsMouseControl.js +7 -2
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsMouseControl.js +9 -2
- package/src/plugins/TreeViewPlugin/TreeViewNode.js +11 -7
- package/src/viewer/scene/model/SceneModel.js +30 -26
- package/types/plugins/TreeViewPlugin/TreeViewNode.d.ts +12 -14
- package/types/plugins/TreeViewPlugin/renderService.d.ts +2 -2
- package/types/viewer/scene/models/SceneModel.d.ts +63 -55
package/dist/xeokit-sdk.cjs.js
CHANGED
|
@@ -12154,8 +12154,13 @@ class AngleMeasurementsMouseControl extends AngleMeasurementsControl {
|
|
|
12154
12154
|
mouseHoverCanvasPos.set(canvasPos);
|
|
12155
12155
|
switch (this._mouseState) {
|
|
12156
12156
|
case MOUSE_FINDING_ORIGIN:
|
|
12157
|
-
|
|
12158
|
-
|
|
12157
|
+
const canvasBoundRect = canvas.getBoundingClientRect();
|
|
12158
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
12159
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
12160
|
+
const canvasLeftEdge = canvasBoundRect.left + scrollLeft;
|
|
12161
|
+
const canvasTopEdge = canvasBoundRect.top + scrollTop;
|
|
12162
|
+
this._markerDiv.style.marginLeft = `${canvasLeftEdge + canvasPos[0] - 5}px`;
|
|
12163
|
+
this._markerDiv.style.marginTop = `${canvasTopEdge + canvasPos[1] - 5}px`;
|
|
12159
12164
|
break;
|
|
12160
12165
|
case MOUSE_FINDING_CORNER:
|
|
12161
12166
|
if (this._currentAngleMeasurement) {
|
|
@@ -80323,8 +80328,6 @@ class SceneModel extends Component {
|
|
|
80323
80328
|
this._vboBatchingLayers = {};
|
|
80324
80329
|
this._dtxLayers = {};
|
|
80325
80330
|
|
|
80326
|
-
this._meshList = [];
|
|
80327
|
-
|
|
80328
80331
|
this.layerList = []; // For GL state efficiency when drawing, InstancingLayers are in first part, BatchingLayers are in second
|
|
80329
80332
|
this._entityList = [];
|
|
80330
80333
|
|
|
@@ -80337,6 +80340,7 @@ class SceneModel extends Component {
|
|
|
80337
80340
|
this._entities = {};
|
|
80338
80341
|
|
|
80339
80342
|
this._scheduledMeshes = {};
|
|
80343
|
+
this._meshesCfgsBeforeMeshCreation = {};
|
|
80340
80344
|
|
|
80341
80345
|
/** @private **/
|
|
80342
80346
|
this.renderFlags = new RenderFlags();
|
|
@@ -81867,7 +81871,7 @@ class SceneModel extends Component {
|
|
|
81867
81871
|
/**
|
|
81868
81872
|
* Creates a new {@link SceneModelMesh} within this SceneModel.
|
|
81869
81873
|
*
|
|
81870
|
-
* *
|
|
81874
|
+
* * It prepares and saves data for a SceneModelMesh {@link SceneModel#meshes} creation. SceneModelMesh will be created only once the SceneModelEntity (which references this particular SceneModelMesh) will be created.
|
|
81871
81875
|
* * The SceneModelMesh can either define its own geometry or share it with other SceneModelMeshes. To define own geometry, provide the
|
|
81872
81876
|
* various geometry arrays to this method. To share a geometry, provide the ID of a geometry created earlier
|
|
81873
81877
|
* with {@link SceneModel#createGeometry}.
|
|
@@ -81902,18 +81906,18 @@ class SceneModel extends Component {
|
|
|
81902
81906
|
* @param {Number} [cfg.opacity=1] Opacity in range ````[0..1]````. Overridden by texture set ````colorTexture````.
|
|
81903
81907
|
* @param {Number} [cfg.metallic=0] Metallic factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
81904
81908
|
* @param {Number} [cfg.roughness=1] Roughness factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
81905
|
-
* @returns {
|
|
81909
|
+
* @returns {Boolean} True = successfully mesh was created. False = error during creation of a mesh.
|
|
81906
81910
|
*/
|
|
81907
81911
|
createMesh(cfg) {
|
|
81908
81912
|
|
|
81909
81913
|
if (cfg.id === undefined || cfg.id === null) {
|
|
81910
81914
|
this.error("[createMesh] SceneModel.createMesh() config missing: id");
|
|
81911
|
-
return;
|
|
81915
|
+
return false;
|
|
81912
81916
|
}
|
|
81913
81917
|
|
|
81914
81918
|
if (this._scheduledMeshes[cfg.id]) {
|
|
81915
81919
|
this.error(`[createMesh] SceneModel already has a mesh with this ID: ${cfg.id}`);
|
|
81916
|
-
return;
|
|
81920
|
+
return false;
|
|
81917
81921
|
}
|
|
81918
81922
|
|
|
81919
81923
|
const instancing = (cfg.geometryId !== undefined);
|
|
@@ -81928,31 +81932,31 @@ class SceneModel extends Component {
|
|
|
81928
81932
|
}
|
|
81929
81933
|
if (cfg.primitive !== "points" && cfg.primitive !== "lines" && cfg.primitive !== "triangles" && cfg.primitive !== "solid" && cfg.primitive !== "surface") {
|
|
81930
81934
|
this.error(`Unsupported value for 'primitive': '${primitive}' ('geometryId' is absent) - supported values are 'points', 'lines', 'triangles', 'solid' and 'surface'.`);
|
|
81931
|
-
return;
|
|
81935
|
+
return false;
|
|
81932
81936
|
}
|
|
81933
81937
|
if (!cfg.positions && !cfg.positionsCompressed && !cfg.buckets) {
|
|
81934
81938
|
this.error("Param expected: 'positions', 'positionsCompressed' or `buckets` ('geometryId' is absent)");
|
|
81935
|
-
return
|
|
81939
|
+
return false;
|
|
81936
81940
|
}
|
|
81937
81941
|
if (cfg.positions && (cfg.positionsDecodeMatrix || cfg.positionsDecodeBoundary)) {
|
|
81938
81942
|
this.error("Illegal params: 'positions' not expected with 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");
|
|
81939
|
-
return
|
|
81943
|
+
return false;
|
|
81940
81944
|
}
|
|
81941
81945
|
if (cfg.positionsCompressed && !cfg.positionsDecodeMatrix && !cfg.positionsDecodeBoundary) {
|
|
81942
81946
|
this.error("Param expected: 'positionsCompressed' should be accompanied by 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");
|
|
81943
|
-
return
|
|
81947
|
+
return false;
|
|
81944
81948
|
}
|
|
81945
81949
|
if (cfg.uvCompressed && !cfg.uvDecodeMatrix) {
|
|
81946
81950
|
this.error("Param expected: 'uvCompressed' should be accompanied by `uvDecodeMatrix` ('geometryId' is absent)");
|
|
81947
|
-
return
|
|
81951
|
+
return false;
|
|
81948
81952
|
}
|
|
81949
81953
|
if (!cfg.buckets && !cfg.indices && cfg.primitive !== "points") {
|
|
81950
81954
|
this.error(`Param expected: indices (required for '${cfg.primitive}' primitive type)`);
|
|
81951
|
-
return
|
|
81955
|
+
return false;
|
|
81952
81956
|
}
|
|
81953
81957
|
if ((cfg.matrix || cfg.position || cfg.rotation || cfg.scale) && (cfg.positionsCompressed || cfg.positionsDecodeBoundary)) {
|
|
81954
81958
|
this.error("Unexpected params: 'matrix', 'rotation', 'scale', 'position' not allowed with 'positionsCompressed'");
|
|
81955
|
-
return
|
|
81959
|
+
return false;
|
|
81956
81960
|
}
|
|
81957
81961
|
|
|
81958
81962
|
const useDTX = (!!this._dtxEnabled && (cfg.primitive === "triangles"
|
|
@@ -82117,7 +82121,7 @@ class SceneModel extends Component {
|
|
|
82117
82121
|
cfg.textureSet = this._textureSets[cfg.textureSetId];
|
|
82118
82122
|
if (!cfg.textureSet) {
|
|
82119
82123
|
this.error(`[createMesh] Texture set not found: ${cfg.textureSetId} - ensure that you create it first with createTextureSet()`);
|
|
82120
|
-
return;
|
|
82124
|
+
return false;
|
|
82121
82125
|
}
|
|
82122
82126
|
}
|
|
82123
82127
|
}
|
|
@@ -82128,13 +82132,13 @@ class SceneModel extends Component {
|
|
|
82128
82132
|
|
|
82129
82133
|
if (cfg.positions || cfg.positionsCompressed || cfg.indices || cfg.edgeIndices || cfg.normals || cfg.normalsCompressed || cfg.uv || cfg.uvCompressed || cfg.positionsDecodeMatrix) {
|
|
82130
82134
|
this.error(`Mesh geometry parameters not expected when instancing a geometry (not expected: positions, positionsCompressed, indices, edgeIndices, normals, normalsCompressed, uv, uvCompressed, positionsDecodeMatrix)`);
|
|
82131
|
-
return;
|
|
82135
|
+
return false;
|
|
82132
82136
|
}
|
|
82133
82137
|
|
|
82134
82138
|
cfg.geometry = this._geometries[cfg.geometryId];
|
|
82135
82139
|
if (!cfg.geometry) {
|
|
82136
82140
|
this.error(`[createMesh] Geometry not found: ${cfg.geometryId} - ensure that you create it first with createGeometry()`);
|
|
82137
|
-
return;
|
|
82141
|
+
return false;
|
|
82138
82142
|
}
|
|
82139
82143
|
|
|
82140
82144
|
cfg.origin = cfg.origin ? math.addVec3(this._origin, cfg.origin, math.vec3()) : this._origin;
|
|
@@ -82148,7 +82152,7 @@ class SceneModel extends Component {
|
|
|
82148
82152
|
|
|
82149
82153
|
if (!cfg.transform) {
|
|
82150
82154
|
this.error(`[createMesh] Transform not found: ${cfg.transformId} - ensure that you create it first with createTransform()`);
|
|
82151
|
-
return;
|
|
82155
|
+
return false;
|
|
82152
82156
|
}
|
|
82153
82157
|
|
|
82154
82158
|
cfg.aabb = cfg.geometry.aabb;
|
|
@@ -82216,7 +82220,7 @@ class SceneModel extends Component {
|
|
|
82216
82220
|
cfg.textureSet = this._textureSets[cfg.textureSetId];
|
|
82217
82221
|
// if (!cfg.textureSet) {
|
|
82218
82222
|
// this.error(`[createMesh] Texture set not found: ${cfg.textureSetId} - ensure that you create it first with createTextureSet()`);
|
|
82219
|
-
// return;
|
|
82223
|
+
// return false;
|
|
82220
82224
|
// }
|
|
82221
82225
|
}
|
|
82222
82226
|
}
|
|
@@ -82224,7 +82228,9 @@ class SceneModel extends Component {
|
|
|
82224
82228
|
|
|
82225
82229
|
cfg.numPrimitives = this._getNumPrimitives(cfg);
|
|
82226
82230
|
|
|
82227
|
-
|
|
82231
|
+
this._meshesCfgsBeforeMeshCreation[cfg.id] = cfg;
|
|
82232
|
+
|
|
82233
|
+
return true;
|
|
82228
82234
|
}
|
|
82229
82235
|
|
|
82230
82236
|
_createMesh(cfg) {
|
|
@@ -82256,8 +82262,6 @@ class SceneModel extends Component {
|
|
|
82256
82262
|
cfg.meshMatrix = cfg.transform.worldMatrix;
|
|
82257
82263
|
}
|
|
82258
82264
|
mesh.portionId = mesh.layer.createPortion(mesh, cfg);
|
|
82259
|
-
this._meshes[cfg.id] = mesh;
|
|
82260
|
-
this._meshList.push(mesh);
|
|
82261
82265
|
return mesh;
|
|
82262
82266
|
}
|
|
82263
82267
|
|
|
@@ -82616,10 +82620,15 @@ class SceneModel extends Component {
|
|
|
82616
82620
|
let meshes = [];
|
|
82617
82621
|
for (let i = 0, len = cfg.meshIds.length; i < len; i++) {
|
|
82618
82622
|
const meshId = cfg.meshIds[i];
|
|
82619
|
-
|
|
82620
|
-
if (!mesh) {
|
|
82621
|
-
|
|
82622
|
-
|
|
82623
|
+
let mesh = this._meshes[meshId]; // Trying to get already created mesh
|
|
82624
|
+
if (!mesh) { // Checks if there is already created mesh for this meshId
|
|
82625
|
+
let meshCfg = this._meshesCfgsBeforeMeshCreation[meshId]; // Trying to get already created cfg
|
|
82626
|
+
if (!meshCfg) { // Checks if there is already created cfg for this meshId
|
|
82627
|
+
this.error(`Mesh with this ID not found: "${meshId}" - ignoring this mesh`); // There is no such cfg
|
|
82628
|
+
continue;
|
|
82629
|
+
}
|
|
82630
|
+
mesh = this._createMesh(meshCfg); // There is no such mesh yet, but there is already created cfg, so it creates this mesh
|
|
82631
|
+
this._meshes[cfg.id] = mesh; // Now it will also add this mesh to dictionary of created meshes
|
|
82623
82632
|
}
|
|
82624
82633
|
if (mesh.parent) {
|
|
82625
82634
|
this.error(`Mesh with ID "${meshId}" already belongs to object with ID "${mesh.parent.id}" - ignoring this mesh`);
|
|
@@ -85529,8 +85538,15 @@ class DistanceMeasurementsMouseControl extends DistanceMeasurementsControl {
|
|
|
85529
85538
|
pointerWorldPos.set(event.worldPos);
|
|
85530
85539
|
pointerCanvasPos.set(event.canvasPos);
|
|
85531
85540
|
if (this._mouseState === MOUSE_FIRST_CLICK_EXPECTED) {
|
|
85532
|
-
|
|
85533
|
-
|
|
85541
|
+
|
|
85542
|
+
const canvasBoundRect = canvas.getBoundingClientRect();
|
|
85543
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
85544
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
85545
|
+
const canvasLeftEdge = canvasBoundRect.left + scrollLeft;
|
|
85546
|
+
const canvasTopEdge = canvasBoundRect.top + scrollTop;
|
|
85547
|
+
|
|
85548
|
+
this._markerDiv.style.marginLeft = `${canvasLeftEdge + canvasPos[0] - 5}px`;
|
|
85549
|
+
this._markerDiv.style.marginTop = `${canvasTopEdge + canvasPos[1] - 5}px`;
|
|
85534
85550
|
this._markerDiv.style.background = "pink";
|
|
85535
85551
|
if (event.snappedToVertex || event.snappedToEdge) {
|
|
85536
85552
|
if (this.pointerLens) {
|
package/dist/xeokit-sdk.es.js
CHANGED
|
@@ -12150,8 +12150,13 @@ class AngleMeasurementsMouseControl extends AngleMeasurementsControl {
|
|
|
12150
12150
|
mouseHoverCanvasPos.set(canvasPos);
|
|
12151
12151
|
switch (this._mouseState) {
|
|
12152
12152
|
case MOUSE_FINDING_ORIGIN:
|
|
12153
|
-
|
|
12154
|
-
|
|
12153
|
+
const canvasBoundRect = canvas.getBoundingClientRect();
|
|
12154
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
12155
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
12156
|
+
const canvasLeftEdge = canvasBoundRect.left + scrollLeft;
|
|
12157
|
+
const canvasTopEdge = canvasBoundRect.top + scrollTop;
|
|
12158
|
+
this._markerDiv.style.marginLeft = `${canvasLeftEdge + canvasPos[0] - 5}px`;
|
|
12159
|
+
this._markerDiv.style.marginTop = `${canvasTopEdge + canvasPos[1] - 5}px`;
|
|
12155
12160
|
break;
|
|
12156
12161
|
case MOUSE_FINDING_CORNER:
|
|
12157
12162
|
if (this._currentAngleMeasurement) {
|
|
@@ -80319,8 +80324,6 @@ class SceneModel extends Component {
|
|
|
80319
80324
|
this._vboBatchingLayers = {};
|
|
80320
80325
|
this._dtxLayers = {};
|
|
80321
80326
|
|
|
80322
|
-
this._meshList = [];
|
|
80323
|
-
|
|
80324
80327
|
this.layerList = []; // For GL state efficiency when drawing, InstancingLayers are in first part, BatchingLayers are in second
|
|
80325
80328
|
this._entityList = [];
|
|
80326
80329
|
|
|
@@ -80333,6 +80336,7 @@ class SceneModel extends Component {
|
|
|
80333
80336
|
this._entities = {};
|
|
80334
80337
|
|
|
80335
80338
|
this._scheduledMeshes = {};
|
|
80339
|
+
this._meshesCfgsBeforeMeshCreation = {};
|
|
80336
80340
|
|
|
80337
80341
|
/** @private **/
|
|
80338
80342
|
this.renderFlags = new RenderFlags();
|
|
@@ -81863,7 +81867,7 @@ class SceneModel extends Component {
|
|
|
81863
81867
|
/**
|
|
81864
81868
|
* Creates a new {@link SceneModelMesh} within this SceneModel.
|
|
81865
81869
|
*
|
|
81866
|
-
* *
|
|
81870
|
+
* * It prepares and saves data for a SceneModelMesh {@link SceneModel#meshes} creation. SceneModelMesh will be created only once the SceneModelEntity (which references this particular SceneModelMesh) will be created.
|
|
81867
81871
|
* * The SceneModelMesh can either define its own geometry or share it with other SceneModelMeshes. To define own geometry, provide the
|
|
81868
81872
|
* various geometry arrays to this method. To share a geometry, provide the ID of a geometry created earlier
|
|
81869
81873
|
* with {@link SceneModel#createGeometry}.
|
|
@@ -81898,18 +81902,18 @@ class SceneModel extends Component {
|
|
|
81898
81902
|
* @param {Number} [cfg.opacity=1] Opacity in range ````[0..1]````. Overridden by texture set ````colorTexture````.
|
|
81899
81903
|
* @param {Number} [cfg.metallic=0] Metallic factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
81900
81904
|
* @param {Number} [cfg.roughness=1] Roughness factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
81901
|
-
* @returns {
|
|
81905
|
+
* @returns {Boolean} True = successfully mesh was created. False = error during creation of a mesh.
|
|
81902
81906
|
*/
|
|
81903
81907
|
createMesh(cfg) {
|
|
81904
81908
|
|
|
81905
81909
|
if (cfg.id === undefined || cfg.id === null) {
|
|
81906
81910
|
this.error("[createMesh] SceneModel.createMesh() config missing: id");
|
|
81907
|
-
return;
|
|
81911
|
+
return false;
|
|
81908
81912
|
}
|
|
81909
81913
|
|
|
81910
81914
|
if (this._scheduledMeshes[cfg.id]) {
|
|
81911
81915
|
this.error(`[createMesh] SceneModel already has a mesh with this ID: ${cfg.id}`);
|
|
81912
|
-
return;
|
|
81916
|
+
return false;
|
|
81913
81917
|
}
|
|
81914
81918
|
|
|
81915
81919
|
const instancing = (cfg.geometryId !== undefined);
|
|
@@ -81924,31 +81928,31 @@ class SceneModel extends Component {
|
|
|
81924
81928
|
}
|
|
81925
81929
|
if (cfg.primitive !== "points" && cfg.primitive !== "lines" && cfg.primitive !== "triangles" && cfg.primitive !== "solid" && cfg.primitive !== "surface") {
|
|
81926
81930
|
this.error(`Unsupported value for 'primitive': '${primitive}' ('geometryId' is absent) - supported values are 'points', 'lines', 'triangles', 'solid' and 'surface'.`);
|
|
81927
|
-
return;
|
|
81931
|
+
return false;
|
|
81928
81932
|
}
|
|
81929
81933
|
if (!cfg.positions && !cfg.positionsCompressed && !cfg.buckets) {
|
|
81930
81934
|
this.error("Param expected: 'positions', 'positionsCompressed' or `buckets` ('geometryId' is absent)");
|
|
81931
|
-
return
|
|
81935
|
+
return false;
|
|
81932
81936
|
}
|
|
81933
81937
|
if (cfg.positions && (cfg.positionsDecodeMatrix || cfg.positionsDecodeBoundary)) {
|
|
81934
81938
|
this.error("Illegal params: 'positions' not expected with 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");
|
|
81935
|
-
return
|
|
81939
|
+
return false;
|
|
81936
81940
|
}
|
|
81937
81941
|
if (cfg.positionsCompressed && !cfg.positionsDecodeMatrix && !cfg.positionsDecodeBoundary) {
|
|
81938
81942
|
this.error("Param expected: 'positionsCompressed' should be accompanied by 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");
|
|
81939
|
-
return
|
|
81943
|
+
return false;
|
|
81940
81944
|
}
|
|
81941
81945
|
if (cfg.uvCompressed && !cfg.uvDecodeMatrix) {
|
|
81942
81946
|
this.error("Param expected: 'uvCompressed' should be accompanied by `uvDecodeMatrix` ('geometryId' is absent)");
|
|
81943
|
-
return
|
|
81947
|
+
return false;
|
|
81944
81948
|
}
|
|
81945
81949
|
if (!cfg.buckets && !cfg.indices && cfg.primitive !== "points") {
|
|
81946
81950
|
this.error(`Param expected: indices (required for '${cfg.primitive}' primitive type)`);
|
|
81947
|
-
return
|
|
81951
|
+
return false;
|
|
81948
81952
|
}
|
|
81949
81953
|
if ((cfg.matrix || cfg.position || cfg.rotation || cfg.scale) && (cfg.positionsCompressed || cfg.positionsDecodeBoundary)) {
|
|
81950
81954
|
this.error("Unexpected params: 'matrix', 'rotation', 'scale', 'position' not allowed with 'positionsCompressed'");
|
|
81951
|
-
return
|
|
81955
|
+
return false;
|
|
81952
81956
|
}
|
|
81953
81957
|
|
|
81954
81958
|
const useDTX = (!!this._dtxEnabled && (cfg.primitive === "triangles"
|
|
@@ -82113,7 +82117,7 @@ class SceneModel extends Component {
|
|
|
82113
82117
|
cfg.textureSet = this._textureSets[cfg.textureSetId];
|
|
82114
82118
|
if (!cfg.textureSet) {
|
|
82115
82119
|
this.error(`[createMesh] Texture set not found: ${cfg.textureSetId} - ensure that you create it first with createTextureSet()`);
|
|
82116
|
-
return;
|
|
82120
|
+
return false;
|
|
82117
82121
|
}
|
|
82118
82122
|
}
|
|
82119
82123
|
}
|
|
@@ -82124,13 +82128,13 @@ class SceneModel extends Component {
|
|
|
82124
82128
|
|
|
82125
82129
|
if (cfg.positions || cfg.positionsCompressed || cfg.indices || cfg.edgeIndices || cfg.normals || cfg.normalsCompressed || cfg.uv || cfg.uvCompressed || cfg.positionsDecodeMatrix) {
|
|
82126
82130
|
this.error(`Mesh geometry parameters not expected when instancing a geometry (not expected: positions, positionsCompressed, indices, edgeIndices, normals, normalsCompressed, uv, uvCompressed, positionsDecodeMatrix)`);
|
|
82127
|
-
return;
|
|
82131
|
+
return false;
|
|
82128
82132
|
}
|
|
82129
82133
|
|
|
82130
82134
|
cfg.geometry = this._geometries[cfg.geometryId];
|
|
82131
82135
|
if (!cfg.geometry) {
|
|
82132
82136
|
this.error(`[createMesh] Geometry not found: ${cfg.geometryId} - ensure that you create it first with createGeometry()`);
|
|
82133
|
-
return;
|
|
82137
|
+
return false;
|
|
82134
82138
|
}
|
|
82135
82139
|
|
|
82136
82140
|
cfg.origin = cfg.origin ? math.addVec3(this._origin, cfg.origin, math.vec3()) : this._origin;
|
|
@@ -82144,7 +82148,7 @@ class SceneModel extends Component {
|
|
|
82144
82148
|
|
|
82145
82149
|
if (!cfg.transform) {
|
|
82146
82150
|
this.error(`[createMesh] Transform not found: ${cfg.transformId} - ensure that you create it first with createTransform()`);
|
|
82147
|
-
return;
|
|
82151
|
+
return false;
|
|
82148
82152
|
}
|
|
82149
82153
|
|
|
82150
82154
|
cfg.aabb = cfg.geometry.aabb;
|
|
@@ -82212,7 +82216,7 @@ class SceneModel extends Component {
|
|
|
82212
82216
|
cfg.textureSet = this._textureSets[cfg.textureSetId];
|
|
82213
82217
|
// if (!cfg.textureSet) {
|
|
82214
82218
|
// this.error(`[createMesh] Texture set not found: ${cfg.textureSetId} - ensure that you create it first with createTextureSet()`);
|
|
82215
|
-
// return;
|
|
82219
|
+
// return false;
|
|
82216
82220
|
// }
|
|
82217
82221
|
}
|
|
82218
82222
|
}
|
|
@@ -82220,7 +82224,9 @@ class SceneModel extends Component {
|
|
|
82220
82224
|
|
|
82221
82225
|
cfg.numPrimitives = this._getNumPrimitives(cfg);
|
|
82222
82226
|
|
|
82223
|
-
|
|
82227
|
+
this._meshesCfgsBeforeMeshCreation[cfg.id] = cfg;
|
|
82228
|
+
|
|
82229
|
+
return true;
|
|
82224
82230
|
}
|
|
82225
82231
|
|
|
82226
82232
|
_createMesh(cfg) {
|
|
@@ -82252,8 +82258,6 @@ class SceneModel extends Component {
|
|
|
82252
82258
|
cfg.meshMatrix = cfg.transform.worldMatrix;
|
|
82253
82259
|
}
|
|
82254
82260
|
mesh.portionId = mesh.layer.createPortion(mesh, cfg);
|
|
82255
|
-
this._meshes[cfg.id] = mesh;
|
|
82256
|
-
this._meshList.push(mesh);
|
|
82257
82261
|
return mesh;
|
|
82258
82262
|
}
|
|
82259
82263
|
|
|
@@ -82612,10 +82616,15 @@ class SceneModel extends Component {
|
|
|
82612
82616
|
let meshes = [];
|
|
82613
82617
|
for (let i = 0, len = cfg.meshIds.length; i < len; i++) {
|
|
82614
82618
|
const meshId = cfg.meshIds[i];
|
|
82615
|
-
|
|
82616
|
-
if (!mesh) {
|
|
82617
|
-
|
|
82618
|
-
|
|
82619
|
+
let mesh = this._meshes[meshId]; // Trying to get already created mesh
|
|
82620
|
+
if (!mesh) { // Checks if there is already created mesh for this meshId
|
|
82621
|
+
let meshCfg = this._meshesCfgsBeforeMeshCreation[meshId]; // Trying to get already created cfg
|
|
82622
|
+
if (!meshCfg) { // Checks if there is already created cfg for this meshId
|
|
82623
|
+
this.error(`Mesh with this ID not found: "${meshId}" - ignoring this mesh`); // There is no such cfg
|
|
82624
|
+
continue;
|
|
82625
|
+
}
|
|
82626
|
+
mesh = this._createMesh(meshCfg); // There is no such mesh yet, but there is already created cfg, so it creates this mesh
|
|
82627
|
+
this._meshes[cfg.id] = mesh; // Now it will also add this mesh to dictionary of created meshes
|
|
82619
82628
|
}
|
|
82620
82629
|
if (mesh.parent) {
|
|
82621
82630
|
this.error(`Mesh with ID "${meshId}" already belongs to object with ID "${mesh.parent.id}" - ignoring this mesh`);
|
|
@@ -85525,8 +85534,15 @@ class DistanceMeasurementsMouseControl extends DistanceMeasurementsControl {
|
|
|
85525
85534
|
pointerWorldPos.set(event.worldPos);
|
|
85526
85535
|
pointerCanvasPos.set(event.canvasPos);
|
|
85527
85536
|
if (this._mouseState === MOUSE_FIRST_CLICK_EXPECTED) {
|
|
85528
|
-
|
|
85529
|
-
|
|
85537
|
+
|
|
85538
|
+
const canvasBoundRect = canvas.getBoundingClientRect();
|
|
85539
|
+
const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
|
|
85540
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
85541
|
+
const canvasLeftEdge = canvasBoundRect.left + scrollLeft;
|
|
85542
|
+
const canvasTopEdge = canvasBoundRect.top + scrollTop;
|
|
85543
|
+
|
|
85544
|
+
this._markerDiv.style.marginLeft = `${canvasLeftEdge + canvasPos[0] - 5}px`;
|
|
85545
|
+
this._markerDiv.style.marginTop = `${canvasTopEdge + canvasPos[1] - 5}px`;
|
|
85530
85546
|
this._markerDiv.style.background = "pink";
|
|
85531
85547
|
if (event.snappedToVertex || event.snappedToEdge) {
|
|
85532
85548
|
if (this.pointerLens) {
|
package/dist/xeokit-sdk.es5.js
CHANGED
|
@@ -2979,7 +2979,7 @@ _this18._initMarkerDiv();_this18._onMouseHoverSurface=null;_this18._onHoverNothi
|
|
|
2979
2979
|
*/function get(){return this._snapping;}/**
|
|
2980
2980
|
* Activates this AngleMeasurementsMouseControl, ready to respond to input.
|
|
2981
2981
|
*/,set:function set(snapping){if(snapping!==this._snapping){this._snapping=snapping;this.deactivate();this.activate();}else{this._snapping=snapping;}}},{key:"activate",value:function activate(){var _this19=this;if(this._active){return;}if(!this.markerDiv){this._initMarkerDiv();// if the marker is destroyed after deactivation, we recreate it
|
|
2982
|
-
}this.angleMeasurementsPlugin;var scene=this.scene;scene.input;var canvas=scene.canvas.canvas;var clickTolerance=20;var cameraControl=this.angleMeasurementsPlugin.viewer.cameraControl;var pointerLens=this.pointerLens;var mouseHovering=false;var hoveredEntity=null;var lastMouseCanvasX=0;var lastMouseCanvasY=0;var mouseWorldPos=math.vec3();var mouseHoverCanvasPos=math.vec2();this._currentAngleMeasurement=null;this._onMouseHoverSurface=cameraControl.on(this._snapping?"hoverSnapOrSurface":"hoverSurface",function(event){if(event.snappedToVertex||event.snappedToEdge){if(pointerLens){pointerLens.visible=true;pointerLens.canvasPos=event.canvasPos;pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;pointerLens.snapped=true;}_this19.markerDiv.style.background="greenyellow";_this19.markerDiv.style.border="2px solid green";}else{if(pointerLens){pointerLens.visible=true;pointerLens.canvasPos=event.canvasPos;pointerLens.snappedCanvasPos=event.canvasPos;pointerLens.snapped=false;}_this19.markerDiv.style.background="pink";_this19.markerDiv.style.border="2px solid red";}var canvasPos=event.snappedCanvasPos||event.canvasPos;mouseHovering=true;hoveredEntity=event.entity;mouseWorldPos.set(event.worldPos);mouseHoverCanvasPos.set(canvasPos);switch(_this19._mouseState){case MOUSE_FINDING_ORIGIN:_this19.
|
|
2982
|
+
}this.angleMeasurementsPlugin;var scene=this.scene;scene.input;var canvas=scene.canvas.canvas;var clickTolerance=20;var cameraControl=this.angleMeasurementsPlugin.viewer.cameraControl;var pointerLens=this.pointerLens;var mouseHovering=false;var hoveredEntity=null;var lastMouseCanvasX=0;var lastMouseCanvasY=0;var mouseWorldPos=math.vec3();var mouseHoverCanvasPos=math.vec2();this._currentAngleMeasurement=null;this._onMouseHoverSurface=cameraControl.on(this._snapping?"hoverSnapOrSurface":"hoverSurface",function(event){if(event.snappedToVertex||event.snappedToEdge){if(pointerLens){pointerLens.visible=true;pointerLens.canvasPos=event.canvasPos;pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;pointerLens.snapped=true;}_this19.markerDiv.style.background="greenyellow";_this19.markerDiv.style.border="2px solid green";}else{if(pointerLens){pointerLens.visible=true;pointerLens.canvasPos=event.canvasPos;pointerLens.snappedCanvasPos=event.canvasPos;pointerLens.snapped=false;}_this19.markerDiv.style.background="pink";_this19.markerDiv.style.border="2px solid red";}var canvasPos=event.snappedCanvasPos||event.canvasPos;mouseHovering=true;hoveredEntity=event.entity;mouseWorldPos.set(event.worldPos);mouseHoverCanvasPos.set(canvasPos);switch(_this19._mouseState){case MOUSE_FINDING_ORIGIN:var canvasBoundRect=canvas.getBoundingClientRect();var scrollLeft=window.pageXOffset||document.documentElement.scrollLeft;var scrollTop=window.pageYOffset||document.documentElement.scrollTop;var canvasLeftEdge=canvasBoundRect.left+scrollLeft;var canvasTopEdge=canvasBoundRect.top+scrollTop;_this19._markerDiv.style.marginLeft="".concat(canvasLeftEdge+canvasPos[0]-5,"px");_this19._markerDiv.style.marginTop="".concat(canvasTopEdge+canvasPos[1]-5,"px");break;case MOUSE_FINDING_CORNER:if(_this19._currentAngleMeasurement){_this19._currentAngleMeasurement.originWireVisible=true;_this19._currentAngleMeasurement.targetWireVisible=false;_this19._currentAngleMeasurement.cornerVisible=true;_this19._currentAngleMeasurement.angleVisible=false;_this19._currentAngleMeasurement.corner.worldPos=event.worldPos;_this19._currentAngleMeasurement.corner.entity=event.entity;}_this19.markerDiv.style.marginLeft="-10000px";_this19.markerDiv.style.marginTop="-10000px";canvas.style.cursor="pointer";break;case MOUSE_FINDING_TARGET:if(_this19._currentAngleMeasurement){_this19._currentAngleMeasurement.targetWireVisible=true;_this19._currentAngleMeasurement.targetVisible=true;_this19._currentAngleMeasurement.angleVisible=true;_this19._currentAngleMeasurement.target.worldPos=event.worldPos;_this19._currentAngleMeasurement.target.entity=event.entity;}_this19.markerDiv.style.marginLeft="-10000px";_this19.markerDiv.style.marginTop="-10000px";canvas.style.cursor="pointer";break;}});canvas.addEventListener('mousedown',this._onMouseDown=function(e){if(e.which!==1){return;}lastMouseCanvasX=e.clientX;lastMouseCanvasY=e.clientY;});canvas.addEventListener("mouseup",this._onMouseUp=function(e){if(e.which!==1){return;}if(e.clientX>lastMouseCanvasX+clickTolerance||e.clientX<lastMouseCanvasX-clickTolerance||e.clientY>lastMouseCanvasY+clickTolerance||e.clientY<lastMouseCanvasY-clickTolerance){return;}switch(_this19._mouseState){case MOUSE_FINDING_ORIGIN:if(mouseHovering){_this19._currentAngleMeasurement=_this19.angleMeasurementsPlugin.createMeasurement({id:math.createUUID(),origin:{worldPos:mouseWorldPos},corner:{worldPos:mouseWorldPos},target:{worldPos:mouseWorldPos},approximate:true});_this19._currentAngleMeasurement.clickable=false;_this19._currentAngleMeasurement.originVisible=true;_this19._currentAngleMeasurement.originWireVisible=true;_this19._currentAngleMeasurement.cornerVisible=false;_this19._currentAngleMeasurement.targetWireVisible=false;_this19._currentAngleMeasurement.targetVisible=false;_this19._currentAngleMeasurement.angleVisible=false;_this19._currentAngleMeasurement.origin.entity=hoveredEntity;_this19._mouseState=MOUSE_FINDING_CORNER;_this19.angleMeasurementsPlugin.fire("measurementStart",_this19._currentAngleMeasurement);}break;case MOUSE_FINDING_CORNER:if(mouseHovering){_this19._currentAngleMeasurement.targetWireVisible=false;_this19._currentAngleMeasurement.targetVisible=true;_this19._currentAngleMeasurement.angleVisible=true;_this19._currentAngleMeasurement.corner.entity=hoveredEntity;_this19._mouseState=MOUSE_FINDING_TARGET;}else{if(_this19._currentAngleMeasurement){_this19._currentAngleMeasurement.destroy();_this19._currentAngleMeasurement=null;hoveredEntity=null;_this19._mouseState=MOUSE_FINDING_ORIGIN;_this19.angleMeasurementsPlugin.fire("measurementCancel",_this19._currentAngleMeasurement);}}break;case MOUSE_FINDING_TARGET:if(mouseHovering){_this19._currentAngleMeasurement.targetVisible=true;_this19._currentAngleMeasurement.angleVisible=true;_this19._currentAngleMeasurement.target.entity=hoveredEntity;_this19._currentAngleMeasurement.clickable=true;hoveredEntity=null;_this19.angleMeasurementsPlugin.fire("measurementEnd",_this19._currentAngleMeasurement);_this19._currentAngleMeasurement=null;_this19._mouseState=MOUSE_FINDING_ORIGIN;}else{if(_this19._currentAngleMeasurement){_this19._currentAngleMeasurement.destroy();_this19._currentAngleMeasurement=null;hoveredEntity=null;_this19._mouseState=MOUSE_FINDING_ORIGIN;_this19.angleMeasurementsPlugin.fire("measurementCancel",_this19._currentAngleMeasurement);}}break;}});this._onMouseHoverOff=cameraControl.on(this._snapping?"hoverSnapOrSurfaceOff":"hoverOff",function(event){mouseHovering=false;if(pointerLens){pointerLens.visible=true;pointerLens.pointerPos=event.canvasPos;pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;pointerLens.snapped=false;}_this19.markerDiv.style.marginLeft="-100px";_this19.markerDiv.style.marginTop="-100px";if(_this19._currentAngleMeasurement){switch(_this19._mouseState){case MOUSE_FINDING_ORIGIN:_this19._currentAngleMeasurement.originVisible=false;break;case MOUSE_FINDING_CORNER:_this19._currentAngleMeasurement.cornerVisible=false;_this19._currentAngleMeasurement.originWireVisible=false;_this19._currentAngleMeasurement.targetVisible=false;_this19._currentAngleMeasurement.targetWireVisible=false;_this19._currentAngleMeasurement.angleVisible=false;break;case MOUSE_FINDING_TARGET:_this19._currentAngleMeasurement.targetVisible=false;_this19._currentAngleMeasurement.targetWireVisible=false;_this19._currentAngleMeasurement.angleVisible=false;break;}canvas.style.cursor="default";}});this._active=true;}/**
|
|
2983
2983
|
* Deactivates this AngleMeasurementsMouseControl, making it unresponsive to input.
|
|
2984
2984
|
*
|
|
2985
2985
|
* Destroys any {@link AngleMeasurement} under construction by this AngleMeasurementsMouseControl.
|
|
@@ -17515,9 +17515,9 @@ return this;}/**
|
|
|
17515
17515
|
* primitives. Only works while {@link DTX#enabled} is also ````true````.
|
|
17516
17516
|
*/function SceneModel(owner){var _this74;var cfg=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,SceneModel);_this74=_super112.call(this,owner,cfg);_this74._dtxEnabled=_this74.scene.dtxEnabled&&cfg.dtxEnabled!==false;_this74._enableVertexWelding=false;// Not needed for most objects, and very expensive, so disabled
|
|
17517
17517
|
_this74._enableIndexBucketing=false;// Until fixed: https://github.com/xeokit/xeokit-sdk/issues/1204
|
|
17518
|
-
_this74._vboBatchingLayerScratchMemory=getScratchMemory();_this74._textureTranscoder=cfg.textureTranscoder||getKTX2TextureTranscoder(_this74.scene.viewer);_this74._maxGeometryBatchSize=cfg.maxGeometryBatchSize;_this74._aabb=math.collapseAABB3();_this74._aabbDirty=true;_this74._quantizationRanges={};_this74._vboInstancingLayers={};_this74._vboBatchingLayers={};_this74._dtxLayers={};_this74.
|
|
17518
|
+
_this74._vboBatchingLayerScratchMemory=getScratchMemory();_this74._textureTranscoder=cfg.textureTranscoder||getKTX2TextureTranscoder(_this74.scene.viewer);_this74._maxGeometryBatchSize=cfg.maxGeometryBatchSize;_this74._aabb=math.collapseAABB3();_this74._aabbDirty=true;_this74._quantizationRanges={};_this74._vboInstancingLayers={};_this74._vboBatchingLayers={};_this74._dtxLayers={};_this74.layerList=[];// For GL state efficiency when drawing, InstancingLayers are in first part, BatchingLayers are in second
|
|
17519
17519
|
_this74._entityList=[];_this74._geometries={};_this74._dtxBuckets={};// Geometries with optimizations used for data texture representation
|
|
17520
|
-
_this74._textures={};_this74._textureSets={};_this74._transforms={};_this74._meshes={};_this74._entities={};_this74._scheduledMeshes={};/** @private **/_this74.renderFlags=new RenderFlags();/**
|
|
17520
|
+
_this74._textures={};_this74._textureSets={};_this74._transforms={};_this74._meshes={};_this74._entities={};_this74._scheduledMeshes={};_this74._meshesCfgsBeforeMeshCreation={};/** @private **/_this74.renderFlags=new RenderFlags();/**
|
|
17521
17521
|
* @private
|
|
17522
17522
|
*/_this74.numGeometries=0;// Number of geometries created with createGeometry()
|
|
17523
17523
|
// These counts are used to avoid unnecessary render passes
|
|
@@ -18028,7 +18028,7 @@ if(!this._textureTranscoder){this.error("[createTexture] Can't create texture fr
|
|
|
18028
18028
|
*/},{key:"createTransform",value:function createTransform(cfg){if(cfg.id===undefined||cfg.id===null){this.error("[createTransform] SceneModel.createTransform() config missing: id");return;}if(this._transforms[cfg.id]){this.error("[createTransform] SceneModel already has a transform with this ID: ".concat(cfg.id));return;}var parentTransform;if(this.parentTransformId){parentTransform=this._transforms[cfg.parentTransformId];if(!parentTransform){this.error("[createTransform] SceneModel.createTransform() config missing: id");return;}}var transform=new SceneModelTransform({id:cfg.id,model:this,parentTransform:parentTransform,matrix:cfg.matrix,position:cfg.position,scale:cfg.scale,rotation:cfg.rotation,quaternion:cfg.quaternion});this._transforms[transform.id]=transform;return transform;}/**
|
|
18029
18029
|
* Creates a new {@link SceneModelMesh} within this SceneModel.
|
|
18030
18030
|
*
|
|
18031
|
-
* *
|
|
18031
|
+
* * It prepares and saves data for a SceneModelMesh {@link SceneModel#meshes} creation. SceneModelMesh will be created only once the SceneModelEntity (which references this particular SceneModelMesh) will be created.
|
|
18032
18032
|
* * The SceneModelMesh can either define its own geometry or share it with other SceneModelMeshes. To define own geometry, provide the
|
|
18033
18033
|
* various geometry arrays to this method. To share a geometry, provide the ID of a geometry created earlier
|
|
18034
18034
|
* with {@link SceneModel#createGeometry}.
|
|
@@ -18063,9 +18063,9 @@ if(!this._textureTranscoder){this.error("[createTexture] Can't create texture fr
|
|
|
18063
18063
|
* @param {Number} [cfg.opacity=1] Opacity in range ````[0..1]````. Overridden by texture set ````colorTexture````.
|
|
18064
18064
|
* @param {Number} [cfg.metallic=0] Metallic factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
18065
18065
|
* @param {Number} [cfg.roughness=1] Roughness factor in range ````[0..1]````. Overridden by texture set ````metallicRoughnessTexture````.
|
|
18066
|
-
* @returns {
|
|
18067
|
-
*/},{key:"createMesh",value:function createMesh(cfg){if(cfg.id===undefined||cfg.id===null){this.error("[createMesh] SceneModel.createMesh() config missing: id");return;}if(this._scheduledMeshes[cfg.id]){this.error("[createMesh] SceneModel already has a mesh with this ID: ".concat(cfg.id));return;}var instancing=cfg.geometryId!==undefined;var batching=!instancing;if(batching){// Batched geometry
|
|
18068
|
-
if(cfg.primitive===undefined||cfg.primitive===null){cfg.primitive="triangles";}if(cfg.primitive!=="points"&&cfg.primitive!=="lines"&&cfg.primitive!=="triangles"&&cfg.primitive!=="solid"&&cfg.primitive!=="surface"){this.error("Unsupported value for 'primitive': '".concat(primitive,"' ('geometryId' is absent) - supported values are 'points', 'lines', 'triangles', 'solid' and 'surface'."));return;}if(!cfg.positions&&!cfg.positionsCompressed&&!cfg.buckets){this.error("Param expected: 'positions', 'positionsCompressed' or `buckets` ('geometryId' is absent)");return
|
|
18066
|
+
* @returns {Boolean} True = successfully mesh was created. False = error during creation of a mesh.
|
|
18067
|
+
*/},{key:"createMesh",value:function createMesh(cfg){if(cfg.id===undefined||cfg.id===null){this.error("[createMesh] SceneModel.createMesh() config missing: id");return false;}if(this._scheduledMeshes[cfg.id]){this.error("[createMesh] SceneModel already has a mesh with this ID: ".concat(cfg.id));return false;}var instancing=cfg.geometryId!==undefined;var batching=!instancing;if(batching){// Batched geometry
|
|
18068
|
+
if(cfg.primitive===undefined||cfg.primitive===null){cfg.primitive="triangles";}if(cfg.primitive!=="points"&&cfg.primitive!=="lines"&&cfg.primitive!=="triangles"&&cfg.primitive!=="solid"&&cfg.primitive!=="surface"){this.error("Unsupported value for 'primitive': '".concat(primitive,"' ('geometryId' is absent) - supported values are 'points', 'lines', 'triangles', 'solid' and 'surface'."));return false;}if(!cfg.positions&&!cfg.positionsCompressed&&!cfg.buckets){this.error("Param expected: 'positions', 'positionsCompressed' or `buckets` ('geometryId' is absent)");return false;}if(cfg.positions&&(cfg.positionsDecodeMatrix||cfg.positionsDecodeBoundary)){this.error("Illegal params: 'positions' not expected with 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");return false;}if(cfg.positionsCompressed&&!cfg.positionsDecodeMatrix&&!cfg.positionsDecodeBoundary){this.error("Param expected: 'positionsCompressed' should be accompanied by 'positionsDecodeMatrix'/'positionsDecodeBoundary' ('geometryId' is absent)");return false;}if(cfg.uvCompressed&&!cfg.uvDecodeMatrix){this.error("Param expected: 'uvCompressed' should be accompanied by `uvDecodeMatrix` ('geometryId' is absent)");return false;}if(!cfg.buckets&&!cfg.indices&&cfg.primitive!=="points"){this.error("Param expected: indices (required for '".concat(cfg.primitive,"' primitive type)"));return false;}if((cfg.matrix||cfg.position||cfg.rotation||cfg.scale)&&(cfg.positionsCompressed||cfg.positionsDecodeBoundary)){this.error("Unexpected params: 'matrix', 'rotation', 'scale', 'position' not allowed with 'positionsCompressed'");return false;}var useDTX=!!this._dtxEnabled&&(cfg.primitive==="triangles"||cfg.primitive==="solid"||cfg.primitive==="surface");cfg.origin=cfg.origin?math.addVec3(this._origin,cfg.origin,math.vec3()):this._origin;// MATRIX - optional for batching
|
|
18069
18069
|
if(cfg.matrix){cfg.meshMatrix=cfg.matrix;}else if(cfg.scale||cfg.rotation||cfg.position){var _scale3=cfg.scale||DEFAULT_SCALE;var _position=cfg.position||DEFAULT_POSITION;var rotation=cfg.rotation||DEFAULT_ROTATION;math.eulerToQuaternion(rotation,"XYZ",DEFAULT_QUATERNION);cfg.meshMatrix=math.composeMat4(_position,DEFAULT_QUATERNION,_scale3,math.mat4());}if(cfg.positionsDecodeBoundary){cfg.positionsDecodeMatrix=createPositionsDecodeMatrix(cfg.positionsDecodeBoundary,math.mat4());}if(useDTX){// DTX
|
|
18070
18070
|
cfg.type=DTX;// NPR
|
|
18071
18071
|
cfg.color=cfg.color?new Uint8Array([Math.floor(cfg.color[0]*255),Math.floor(cfg.color[1]*255),Math.floor(cfg.color[2]*255)]):defaultCompressedColor;cfg.opacity=cfg.opacity!==undefined&&cfg.opacity!==null?Math.floor(cfg.opacity*255):255;// RTC
|
|
@@ -18080,9 +18080,9 @@ if(cfg.positions){var _rtcPositions=[];var _rtcNeeded=worldToRTCPositions(cfg.po
|
|
|
18080
18080
|
}math.expandAABB3Points3(_aabb5,cfg.positions);cfg.aabb=_aabb5;}else{var _aabb6=math.collapseAABB3();math.expandAABB3Points3(_aabb6,cfg.positionsCompressed);geometryCompressionUtils.decompressAABB(_aabb6,cfg.positionsDecodeMatrix);cfg.aabb=_aabb6;}if(cfg.meshMatrix){math.AABB3ToOBB3(cfg.aabb,tempOBB3);math.transformOBB3(cfg.meshMatrix,tempOBB3);math.OBB3ToAABB3(tempOBB3,cfg.aabb);}// EDGES
|
|
18081
18081
|
if(!cfg.buckets&&!cfg.edgeIndices&&(cfg.primitive==="triangles"||cfg.primitive==="solid"||cfg.primitive==="surface")){if(cfg.positions){cfg.edgeIndices=buildEdgeIndices(cfg.positions,cfg.indices,null,2.0);}else{cfg.edgeIndices=buildEdgeIndices(cfg.positionsCompressed,cfg.indices,cfg.positionsDecodeMatrix,2.0);}}// TEXTURE
|
|
18082
18082
|
// cfg.textureSetId = cfg.textureSetId || DEFAULT_TEXTURE_SET_ID;
|
|
18083
|
-
if(cfg.textureSetId){cfg.textureSet=this._textureSets[cfg.textureSetId];if(!cfg.textureSet){this.error("[createMesh] Texture set not found: ".concat(cfg.textureSetId," - ensure that you create it first with createTextureSet()"));return;}}}}else{// INSTANCING
|
|
18084
|
-
if(cfg.positions||cfg.positionsCompressed||cfg.indices||cfg.edgeIndices||cfg.normals||cfg.normalsCompressed||cfg.uv||cfg.uvCompressed||cfg.positionsDecodeMatrix){this.error("Mesh geometry parameters not expected when instancing a geometry (not expected: positions, positionsCompressed, indices, edgeIndices, normals, normalsCompressed, uv, uvCompressed, positionsDecodeMatrix)");return;}cfg.geometry=this._geometries[cfg.geometryId];if(!cfg.geometry){this.error("[createMesh] Geometry not found: ".concat(cfg.geometryId," - ensure that you create it first with createGeometry()"));return;}cfg.origin=cfg.origin?math.addVec3(this._origin,cfg.origin,math.vec3()):this._origin;cfg.positionsDecodeMatrix=cfg.geometry.positionsDecodeMatrix;if(cfg.transformId){// TRANSFORM
|
|
18085
|
-
cfg.transform=this._transforms[cfg.transformId];if(!cfg.transform){this.error("[createMesh] Transform not found: ".concat(cfg.transformId," - ensure that you create it first with createTransform()"));return;}cfg.aabb=cfg.geometry.aabb;}else{// MATRIX
|
|
18083
|
+
if(cfg.textureSetId){cfg.textureSet=this._textureSets[cfg.textureSetId];if(!cfg.textureSet){this.error("[createMesh] Texture set not found: ".concat(cfg.textureSetId," - ensure that you create it first with createTextureSet()"));return false;}}}}else{// INSTANCING
|
|
18084
|
+
if(cfg.positions||cfg.positionsCompressed||cfg.indices||cfg.edgeIndices||cfg.normals||cfg.normalsCompressed||cfg.uv||cfg.uvCompressed||cfg.positionsDecodeMatrix){this.error("Mesh geometry parameters not expected when instancing a geometry (not expected: positions, positionsCompressed, indices, edgeIndices, normals, normalsCompressed, uv, uvCompressed, positionsDecodeMatrix)");return false;}cfg.geometry=this._geometries[cfg.geometryId];if(!cfg.geometry){this.error("[createMesh] Geometry not found: ".concat(cfg.geometryId," - ensure that you create it first with createGeometry()"));return false;}cfg.origin=cfg.origin?math.addVec3(this._origin,cfg.origin,math.vec3()):this._origin;cfg.positionsDecodeMatrix=cfg.geometry.positionsDecodeMatrix;if(cfg.transformId){// TRANSFORM
|
|
18085
|
+
cfg.transform=this._transforms[cfg.transformId];if(!cfg.transform){this.error("[createMesh] Transform not found: ".concat(cfg.transformId," - ensure that you create it first with createTransform()"));return false;}cfg.aabb=cfg.geometry.aabb;}else{// MATRIX
|
|
18086
18086
|
if(cfg.matrix){cfg.meshMatrix=cfg.matrix.slice();}else{var _scale4=cfg.scale||DEFAULT_SCALE;var _position2=cfg.position||DEFAULT_POSITION;var _rotation=cfg.rotation||DEFAULT_ROTATION;math.eulerToQuaternion(_rotation,"XYZ",DEFAULT_QUATERNION);cfg.meshMatrix=math.composeMat4(_position2,DEFAULT_QUATERNION,_scale4,math.mat4());}math.AABB3ToOBB3(cfg.geometry.aabb,tempOBB3);math.transformOBB3(cfg.meshMatrix,tempOBB3);cfg.aabb=math.OBB3ToAABB3(tempOBB3,math.AABB3());}var _useDTX=!!this._dtxEnabled&&(cfg.geometry.primitive==="triangles"||cfg.geometry.primitive==="solid"||cfg.geometry.primitive==="surface");if(_useDTX){// DTX
|
|
18087
18087
|
cfg.type=DTX;// NPR
|
|
18088
18088
|
cfg.color=cfg.color?new Uint8Array([Math.floor(cfg.color[0]*255),Math.floor(cfg.color[1]*255),Math.floor(cfg.color[2]*255)]):defaultCompressedColor;cfg.opacity=cfg.opacity!==undefined&&cfg.opacity!==null?Math.floor(cfg.opacity*255):255;// BUCKETING - lazy generated, reused
|
|
@@ -18091,10 +18091,10 @@ cfg.type=VBO_INSTANCED;// PBR
|
|
|
18091
18091
|
cfg.color=cfg.color?new Uint8Array([Math.floor(cfg.color[0]*255),Math.floor(cfg.color[1]*255),Math.floor(cfg.color[2]*255)]):defaultCompressedColor;cfg.opacity=cfg.opacity!==undefined&&cfg.opacity!==null?Math.floor(cfg.opacity*255):255;cfg.metallic=cfg.metallic!==undefined&&cfg.metallic!==null?Math.floor(cfg.metallic*255):0;cfg.roughness=cfg.roughness!==undefined&&cfg.roughness!==null?Math.floor(cfg.roughness*255):255;// TEXTURE
|
|
18092
18092
|
if(cfg.textureSetId){cfg.textureSet=this._textureSets[cfg.textureSetId];// if (!cfg.textureSet) {
|
|
18093
18093
|
// this.error(`[createMesh] Texture set not found: ${cfg.textureSetId} - ensure that you create it first with createTextureSet()`);
|
|
18094
|
-
// return;
|
|
18094
|
+
// return false;
|
|
18095
18095
|
// }
|
|
18096
|
-
}}}cfg.numPrimitives=this._getNumPrimitives(cfg);
|
|
18097
|
-
cfg.solid=cfg.primitive==="solid";mesh.origin=math.vec3(cfg.origin);switch(cfg.type){case DTX:mesh.layer=this._getDTXLayer(cfg);mesh.aabb=cfg.aabb;break;case VBO_BATCHED:mesh.layer=this._getVBOBatchingLayer(cfg);mesh.aabb=cfg.aabb;break;case VBO_INSTANCED:mesh.layer=this._getVBOInstancingLayer(cfg);mesh.aabb=cfg.aabb;break;}if(cfg.transform){cfg.meshMatrix=cfg.transform.worldMatrix;}mesh.portionId=mesh.layer.createPortion(mesh,cfg);
|
|
18096
|
+
}}}cfg.numPrimitives=this._getNumPrimitives(cfg);this._meshesCfgsBeforeMeshCreation[cfg.id]=cfg;return true;}},{key:"_createMesh",value:function _createMesh(cfg){var mesh=new SceneModelMesh(this,cfg.id,cfg.color,cfg.opacity,cfg.transform,cfg.textureSet);mesh.pickId=this.scene._renderer.getPickID(mesh);var pickId=mesh.pickId;var a=pickId>>24&0xFF;var b=pickId>>16&0xFF;var g=pickId>>8&0xFF;var r=pickId&0xFF;cfg.pickColor=new Uint8Array([r,g,b,a]);// Quantized pick color
|
|
18097
|
+
cfg.solid=cfg.primitive==="solid";mesh.origin=math.vec3(cfg.origin);switch(cfg.type){case DTX:mesh.layer=this._getDTXLayer(cfg);mesh.aabb=cfg.aabb;break;case VBO_BATCHED:mesh.layer=this._getVBOBatchingLayer(cfg);mesh.aabb=cfg.aabb;break;case VBO_INSTANCED:mesh.layer=this._getVBOInstancingLayer(cfg);mesh.aabb=cfg.aabb;break;}if(cfg.transform){cfg.meshMatrix=cfg.transform.worldMatrix;}mesh.portionId=mesh.layer.createPortion(mesh,cfg);return mesh;}},{key:"_getNumPrimitives",value:function _getNumPrimitives(cfg){var countIndices=0;var primitive=cfg.geometry?cfg.geometry.primitive:cfg.primitive;switch(primitive){case"triangles":case"solid":case"surface":switch(cfg.type){case DTX:for(var _i414=0,len=cfg.buckets.length;_i414<len;_i414++){countIndices+=cfg.buckets[_i414].indices.length;}break;case VBO_BATCHED:countIndices+=cfg.indices.length;break;case VBO_INSTANCED:countIndices+=cfg.geometry.indices.length;break;}return Math.round(countIndices/3);case"points":switch(cfg.type){case DTX:for(var _i415=0,_len86=cfg.buckets.length;_i415<_len86;_i415++){countIndices+=cfg.buckets[_i415].positionsCompressed.length;}break;case VBO_BATCHED:countIndices+=cfg.positions?cfg.positions.length:cfg.positionsCompressed.length;break;case VBO_INSTANCED:var geometry=cfg.geometry;countIndices+=geometry.positions?geometry.positions.length:geometry.positionsCompressed.length;break;}return Math.round(countIndices);case"lines":case"line-strip":switch(cfg.type){case DTX:for(var _i416=0,_len87=cfg.buckets.length;_i416<_len87;_i416++){countIndices+=cfg.buckets[_i416].indices.length;}break;case VBO_BATCHED:countIndices+=cfg.indices.length;break;case VBO_INSTANCED:countIndices+=cfg.geometry.indices.length;break;}return Math.round(countIndices/2);}return 0;}},{key:"_getDTXLayer",value:function _getDTXLayer(cfg){var origin=cfg.origin;var primitive=cfg.geometry?cfg.geometry.primitive:cfg.primitive;var layerId=".".concat(primitive,".").concat(Math.round(origin[0]),".").concat(Math.round(origin[1]),".").concat(Math.round(origin[2]));var dtxLayer=this._dtxLayers[layerId];if(dtxLayer){if(!dtxLayer.canCreatePortion(cfg)){dtxLayer.finalize();delete this._dtxLayers[layerId];dtxLayer=null;}else{return dtxLayer;}}switch(primitive){case"triangles":case"solid":case"surface":dtxLayer=new DTXTrianglesLayer(this,{layerIndex:0,origin:origin});// layerIndex is set in #finalize()
|
|
18098
18098
|
break;case"lines":dtxLayer=new DTXLinesLayer(this,{layerIndex:0,origin:origin});// layerIndex is set in #finalize()
|
|
18099
18099
|
break;default:return;}this._dtxLayers[layerId]=dtxLayer;this.layerList.push(dtxLayer);return dtxLayer;}},{key:"_getVBOBatchingLayer",value:function _getVBOBatchingLayer(cfg){var model=this;var origin=cfg.origin;var positionsDecodeHash=cfg.positionsDecodeMatrix||cfg.positionsDecodeBoundary?this._createHashStringFromMatrix(cfg.positionsDecodeMatrix||cfg.positionsDecodeBoundary):"-";var textureSetId=cfg.textureSetId||"-";var layerId="".concat(Math.round(origin[0]),".").concat(Math.round(origin[1]),".").concat(Math.round(origin[2]),".").concat(cfg.primitive,".").concat(positionsDecodeHash,".").concat(textureSetId);var vboBatchingLayer=this._vboBatchingLayers[layerId];if(vboBatchingLayer){return vboBatchingLayer;}var textureSet=cfg.textureSet;while(!vboBatchingLayer){switch(cfg.primitive){case"triangles":// console.info(`[SceneModel ${this.id}]: creating TrianglesBatchingLayer`);
|
|
18100
18100
|
vboBatchingLayer=new VBOBatchingTrianglesLayer({model:model,textureSet:textureSet,layerIndex:0,// This is set in #finalize()
|
|
@@ -18155,7 +18155,14 @@ vboInstancingLayer=new VBOInstancingPointsLayer({model:model,textureSet:textureS
|
|
|
18155
18155
|
* @param {Boolean} [cfg.selected=false] Indicates if the SceneModelEntity is initially selected. Selected appearance is configured by {@link SceneModel#selectedMaterial}.
|
|
18156
18156
|
* @param {Boolean} [cfg.edges=false] Indicates if the SceneModelEntity's edges are initially emphasized. Edges appearance is configured by {@link SceneModel#edgeMaterial}.
|
|
18157
18157
|
* @returns {SceneModelEntity} The new SceneModelEntity.
|
|
18158
|
-
*/},{key:"createEntity",value:function createEntity(cfg){if(cfg.id===undefined){cfg.id=math.createUUID();}else if(this.scene.components[cfg.id]){this.error("Scene already has a Component with this ID: ".concat(cfg.id," - will assign random ID"));cfg.id=math.createUUID();}if(cfg.meshIds===undefined){this.error("Config missing: meshIds");return;}var flags=0;if(this._visible&&cfg.visible!==false){flags=flags|ENTITY_FLAGS.VISIBLE;}if(this._pickable&&cfg.pickable!==false){flags=flags|ENTITY_FLAGS.PICKABLE;}if(this._culled&&cfg.culled!==false){flags=flags|ENTITY_FLAGS.CULLED;}if(this._clippable&&cfg.clippable!==false){flags=flags|ENTITY_FLAGS.CLIPPABLE;}if(this._collidable&&cfg.collidable!==false){flags=flags|ENTITY_FLAGS.COLLIDABLE;}if(this._edges&&cfg.edges!==false){flags=flags|ENTITY_FLAGS.EDGES;}if(this._xrayed&&cfg.xrayed!==false){flags=flags|ENTITY_FLAGS.XRAYED;}if(this._highlighted&&cfg.highlighted!==false){flags=flags|ENTITY_FLAGS.HIGHLIGHTED;}if(this._selected&&cfg.selected!==false){flags=flags|ENTITY_FLAGS.SELECTED;}cfg.flags=flags;this._createEntity(cfg);}},{key:"_createEntity",value:function _createEntity(cfg){var meshes=[];for(var _i418=0,len=cfg.meshIds.length;_i418<len;_i418++){var meshId=cfg.meshIds[_i418];var _mesh2=this._meshes[meshId]
|
|
18158
|
+
*/},{key:"createEntity",value:function createEntity(cfg){if(cfg.id===undefined){cfg.id=math.createUUID();}else if(this.scene.components[cfg.id]){this.error("Scene already has a Component with this ID: ".concat(cfg.id," - will assign random ID"));cfg.id=math.createUUID();}if(cfg.meshIds===undefined){this.error("Config missing: meshIds");return;}var flags=0;if(this._visible&&cfg.visible!==false){flags=flags|ENTITY_FLAGS.VISIBLE;}if(this._pickable&&cfg.pickable!==false){flags=flags|ENTITY_FLAGS.PICKABLE;}if(this._culled&&cfg.culled!==false){flags=flags|ENTITY_FLAGS.CULLED;}if(this._clippable&&cfg.clippable!==false){flags=flags|ENTITY_FLAGS.CLIPPABLE;}if(this._collidable&&cfg.collidable!==false){flags=flags|ENTITY_FLAGS.COLLIDABLE;}if(this._edges&&cfg.edges!==false){flags=flags|ENTITY_FLAGS.EDGES;}if(this._xrayed&&cfg.xrayed!==false){flags=flags|ENTITY_FLAGS.XRAYED;}if(this._highlighted&&cfg.highlighted!==false){flags=flags|ENTITY_FLAGS.HIGHLIGHTED;}if(this._selected&&cfg.selected!==false){flags=flags|ENTITY_FLAGS.SELECTED;}cfg.flags=flags;this._createEntity(cfg);}},{key:"_createEntity",value:function _createEntity(cfg){var meshes=[];for(var _i418=0,len=cfg.meshIds.length;_i418<len;_i418++){var meshId=cfg.meshIds[_i418];var _mesh2=this._meshes[meshId];// Trying to get already created mesh
|
|
18159
|
+
if(!_mesh2){// Checks if there is already created mesh for this meshId
|
|
18160
|
+
var meshCfg=this._meshesCfgsBeforeMeshCreation[meshId];// Trying to get already created cfg
|
|
18161
|
+
if(!meshCfg){// Checks if there is already created cfg for this meshId
|
|
18162
|
+
this.error("Mesh with this ID not found: \"".concat(meshId,"\" - ignoring this mesh"));// There is no such cfg
|
|
18163
|
+
continue;}_mesh2=this._createMesh(meshCfg);// There is no such mesh yet, but there is already created cfg, so it creates this mesh
|
|
18164
|
+
this._meshes[cfg.id]=_mesh2;// Now it will also add this mesh to dictionary of created meshes
|
|
18165
|
+
}if(_mesh2.parent){this.error("Mesh with ID \"".concat(meshId,"\" already belongs to object with ID \"").concat(_mesh2.parent.id,"\" - ignoring this mesh"));continue;}meshes.push(_mesh2);}var lodCullable=true;var entity=new SceneModelEntity(this,cfg.isObject,cfg.id,meshes,cfg.flags,lodCullable);// Internally sets SceneModelEntity#parent to this SceneModel
|
|
18159
18166
|
this._entityList.push(entity);this._entities[cfg.id]=entity;this.numEntities++;}/**
|
|
18160
18167
|
* Finalizes this SceneModel.
|
|
18161
18168
|
*
|
|
@@ -18940,7 +18947,7 @@ this._originDot.setVisible(this._visible&&this._originVisible);this._targetDot.s
|
|
|
18940
18947
|
* @returns {boolean} Whether snap-to-vertex and snap-to-edge are enabled for this DistanceMeasurementsMouseControl.
|
|
18941
18948
|
*/function get(){return this._snapping;}/**
|
|
18942
18949
|
* Activates this DistanceMeasurementsMouseControl, ready to respond to input.
|
|
18943
|
-
*/,set:function set(snapping){if(snapping!==this._snapping){this._snapping=snapping;this.deactivate();this.activate();}else{this._snapping=snapping;}}},{key:"activate",value:function activate(){var _this82=this;if(this._active){return;}if(!this._markerDiv){this._initMarkerDiv();}this.fire("activated",true);var distanceMeasurementsPlugin=this.distanceMeasurementsPlugin;var scene=this.scene;var cameraControl=distanceMeasurementsPlugin.viewer.cameraControl;var canvas=scene.canvas.canvas;scene.input;var mouseHovering=false;var pointerWorldPos=math.vec3();var pointerCanvasPos=math.vec2();var pointerDownCanvasX;var pointerDownCanvasY;var clickTolerance=20;var hoveredEntity=null;this._mouseState=MOUSE_FIRST_CLICK_EXPECTED;this._onCameraControlHoverSnapOrSurface=cameraControl.on(this._snapping?"hoverSnapOrSurface":"hoverSurface",function(event){var canvasPos=event.snappedCanvasPos||event.canvasPos;mouseHovering=true;pointerWorldPos.set(event.worldPos);pointerCanvasPos.set(event.canvasPos);if(_this82._mouseState===MOUSE_FIRST_CLICK_EXPECTED){_this82._markerDiv.style.marginLeft="".concat(canvasPos[0]-5,"px");_this82._markerDiv.style.marginTop="".concat(canvasPos[1]-5,"px");_this82._markerDiv.style.background="pink";if(event.snappedToVertex||event.snappedToEdge){if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;_this82.pointerLens.snapped=true;}_this82._markerDiv.style.background="greenyellow";_this82._markerDiv.style.border="2px solid green";}else{if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.canvasPos;_this82.pointerLens.snapped=false;}_this82._markerDiv.style.background="pink";_this82._markerDiv.style.border="2px solid red";}hoveredEntity=event.entity;}else{_this82._markerDiv.style.marginLeft="-10000px";_this82._markerDiv.style.marginTop="-10000px";}canvas.style.cursor="pointer";if(_this82._currentDistanceMeasurement){_this82._currentDistanceMeasurement.wireVisible=_this82._currentDistanceMeasurementInitState.wireVisible;_this82._currentDistanceMeasurement.axisVisible=_this82._currentDistanceMeasurementInitState.axisVisible&&_this82.distanceMeasurementsPlugin.defaultAxisVisible;_this82._currentDistanceMeasurement.xAxisVisible=_this82._currentDistanceMeasurementInitState.xAxisVisible&&_this82.distanceMeasurementsPlugin.defaultXAxisVisible;_this82._currentDistanceMeasurement.yAxisVisible=_this82._currentDistanceMeasurementInitState.yAxisVisible&&_this82.distanceMeasurementsPlugin.defaultYAxisVisible;_this82._currentDistanceMeasurement.zAxisVisible=_this82._currentDistanceMeasurementInitState.zAxisVisible&&_this82.distanceMeasurementsPlugin.defaultZAxisVisible;_this82._currentDistanceMeasurement.targetVisible=_this82._currentDistanceMeasurementInitState.targetVisible;_this82._currentDistanceMeasurement.target.worldPos=pointerWorldPos.slice();_this82._markerDiv.style.marginLeft="-10000px";_this82._markerDiv.style.marginTop="-10000px";}});canvas.addEventListener('mousedown',this._onMouseDown=function(e){if(e.which!==1){return;}pointerDownCanvasX=e.clientX;pointerDownCanvasY=e.clientY;});canvas.addEventListener("mouseup",this._onMouseUp=function(e){if(e.which!==1){return;}if(e.clientX>pointerDownCanvasX+clickTolerance||e.clientX<pointerDownCanvasX-clickTolerance||e.clientY>pointerDownCanvasY+clickTolerance||e.clientY<pointerDownCanvasY-clickTolerance){return;}if(_this82._currentDistanceMeasurement){if(mouseHovering){_this82._currentDistanceMeasurement.target.entity=hoveredEntity;hoveredEntity=null;_this82._currentDistanceMeasurement.clickable=true;_this82.distanceMeasurementsPlugin.fire("measurementEnd",_this82._currentDistanceMeasurement);_this82._currentDistanceMeasurement=null;}else{_this82._currentDistanceMeasurement.destroy();_this82.distanceMeasurementsPlugin.fire("measurementCancel",_this82._currentDistanceMeasurement);_this82._currentDistanceMeasurement=null;hoveredEntity=null;}}else{if(mouseHovering){_this82._currentDistanceMeasurement=distanceMeasurementsPlugin.createMeasurement({id:math.createUUID(),origin:{worldPos:pointerWorldPos.slice()},target:{worldPos:pointerWorldPos.slice()},approximate:true});_this82._currentDistanceMeasurementInitState.axisVisible=_this82._currentDistanceMeasurement.axisVisible&&_this82.distanceMeasurementsPlugin.defaultAxisVisible;_this82._currentDistanceMeasurementInitState.xAxisVisible=_this82._currentDistanceMeasurement.xAxisVisible&&_this82.distanceMeasurementsPlugin.defaultXAxisVisible;_this82._currentDistanceMeasurementInitState.yAxisVisible=_this82._currentDistanceMeasurement.yAxisVisible&&_this82.distanceMeasurementsPlugin.defaultYAxisVisible;_this82._currentDistanceMeasurementInitState.zAxisVisible=_this82._currentDistanceMeasurement.zAxisVisible&&_this82.distanceMeasurementsPlugin.defaultZAxisVisible;_this82._currentDistanceMeasurementInitState.wireVisible=_this82._currentDistanceMeasurement.wireVisible;_this82._currentDistanceMeasurementInitState.targetVisible=_this82._currentDistanceMeasurement.targetVisible;_this82._currentDistanceMeasurement.clickable=false;_this82._currentDistanceMeasurement.origin.entity=hoveredEntity;hoveredEntity=null;_this82.fire("measurementStart",_this82._currentDistanceMeasurement);}}});this._onCameraControlHoverSnapOrSurfaceOff=cameraControl.on(this._snapping?"hoverSnapOrSurfaceOff":"hoverOff",function(event){if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;}mouseHovering=false;_this82._markerDiv.style.marginLeft="-100px";_this82._markerDiv.style.marginTop="-100px";if(_this82._currentDistanceMeasurement){_this82._currentDistanceMeasurement.wireVisible=false;_this82._currentDistanceMeasurement.targetVisible=false;_this82._currentDistanceMeasurement.axisVisible=false;}canvas.style.cursor="default";});this._active=true;}/**
|
|
18950
|
+
*/,set:function set(snapping){if(snapping!==this._snapping){this._snapping=snapping;this.deactivate();this.activate();}else{this._snapping=snapping;}}},{key:"activate",value:function activate(){var _this82=this;if(this._active){return;}if(!this._markerDiv){this._initMarkerDiv();}this.fire("activated",true);var distanceMeasurementsPlugin=this.distanceMeasurementsPlugin;var scene=this.scene;var cameraControl=distanceMeasurementsPlugin.viewer.cameraControl;var canvas=scene.canvas.canvas;scene.input;var mouseHovering=false;var pointerWorldPos=math.vec3();var pointerCanvasPos=math.vec2();var pointerDownCanvasX;var pointerDownCanvasY;var clickTolerance=20;var hoveredEntity=null;this._mouseState=MOUSE_FIRST_CLICK_EXPECTED;this._onCameraControlHoverSnapOrSurface=cameraControl.on(this._snapping?"hoverSnapOrSurface":"hoverSurface",function(event){var canvasPos=event.snappedCanvasPos||event.canvasPos;mouseHovering=true;pointerWorldPos.set(event.worldPos);pointerCanvasPos.set(event.canvasPos);if(_this82._mouseState===MOUSE_FIRST_CLICK_EXPECTED){var canvasBoundRect=canvas.getBoundingClientRect();var scrollLeft=window.pageXOffset||document.documentElement.scrollLeft;var scrollTop=window.pageYOffset||document.documentElement.scrollTop;var canvasLeftEdge=canvasBoundRect.left+scrollLeft;var canvasTopEdge=canvasBoundRect.top+scrollTop;_this82._markerDiv.style.marginLeft="".concat(canvasLeftEdge+canvasPos[0]-5,"px");_this82._markerDiv.style.marginTop="".concat(canvasTopEdge+canvasPos[1]-5,"px");_this82._markerDiv.style.background="pink";if(event.snappedToVertex||event.snappedToEdge){if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;_this82.pointerLens.snapped=true;}_this82._markerDiv.style.background="greenyellow";_this82._markerDiv.style.border="2px solid green";}else{if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.canvasPos;_this82.pointerLens.snapped=false;}_this82._markerDiv.style.background="pink";_this82._markerDiv.style.border="2px solid red";}hoveredEntity=event.entity;}else{_this82._markerDiv.style.marginLeft="-10000px";_this82._markerDiv.style.marginTop="-10000px";}canvas.style.cursor="pointer";if(_this82._currentDistanceMeasurement){_this82._currentDistanceMeasurement.wireVisible=_this82._currentDistanceMeasurementInitState.wireVisible;_this82._currentDistanceMeasurement.axisVisible=_this82._currentDistanceMeasurementInitState.axisVisible&&_this82.distanceMeasurementsPlugin.defaultAxisVisible;_this82._currentDistanceMeasurement.xAxisVisible=_this82._currentDistanceMeasurementInitState.xAxisVisible&&_this82.distanceMeasurementsPlugin.defaultXAxisVisible;_this82._currentDistanceMeasurement.yAxisVisible=_this82._currentDistanceMeasurementInitState.yAxisVisible&&_this82.distanceMeasurementsPlugin.defaultYAxisVisible;_this82._currentDistanceMeasurement.zAxisVisible=_this82._currentDistanceMeasurementInitState.zAxisVisible&&_this82.distanceMeasurementsPlugin.defaultZAxisVisible;_this82._currentDistanceMeasurement.targetVisible=_this82._currentDistanceMeasurementInitState.targetVisible;_this82._currentDistanceMeasurement.target.worldPos=pointerWorldPos.slice();_this82._markerDiv.style.marginLeft="-10000px";_this82._markerDiv.style.marginTop="-10000px";}});canvas.addEventListener('mousedown',this._onMouseDown=function(e){if(e.which!==1){return;}pointerDownCanvasX=e.clientX;pointerDownCanvasY=e.clientY;});canvas.addEventListener("mouseup",this._onMouseUp=function(e){if(e.which!==1){return;}if(e.clientX>pointerDownCanvasX+clickTolerance||e.clientX<pointerDownCanvasX-clickTolerance||e.clientY>pointerDownCanvasY+clickTolerance||e.clientY<pointerDownCanvasY-clickTolerance){return;}if(_this82._currentDistanceMeasurement){if(mouseHovering){_this82._currentDistanceMeasurement.target.entity=hoveredEntity;hoveredEntity=null;_this82._currentDistanceMeasurement.clickable=true;_this82.distanceMeasurementsPlugin.fire("measurementEnd",_this82._currentDistanceMeasurement);_this82._currentDistanceMeasurement=null;}else{_this82._currentDistanceMeasurement.destroy();_this82.distanceMeasurementsPlugin.fire("measurementCancel",_this82._currentDistanceMeasurement);_this82._currentDistanceMeasurement=null;hoveredEntity=null;}}else{if(mouseHovering){_this82._currentDistanceMeasurement=distanceMeasurementsPlugin.createMeasurement({id:math.createUUID(),origin:{worldPos:pointerWorldPos.slice()},target:{worldPos:pointerWorldPos.slice()},approximate:true});_this82._currentDistanceMeasurementInitState.axisVisible=_this82._currentDistanceMeasurement.axisVisible&&_this82.distanceMeasurementsPlugin.defaultAxisVisible;_this82._currentDistanceMeasurementInitState.xAxisVisible=_this82._currentDistanceMeasurement.xAxisVisible&&_this82.distanceMeasurementsPlugin.defaultXAxisVisible;_this82._currentDistanceMeasurementInitState.yAxisVisible=_this82._currentDistanceMeasurement.yAxisVisible&&_this82.distanceMeasurementsPlugin.defaultYAxisVisible;_this82._currentDistanceMeasurementInitState.zAxisVisible=_this82._currentDistanceMeasurement.zAxisVisible&&_this82.distanceMeasurementsPlugin.defaultZAxisVisible;_this82._currentDistanceMeasurementInitState.wireVisible=_this82._currentDistanceMeasurement.wireVisible;_this82._currentDistanceMeasurementInitState.targetVisible=_this82._currentDistanceMeasurement.targetVisible;_this82._currentDistanceMeasurement.clickable=false;_this82._currentDistanceMeasurement.origin.entity=hoveredEntity;hoveredEntity=null;_this82.fire("measurementStart",_this82._currentDistanceMeasurement);}}});this._onCameraControlHoverSnapOrSurfaceOff=cameraControl.on(this._snapping?"hoverSnapOrSurfaceOff":"hoverOff",function(event){if(_this82.pointerLens){_this82.pointerLens.visible=true;_this82.pointerLens.canvasPos=event.canvasPos;_this82.pointerLens.snappedCanvasPos=event.snappedCanvasPos||event.canvasPos;}mouseHovering=false;_this82._markerDiv.style.marginLeft="-100px";_this82._markerDiv.style.marginTop="-100px";if(_this82._currentDistanceMeasurement){_this82._currentDistanceMeasurement.wireVisible=false;_this82._currentDistanceMeasurement.targetVisible=false;_this82._currentDistanceMeasurement.axisVisible=false;}canvas.style.cursor="default";});this._active=true;}/**
|
|
18944
18951
|
* Deactivates this DistanceMeasurementsMouseControl, making it unresponsive to input.
|
|
18945
18952
|
*
|
|
18946
18953
|
* Destroys any {@link DistanceMeasurement} under construction by this DistanceMeasurementsMouseControl.
|