@xeokit/xeokit-sdk 2.6.61 → 2.6.62
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 +104 -40
- package/dist/xeokit-sdk.es.js +104 -40
- package/dist/xeokit-sdk.es5.js +82 -80
- package/dist/xeokit-sdk.min.cjs.js +5 -5
- package/dist/xeokit-sdk.min.es.js +5 -5
- package/dist/xeokit-sdk.min.es5.js +4 -4
- package/package.json +2 -1
- package/src/extras/ContextMenu/ContextMenu.js +11 -4
- package/src/plugins/AnnotationsPlugin/Annotation.js +3 -3
- package/src/plugins/ZonesPlugin/ZonesPlugin.js +14 -14
- package/src/plugins/lib/html/MenuEvent.js +17 -4
- package/src/viewer/metadata/MetaScene.js +2 -2
- package/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +1 -1
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +19 -4
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +11 -2
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +11 -2
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +9 -2
- package/src/viewer/scene/webgl/Renderer.js +6 -2
package/dist/xeokit-sdk.cjs.js
CHANGED
|
@@ -784,12 +784,19 @@ class ContextMenu {
|
|
|
784
784
|
subMenuElement.getBoundingClientRect();
|
|
785
785
|
|
|
786
786
|
const subMenuWidth = 200; // TODO
|
|
787
|
-
const
|
|
787
|
+
const showOnRight = (itemRect.right + subMenuWidth) < window.innerWidth;
|
|
788
|
+
const showOnLeft = (itemRect.left - subMenuWidth) > 0;
|
|
788
789
|
|
|
789
|
-
if
|
|
790
|
-
self._showMenu(subMenu.id, itemRect.left - subMenuWidth, itemRect.top - 1);
|
|
791
|
-
} else {
|
|
790
|
+
if(showOnRight)
|
|
792
791
|
self._showMenu(subMenu.id, itemRect.right - 5, itemRect.top - 1);
|
|
792
|
+
else if (showOnLeft)
|
|
793
|
+
self._showMenu(subMenu.id, itemRect.left - subMenuWidth, itemRect.top - 1);
|
|
794
|
+
else {
|
|
795
|
+
const spaceOnLeft = itemRect.left, spaceOnRight = window.innerWidth - itemRect.right;
|
|
796
|
+
if(spaceOnRight > spaceOnLeft)
|
|
797
|
+
self._showMenu(subMenu.id, itemRect.right - 5 - (subMenuWidth - spaceOnRight), itemRect.top - 1);
|
|
798
|
+
else
|
|
799
|
+
self._showMenu(subMenu.id, itemRect.left - spaceOnLeft, itemRect.top - 1);
|
|
793
800
|
}
|
|
794
801
|
|
|
795
802
|
lastSubMenu = subMenu;
|
|
@@ -9593,14 +9600,17 @@ function addContextMenuListener(elem, callback) {
|
|
|
9593
9600
|
|
|
9594
9601
|
const touchStartHandler = (event) => {
|
|
9595
9602
|
event.preventDefault();
|
|
9596
|
-
|
|
9597
|
-
startX = touch.clientX;
|
|
9598
|
-
startY = touch.clientY;
|
|
9599
|
-
|
|
9603
|
+
|
|
9600
9604
|
if (timeout) {
|
|
9601
9605
|
clearTimeout(timeout);
|
|
9602
9606
|
timeout = null;
|
|
9603
9607
|
}
|
|
9608
|
+
// If more than one finger touches the screen, cancel the timeout
|
|
9609
|
+
if (event.touches.length > 1) return;
|
|
9610
|
+
|
|
9611
|
+
const touch = event.touches[0];
|
|
9612
|
+
startX = touch.clientX;
|
|
9613
|
+
startY = touch.clientY;
|
|
9604
9614
|
|
|
9605
9615
|
timeout = setTimeout(() => {
|
|
9606
9616
|
event.clientX = touch.clientX;
|
|
@@ -9611,6 +9621,14 @@ function addContextMenuListener(elem, callback) {
|
|
|
9611
9621
|
}, longPressTimer);
|
|
9612
9622
|
};
|
|
9613
9623
|
|
|
9624
|
+
const globalTouchStartHandler = (event) => {
|
|
9625
|
+
// Cancel timeout if multiple touches are detected anywhere on the screen
|
|
9626
|
+
if (event.touches.length > 1 && timeout) {
|
|
9627
|
+
clearTimeout(timeout);
|
|
9628
|
+
timeout = null;
|
|
9629
|
+
}
|
|
9630
|
+
};
|
|
9631
|
+
|
|
9614
9632
|
const touchMoveHandler = (event) => {
|
|
9615
9633
|
if (!timeout) return;
|
|
9616
9634
|
const touch = event.touches[0];
|
|
@@ -9641,6 +9659,7 @@ function addContextMenuListener(elem, callback) {
|
|
|
9641
9659
|
elem.addEventListener('touchstart', touchStartHandler);
|
|
9642
9660
|
elem.addEventListener('touchmove', touchMoveHandler);
|
|
9643
9661
|
elem.addEventListener('touchend', touchEndHandler);
|
|
9662
|
+
window.addEventListener('touchstart', globalTouchStartHandler);
|
|
9644
9663
|
} else {
|
|
9645
9664
|
elem.addEventListener('contextmenu', contextMenuHandler);
|
|
9646
9665
|
}
|
|
@@ -9650,6 +9669,7 @@ function addContextMenuListener(elem, callback) {
|
|
|
9650
9669
|
elem.removeEventListener('touchstart', touchStartHandler);
|
|
9651
9670
|
elem.removeEventListener('touchmove', touchMoveHandler);
|
|
9652
9671
|
elem.removeEventListener('touchend', touchEndHandler);
|
|
9672
|
+
window.removeEventListener('touchstart', globalTouchStartHandler);
|
|
9653
9673
|
} else {
|
|
9654
9674
|
elem.removeEventListener('contextmenu', contextMenuHandler);
|
|
9655
9675
|
}
|
|
@@ -14773,10 +14793,10 @@ class Annotation extends Marker {
|
|
|
14773
14793
|
this._marker.addEventListener("click", this._onMouseClickedExternalMarker = () => {
|
|
14774
14794
|
this.plugin.fire("markerClicked", this);
|
|
14775
14795
|
});
|
|
14776
|
-
this.
|
|
14796
|
+
this._onContextMenuExternalMarker = () => {
|
|
14777
14797
|
this.plugin.fire("contextmenu", this);
|
|
14778
14798
|
};
|
|
14779
|
-
this.
|
|
14799
|
+
this._onContextMenuExternalMarkerRemover = addContextMenuListener(this._marker, this._onContextMenuExternalMarker);
|
|
14780
14800
|
this._marker.addEventListener("mouseenter", this._onMouseEnterExternalMarker = () => {
|
|
14781
14801
|
this.plugin.fire("markerMouseEnter", this);
|
|
14782
14802
|
});
|
|
@@ -15147,7 +15167,7 @@ class Annotation extends Marker {
|
|
|
15147
15167
|
this._marker = null;
|
|
15148
15168
|
} else {
|
|
15149
15169
|
this._marker.removeEventListener("click", this._onMouseClickedExternalMarker);
|
|
15150
|
-
this.
|
|
15170
|
+
this._onContextMenuExternalMarkerRemover();
|
|
15151
15171
|
this._marker.removeEventListener("mouseenter", this._onMouseEnterExternalMarker);
|
|
15152
15172
|
this._marker.removeEventListener("mouseleave", this._onMouseLeaveExternalMarker);
|
|
15153
15173
|
this._marker = null;
|
|
@@ -19392,6 +19412,8 @@ function getExtension (gl, name) {
|
|
|
19392
19412
|
return extension;
|
|
19393
19413
|
}
|
|
19394
19414
|
|
|
19415
|
+
const vec3_0 = math.vec3([0,0,0]);
|
|
19416
|
+
|
|
19395
19417
|
/**
|
|
19396
19418
|
* @private
|
|
19397
19419
|
*/
|
|
@@ -20070,9 +20092,11 @@ const Renderer$1 = function (scene, options) {
|
|
|
20070
20092
|
// Transparent color fill
|
|
20071
20093
|
|
|
20072
20094
|
if (normalFillTransparentBinLen > 0) {
|
|
20095
|
+
const eye = frameCtx.pickOrigin || scene.camera.eye;
|
|
20096
|
+
const byDist = normalFillTransparentBin.map(d => ({ drawable: d, distSq: math.distVec3(d.origin || vec3_0, eye) }));
|
|
20097
|
+
byDist.sort((a, b) => b.distSq - a.distSq);
|
|
20073
20098
|
for (i = 0; i < normalFillTransparentBinLen; i++) {
|
|
20074
|
-
|
|
20075
|
-
drawable.drawColorTransparent(frameCtx);
|
|
20099
|
+
byDist[i].drawable.drawColorTransparent(frameCtx);
|
|
20076
20100
|
}
|
|
20077
20101
|
}
|
|
20078
20102
|
|
|
@@ -73107,6 +73131,10 @@ class DTXTrianglesColorRenderer {
|
|
|
73107
73131
|
const sectionPlanes = scene._sectionPlanesState.sectionPlanes;
|
|
73108
73132
|
const baseIndex = dataTextureLayer.layerIndex * numSectionPlanes;
|
|
73109
73133
|
const renderFlags = model.renderFlags;
|
|
73134
|
+
if (scene.crossSections) {
|
|
73135
|
+
gl.uniform4fv(this._uSliceColor, scene.crossSections.sliceColor);
|
|
73136
|
+
gl.uniform1f(this._uSliceThickness, scene.crossSections.sliceThickness);
|
|
73137
|
+
}
|
|
73110
73138
|
for (let sectionPlaneIndex = 0; sectionPlaneIndex < numAllocatedSectionPlanes; sectionPlaneIndex++) {
|
|
73111
73139
|
const sectionPlaneUniforms = this._uSectionPlanes[sectionPlaneIndex];
|
|
73112
73140
|
if (sectionPlaneUniforms) {
|
|
@@ -73244,6 +73272,11 @@ class DTXTrianglesColorRenderer {
|
|
|
73244
73272
|
this._uTexturePerPolygonIdPortionIds = "uTexturePerPolygonIdPortionIds";
|
|
73245
73273
|
this._uTexturePerObjectMatrix= "uTexturePerObjectMatrix";
|
|
73246
73274
|
this._uCameraEyeRtc = program.getLocation("uCameraEyeRtc");
|
|
73275
|
+
|
|
73276
|
+
if (scene.crossSections) {
|
|
73277
|
+
this._uSliceColor = program.getLocation("sliceColor");
|
|
73278
|
+
this._uSliceThickness = program.getLocation("sliceThickness");
|
|
73279
|
+
}
|
|
73247
73280
|
}
|
|
73248
73281
|
|
|
73249
73282
|
_bindProgram(frameCtx) {
|
|
@@ -73560,11 +73593,14 @@ class DTXTrianglesColorRenderer {
|
|
|
73560
73593
|
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
73561
73594
|
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
73562
73595
|
}
|
|
73596
|
+
src.push("uniform float sliceThickness;");
|
|
73597
|
+
src.push("uniform vec4 sliceColor;");
|
|
73563
73598
|
}
|
|
73564
73599
|
src.push("in vec4 vColor;");
|
|
73565
73600
|
src.push("out vec4 outColor;");
|
|
73566
73601
|
src.push("void main(void) {");
|
|
73567
|
-
|
|
73602
|
+
src.push(" vec4 newColor;");
|
|
73603
|
+
src.push(" newColor = vColor;");
|
|
73568
73604
|
if (clipping) {
|
|
73569
73605
|
src.push(" bool clippable = vFlags2 > 0u;");
|
|
73570
73606
|
src.push(" if (clippable) {");
|
|
@@ -73574,9 +73610,12 @@ class DTXTrianglesColorRenderer {
|
|
|
73574
73610
|
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
73575
73611
|
src.push("}");
|
|
73576
73612
|
}
|
|
73577
|
-
src.push(" if (dist >
|
|
73613
|
+
src.push(" if (dist > sliceThickness) { ");
|
|
73578
73614
|
src.push(" discard;");
|
|
73579
73615
|
src.push(" }");
|
|
73616
|
+
src.push(" if (dist > 0.0) { ");
|
|
73617
|
+
src.push(" newColor = sliceColor;");
|
|
73618
|
+
src.push(" }");
|
|
73580
73619
|
src.push("}");
|
|
73581
73620
|
}
|
|
73582
73621
|
|
|
@@ -73594,9 +73633,9 @@ class DTXTrianglesColorRenderer {
|
|
|
73594
73633
|
src.push(" float blendFactor = uSAOParams[3];");
|
|
73595
73634
|
src.push(" vec2 uv = vec2(gl_FragCoord.x / viewportWidth, gl_FragCoord.y / viewportHeight);");
|
|
73596
73635
|
src.push(" float ambient = smoothstep(blendCutoff, 1.0, unpackRGBToFloat(texture(uOcclusionTexture, uv))) * blendFactor;");
|
|
73597
|
-
src.push(" outColor = vec4(
|
|
73636
|
+
src.push(" outColor = vec4(newColor.rgb * ambient, 1.0);");
|
|
73598
73637
|
} else {
|
|
73599
|
-
src.push(" outColor =
|
|
73638
|
+
src.push(" outColor = newColor;");
|
|
73600
73639
|
}
|
|
73601
73640
|
|
|
73602
73641
|
src.push("}");
|
|
@@ -74038,10 +74077,14 @@ class DTXTrianglesSilhouetteRenderer {
|
|
|
74038
74077
|
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
74039
74078
|
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
74040
74079
|
}
|
|
74080
|
+
src.push("uniform float sliceThickness;");
|
|
74081
|
+
src.push("uniform vec4 sliceColor;");
|
|
74041
74082
|
}
|
|
74042
74083
|
src.push("uniform vec4 color;");
|
|
74043
74084
|
src.push("out vec4 outColor;");
|
|
74044
74085
|
src.push("void main(void) {");
|
|
74086
|
+
src.push(" vec4 newColor;");
|
|
74087
|
+
src.push(" newColor = color;");
|
|
74045
74088
|
if (clipping) {
|
|
74046
74089
|
src.push(" bool clippable = vFlags2 > 0u;");
|
|
74047
74090
|
src.push(" if (clippable) {");
|
|
@@ -74051,15 +74094,18 @@ class DTXTrianglesSilhouetteRenderer {
|
|
|
74051
74094
|
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
74052
74095
|
src.push("}");
|
|
74053
74096
|
}
|
|
74054
|
-
src.push(" if (dist >
|
|
74097
|
+
src.push(" if (dist > sliceThickness) { ");
|
|
74055
74098
|
src.push(" discard;");
|
|
74056
74099
|
src.push(" }");
|
|
74100
|
+
src.push(" if (dist > 0.0) { ");
|
|
74101
|
+
src.push(" newColor = sliceColor;");
|
|
74102
|
+
src.push(" }");
|
|
74057
74103
|
src.push("}");
|
|
74058
74104
|
}
|
|
74059
74105
|
if (scene.logarithmicDepthBufferEnabled) {
|
|
74060
74106
|
src.push(" gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
74061
74107
|
}
|
|
74062
|
-
src.push(" outColor =
|
|
74108
|
+
src.push(" outColor = newColor;");
|
|
74063
74109
|
src.push("}");
|
|
74064
74110
|
return src;
|
|
74065
74111
|
}
|
|
@@ -74458,10 +74504,14 @@ class DTXTrianglesEdgesRenderer {
|
|
|
74458
74504
|
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
74459
74505
|
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
74460
74506
|
}
|
|
74507
|
+
src.push("uniform float sliceThickness;");
|
|
74508
|
+
src.push("uniform vec4 sliceColor;");
|
|
74461
74509
|
}
|
|
74462
74510
|
src.push("in vec4 vColor;");
|
|
74463
74511
|
src.push("out vec4 outColor;");
|
|
74464
74512
|
src.push("void main(void) {");
|
|
74513
|
+
src.push(" vec4 newColor;");
|
|
74514
|
+
src.push(" newColor = vColor;");
|
|
74465
74515
|
if (clipping) {
|
|
74466
74516
|
src.push(" bool clippable = vFlags2 > 0u;");
|
|
74467
74517
|
src.push(" if (clippable) {");
|
|
@@ -74471,13 +74521,18 @@ class DTXTrianglesEdgesRenderer {
|
|
|
74471
74521
|
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
74472
74522
|
src.push("}");
|
|
74473
74523
|
}
|
|
74474
|
-
src.push(" if (dist >
|
|
74524
|
+
src.push(" if (dist > sliceThickness) { ");
|
|
74525
|
+
src.push(" discard;");
|
|
74526
|
+
src.push(" }");
|
|
74527
|
+
src.push(" if (dist > 0.0) { ");
|
|
74528
|
+
src.push(" newColor = sliceColor;");
|
|
74529
|
+
src.push(" }");
|
|
74475
74530
|
src.push("}");
|
|
74476
74531
|
}
|
|
74477
74532
|
if (scene.logarithmicDepthBufferEnabled) {
|
|
74478
74533
|
src.push(" gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
74479
74534
|
}
|
|
74480
|
-
src.push(" outColor =
|
|
74535
|
+
src.push(" outColor = newColor;");
|
|
74481
74536
|
src.push("}");
|
|
74482
74537
|
return src;
|
|
74483
74538
|
}
|
|
@@ -74867,10 +74922,14 @@ class DTXTrianglesEdgesColorRenderer {
|
|
|
74867
74922
|
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
74868
74923
|
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
74869
74924
|
}
|
|
74925
|
+
src.push("uniform float sliceThickness;");
|
|
74926
|
+
src.push("uniform vec4 sliceColor;");
|
|
74870
74927
|
}
|
|
74871
74928
|
src.push("in vec4 vColor;");
|
|
74872
74929
|
src.push("out vec4 outColor;");
|
|
74873
74930
|
src.push("void main(void) {");
|
|
74931
|
+
src.push(" vec4 newColor;");
|
|
74932
|
+
src.push(" newColor = vColor;");
|
|
74874
74933
|
if (clipping) {
|
|
74875
74934
|
src.push(" bool clippable = vFlags2 > 0u;");
|
|
74876
74935
|
src.push(" if (clippable) {");
|
|
@@ -74880,13 +74939,18 @@ class DTXTrianglesEdgesColorRenderer {
|
|
|
74880
74939
|
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
74881
74940
|
src.push("}");
|
|
74882
74941
|
}
|
|
74883
|
-
src.push(" if (dist >
|
|
74942
|
+
src.push(" if (dist > sliceThickness) { ");
|
|
74943
|
+
src.push(" discard;");
|
|
74944
|
+
src.push(" }");
|
|
74945
|
+
src.push(" if (dist > 0.0) { ");
|
|
74946
|
+
src.push(" newColor = sliceColor;");
|
|
74947
|
+
src.push(" }");
|
|
74884
74948
|
src.push("}");
|
|
74885
74949
|
}
|
|
74886
74950
|
if (scene.logarithmicDepthBufferEnabled) {
|
|
74887
74951
|
src.push(" gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
74888
74952
|
}
|
|
74889
|
-
src.push(" outColor =
|
|
74953
|
+
src.push(" outColor = newColor;");
|
|
74890
74954
|
src.push("}");
|
|
74891
74955
|
return src;
|
|
74892
74956
|
}
|
|
@@ -97733,7 +97797,7 @@ class MousePickHandler {
|
|
|
97733
97797
|
|
|
97734
97798
|
this._timeout = setTimeout(() => {
|
|
97735
97799
|
|
|
97736
|
-
if (firstClickPickResult
|
|
97800
|
+
if (firstClickPickResult) {
|
|
97737
97801
|
|
|
97738
97802
|
cameraControl.fire("picked", firstClickPickResult, true);
|
|
97739
97803
|
|
|
@@ -101925,8 +101989,8 @@ class MetaScene {
|
|
|
101925
101989
|
|
|
101926
101990
|
for (let modelId in this.metaModels) {
|
|
101927
101991
|
const metaModel = this.metaModels[modelId];
|
|
101928
|
-
for (let
|
|
101929
|
-
const metaObject = metaModel.metaObjects[
|
|
101992
|
+
for (let objectId in metaModel.metaObjects) {
|
|
101993
|
+
const metaObject = metaModel.metaObjects[objectId];
|
|
101930
101994
|
metaObject.metaModels.push(metaModel);
|
|
101931
101995
|
}
|
|
101932
101996
|
}
|
|
@@ -140850,8 +140914,21 @@ class Zone extends Component {
|
|
|
140850
140914
|
}
|
|
140851
140915
|
|
|
140852
140916
|
|
|
140853
|
-
const
|
|
140917
|
+
const min = idx => Math.min(...pos.map(p => p[idx]));
|
|
140918
|
+
const max = idx => Math.max(...pos.map(p => p[idx]));
|
|
140919
|
+
|
|
140920
|
+
const xmin = min(0);
|
|
140921
|
+
const ymin = min(1);
|
|
140922
|
+
const zmin = min(2);
|
|
140923
|
+
const xmax = max(0);
|
|
140924
|
+
const ymax = max(1);
|
|
140925
|
+
const zmax = max(2);
|
|
140926
|
+
|
|
140927
|
+
this._center = math.vec3([ (xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2 ]);
|
|
140928
|
+
|
|
140929
|
+
const positions = [].concat(...pos.map(p => math.subVec3(p, this._center, p)));
|
|
140854
140930
|
this._zoneMesh = new Mesh(scene, {
|
|
140931
|
+
origin: this._center,
|
|
140855
140932
|
edges: this._edges,
|
|
140856
140933
|
geometry: new ReadableGeometry(
|
|
140857
140934
|
scene,
|
|
@@ -140892,19 +140969,6 @@ class Zone extends Component {
|
|
|
140892
140969
|
}
|
|
140893
140970
|
|
|
140894
140971
|
this._metrics = null;
|
|
140895
|
-
|
|
140896
|
-
|
|
140897
|
-
const min = idx => Math.min(...pos.map(p => p[idx]));
|
|
140898
|
-
const max = idx => Math.max(...pos.map(p => p[idx]));
|
|
140899
|
-
|
|
140900
|
-
const xmin = min(0);
|
|
140901
|
-
const ymin = min(1);
|
|
140902
|
-
const zmin = min(2);
|
|
140903
|
-
const xmax = max(0);
|
|
140904
|
-
const ymax = max(1);
|
|
140905
|
-
const zmax = max(2);
|
|
140906
|
-
|
|
140907
|
-
this._center = math.vec3([ (xmin + xmax) / 2, (ymin + ymax) / 2, (zmin + zmax) / 2 ]);
|
|
140908
140972
|
}
|
|
140909
140973
|
|
|
140910
140974
|
get baseArea() {
|