From f61733b0eececf14f2001f0059f53a50b964aa62 Mon Sep 17 00:00:00 2001 From: xeolabs Date: Wed, 23 Jun 2021 17:24:00 +0200 Subject: [PATCH] Multi-format convert2xkt CLI tool #20 --- performanceStats.md | 51 ++++++++++----------- snapshots.js | 2 +- src/convert2xkt.js | 65 ++++++++++++++++----------- src/parsers/parse3DXMLIntoXKTModel.js | 4 +- src/parsers/parseGLTFIntoXKTModel.js | 4 +- 5 files changed, 67 insertions(+), 59 deletions(-) diff --git a/performanceStats.md b/performanceStats.md index 42c66488..2e9fbd4d 100644 --- a/performanceStats.md +++ b/performanceStats.md @@ -1,44 +1,41 @@ ## convert2xkt Performance Tests - 23 / 5 / 2021 + --- -## Notes +## Notes * convert2xkt 1.3.0 * xeokit-sdk 1.9.0 * Chrome/92.0.4512.0 * Click thumbnails to view models with xeokit. - ## Results - --- - | Screenshot | Source | Objects | Triangles | Vertices | Source kB | XKT kB | Compression | Convert Secs | Load Secs | FPS | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| [![](./tests/models/xkt/3dxml_widget/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/3dxml_widget/model.xkt) | [3dxml_widget](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/3dxml_widget/model.xkt) | 306 | 10464 | 13686 | 123.78 | 61.65 | 2.01 | 0.36 | 0.20 | 56 | -| [![](./tests/models/xkt/cityjson_csol/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_csol/model.xkt) | [cityjson_csol](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_csol/model.xkt) | 1 | 24 | 12 | 5.26 | 0.66 | 8.00 | 0.01 | 0.08 | 60 | -| [![](./tests/models/xkt/cityjson_msol/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_msol/model.xkt) | [cityjson_msol](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_msol/model.xkt) | 1 | 24 | 16 | 5.54 | 0.66 | 8.43 | 0.01 | 0.05 | 60 | -| [![](./tests/models/xkt/cityjson_msurface/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_msurface/model.xkt) | [cityjson_msurface](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_msurface/model.xkt) | 1 | 10 | 8 | 2.46 | 0.59 | 4.14 | 0.01 | 0.04 | 60 | -| [![](./tests/models/xkt/cityjson_twocube/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_twocube/model.xkt) | [cityjson_twocube](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_twocube/model.xkt) | 1 | 24 | 16 | 4.90 | 0.63 | 7.81 | 0.01 | 0.04 | 60 | -| [![](./tests/models/xkt/cityjson_cube/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_cube/model.xkt) | [cityjson_cube](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_cube/model.xkt) | 1 | 12 | 8 | 1.76 | 0.60 | 2.94 | 0.01 | 0.03 | 60 | -| [![](./tests/models/xkt/cityjson_tetra/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_tetra/model.xkt) | [cityjson_tetra](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_tetra/model.xkt) | 1 | 4 | 4 | 1.69 | 0.54 | 3.13 | 0.00 | 0.04 | 60 | -| [![](./tests/models/xkt/cityjson_torus/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_torus/model.xkt) | [cityjson_torus](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_torus/model.xkt) | 1 | 18 | 14 | 4.35 | 0.65 | 6.75 | 0.00 | 0.04 | 60 | -| [![](./tests/models/xkt/cityjson_denhaag/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_denhaag/model.xkt) | [cityjson_denhaag](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_denhaag/model.xkt) | 1991 | 41197 | 71069 | 3153.55 | 399.34 | 7.90 | 0.96 | 0.41 | 60 | -| [![](./tests/models/xkt/cityjson_railway/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_railway/model.xkt) | [cityjson_railway](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/cityjson_railway/model.xkt) | 120 | 113537 | 170281 | 4521.41 | 878.91 | 5.14 | 2.73 | 0.80 | 60 | -| [![](./tests/models/xkt/ifc_conferencecenter/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_conferencecenter/model.xkt) | [ifc_conferencecenter](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_conferencecenter/model.xkt) | 6087 | 511459 | 1268451 | 71700.42 | 2698.16 | 26.57 | 44.61 | 1.47 | 21 | -| [![](./tests/models/xkt/ifc_duplex/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_duplex/model.xkt) | [ifc_duplex](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_duplex/model.xkt) | 208 | 20194 | 49504 | 2366.05 | 88.94 | 26.60 | 0.61 | 0.18 | 60 | -| [![](./tests/models/xkt/ifc_openhouse2x3/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_openhouse2x3/model.xkt) | [ifc_openhouse2x3](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_openhouse2x3/model.xkt) | 40 | 613 | 1801 | 112.76 | 6.43 | 17.54 | 0.17 | 0.05 | 60 | -| [![](./tests/models/xkt/ifc_openhouse4/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_openhouse4/model.xkt) | [ifc_openhouse4](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_openhouse4/model.xkt) | 40 | 613 | 1801 | 113.26 | 6.43 | 17.63 | 0.15 | 0.09 | 60 | -| [![](./tests/models/xkt/ifc_map/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_map/model.xkt) | [ifc_map](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_map/model.xkt) | 1774 | 172268 | 431922 | 28779.42 | 939.71 | 30.63 | 7.53 | 0.61 | 57 | -| [![](./tests/models/xkt/ifc_rac_advanced_sample_project/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_rac_advanced_sample_project/model.xkt) | [ifc_rac_advanced_sample_project](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_rac_advanced_sample_project/model.xkt) | 5561 | 283616 | 745100 | 45316.70 | 1776.91 | 25.50 | 42.32 | 1.60 | 23 | -| [![](./tests/models/xkt/ifc_rme_advanced_sample_project/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_rme_advanced_sample_project/model.xkt) | [ifc_rme_advanced_sample_project](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/ifc_rme_advanced_sample_project/model.xkt) | 6442 | 345539 | 823082 | 35309.94 | 1632.98 | 21.62 | 80.89 | 1.11 | 30 | -| [![](./tests/models/xkt/laz_autzen/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/laz_autzen/model.xkt) | [laz_autzen](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/laz_autzen/model.xkt) | 1 | undefined | 10653336 | 56350.99 | 71525.80 | 0.79 | 25.49 | 4.34 | 26 | -| [![](./tests/models/xkt/laz_indoor_scan/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/laz_indoor_scan/model.xkt) | [laz_indoor_scan](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/laz_indoor_scan/model.xkt) | 1 | undefined | 808042 | 1644.72 | 3402.97 | 0.48 | 1.43 | 0.60 | 60 | -| [![](./tests/models/xkt/undefined/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/undefined/model.xkt) | [undefined](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/undefined/model.xkt) | 3504 | 230246 | 367934 | 23075.65 | 1662.27 | 13.88 | 2.65 | 1.05 | 60 | -| [![](./tests/models/xkt/gltf_duplex/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/gltf_duplex/model.xkt) | [gltf_duplex](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/gltf_duplex/model.xkt) | 291 | 15874 | 25262 | 1433.53 | 126.22 | 11.36 | 0.27 | 0.32 | 60 | -| [![](./tests/models/xkt/gltf_map/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/gltf_map/model.xkt) | [gltf_map](./tests/loadXKT.html?xktSrc=.././tests/models/xkt/gltf_map/model.xkt) | 1986 | 181108 | 354632 | 15785.04 | 1605.40 | 9.83 | 2.35 | 0.84 | 49 | \ No newline at end of file +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/3dxml_widget/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/3dxml_widget/model.xkt) | [3dxml_widget](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/3dxml_widget/model.xkt) | 306 | 10464 | 13686 | 123.78 | 61.65 | 2.01 | 0.36 | 0.20 | 56 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_csol/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_csol/model.xkt) | [cityjson_csol](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_csol/model.xkt) | 1 | 24 | 12 | 5.26 | 0.66 | 8.00 | 0.01 | 0.08 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msol/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msol/model.xkt) | [cityjson_msol](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msol/model.xkt) | 1 | 24 | 16 | 5.54 | 0.66 | 8.43 | 0.01 | 0.05 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msurface/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msurface/model.xkt) | [cityjson_msurface](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_msurface/model.xkt) | 1 | 10 | 8 | 2.46 | 0.59 | 4.14 | 0.01 | 0.04 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_twocube/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_twocube/model.xkt) | [cityjson_twocube](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_twocube/model.xkt) | 1 | 24 | 16 | 4.90 | 0.63 | 7.81 | 0.01 | 0.04 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_cube/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_cube/model.xkt) | [cityjson_cube](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_cube/model.xkt) | 1 | 12 | 8 | 1.76 | 0.60 | 2.94 | 0.01 | 0.03 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_tetra/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_tetra/model.xkt) | [cityjson_tetra](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_tetra/model.xkt) | 1 | 4 | 4 | 1.69 | 0.54 | 3.13 | 0.00 | 0.04 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_torus/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_torus/model.xkt) | [cityjson_torus](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_torus/model.xkt) | 1 | 18 | 14 | 4.35 | 0.65 | 6.75 | 0.00 | 0.04 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_denhaag/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_denhaag/model.xkt) | [cityjson_denhaag](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_denhaag/model.xkt) | 1991 | 41197 | 71069 | 3153.55 | 399.34 | 7.90 | 0.96 | 0.41 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_railway/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_railway/model.xkt) | [cityjson_railway](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/cityjson_railway/model.xkt) | 120 | 113537 | 170281 | 4521.41 | 878.91 | 5.14 | 2.73 | 0.80 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_conferencecenter/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_conferencecenter/model.xkt) | [ifc_conferencecenter](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_conferencecenter/model.xkt) | 6087 | 511459 | 1268451 | 71700.42 | 2698.16 | 26.57 | 44.61 | 1.47 | 21 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_duplex/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_duplex/model.xkt) | [ifc_duplex](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_duplex/model.xkt) | 208 | 20194 | 49504 | 2366.05 | 88.94 | 26.60 | 0.61 | 0.18 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse2x3/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse2x3/model.xkt) | [ifc_openhouse2x3](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse2x3/model.xkt) | 40 | 613 | 1801 | 112.76 | 6.43 | 17.54 | 0.17 | 0.05 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse4/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse4/model.xkt) | [ifc_openhouse4](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_openhouse4/model.xkt) | 40 | 613 | 1801 | 113.26 | 6.43 | 17.63 | 0.15 | 0.09 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_map/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_map/model.xkt) | [ifc_map](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_map/model.xkt) | 1774 | 172268 | 431922 | 28779.42 | 939.71 | 30.63 | 7.53 | 0.61 | 57 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rac_advanced_sample_project/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rac_advanced_sample_project/model.xkt) | [ifc_rac_advanced_sample_project](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rac_advanced_sample_project/model.xkt) | 5561 | 283616 | 745100 | 45316.70 | 1776.91 | 25.50 | 42.32 | 1.60 | 23 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rme_advanced_sample_project/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rme_advanced_sample_project/model.xkt) | [ifc_rme_advanced_sample_project](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/ifc_rme_advanced_sample_project/model.xkt) | 6442 | 345539 | 823082 | 35309.94 | 1632.98 | 21.62 | 80.89 | 1.11 | 30 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_autzen/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_autzen/model.xkt) | [laz_autzen](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_autzen/model.xkt) | 1 | undefined | 10653336 | 56350.99 | 71525.80 | 0.79 | 25.49 | 4.34 | 26 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_indoor_scan/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_indoor_scan/model.xkt) | [laz_indoor_scan](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/laz_indoor_scan/model.xkt) | 1 | undefined | 808042 | 1644.72 | 3402.97 | 0.48 | 1.43 | 0.60 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/undefined/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/undefined/model.xkt) | [undefined](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/undefined/model.xkt) | 3504 | 230246 | 367934 | 23075.65 | 1662.27 | 13.88 | 2.65 | 1.05 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_duplex/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_duplex/model.xkt) | [gltf_duplex](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_duplex/model.xkt) | 291 | 15874 | 25262 | 1433.53 | 126.22 | 11.36 | 0.27 | 0.32 | 60 | +| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_map/screenshot/screenshot.png)](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_map/model.xkt) | [gltf_map](https://xeokit.github.io/xeokit-xkt-utils/tests/loadXKT.html?xktSrc=../https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/gltf_map/model.xkt) | 1986 | 181108 | 354632 | 15785.04 | 1605.40 | 9.83 | 2.35 | 0.84 | 49 | \ No newline at end of file diff --git a/snapshots.js b/snapshots.js index 044f1619..0580374a 100644 --- a/snapshots.js +++ b/snapshots.js @@ -324,7 +324,7 @@ function statsToMarkdown(testStats) { rows.push('| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |'); for (let modelId in modelStats) { const stats = modelStats[modelId]; - rows.push(`| [![](./tests/models/xkt/${modelId}/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=../${stats.xktDest}) | [${modelId}](./tests/loadXKT.html?xktSrc=../${stats.xktDest}) | ${stats.numObjects} | ${stats.numTriangles} | ${stats.numVertices} | ${stats.sourceSize} | ${stats.xktSize} | ${stats.compressionRatio} | ${stats.conversionTime} | ${stats.loadingTime} | ${stats.fps} |`); + rows.push(`| [![](https://xeokit.github.io/xeokit-xkt-utils/tests/models/xkt/${modelId}/screenshot/screenshot.png)](./tests/loadXKT.html?xktSrc=../${stats.xktDest}) | [${modelId}](./tests/loadXKT.html?xktSrc=../${stats.xktDest}) | ${stats.numObjects} | ${stats.numTriangles} | ${stats.numVertices} | ${stats.sourceSize} | ${stats.xktSize} | ${stats.compressionRatio} | ${stats.conversionTime} | ${stats.loadingTime} | ${stats.fps} |`); } const markdown = rows.join("\n"); return markdown; diff --git a/src/convert2xkt.js b/src/convert2xkt.js index 04a13f34..707fd47f 100755 --- a/src/convert2xkt.js +++ b/src/convert2xkt.js @@ -16,14 +16,22 @@ const { } = require("../dist/xeokit-xkt-utils.cjs.js"); /** - * Converts an IFC file into an XKT file, plus optional per-object property sets. + * Converts model files into xeokit's native XKT format. + * + * Supported source formats are: + * + * * IFC (experimental), + * * CityJSON + * * 3DXML + * * glTF + * * LAZ & LAS * - * @private * @param {Object} params Conversion parameters. * @param {String}[params.source] Path to source file. Alternative to ````sourceData````. * @param {ArrayBuffer|JSON}[params.sourceData] Source file data. Alternative to ````source````. * @param {String}[params.sourceFormat] Format of source file/data. Always needed with ````sourceData````, but not normally needed with ````source````, because convert2xkt will determine the format automatically from the file extension of ````source````. - * @param {Object}[params.metamodel] + * @param {String}[params.metaModelSource] Path to source metaModel file. Alternative to ````metaModelData````. + * @param {ArrayBuffer|JSON}[params.metaModelData] Source file data. Alternative to ````metaModelSource````. * @param {String}[params.output] Path to destination XKT file. * @param {Function}[params.outputXKTModel] Callback to collect the ````XKTModel```` that is internally build by this method. * @param {Function}[params.outputXKT] Callback to collect XKT file data. @@ -37,7 +45,8 @@ async function convert2xkt({ source, sourceData, sourceFormat, - metamodel, + metaModelSource, + metaModelData, output, outputXKTModel, outputXKT, @@ -52,6 +61,10 @@ async function convert2xkt({ throw "Argument expected: source or sourceData"; } + if (!sourceFormat && sourceData) { + throw "Argument expected: sourceFormat is required with sourceData"; + } + if (!output && !outputXKTModel && !outputXKT) { throw "Argument expected: output, outputXKTModel or outputXKT"; } @@ -68,24 +81,22 @@ async function convert2xkt({ log("Warning: Here be dragons; IFC conversion is very alpha!") } - let data; - - try { - data = await fs.readFile(source); - } catch (err) { - log(err); - return -1; + if (!sourceData) { + try { + sourceData = await fs.readFile(source); + } catch (err) { + log(err); + return -1; + } } - const sourceFileSizeBytes = data.byteLength; + const sourceFileSizeBytes = sourceData.byteLength; log("Input file size: " + (sourceFileSizeBytes / 1000).toFixed(2) + " kB"); - let metaModelData; - - if (metamodel) { + if (!metaModelData && metaModelSource) { try { - const metaModelFileData = await fs.readFile(metamodel); + const metaModelFileData = await fs.readFile(metaModelSource); metaModelData = JSON.parse(metaModelFileData); } catch (err) { log(err); @@ -93,20 +104,20 @@ async function convert2xkt({ } } + log("Converting..."); + const xktModel = new XKTModel(); if (metaModelData) { await parseMetaModelIntoXKTModel({metaModelData, xktModel}); } - log("Converting..."); - switch (ext) { case "json": await parseCityJSONIntoXKTModel({ - data: JSON.parse(data), + data: JSON.parse(sourceData), xktModel, outputObjectProperties, stats, @@ -120,7 +131,7 @@ async function convert2xkt({ const gltfBasePath = source ? getBasePath(source) : ""; await parseGLTFIntoXKTModel({ - data: JSON.parse(data), + data: JSON.parse(sourceData), xktModel, getAttachment: async (name) => { return fs.readFile(gltfBasePath + name); @@ -133,7 +144,7 @@ async function convert2xkt({ case "ifc": await parseIFCIntoXKTModel({ - data, + data: sourceData, xktModel, wasmPath: "./", outputObjectProperties, @@ -146,7 +157,7 @@ async function convert2xkt({ case "laz": await parseLASIntoXKTModel({ - data, + data: sourceData, xktModel, stats, rotateX, @@ -158,7 +169,7 @@ async function convert2xkt({ case "las": await parseLASIntoXKTModel({ - data, + data: sourceData, xktModel, stats, log @@ -169,7 +180,7 @@ async function convert2xkt({ case "pcd": await parsePCDIntoXKTModel({ - data, + data: sourceData, xktModel, stats, log @@ -180,7 +191,7 @@ async function convert2xkt({ case "ply": await parsePLYIntoXKTModel({ - data, + data: sourceData, xktModel, stats, log @@ -191,7 +202,7 @@ async function convert2xkt({ case "stl": await parseSTLIntoXKTModel({ - data, + data: sourceData, xktModel, stats, log @@ -204,7 +215,7 @@ async function convert2xkt({ const domParser = new DOMParser(); await parse3DXMLIntoXKTModel({ - data, + data: sourceData, domParser, xktModel, outputObjectProperties, diff --git a/src/parsers/parse3DXMLIntoXKTModel.js b/src/parsers/parse3DXMLIntoXKTModel.js index e71a607d..f1ef4c6a 100644 --- a/src/parsers/parse3DXMLIntoXKTModel.js +++ b/src/parsers/parse3DXMLIntoXKTModel.js @@ -158,9 +158,9 @@ function parseHeader(ctx, node) { case "SchemaVersion": metaData.schemaVersion = child.children[0]; if (!isSchemaVersionSupported(ctx, metaData.schemaVersion)) { - ctx.error("Schema version not supported: " + metaData.schemaVersion + " - supported versions are: " + supportedSchemas.join(",")); + ctx.error("3DXML schema version not supported: " + metaData.schemaVersion + " - supported versions are: " + supportedSchemas.join(",")); } else { - ctx.log("Parsing schema version: " + metaData.schemaVersion); + ctx.log("Parsing 3DXML schema version: " + metaData.schemaVersion); } break; case "Title": diff --git a/src/parsers/parseGLTFIntoXKTModel.js b/src/parsers/parseGLTFIntoXKTModel.js index 8aee4342..212f8c2a 100644 --- a/src/parsers/parseGLTFIntoXKTModel.js +++ b/src/parsers/parseGLTFIntoXKTModel.js @@ -361,8 +361,8 @@ function parseNode(ctx, glTFNode, matrix) { }); ctx.stats.numGeometries++; - ctx.stats.numVertices = geometryArrays.positions ? geometryArrays.positions.length/3 : 0; - ctx.stats.numTriangles = geometryArrays.indices ? geometryArrays.indices.length/3 : 0; + ctx.stats.numVertices += geometryArrays.positions ? geometryArrays.positions.length/3 : 0; + ctx.stats.numTriangles += geometryArrays.indices ? geometryArrays.indices.length/3 : 0; ctx.geometryCreated[xktGeometryId] = true; }