@xeokit/xeokit-sdk 2.3.0-beta-33 → 2.3.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.
@@ -16057,19 +16057,6 @@ const Renderer = function (scene, options) {
16057
16057
 
16058
16058
  //------------------------------------------------------------------------------------------------------
16059
16059
  // Render deferred bins
16060
- //
16061
- // Order:
16062
- //
16063
- // 1. Opaque color fill
16064
- // 2. Opaque edges
16065
- // 3. Opaque X-ray fill
16066
- // 4. Opaque X-ray edges
16067
- // 5. Opaque highlight
16068
- // 6. Transparent highlight
16069
- // 7. Selected opaque
16070
- // 8. Selected transparent
16071
- // 9. Normal transparent
16072
- // 10. X-rayed transparent
16073
16060
  //------------------------------------------------------------------------------------------------------
16074
16061
 
16075
16062
  // Opaque color with SAO
@@ -16105,6 +16092,66 @@ const Renderer = function (scene, options) {
16105
16092
  }
16106
16093
  }
16107
16094
 
16095
+ // Transparent
16096
+
16097
+ if (xrayedFillTransparentBinLen > 0 || xrayEdgesTransparentBinLen > 0 || normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16098
+ gl.enable(gl.CULL_FACE);
16099
+ gl.enable(gl.BLEND);
16100
+ if (canvasTransparent) {
16101
+ gl.blendEquation(gl.FUNC_ADD);
16102
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
16103
+ } else {
16104
+ gl.blendEquation(gl.FUNC_ADD);
16105
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16106
+ }
16107
+ frameCtx.backfaces = false;
16108
+ if (!alphaDepthMask) {
16109
+ gl.depthMask(false);
16110
+ }
16111
+
16112
+ // Transparent color edges
16113
+
16114
+ if (normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16115
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16116
+ }
16117
+ if (normalEdgesTransparentBinLen > 0) {
16118
+ for (i = 0; i < normalEdgesTransparentBinLen; i++) {
16119
+ drawable = normalEdgesTransparentBin[i];
16120
+ drawable.drawEdgesColorTransparent(frameCtx);
16121
+ }
16122
+ }
16123
+
16124
+ // Transparent color fill
16125
+
16126
+ if (normalFillTransparentBinLen > 0) {
16127
+ for (i = 0; i < normalFillTransparentBinLen; i++) {
16128
+ drawable = normalFillTransparentBin[i];
16129
+ drawable.drawColorTransparent(frameCtx);
16130
+ }
16131
+ }
16132
+
16133
+ // Transparent X-ray edges
16134
+
16135
+ if (xrayEdgesTransparentBinLen > 0) {
16136
+ for (i = 0; i < xrayEdgesTransparentBinLen; i++) {
16137
+ xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);
16138
+ }
16139
+ }
16140
+
16141
+ // Transparent X-ray fill
16142
+
16143
+ if (xrayedFillTransparentBinLen > 0) {
16144
+ for (i = 0; i < xrayedFillTransparentBinLen; i++) {
16145
+ xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);
16146
+ }
16147
+ }
16148
+
16149
+ gl.disable(gl.BLEND);
16150
+ if (!alphaDepthMask) {
16151
+ gl.depthMask(true);
16152
+ }
16153
+ }
16154
+
16108
16155
  // Opaque highlight
16109
16156
 
16110
16157
  if (highlightedFillOpaqueBinLen > 0 || highlightedEdgesOpaqueBinLen > 0) {
@@ -16223,66 +16270,6 @@ const Renderer = function (scene, options) {
16223
16270
  gl.disable(gl.BLEND);
16224
16271
  }
16225
16272
 
16226
- // Transparent
16227
-
16228
- if (xrayedFillTransparentBinLen > 0 || xrayEdgesTransparentBinLen > 0 || normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16229
- gl.enable(gl.CULL_FACE);
16230
- gl.enable(gl.BLEND);
16231
- if (canvasTransparent) {
16232
- gl.blendEquation(gl.FUNC_ADD);
16233
- gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
16234
- } else {
16235
- gl.blendEquation(gl.FUNC_ADD);
16236
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16237
- }
16238
- frameCtx.backfaces = false;
16239
- if (!alphaDepthMask) {
16240
- gl.depthMask(false);
16241
- }
16242
-
16243
- // Transparent color edges
16244
-
16245
- if (normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16246
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16247
- }
16248
- if (normalEdgesTransparentBinLen > 0) {
16249
- for (i = 0; i < normalEdgesTransparentBinLen; i++) {
16250
- drawable = normalEdgesTransparentBin[i];
16251
- drawable.drawEdgesColorTransparent(frameCtx);
16252
- }
16253
- }
16254
-
16255
- // Transparent color fill
16256
-
16257
- if (normalFillTransparentBinLen > 0) {
16258
- for (i = 0; i < normalFillTransparentBinLen; i++) {
16259
- drawable = normalFillTransparentBin[i];
16260
- drawable.drawColorTransparent(frameCtx);
16261
- }
16262
- }
16263
-
16264
- // Transparent X-ray edges
16265
-
16266
- if (xrayEdgesTransparentBinLen > 0) {
16267
- for (i = 0; i < xrayEdgesTransparentBinLen; i++) {
16268
- xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);
16269
- }
16270
- }
16271
-
16272
- // Transparent X-ray fill
16273
-
16274
- if (xrayedFillTransparentBinLen > 0) {
16275
- for (i = 0; i < xrayedFillTransparentBinLen; i++) {
16276
- xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);
16277
- }
16278
- }
16279
-
16280
- gl.disable(gl.BLEND);
16281
- if (!alphaDepthMask) {
16282
- gl.depthMask(true);
16283
- }
16284
- }
16285
-
16286
16273
  const endTime = Date.now();
16287
16274
  const frameStats = stats.frame;
16288
16275
 
@@ -96106,7 +96093,7 @@ const IFCObjectDefaults = {
96106
96093
  *
96107
96094
  * ## Usage
96108
96095
  *
96109
- * In the example below we'll load the Schependomlaan model from a [glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
96096
+ * In the example below we'll load a house plan model from a [binary glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
96110
96097
  * with an accompanying JSON [IFC metadata file](http://xeokit.github.io/xeokit-sdk/examples/metaModels/schependomlaan/).
96111
96098
  *
96112
96099
  * This will create a bunch of {@link Entity}s that represents the model and its objects, along with a {@link MetaModel} and {@link MetaObject}s
@@ -96117,8 +96104,6 @@ const IFCObjectDefaults = {
96117
96104
  *
96118
96105
  * Read more about this example in the user guide on [Viewing BIM Models Offline](https://www.notion.so/xeokit/Viewing-an-IFC-Model-with-xeokit-c373e48bc4094ff5b6e5c5700ff580ee).
96119
96106
  *
96120
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_OTCConferenceCenter)]
96121
- *
96122
96107
  * ````javascript
96123
96108
  * import {Viewer, GLTFLoaderPlugin} from "xeokit-sdk.es.js";
96124
96109
  *
@@ -96202,8 +96187,6 @@ const IFCObjectDefaults = {
96202
96187
  * In the example below, we'll scale our model to half its size, rotate it 90 degrees about its local X-axis, then
96203
96188
  * translate it 100 units along its X axis.
96204
96189
  *
96205
- * [[Run example](https://xeokit.github.io/xeokit-sdk/examples/#loading_glTF_Duplex_transform)]
96206
- *
96207
96190
  * ````javascript
96208
96191
  * const model = gltfLoader.load({
96209
96192
  * src: "./models/gltf/Duplex/scene.gltf",
@@ -96219,8 +96202,6 @@ const IFCObjectDefaults = {
96219
96202
  * We can also load only those objects that have the specified IFC types. In the example below, we'll load only the
96220
96203
  * objects that represent walls.
96221
96204
  *
96222
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_includeTypes_PlanView)]
96223
- *
96224
96205
  * ````javascript
96225
96206
  * const model = gltfLoader.load({
96226
96207
  * id: "myModel",
@@ -16053,19 +16053,6 @@ const Renderer = function (scene, options) {
16053
16053
 
16054
16054
  //------------------------------------------------------------------------------------------------------
16055
16055
  // Render deferred bins
16056
- //
16057
- // Order:
16058
- //
16059
- // 1. Opaque color fill
16060
- // 2. Opaque edges
16061
- // 3. Opaque X-ray fill
16062
- // 4. Opaque X-ray edges
16063
- // 5. Opaque highlight
16064
- // 6. Transparent highlight
16065
- // 7. Selected opaque
16066
- // 8. Selected transparent
16067
- // 9. Normal transparent
16068
- // 10. X-rayed transparent
16069
16056
  //------------------------------------------------------------------------------------------------------
16070
16057
 
16071
16058
  // Opaque color with SAO
@@ -16101,6 +16088,66 @@ const Renderer = function (scene, options) {
16101
16088
  }
16102
16089
  }
16103
16090
 
16091
+ // Transparent
16092
+
16093
+ if (xrayedFillTransparentBinLen > 0 || xrayEdgesTransparentBinLen > 0 || normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16094
+ gl.enable(gl.CULL_FACE);
16095
+ gl.enable(gl.BLEND);
16096
+ if (canvasTransparent) {
16097
+ gl.blendEquation(gl.FUNC_ADD);
16098
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
16099
+ } else {
16100
+ gl.blendEquation(gl.FUNC_ADD);
16101
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16102
+ }
16103
+ frameCtx.backfaces = false;
16104
+ if (!alphaDepthMask) {
16105
+ gl.depthMask(false);
16106
+ }
16107
+
16108
+ // Transparent color edges
16109
+
16110
+ if (normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16111
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16112
+ }
16113
+ if (normalEdgesTransparentBinLen > 0) {
16114
+ for (i = 0; i < normalEdgesTransparentBinLen; i++) {
16115
+ drawable = normalEdgesTransparentBin[i];
16116
+ drawable.drawEdgesColorTransparent(frameCtx);
16117
+ }
16118
+ }
16119
+
16120
+ // Transparent color fill
16121
+
16122
+ if (normalFillTransparentBinLen > 0) {
16123
+ for (i = 0; i < normalFillTransparentBinLen; i++) {
16124
+ drawable = normalFillTransparentBin[i];
16125
+ drawable.drawColorTransparent(frameCtx);
16126
+ }
16127
+ }
16128
+
16129
+ // Transparent X-ray edges
16130
+
16131
+ if (xrayEdgesTransparentBinLen > 0) {
16132
+ for (i = 0; i < xrayEdgesTransparentBinLen; i++) {
16133
+ xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);
16134
+ }
16135
+ }
16136
+
16137
+ // Transparent X-ray fill
16138
+
16139
+ if (xrayedFillTransparentBinLen > 0) {
16140
+ for (i = 0; i < xrayedFillTransparentBinLen; i++) {
16141
+ xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);
16142
+ }
16143
+ }
16144
+
16145
+ gl.disable(gl.BLEND);
16146
+ if (!alphaDepthMask) {
16147
+ gl.depthMask(true);
16148
+ }
16149
+ }
16150
+
16104
16151
  // Opaque highlight
16105
16152
 
16106
16153
  if (highlightedFillOpaqueBinLen > 0 || highlightedEdgesOpaqueBinLen > 0) {
@@ -16219,66 +16266,6 @@ const Renderer = function (scene, options) {
16219
16266
  gl.disable(gl.BLEND);
16220
16267
  }
16221
16268
 
16222
- // Transparent
16223
-
16224
- if (xrayedFillTransparentBinLen > 0 || xrayEdgesTransparentBinLen > 0 || normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16225
- gl.enable(gl.CULL_FACE);
16226
- gl.enable(gl.BLEND);
16227
- if (canvasTransparent) {
16228
- gl.blendEquation(gl.FUNC_ADD);
16229
- gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
16230
- } else {
16231
- gl.blendEquation(gl.FUNC_ADD);
16232
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16233
- }
16234
- frameCtx.backfaces = false;
16235
- if (!alphaDepthMask) {
16236
- gl.depthMask(false);
16237
- }
16238
-
16239
- // Transparent color edges
16240
-
16241
- if (normalFillTransparentBinLen > 0 || normalEdgesTransparentBinLen > 0) {
16242
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
16243
- }
16244
- if (normalEdgesTransparentBinLen > 0) {
16245
- for (i = 0; i < normalEdgesTransparentBinLen; i++) {
16246
- drawable = normalEdgesTransparentBin[i];
16247
- drawable.drawEdgesColorTransparent(frameCtx);
16248
- }
16249
- }
16250
-
16251
- // Transparent color fill
16252
-
16253
- if (normalFillTransparentBinLen > 0) {
16254
- for (i = 0; i < normalFillTransparentBinLen; i++) {
16255
- drawable = normalFillTransparentBin[i];
16256
- drawable.drawColorTransparent(frameCtx);
16257
- }
16258
- }
16259
-
16260
- // Transparent X-ray edges
16261
-
16262
- if (xrayEdgesTransparentBinLen > 0) {
16263
- for (i = 0; i < xrayEdgesTransparentBinLen; i++) {
16264
- xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);
16265
- }
16266
- }
16267
-
16268
- // Transparent X-ray fill
16269
-
16270
- if (xrayedFillTransparentBinLen > 0) {
16271
- for (i = 0; i < xrayedFillTransparentBinLen; i++) {
16272
- xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);
16273
- }
16274
- }
16275
-
16276
- gl.disable(gl.BLEND);
16277
- if (!alphaDepthMask) {
16278
- gl.depthMask(true);
16279
- }
16280
- }
16281
-
16282
16269
  const endTime = Date.now();
16283
16270
  const frameStats = stats.frame;
16284
16271
 
@@ -96102,7 +96089,7 @@ const IFCObjectDefaults = {
96102
96089
  *
96103
96090
  * ## Usage
96104
96091
  *
96105
- * In the example below we'll load the Schependomlaan model from a [glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
96092
+ * In the example below we'll load a house plan model from a [binary glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
96106
96093
  * with an accompanying JSON [IFC metadata file](http://xeokit.github.io/xeokit-sdk/examples/metaModels/schependomlaan/).
96107
96094
  *
96108
96095
  * This will create a bunch of {@link Entity}s that represents the model and its objects, along with a {@link MetaModel} and {@link MetaObject}s
@@ -96113,8 +96100,6 @@ const IFCObjectDefaults = {
96113
96100
  *
96114
96101
  * Read more about this example in the user guide on [Viewing BIM Models Offline](https://www.notion.so/xeokit/Viewing-an-IFC-Model-with-xeokit-c373e48bc4094ff5b6e5c5700ff580ee).
96115
96102
  *
96116
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_OTCConferenceCenter)]
96117
- *
96118
96103
  * ````javascript
96119
96104
  * import {Viewer, GLTFLoaderPlugin} from "xeokit-sdk.es.js";
96120
96105
  *
@@ -96198,8 +96183,6 @@ const IFCObjectDefaults = {
96198
96183
  * In the example below, we'll scale our model to half its size, rotate it 90 degrees about its local X-axis, then
96199
96184
  * translate it 100 units along its X axis.
96200
96185
  *
96201
- * [[Run example](https://xeokit.github.io/xeokit-sdk/examples/#loading_glTF_Duplex_transform)]
96202
- *
96203
96186
  * ````javascript
96204
96187
  * const model = gltfLoader.load({
96205
96188
  * src: "./models/gltf/Duplex/scene.gltf",
@@ -96215,8 +96198,6 @@ const IFCObjectDefaults = {
96215
96198
  * We can also load only those objects that have the specified IFC types. In the example below, we'll load only the
96216
96199
  * objects that represent walls.
96217
96200
  *
96218
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_includeTypes_PlanView)]
96219
- *
96220
96201
  * ````javascript
96221
96202
  * const model = gltfLoader.load({
96222
96203
  * id: "myModel",
@@ -4010,25 +4010,17 @@ var normalDrawSAOBin=[];var normalEdgesOpaqueBin=[];var normalFillTransparentBin
4010
4010
  //------------------------------------------------------------------------------------------------------
4011
4011
  for(var type in drawableTypeInfo){if(drawableTypeInfo.hasOwnProperty(type)){var drawableInfo=drawableTypeInfo[type];var drawableList=drawableInfo.drawableList;for(i=0,len=drawableList.length;i<len;i++){drawable=drawableList[i];if(drawable.culled===true||drawable.visible===false){continue;}var renderFlags=drawable.renderFlags;if(renderFlags.colorOpaque){if(saoEnabled&&saoPossible&&drawable.saoEnabled){normalDrawSAOBin[normalDrawSAOBinLen++]=drawable;}else{drawable.drawColorOpaque(frameCtx);}}if(transparentEnabled){if(renderFlags.colorTransparent){normalFillTransparentBin[normalFillTransparentBinLen++]=drawable;}}if(renderFlags.xrayedSilhouetteTransparent){xrayedFillTransparentBin[xrayedFillTransparentBinLen++]=drawable;}if(renderFlags.xrayedSilhouetteOpaque){xrayedFillOpaqueBin[xrayedFillOpaqueBinLen++]=drawable;}if(renderFlags.highlightedSilhouetteTransparent){highlightedFillTransparentBin[highlightedFillTransparentBinLen++]=drawable;}if(renderFlags.highlightedSilhouetteOpaque){highlightedFillOpaqueBin[highlightedFillOpaqueBinLen++]=drawable;}if(renderFlags.selectedSilhouetteTransparent){selectedFillTransparentBin[selectedFillTransparentBinLen++]=drawable;}if(renderFlags.selectedSilhouetteOpaque){selectedFillOpaqueBin[selectedFillOpaqueBinLen++]=drawable;}if(edgesEnabled){if(renderFlags.edgesOpaque){normalEdgesOpaqueBin[normalEdgesOpaqueBinLen++]=drawable;}if(renderFlags.edgesTransparent){normalEdgesTransparentBin[normalEdgesTransparentBinLen++]=drawable;}}if(renderFlags.selectedEdgesTransparent){selectedEdgesTransparentBin[selectedEdgesTransparentBinLen++]=drawable;}if(renderFlags.selectedEdgesOpaque){selectedEdgesOpaqueBin[selectedEdgesOpaqueBinLen++]=drawable;}if(renderFlags.xrayedEdgesTransparent){xrayEdgesTransparentBin[xrayEdgesTransparentBinLen++]=drawable;}if(renderFlags.xrayedEdgesOpaque){xrayEdgesOpaqueBin[xrayEdgesOpaqueBinLen++]=drawable;}if(renderFlags.highlightedEdgesTransparent){highlightedEdgesTransparentBin[highlightedEdgesTransparentBinLen++]=drawable;}if(renderFlags.highlightedEdgesOpaque){highlightedEdgesOpaqueBin[highlightedEdgesOpaqueBinLen++]=drawable;}}}}//------------------------------------------------------------------------------------------------------
4012
4012
  // Render deferred bins
4013
- //
4014
- // Order:
4015
- //
4016
- // 1. Opaque color fill
4017
- // 2. Opaque edges
4018
- // 3. Opaque X-ray fill
4019
- // 4. Opaque X-ray edges
4020
- // 5. Opaque highlight
4021
- // 6. Transparent highlight
4022
- // 7. Selected opaque
4023
- // 8. Selected transparent
4024
- // 9. Normal transparent
4025
- // 10. X-rayed transparent
4026
4013
  //------------------------------------------------------------------------------------------------------
4027
4014
  // Opaque color with SAO
4028
4015
  if(normalDrawSAOBinLen>0){frameCtx.withSAO=true;for(i=0;i<normalDrawSAOBinLen;i++){normalDrawSAOBin[i].drawColorOpaque(frameCtx);}}// Opaque edges
4029
4016
  if(normalEdgesOpaqueBinLen>0){for(i=0;i<normalEdgesOpaqueBinLen;i++){normalEdgesOpaqueBin[i].drawEdgesColorOpaque(frameCtx);}}// Opaque X-ray fill
4030
4017
  if(xrayedFillOpaqueBinLen>0){for(i=0;i<xrayedFillOpaqueBinLen;i++){xrayedFillOpaqueBin[i].drawSilhouetteXRayed(frameCtx);}}// Opaque X-ray edges
4031
- if(xrayEdgesOpaqueBinLen>0){for(i=0;i<xrayEdgesOpaqueBinLen;i++){xrayEdgesOpaqueBin[i].drawEdgesXRayed(frameCtx);}}// Opaque highlight
4018
+ if(xrayEdgesOpaqueBinLen>0){for(i=0;i<xrayEdgesOpaqueBinLen;i++){xrayEdgesOpaqueBin[i].drawEdgesXRayed(frameCtx);}}// Transparent
4019
+ if(xrayedFillTransparentBinLen>0||xrayEdgesTransparentBinLen>0||normalFillTransparentBinLen>0||normalEdgesTransparentBinLen>0){gl.enable(gl.CULL_FACE);gl.enable(gl.BLEND);if(canvasTransparent){gl.blendEquation(gl.FUNC_ADD);gl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA);}else{gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);}frameCtx.backfaces=false;if(!alphaDepthMask){gl.depthMask(false);}// Transparent color edges
4020
+ if(normalFillTransparentBinLen>0||normalEdgesTransparentBinLen>0){gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);}if(normalEdgesTransparentBinLen>0){for(i=0;i<normalEdgesTransparentBinLen;i++){drawable=normalEdgesTransparentBin[i];drawable.drawEdgesColorTransparent(frameCtx);}}// Transparent color fill
4021
+ if(normalFillTransparentBinLen>0){for(i=0;i<normalFillTransparentBinLen;i++){drawable=normalFillTransparentBin[i];drawable.drawColorTransparent(frameCtx);}}// Transparent X-ray edges
4022
+ if(xrayEdgesTransparentBinLen>0){for(i=0;i<xrayEdgesTransparentBinLen;i++){xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);}}// Transparent X-ray fill
4023
+ if(xrayedFillTransparentBinLen>0){for(i=0;i<xrayedFillTransparentBinLen;i++){xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);}}gl.disable(gl.BLEND);if(!alphaDepthMask){gl.depthMask(true);}}// Opaque highlight
4032
4024
  if(highlightedFillOpaqueBinLen>0||highlightedEdgesOpaqueBinLen>0){frameCtx.lastProgramId=null;if(scene.highlightMaterial.glowThrough){gl.clear(gl.DEPTH_BUFFER_BIT);}// Opaque highlighted edges
4033
4025
  if(highlightedEdgesOpaqueBinLen>0){for(i=0;i<highlightedEdgesOpaqueBinLen;i++){highlightedEdgesOpaqueBin[i].drawEdgesHighlighted(frameCtx);}}// Opaque highlighted fill
4034
4026
  if(highlightedFillOpaqueBinLen>0){for(i=0;i<highlightedFillOpaqueBinLen;i++){highlightedFillOpaqueBin[i].drawSilhouetteHighlighted(frameCtx);}}}// Highlighted transparent
@@ -4040,12 +4032,7 @@ if(selectedEdgesOpaqueBinLen>0){for(i=0;i<selectedEdgesOpaqueBinLen;i++){selecte
4040
4032
  if(selectedFillOpaqueBinLen>0){for(i=0;i<selectedFillOpaqueBinLen;i++){selectedFillOpaqueBin[i].drawSilhouetteSelected(frameCtx);}}}// Selected transparent
4041
4033
  if(selectedFillTransparentBinLen>0||selectedEdgesTransparentBinLen>0){frameCtx.lastProgramId=null;if(scene.selectedMaterial.glowThrough){gl.clear(gl.DEPTH_BUFFER_BIT);}gl.enable(gl.CULL_FACE);gl.enable(gl.BLEND);if(canvasTransparent){gl.blendEquation(gl.FUNC_ADD);gl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA);}else{gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);}// Selected transparent edges
4042
4034
  if(selectedEdgesTransparentBinLen>0){for(i=0;i<selectedEdgesTransparentBinLen;i++){selectedEdgesTransparentBin[i].drawEdgesSelected(frameCtx);}}// Selected transparent fill
4043
- if(selectedFillTransparentBinLen>0){for(i=0;i<selectedFillTransparentBinLen;i++){selectedFillTransparentBin[i].drawSilhouetteSelected(frameCtx);}}gl.disable(gl.BLEND);}// Transparent
4044
- if(xrayedFillTransparentBinLen>0||xrayEdgesTransparentBinLen>0||normalFillTransparentBinLen>0||normalEdgesTransparentBinLen>0){gl.enable(gl.CULL_FACE);gl.enable(gl.BLEND);if(canvasTransparent){gl.blendEquation(gl.FUNC_ADD);gl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA);}else{gl.blendEquation(gl.FUNC_ADD);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);}frameCtx.backfaces=false;if(!alphaDepthMask){gl.depthMask(false);}// Transparent color edges
4045
- if(normalFillTransparentBinLen>0||normalEdgesTransparentBinLen>0){gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);}if(normalEdgesTransparentBinLen>0){for(i=0;i<normalEdgesTransparentBinLen;i++){drawable=normalEdgesTransparentBin[i];drawable.drawEdgesColorTransparent(frameCtx);}}// Transparent color fill
4046
- if(normalFillTransparentBinLen>0){for(i=0;i<normalFillTransparentBinLen;i++){drawable=normalFillTransparentBin[i];drawable.drawColorTransparent(frameCtx);}}// Transparent X-ray edges
4047
- if(xrayEdgesTransparentBinLen>0){for(i=0;i<xrayEdgesTransparentBinLen;i++){xrayEdgesTransparentBin[i].drawEdgesXRayed(frameCtx);}}// Transparent X-ray fill
4048
- if(xrayedFillTransparentBinLen>0){for(i=0;i<xrayedFillTransparentBinLen;i++){xrayedFillTransparentBin[i].drawSilhouetteXRayed(frameCtx);}}gl.disable(gl.BLEND);if(!alphaDepthMask){gl.depthMask(true);}}var endTime=Date.now();var frameStats=stats.frame;frameStats.renderTime=(endTime-startTime)/1000.0;frameStats.drawElements=frameCtx.drawElements;frameStats.drawArrays=frameCtx.drawArrays;frameStats.useProgram=frameCtx.useProgram;frameStats.bindTexture=frameCtx.bindTexture;frameStats.bindArray=frameCtx.bindArray;var numTextureUnits=WEBGL_INFO.MAX_TEXTURE_IMAGE_UNITS;for(var ii=0;ii<numTextureUnits;ii++){gl.activeTexture(gl.TEXTURE0+ii);}gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);gl.bindTexture(gl.TEXTURE_2D,null);var numVertexAttribs=WEBGL_INFO.MAX_VERTEX_ATTRIBS;// Fixes https://github.com/xeokit/xeokit-sdk/issues/174
4035
+ if(selectedFillTransparentBinLen>0){for(i=0;i<selectedFillTransparentBinLen;i++){selectedFillTransparentBin[i].drawSilhouetteSelected(frameCtx);}}gl.disable(gl.BLEND);}var endTime=Date.now();var frameStats=stats.frame;frameStats.renderTime=(endTime-startTime)/1000.0;frameStats.drawElements=frameCtx.drawElements;frameStats.drawArrays=frameCtx.drawArrays;frameStats.useProgram=frameCtx.useProgram;frameStats.bindTexture=frameCtx.bindTexture;frameStats.bindArray=frameCtx.bindArray;var numTextureUnits=WEBGL_INFO.MAX_TEXTURE_IMAGE_UNITS;for(var ii=0;ii<numTextureUnits;ii++){gl.activeTexture(gl.TEXTURE0+ii);}gl.bindTexture(gl.TEXTURE_CUBE_MAP,null);gl.bindTexture(gl.TEXTURE_2D,null);var numVertexAttribs=WEBGL_INFO.MAX_VERTEX_ATTRIBS;// Fixes https://github.com/xeokit/xeokit-sdk/issues/174
4049
4036
  for(var _ii=0;_ii<numVertexAttribs;_ii++){gl.disableVertexAttribArray(_ii);}};}();/**
4050
4037
  * Picks an Entity.
4051
4038
  * @private
@@ -21616,7 +21603,7 @@ if(rtcNeeded){meshCfg.origin=origin;}var material=primitive.material;if(material
21616
21603
  *
21617
21604
  * ## Usage
21618
21605
  *
21619
- * In the example below we'll load the Schependomlaan model from a [glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
21606
+ * In the example below we'll load a house plan model from a [binary glTF file](http://xeokit.github.io/xeokit-sdk/examples/models/gltf/schependomlaan/), along
21620
21607
  * with an accompanying JSON [IFC metadata file](http://xeokit.github.io/xeokit-sdk/examples/metaModels/schependomlaan/).
21621
21608
  *
21622
21609
  * This will create a bunch of {@link Entity}s that represents the model and its objects, along with a {@link MetaModel} and {@link MetaObject}s
@@ -21627,8 +21614,6 @@ if(rtcNeeded){meshCfg.origin=origin;}var material=primitive.material;if(material
21627
21614
  *
21628
21615
  * Read more about this example in the user guide on [Viewing BIM Models Offline](https://www.notion.so/xeokit/Viewing-an-IFC-Model-with-xeokit-c373e48bc4094ff5b6e5c5700ff580ee).
21629
21616
  *
21630
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_OTCConferenceCenter)]
21631
- *
21632
21617
  * ````javascript
21633
21618
  * import {Viewer, GLTFLoaderPlugin} from "xeokit-sdk.es.js";
21634
21619
  *
@@ -21712,8 +21697,6 @@ if(rtcNeeded){meshCfg.origin=origin;}var material=primitive.material;if(material
21712
21697
  * In the example below, we'll scale our model to half its size, rotate it 90 degrees about its local X-axis, then
21713
21698
  * translate it 100 units along its X axis.
21714
21699
  *
21715
- * [[Run example](https://xeokit.github.io/xeokit-sdk/examples/#loading_glTF_Duplex_transform)]
21716
- *
21717
21700
  * ````javascript
21718
21701
  * const model = gltfLoader.load({
21719
21702
  * src: "./models/gltf/Duplex/scene.gltf",
@@ -21729,8 +21712,6 @@ if(rtcNeeded){meshCfg.origin=origin;}var material=primitive.material;if(material
21729
21712
  * We can also load only those objects that have the specified IFC types. In the example below, we'll load only the
21730
21713
  * objects that represent walls.
21731
21714
  *
21732
- * [[Run this example](http://xeokit.github.io/xeokit-sdk/examples/#BIMOffline_glTF_includeTypes_PlanView)]
21733
- *
21734
21715
  * ````javascript
21735
21716
  * const model = gltfLoader.load({
21736
21717
  * id: "myModel",