@xeokit/xeokit-sdk 2.4.0-alpha-81 → 2.4.0-alpha-82
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/package.json +2 -1
- package/src/extras/ContextMenu/ContextMenu.js +907 -0
- package/src/extras/ContextMenu/index.js +1 -0
- package/src/extras/index.js +1 -0
- package/src/index.js +3 -0
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +658 -0
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsControl.js +418 -0
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsPlugin.js +400 -0
- package/src/plugins/AngleMeasurementsPlugin/index.js +1 -0
- package/src/plugins/AnnotationsPlugin/Annotation.js +368 -0
- package/src/plugins/AnnotationsPlugin/AnnotationsPlugin.js +583 -0
- package/src/plugins/AnnotationsPlugin/index.js +1 -0
- package/src/plugins/AxisGizmoPlugin/AxisGizmoPlugin.js +333 -0
- package/src/plugins/AxisGizmoPlugin/index.js +1 -0
- package/src/plugins/BCFViewpointsPlugin/BCFViewpointsPlugin.js +955 -0
- package/src/plugins/BCFViewpointsPlugin/index.js +1 -0
- package/src/plugins/CityJSONLoaderPlugin/CityJSONDefaultDataSource.js +29 -0
- package/src/plugins/CityJSONLoaderPlugin/CityJSONLoaderPlugin.js +751 -0
- package/src/plugins/CityJSONLoaderPlugin/index.js +1 -0
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +870 -0
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsControl.js +376 -0
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.js +454 -0
- package/src/plugins/DistanceMeasurementsPlugin/index.js +1 -0
- package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesControl.js +639 -0
- package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesPlugin.js +436 -0
- package/src/plugins/FaceAlignedSectionPlanesPlugin/Overview.js +247 -0
- package/src/plugins/FaceAlignedSectionPlanesPlugin/Plane.js +167 -0
- package/src/plugins/FaceAlignedSectionPlanesPlugin/index.js +1 -0
- package/src/plugins/FastNavPlugin/FastNavPlugin.js +429 -0
- package/src/plugins/FastNavPlugin/index.js +1 -0
- package/src/plugins/GLTFLoaderPlugin/GLTFDefaultDataSource.js +139 -0
- package/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +421 -0
- package/src/plugins/GLTFLoaderPlugin/GLTFSceneModelLoader.js +669 -0
- package/src/plugins/GLTFLoaderPlugin/index.js +2 -0
- package/src/plugins/LASLoaderPlugin/LASDefaultDataSource.js +58 -0
- package/src/plugins/LASLoaderPlugin/LASLoaderPlugin.js +518 -0
- package/src/plugins/LASLoaderPlugin/index.js +1 -0
- package/src/plugins/LASLoaderPlugin/loadLASHeader.js +183 -0
- package/src/plugins/NavCubePlugin/CubeTextureCanvas.js +289 -0
- package/src/plugins/NavCubePlugin/NavCubePlugin.js +752 -0
- package/src/plugins/NavCubePlugin/index.js +1 -0
- package/src/plugins/OBJLoaderPlugin/OBJLoaderPlugin.js +145 -0
- package/src/plugins/OBJLoaderPlugin/OBJSceneGraphLoader.js +777 -0
- package/src/plugins/OBJLoaderPlugin/index.js +1 -0
- package/src/plugins/STLLoaderPlugin/STLDefaultDataSource.js +33 -0
- package/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js +274 -0
- package/src/plugins/STLLoaderPlugin/STLSceneGraphLoader.js +313 -0
- package/src/plugins/STLLoaderPlugin/index.js +2 -0
- package/src/plugins/SectionPlanesPlugin/Control.js +1328 -0
- package/src/plugins/SectionPlanesPlugin/Overview.js +249 -0
- package/src/plugins/SectionPlanesPlugin/Plane.js +169 -0
- package/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +404 -0
- package/src/plugins/SectionPlanesPlugin/index.js +1 -0
- package/src/plugins/SkyboxesPlugin/SkyboxesPlugin.js +134 -0
- package/src/plugins/SkyboxesPlugin/index.js +1 -0
- package/src/plugins/StoreyViewsPlugin/IFCStoreyPlanObjectStates.js +77 -0
- package/src/plugins/StoreyViewsPlugin/Storey.js +61 -0
- package/src/plugins/StoreyViewsPlugin/StoreyMap.js +57 -0
- package/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +825 -0
- package/src/plugins/StoreyViewsPlugin/index.js +1 -0
- package/src/plugins/TreeViewPlugin/TreeViewNode.js +97 -0
- package/src/plugins/TreeViewPlugin/TreeViewPlugin.js +1424 -0
- package/src/plugins/TreeViewPlugin/index.js +1 -0
- package/src/plugins/ViewCullPlugin/ViewCullPlugin.js +295 -0
- package/src/plugins/ViewCullPlugin/index.js +1 -0
- package/src/plugins/WebIFCLoaderPlugin/WebIFCDefaultDataSource.js +58 -0
- package/src/plugins/WebIFCLoaderPlugin/WebIFCLoaderPlugin.js +942 -0
- package/src/plugins/WebIFCLoaderPlugin/index.js +1 -0
- package/src/plugins/XKTLoaderPlugin/XKTDefaultDataSource.js +95 -0
- package/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +1107 -0
- package/src/plugins/XKTLoaderPlugin/index.js +2 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV1.js +169 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV10.js +656 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV2.js +230 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV3.js +223 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV4.js +283 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV5.js +246 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV6.js +301 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV7.js +439 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV8.js +563 -0
- package/src/plugins/XKTLoaderPlugin/parsers/ParserV9.js +514 -0
- package/src/plugins/XKTLoaderPlugin/parsers/lib/pako.js +2 -0
- package/src/plugins/XML3DLoaderPlugin/XML3DLoaderPlugin.js +238 -0
- package/src/plugins/XML3DLoaderPlugin/XML3DSceneGraphLoader.js +1279 -0
- package/src/plugins/XML3DLoaderPlugin/index.js +1 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/.jshintrc +11 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/deflate.js +2060 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/inflate.js +2155 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/mime-types.js +1002 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/pako/codecs.js +64 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/z-worker.js +153 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/zip-ext.js +267 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/zip-fs.js +553 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/zip.js +991 -0
- package/src/plugins/XML3DLoaderPlugin/zipjs/zlib-asm/codecs.js +49 -0
- package/src/plugins/index.js +21 -0
- package/src/plugins/lib/culling/ObjectCullStates.js +208 -0
- package/src/plugins/lib/earcut.js +677 -0
- package/src/plugins/lib/html/Dot.js +145 -0
- package/src/plugins/lib/html/Label.js +156 -0
- package/src/plugins/lib/html/Wire.js +191 -0
- package/src/viewer/Configs.js +79 -0
- package/src/viewer/Plugin.js +224 -0
- package/src/viewer/Viewer.js +535 -0
- package/src/viewer/index.js +5 -0
- package/src/viewer/localization/LocaleService.js +475 -0
- package/src/viewer/metadata/IFCObjectDefaultColors.js +162 -0
- package/src/viewer/metadata/IFCObjectDefaults.js +17 -0
- package/src/viewer/metadata/MetaModel.js +389 -0
- package/src/viewer/metadata/MetaObject.js +218 -0
- package/src/viewer/metadata/MetaScene.js +336 -0
- package/src/viewer/metadata/Property.js +55 -0
- package/src/viewer/metadata/PropertySet.js +77 -0
- package/src/viewer/scene/Bitmap/Bitmap.js +470 -0
- package/src/viewer/scene/Bitmap/index.js +1 -0
- package/src/viewer/scene/CameraControl/CameraControl.js +1737 -0
- package/src/viewer/scene/CameraControl/lib/CameraUpdater.js +312 -0
- package/src/viewer/scene/CameraControl/lib/controllers/PanController.js +112 -0
- package/src/viewer/scene/CameraControl/lib/controllers/PickController.js +264 -0
- package/src/viewer/scene/CameraControl/lib/controllers/PivotController.js +384 -0
- package/src/viewer/scene/CameraControl/lib/handlers/KeyboardAxisViewHandler.js +122 -0
- package/src/viewer/scene/CameraControl/lib/handlers/KeyboardPanRotateDollyHandler.js +183 -0
- package/src/viewer/scene/CameraControl/lib/handlers/MouseMiscHandler.js +68 -0
- package/src/viewer/scene/CameraControl/lib/handlers/MousePanRotateDollyHandler.js +345 -0
- package/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +372 -0
- package/src/viewer/scene/CameraControl/lib/handlers/TouchPanRotateAndDollyHandler.js +269 -0
- package/src/viewer/scene/CameraControl/lib/handlers/TouchPickHandler.js +235 -0
- package/src/viewer/scene/Component.js +907 -0
- package/src/viewer/scene/Entity.js +502 -0
- package/src/viewer/scene/ImagePlane/ImagePlane.js +570 -0
- package/src/viewer/scene/ImagePlane/index.js +1 -0
- package/src/viewer/scene/LineSet/LineSet.js +164 -0
- package/src/viewer/scene/LineSet/index.js +1 -0
- package/src/viewer/scene/camera/Camera.js +912 -0
- package/src/viewer/scene/camera/CameraFlightAnimation.js +669 -0
- package/src/viewer/scene/camera/CameraPath.js +194 -0
- package/src/viewer/scene/camera/CameraPathAnimation.js +326 -0
- package/src/viewer/scene/camera/CustomProjection.js +149 -0
- package/src/viewer/scene/camera/Frustum.js +316 -0
- package/src/viewer/scene/camera/Ortho.js +286 -0
- package/src/viewer/scene/camera/Perspective.js +304 -0
- package/src/viewer/scene/camera/index.js +2 -0
- package/src/viewer/scene/canvas/Canvas.js +492 -0
- package/src/viewer/scene/canvas/Spinner.js +323 -0
- package/src/viewer/scene/constants/constants.js +371 -0
- package/src/viewer/scene/core.js +233 -0
- package/src/viewer/scene/geometry/Geometry.js +33 -0
- package/src/viewer/scene/geometry/ReadableGeometry.js +682 -0
- package/src/viewer/scene/geometry/VBOGeometry.js +319 -0
- package/src/viewer/scene/geometry/builders/buildBoxGeometry.js +238 -0
- package/src/viewer/scene/geometry/builders/buildBoxLinesGeometry.js +106 -0
- package/src/viewer/scene/geometry/builders/buildCylinderGeometry.js +271 -0
- package/src/viewer/scene/geometry/builders/buildGridGeometry.js +102 -0
- package/src/viewer/scene/geometry/builders/buildPlaneGeometry.js +168 -0
- package/src/viewer/scene/geometry/builders/buildSphereGeometry.js +161 -0
- package/src/viewer/scene/geometry/builders/buildTorusGeometry.js +172 -0
- package/src/viewer/scene/geometry/builders/buildVectorTextGeometry.js +1721 -0
- package/src/viewer/scene/geometry/builders/index.js +8 -0
- package/src/viewer/scene/geometry/index.js +4 -0
- package/src/viewer/scene/geometry/loaders/index.js +2 -0
- package/src/viewer/scene/geometry/loaders/load3DSGeometry.js +103 -0
- package/src/viewer/scene/geometry/loaders/loadOBJGeometry.js +130 -0
- package/src/viewer/scene/index.js +23 -0
- package/src/viewer/scene/input/Input.js +1325 -0
- package/src/viewer/scene/libs/k3d.js +1032 -0
- package/src/viewer/scene/lights/AmbientLight.js +175 -0
- package/src/viewer/scene/lights/CubeTexture.js +156 -0
- package/src/viewer/scene/lights/DirLight.js +314 -0
- package/src/viewer/scene/lights/Light.js +29 -0
- package/src/viewer/scene/lights/LightMap.js +77 -0
- package/src/viewer/scene/lights/PointLight.js +395 -0
- package/src/viewer/scene/lights/ReflectionMap.js +79 -0
- package/src/viewer/scene/lights/Shadow.js +138 -0
- package/src/viewer/scene/lights/index.js +5 -0
- package/src/viewer/scene/lod/LOD.js +162 -0
- package/src/viewer/scene/lod/LODCullingManager.js +83 -0
- package/src/viewer/scene/lod/LODState.js +125 -0
- package/src/viewer/scene/lod/index.js +1 -0
- package/src/viewer/scene/marker/Marker.js +383 -0
- package/src/viewer/scene/marker/SpriteMarker.js +356 -0
- package/src/viewer/scene/marker/index.js +2 -0
- package/src/viewer/scene/materials/EdgeMaterial.js +359 -0
- package/src/viewer/scene/materials/EmphasisMaterial.js +613 -0
- package/src/viewer/scene/materials/Fresnel.js +222 -0
- package/src/viewer/scene/materials/LambertMaterial.js +378 -0
- package/src/viewer/scene/materials/LinesMaterial.js +169 -0
- package/src/viewer/scene/materials/Material.js +39 -0
- package/src/viewer/scene/materials/MetallicMaterial.js +820 -0
- package/src/viewer/scene/materials/PhongMaterial.js +860 -0
- package/src/viewer/scene/materials/PointsMaterial.js +409 -0
- package/src/viewer/scene/materials/SpecularMaterial.js +807 -0
- package/src/viewer/scene/materials/Texture.js +513 -0
- package/src/viewer/scene/materials/index.js +8 -0
- package/src/viewer/scene/math/Frustum.js +118 -0
- package/src/viewer/scene/math/buildEdgeIndices.js +162 -0
- package/src/viewer/scene/math/geometryCompressionUtils.js +365 -0
- package/src/viewer/scene/math/index.js +3 -0
- package/src/viewer/scene/math/math.js +5363 -0
- package/src/viewer/scene/math/rtcCoords.js +139 -0
- package/src/viewer/scene/mementos/CameraMemento.js +200 -0
- package/src/viewer/scene/mementos/ModelMemento.js +263 -0
- package/src/viewer/scene/mementos/ObjectsMemento.js +259 -0
- package/src/viewer/scene/mementos/index.js +3 -0
- package/src/viewer/scene/mesh/Mesh.js +2202 -0
- package/src/viewer/scene/mesh/draw/DrawRenderer.js +986 -0
- package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1570 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +249 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +158 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +276 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +261 -0
- package/src/viewer/scene/mesh/index.js +1 -0
- package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +207 -0
- package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +156 -0
- package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +210 -0
- package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +142 -0
- package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +186 -0
- package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +116 -0
- package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
- package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +98 -0
- package/src/viewer/scene/metriqs/Metriqs.js +259 -0
- package/src/viewer/scene/model/ENTITY_FLAGS.js +21 -0
- package/src/viewer/scene/model/PerformanceModel.js +26 -0
- package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
- package/src/viewer/scene/model/SceneModel.js +3817 -0
- package/src/viewer/scene/model/SceneModelEntity.js +478 -0
- package/src/viewer/scene/model/SceneModelMesh.js +160 -0
- package/src/viewer/scene/model/SceneModelTexture.js +17 -0
- package/src/viewer/scene/model/SceneModelTextureSet.js +17 -0
- package/src/viewer/scene/model/VBOSceneModel.js +26 -0
- package/src/viewer/scene/model/compression.js +227 -0
- package/src/viewer/scene/model/dtx/triangles/BindableDataTexture.js +31 -0
- package/src/viewer/scene/model/dtx/triangles/DataTextureGenerator.js +631 -0
- package/src/viewer/scene/model/dtx/triangles/DataTextureState.js +288 -0
- package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureBuffer.js +31 -0
- package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureLayer.js +1329 -0
- package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureRenderers.js +278 -0
- package/src/viewer/scene/model/dtx/triangles/calculateUniquePositions.js +126 -0
- package/src/viewer/scene/model/dtx/triangles/dataTextureRamStats.js +54 -0
- package/src/viewer/scene/model/dtx/triangles/rebucketPositions.js +347 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureColorRenderer.js +633 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureDepthRenderer.js +475 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesColorRenderer.js +426 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesRenderer.js +430 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureNormalsRenderer.js +341 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureOcclusionRenderer.js +442 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickDepthRenderer.js +451 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickMeshRenderer.js +436 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsFlatRenderer.js +502 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsRenderer.js +430 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSilhouetteRenderer.js +469 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthBufInitRenderer.js +451 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthRenderer.js +424 -0
- package/src/viewer/scene/model/index.js +3 -0
- package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
- package/src/viewer/scene/model/vbo/VBOSceneModelRenderers.js +805 -0
- package/src/viewer/scene/model/vbo/float16.js +760 -0
- package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingBuffer.js +21 -0
- package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingLayer.js +744 -0
- package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingRenderers.js +71 -0
- package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingColorRenderer.js +116 -0
- package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingSilhouetteRenderer.js +126 -0
- package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingLayer.js +653 -0
- package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingRenderers.js +71 -0
- package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingColorRenderer.js +150 -0
- package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingSilhouetteRenderer.js +128 -0
- package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingBuffer.js +22 -0
- package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingLayer.js +753 -0
- package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingRenderers.js +116 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingColorRenderer.js +167 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingOcclusionRenderer.js +135 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +154 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +146 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingShadowRenderer.js +108 -0
- package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingSilhouetteRenderer.js +147 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingLayer.js +684 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingRenderers.js +146 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingColorRenderer.js +174 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingDepthRenderer.js +156 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingOcclusionRenderer.js +151 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +167 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +151 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingShadowRenderer.js +121 -0
- package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingSilhouetteRenderer.js +156 -0
- package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthBufInitRenderer.js +351 -0
- package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthRenderer.js +365 -0
- package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingRenderers.js +71 -0
- package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthBufInitRenderer.js +381 -0
- package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthRenderer.js +374 -0
- package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingRenderers.js +71 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingBuffer.js +26 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingLayer.js +1322 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingRenderers.js +322 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorRenderer.js +240 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorTextureRenderer.js +271 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingDepthRenderer.js +127 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesColorRenderer.js +129 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesRenderer.js +134 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingFlatColorRenderer.js +237 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingNormalsRenderer.js +139 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingOcclusionRenderer.js +127 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPBRRenderer.js +563 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +143 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsFlatRenderer.js +119 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +129 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingShadowRenderer.js +108 -0
- package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingSilhouetteRenderer.js +137 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingLayer.js +1167 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingRenderers.js +322 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorRenderer.js +253 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorTextureRenderer.js +278 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingDepthRenderer.js +125 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesColorRenderer.js +131 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesRenderer.js +134 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatColorRenderer.js +244 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatNormalsRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingNormalsRenderer.js +140 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingOcclusionRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPBRRenderer.js +563 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +148 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +135 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsFlatRenderer.js +130 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +144 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingShadowRenderer.js +113 -0
- package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingSilhouetteRenderer.js +141 -0
- package/src/viewer/scene/nodes/Node.js +1383 -0
- package/src/viewer/scene/nodes/index.js +1 -0
- package/src/viewer/scene/paths/CubicBezierCurve.js +194 -0
- package/src/viewer/scene/paths/Curve.js +183 -0
- package/src/viewer/scene/paths/Path.js +239 -0
- package/src/viewer/scene/paths/QuadraticBezierCurve.js +161 -0
- package/src/viewer/scene/paths/SplineCurve.js +133 -0
- package/src/viewer/scene/paths/index.js +5 -0
- package/src/viewer/scene/postfx/SAO.js +543 -0
- package/src/viewer/scene/scene/Scene.js +2627 -0
- package/src/viewer/scene/sectionPlane/SectionPlane.js +194 -0
- package/src/viewer/scene/sectionPlane/index.js +1 -0
- package/src/viewer/scene/skybox/Skybox.js +123 -0
- package/src/viewer/scene/skybox/index.js +1 -0
- package/src/viewer/scene/stats.js +44 -0
- package/src/viewer/scene/utils/Cache.js +29 -0
- package/src/viewer/scene/utils/FileLoader.js +160 -0
- package/src/viewer/scene/utils/Loader.js +55 -0
- package/src/viewer/scene/utils/LoadingManager.js +86 -0
- package/src/viewer/scene/utils/Map.js +45 -0
- package/src/viewer/scene/utils/Queue.js +56 -0
- package/src/viewer/scene/utils/WorkerPool.js +73 -0
- package/src/viewer/scene/utils/index.js +6 -0
- package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/KTX2TextureTranscoder.js +650 -0
- package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/index.js +1 -0
- package/src/viewer/scene/utils/textureTranscoders/TextureTranscoder.js +31 -0
- package/src/viewer/scene/utils/textureTranscoders/index.js +2 -0
- package/src/viewer/scene/utils.js +452 -0
- package/src/viewer/scene/vfc/VFC.js +82 -0
- package/src/viewer/scene/vfc/VFCManager.js +54 -0
- package/src/viewer/scene/vfc/VFCState.js +391 -0
- package/src/viewer/scene/vfc/cluster-helper.js +134 -0
- package/src/viewer/scene/vfc/index.js +1 -0
- package/src/viewer/scene/vfc/rbush3d.js +848 -0
- package/src/viewer/scene/vfc/xeokit-cluster.js +418 -0
- package/src/viewer/scene/viewport/Viewport.js +212 -0
- package/src/viewer/scene/webgl/ArrayBuf.js +121 -0
- package/src/viewer/scene/webgl/Attribute.js +23 -0
- package/src/viewer/scene/webgl/Drawable.js +270 -0
- package/src/viewer/scene/webgl/FrameContext.js +313 -0
- package/src/viewer/scene/webgl/PickResult.js +339 -0
- package/src/viewer/scene/webgl/Pickable.js +69 -0
- package/src/viewer/scene/webgl/Program.js +181 -0
- package/src/viewer/scene/webgl/RenderBuffer.js +350 -0
- package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
- package/src/viewer/scene/webgl/RenderFlags.js +203 -0
- package/src/viewer/scene/webgl/RenderState.js +40 -0
- package/src/viewer/scene/webgl/Renderer.js +1654 -0
- package/src/viewer/scene/webgl/Sampler.js +18 -0
- package/src/viewer/scene/webgl/Shader.js +49 -0
- package/src/viewer/scene/webgl/Texture2D.js +442 -0
- package/src/viewer/scene/webgl/convertConstant.js +244 -0
- package/src/viewer/scene/webgl/getExtension.js +32 -0
- package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +214 -0
- package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +426 -0
- package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
- package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +376 -0
- package/src/viewer/scene/webgl/webglEnums.js +61 -0
- package/src/viewer/scene/webglInfo.js +47 -0
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
import {math, Plugin, SceneModel, utils} from "../../viewer/index.js";
|
|
2
|
+
import {CityJSONDefaultDataSource} from "./CityJSONDefaultDataSource.js";
|
|
3
|
+
|
|
4
|
+
import {earcut} from '../lib/earcut.js';
|
|
5
|
+
|
|
6
|
+
const tempVec2a = math.vec2();
|
|
7
|
+
const tempVec3a = math.vec3();
|
|
8
|
+
const tempVec3b = math.vec3();
|
|
9
|
+
const tempVec3c = math.vec3();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* {@link Viewer} plugin that loads models from CityJSON files.
|
|
13
|
+
*
|
|
14
|
+
* <a href="https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway"><img src="https://xeokit.io/img/docs/CityJSONLoaderPlugin/CityJSONLoaderPlugin.png"></a>
|
|
15
|
+
*
|
|
16
|
+
* [[Run this example](https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway)]
|
|
17
|
+
*
|
|
18
|
+
* ## Overview
|
|
19
|
+
*
|
|
20
|
+
* * Loads small-to-medium sized models directly from [CityJSON 1.0.0](https://www.cityjson.org/specs/1.0.0/) files.
|
|
21
|
+
* * Loads double-precision coordinates, enabling models to be viewed at global coordinates without accuracy loss.
|
|
22
|
+
* * Allows to set the position, scale and rotation of each model as you load it.
|
|
23
|
+
* * Not recommended for large models. For best performance with large CityJSON datasets, we recommend
|
|
24
|
+
* converting them to ````.xkt```` format (eg. using [convert2xkt](https://github.com/xeokit/xeokit-convert)), then loading
|
|
25
|
+
* the ````.xkt```` using {@link XKTLoaderPlugin}.
|
|
26
|
+
*
|
|
27
|
+
* ## Limitations
|
|
28
|
+
*
|
|
29
|
+
* Loading and parsing huge CityJSON files can be slow, and can overwhelm the browser, however. To view your
|
|
30
|
+
* largest CityJSON models, we recommend instead pre-converting those to xeokit's compressed native .XKT format, then
|
|
31
|
+
* loading them with {@link XKTLoaderPlugin} instead.</p>
|
|
32
|
+
*
|
|
33
|
+
* ## Scene representation
|
|
34
|
+
*
|
|
35
|
+
* When loading a model, CityJSONLoaderPlugin creates an {@link Entity} that represents the model, which
|
|
36
|
+
* will have {@link Entity#isModel} set ````true```` and will be registered by {@link Entity#id}
|
|
37
|
+
* in {@link Scene#models}. The CityJSONLoaderPlugin also creates an {@link Entity} for each object within the
|
|
38
|
+
* model. Those Entities will have {@link Entity#isObject} set ````true```` and will be registered
|
|
39
|
+
* by {@link Entity#id} in {@link Scene#objects}.
|
|
40
|
+
*
|
|
41
|
+
* ## Metadata
|
|
42
|
+
*
|
|
43
|
+
* When loading a model, CityJSONLoaderPlugin also creates a {@link MetaModel} that represents the model, which contains
|
|
44
|
+
* a tree of {@link MetaObject}s that represent the CityJSON objects. .
|
|
45
|
+
*
|
|
46
|
+
* ## Usage
|
|
47
|
+
*
|
|
48
|
+
* In the example below we'll load the LOD 3 Railway model from
|
|
49
|
+
* a [CityJSON file](https://github.com/xeokit/xeokit-sdk/tree/master/assets/models/cityjson/LoD3_Railway.json). Within
|
|
50
|
+
* our {@link Viewer}, this will create a bunch of {@link Entity}s that represents the model and its objects, along with
|
|
51
|
+
* a {@link MetaModel} and {@link MetaObject}s that hold their metadata.
|
|
52
|
+
*
|
|
53
|
+
* We'll also scale our model to half its size, rotate it 90 degrees about its local X-axis, then
|
|
54
|
+
* translate it 100 units along its X axis.
|
|
55
|
+
*
|
|
56
|
+
* * [[Run example](https://xeokit.github.io/xeokit-sdk/examples/#loading_CityJSONLoaderPlugin_Railway)]
|
|
57
|
+
*
|
|
58
|
+
* ````javascript
|
|
59
|
+
* import {Viewer, CityJSONLoaderPlugin} from "xeokit-sdk.es.js";
|
|
60
|
+
*
|
|
61
|
+
* const viewer = new Viewer({
|
|
62
|
+
* canvasId: "myCanvas",
|
|
63
|
+
* transparent: true
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* viewer.scene.camera.eye = [14.915582703146043, 14.396781491179095, 5.431098754133695];
|
|
67
|
+
* viewer.scene.camera.look = [6.599999999999998, 8.34099990051474, -4.159999575600315];
|
|
68
|
+
* viewer.scene.camera.up = [-0.2820584034861215, 0.9025563895259413, -0.3253229483893775];
|
|
69
|
+
*
|
|
70
|
+
* const cityJSONLoader = new CityJSONLoaderPlugin(viewer);
|
|
71
|
+
*
|
|
72
|
+
* const model = cityJSONLoader.load({ // Returns an Entity that represents the model
|
|
73
|
+
* id: "myModel1",
|
|
74
|
+
* src: "../assets/models/cityjson/LoD3_Railway.json",
|
|
75
|
+
* saoEnabled: true,
|
|
76
|
+
* edges: false,
|
|
77
|
+
* rotation: [-90,0,0],
|
|
78
|
+
* scale: [0.5, 0.5, 0.5],
|
|
79
|
+
* origin: [100, 0, 0]
|
|
80
|
+
* });
|
|
81
|
+
* ````
|
|
82
|
+
*
|
|
83
|
+
* ## Configuring a custom data source
|
|
84
|
+
*
|
|
85
|
+
* By default, CityJSONLoaderPlugin will load CityJSON files over HTTP.
|
|
86
|
+
*
|
|
87
|
+
* In the example below, we'll customize the way CityJSONLoaderPlugin loads the files by configuring it with our own data source
|
|
88
|
+
* object. For simplicity, our custom data source example also uses HTTP, using a couple of xeokit utility functions.
|
|
89
|
+
*
|
|
90
|
+
* ````javascript
|
|
91
|
+
* import {utils} from "xeokit-sdk.es.js";
|
|
92
|
+
*
|
|
93
|
+
* class MyDataSource {
|
|
94
|
+
*
|
|
95
|
+
* constructor() {
|
|
96
|
+
* }
|
|
97
|
+
*
|
|
98
|
+
* getCityJSON(src, ok, error) {
|
|
99
|
+
* console.log("MyDataSource#getCityJSON(" + CityJSONSrc + ", ... )");
|
|
100
|
+
* utils.loadJSON(src,
|
|
101
|
+
* (cityJSON) => {
|
|
102
|
+
* ok(cityJSON);
|
|
103
|
+
* },
|
|
104
|
+
* function (errMsg) {
|
|
105
|
+
* error(errMsg);
|
|
106
|
+
* });
|
|
107
|
+
* }
|
|
108
|
+
* }
|
|
109
|
+
* ````
|
|
110
|
+
*
|
|
111
|
+
* @class CityJSONLoaderPlugin
|
|
112
|
+
* @since 2.0.13
|
|
113
|
+
*/
|
|
114
|
+
class CityJSONLoaderPlugin extends Plugin {
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @constructor
|
|
118
|
+
*
|
|
119
|
+
* @param {Viewer} viewer The Viewer.
|
|
120
|
+
* @param {Object} cfg Plugin configuration.
|
|
121
|
+
* @param {String} [cfg.id="cityJSONLoader"] Optional ID for this plugin, so that we can find it within {@link Viewer#plugins}.
|
|
122
|
+
* @param {Object} [cfg.dataSource] A custom data source through which the CityJSONLoaderPlugin can load model and
|
|
123
|
+
* metadata files. Defaults to an instance of {@link CityJSONDefaultDataSource}, which loads over HTTP.
|
|
124
|
+
*/
|
|
125
|
+
constructor(viewer, cfg = {}) {
|
|
126
|
+
|
|
127
|
+
super("cityJSONLoader", viewer, cfg);
|
|
128
|
+
|
|
129
|
+
this.dataSource = cfg.dataSource;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Gets the custom data source through which the CityJSONLoaderPlugin can load CityJSON files.
|
|
134
|
+
*
|
|
135
|
+
* Default value is {@link CityJSONDefaultDataSource}, which loads via HTTP.
|
|
136
|
+
*
|
|
137
|
+
* @type {Object}
|
|
138
|
+
*/
|
|
139
|
+
get dataSource() {
|
|
140
|
+
return this._dataSource;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Sets a custom data source through which the CityJSONLoaderPlugin can load CityJSON files.
|
|
145
|
+
*
|
|
146
|
+
* Default value is {@link CityJSONDefaultDataSource}, which loads via HTTP.
|
|
147
|
+
*
|
|
148
|
+
* @type {Object}
|
|
149
|
+
*/
|
|
150
|
+
set dataSource(value) {
|
|
151
|
+
this._dataSource = value || new CityJSONDefaultDataSource();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Loads an ````CityJSON```` model into this CityJSONLoaderPlugin's {@link Viewer}.
|
|
156
|
+
*
|
|
157
|
+
* @param {*} params Loading parameters.
|
|
158
|
+
* @param {String} [params.id] ID to assign to the root {@link Entity#id}, unique among all components in the Viewer's {@link Scene}, generated automatically by default.
|
|
159
|
+
* @param {String} [params.src] Path to a CityJSON file, as an alternative to the ````cityJSON```` parameter.
|
|
160
|
+
* @param {ArrayBuffer} [params.cityJSON] The CityJSON file data, as an alternative to the ````src```` parameter.
|
|
161
|
+
* @param {Boolean} [params.loadMetadata=true] Whether to load metadata on CityJSON objects.
|
|
162
|
+
* @param {Number[]} [params.origin=[0,0,0]] The model's World-space double-precision 3D origin. Use this to position the model within xeokit's World coordinate system, using double-precision coordinates.
|
|
163
|
+
* @param {Number[]} [params.position=[0,0,0]] The model single-precision 3D position, relative to the ````origin```` parameter.
|
|
164
|
+
* @param {Number[]} [params.scale=[1,1,1]] The model's scale.
|
|
165
|
+
* @param {Number[]} [params.rotation=[0,0,0]] The model's orientation, given as Euler angles in degrees, for each of the X, Y and Z axis.
|
|
166
|
+
* @param {Number[]} [params.matrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]] The model's world transform matrix. Overrides the position, scale and rotation parameters. Relative to ````origin````.
|
|
167
|
+
* @param {Object} [params.stats] Collects model statistics.
|
|
168
|
+
* @param {Boolean} [params.dtxEnabled=true] When ````true```` (default) use data textures (DTX), where appropriate, to
|
|
169
|
+
* represent the returned model. Set false to always use vertex buffer objects (VBOs). Note that DTX is only applicable
|
|
170
|
+
* to non-textured triangle meshes, and that VBOs are always used for meshes that have textures, line segments, or point
|
|
171
|
+
* primitives. Only works while {@link DTX#enabled} is also ````true````.
|
|
172
|
+
* @returns {Entity} Entity representing the model, which will have {@link Entity#isModel} set ````true```` and will be registered by {@link Entity#id} in {@link Scene#models}.
|
|
173
|
+
*/
|
|
174
|
+
load(params = {}) {
|
|
175
|
+
|
|
176
|
+
if (params.id && this.viewer.scene.components[params.id]) {
|
|
177
|
+
this.error("Component with this ID already exists in viewer: " + params.id + " - will autogenerate this ID");
|
|
178
|
+
delete params.id;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const sceneModel = new SceneModel(this.viewer.scene, utils.apply(params, {
|
|
182
|
+
isModel: true,
|
|
183
|
+
edges: true
|
|
184
|
+
}));
|
|
185
|
+
|
|
186
|
+
if (!params.src && !params.cityJSON) {
|
|
187
|
+
this.error("load() param expected: src or cityJSON");
|
|
188
|
+
return sceneModel; // Return new empty model
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const options = {};
|
|
192
|
+
|
|
193
|
+
if (params.src) {
|
|
194
|
+
this._loadModel(params.src, params, options, sceneModel);
|
|
195
|
+
} else {
|
|
196
|
+
const spinner = this.viewer.scene.canvas.spinner;
|
|
197
|
+
spinner.processes++;
|
|
198
|
+
this._parseModel(params.cityJSON, params, options, sceneModel);
|
|
199
|
+
spinner.processes--;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return sceneModel;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
_loadModel(src, params, options, sceneModel) {
|
|
206
|
+
const spinner = this.viewer.scene.canvas.spinner;
|
|
207
|
+
spinner.processes++;
|
|
208
|
+
this._dataSource.getCityJSON(params.src, (data) => {
|
|
209
|
+
this._parseModel(data, params, options, sceneModel);
|
|
210
|
+
spinner.processes--;
|
|
211
|
+
},
|
|
212
|
+
(errMsg) => {
|
|
213
|
+
spinner.processes--;
|
|
214
|
+
this.error(errMsg);
|
|
215
|
+
sceneModel.fire("error", errMsg);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
_parseModel(data, params, options, sceneModel) {
|
|
220
|
+
|
|
221
|
+
if (sceneModel.destroyed) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const vertices = data.transform ? this._transformVertices(data.vertices, data.transform, options.rotateX) : data.vertices;
|
|
226
|
+
|
|
227
|
+
const stats = params.stats || {};
|
|
228
|
+
stats.sourceFormat = data.type || "CityJSON";
|
|
229
|
+
stats.schemaVersion = data.version || "";
|
|
230
|
+
stats.title = "";
|
|
231
|
+
stats.author = "";
|
|
232
|
+
stats.created = "";
|
|
233
|
+
stats.numMetaObjects = 0;
|
|
234
|
+
stats.numPropertySets = 0;
|
|
235
|
+
stats.numObjects = 0;
|
|
236
|
+
stats.numGeometries = 0;
|
|
237
|
+
stats.numTriangles = 0;
|
|
238
|
+
stats.numVertices = 0;
|
|
239
|
+
|
|
240
|
+
const loadMetadata = (params.loadMetadata !== false);
|
|
241
|
+
|
|
242
|
+
const rootMetaObject = loadMetadata ? {
|
|
243
|
+
id: math.createUUID(),
|
|
244
|
+
name: "Model",
|
|
245
|
+
type: "Model"
|
|
246
|
+
} : null;
|
|
247
|
+
|
|
248
|
+
const metadata = loadMetadata ? {
|
|
249
|
+
id: "",
|
|
250
|
+
projectId: "",
|
|
251
|
+
author: "",
|
|
252
|
+
createdAt: "",
|
|
253
|
+
schema: data.version || "",
|
|
254
|
+
creatingApplication: "",
|
|
255
|
+
metaObjects: [rootMetaObject],
|
|
256
|
+
propertySets: []
|
|
257
|
+
} : null;
|
|
258
|
+
|
|
259
|
+
const ctx = {
|
|
260
|
+
data,
|
|
261
|
+
vertices,
|
|
262
|
+
sceneModel,
|
|
263
|
+
loadMetadata,
|
|
264
|
+
metadata,
|
|
265
|
+
rootMetaObject,
|
|
266
|
+
nextId: 0,
|
|
267
|
+
stats
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
this._parseCityJSON(ctx)
|
|
271
|
+
|
|
272
|
+
sceneModel.finalize();
|
|
273
|
+
|
|
274
|
+
if (loadMetadata) {
|
|
275
|
+
const metaModelId = sceneModel.id;
|
|
276
|
+
this.viewer.metaScene.createMetaModel(metaModelId, ctx.metadata, options);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
sceneModel.scene.once("tick", () => {
|
|
280
|
+
if (sceneModel.destroyed) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
sceneModel.scene.fire("modelLoaded", sceneModel.id); // FIXME: Assumes listeners know order of these two events
|
|
284
|
+
sceneModel.fire("loaded", true, false); // Don't forget the event, for late subscribers
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
_transformVertices(vertices, transform, rotateX) {
|
|
289
|
+
const transformedVertices = [];
|
|
290
|
+
const scale = transform.scale || math.vec3([1, 1, 1]);
|
|
291
|
+
const translate = transform.translate || math.vec3([0, 0, 0]);
|
|
292
|
+
for (let i = 0, j = 0; i < vertices.length; i++, j += 3) {
|
|
293
|
+
const x = (vertices[i][0] * scale[0]) + translate[0];
|
|
294
|
+
const y = (vertices[i][1] * scale[1]) + translate[1];
|
|
295
|
+
const z = (vertices[i][2] * scale[2]) + translate[2];
|
|
296
|
+
if (rotateX) {
|
|
297
|
+
transformedVertices.push([x, z, y]);
|
|
298
|
+
} else {
|
|
299
|
+
transformedVertices.push([x, y, z]);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return transformedVertices;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
_parseCityJSON(ctx) {
|
|
306
|
+
const data = ctx.data;
|
|
307
|
+
const cityObjects = data.CityObjects;
|
|
308
|
+
for (const objectId in cityObjects) {
|
|
309
|
+
if (cityObjects.hasOwnProperty(objectId)) {
|
|
310
|
+
const cityObject = cityObjects[objectId];
|
|
311
|
+
this._parseCityObject(ctx, cityObject, objectId);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
_parseCityObject(ctx, cityObject, objectId) {
|
|
317
|
+
|
|
318
|
+
const sceneModel = ctx.sceneModel;
|
|
319
|
+
const data = ctx.data;
|
|
320
|
+
|
|
321
|
+
if (ctx.loadMetadata) {
|
|
322
|
+
|
|
323
|
+
const metaObjectId = objectId;
|
|
324
|
+
const metaObjectType = cityObject.type;
|
|
325
|
+
const metaObjectName = metaObjectType + " : " + objectId;
|
|
326
|
+
const parentMetaObjectId = cityObject.parents ? cityObject.parents[0] : ctx.rootMetaObject.id;
|
|
327
|
+
|
|
328
|
+
ctx.metadata.metaObjects.push({
|
|
329
|
+
id: metaObjectId,
|
|
330
|
+
name: metaObjectName,
|
|
331
|
+
type: metaObjectType,
|
|
332
|
+
parent: parentMetaObjectId
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
ctx.stats.numMetaObjects++;
|
|
337
|
+
|
|
338
|
+
if (!(cityObject.geometry && cityObject.geometry.length > 0)) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
const meshIds = [];
|
|
343
|
+
|
|
344
|
+
for (let i = 0, len = cityObject.geometry.length; i < len; i++) {
|
|
345
|
+
|
|
346
|
+
const geometry = cityObject.geometry[i];
|
|
347
|
+
|
|
348
|
+
let objectMaterial;
|
|
349
|
+
let surfaceMaterials;
|
|
350
|
+
|
|
351
|
+
const appearance = data.appearance;
|
|
352
|
+
if (appearance) {
|
|
353
|
+
const materials = appearance.materials;
|
|
354
|
+
if (materials) {
|
|
355
|
+
const geometryMaterial = geometry.material;
|
|
356
|
+
if (geometryMaterial) {
|
|
357
|
+
const themeIds = Object.keys(geometryMaterial);
|
|
358
|
+
if (themeIds.length > 0) {
|
|
359
|
+
const themeId = themeIds[0];
|
|
360
|
+
const theme = geometryMaterial[themeId];
|
|
361
|
+
if (theme.value !== undefined) {
|
|
362
|
+
objectMaterial = materials[theme.value];
|
|
363
|
+
} else {
|
|
364
|
+
const values = theme.values;
|
|
365
|
+
if (values) {
|
|
366
|
+
surfaceMaterials = [];
|
|
367
|
+
for (let j = 0, lenj = values.length; j < lenj; j++) {
|
|
368
|
+
const value = values[i];
|
|
369
|
+
const surfaceMaterial = materials[value];
|
|
370
|
+
surfaceMaterials.push(surfaceMaterial);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (surfaceMaterials) {
|
|
380
|
+
this._parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds);
|
|
381
|
+
|
|
382
|
+
} else {
|
|
383
|
+
this._parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
if (meshIds.length > 0) {
|
|
388
|
+
sceneModel.createEntity({
|
|
389
|
+
id: objectId,
|
|
390
|
+
meshIds: meshIds,
|
|
391
|
+
isObject: true
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
ctx.stats.numObjects++;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
_parseGeometrySurfacesWithOwnMaterials(ctx, geometry, surfaceMaterials, meshIds) {
|
|
399
|
+
|
|
400
|
+
const geomType = geometry.type;
|
|
401
|
+
|
|
402
|
+
switch (geomType) {
|
|
403
|
+
|
|
404
|
+
case "MultiPoint":
|
|
405
|
+
break;
|
|
406
|
+
|
|
407
|
+
case "MultiLineString":
|
|
408
|
+
break;
|
|
409
|
+
|
|
410
|
+
case "MultiSurface":
|
|
411
|
+
|
|
412
|
+
case "CompositeSurface":
|
|
413
|
+
const surfaces = geometry.boundaries;
|
|
414
|
+
this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
|
|
415
|
+
break;
|
|
416
|
+
|
|
417
|
+
case "Solid":
|
|
418
|
+
const shells = geometry.boundaries;
|
|
419
|
+
for (let j = 0; j < shells.length; j++) {
|
|
420
|
+
const surfaces = shells[j];
|
|
421
|
+
this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
|
|
422
|
+
}
|
|
423
|
+
break;
|
|
424
|
+
|
|
425
|
+
case "MultiSolid":
|
|
426
|
+
|
|
427
|
+
case "CompositeSolid":
|
|
428
|
+
const solids = geometry.boundaries;
|
|
429
|
+
for (let j = 0; j < solids.length; j++) {
|
|
430
|
+
for (let k = 0; k < solids[j].length; k++) {
|
|
431
|
+
const surfaces = solids[j][k];
|
|
432
|
+
this._parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
break;
|
|
436
|
+
|
|
437
|
+
case "GeometryInstance":
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
_parseSurfacesWithOwnMaterials(ctx, surfaceMaterials, surfaces, meshIds) {
|
|
443
|
+
|
|
444
|
+
const vertices = ctx.vertices;
|
|
445
|
+
const sceneModel = ctx.sceneModel;
|
|
446
|
+
|
|
447
|
+
for (let i = 0; i < surfaces.length; i++) {
|
|
448
|
+
|
|
449
|
+
const surface = surfaces[i];
|
|
450
|
+
const surfaceMaterial = surfaceMaterials[i] || {diffuseColor: [0.8, 0.8, 0.8], transparency: 1.0};
|
|
451
|
+
|
|
452
|
+
const face = [];
|
|
453
|
+
const holes = [];
|
|
454
|
+
|
|
455
|
+
const sharedIndices = [];
|
|
456
|
+
|
|
457
|
+
const geometryCfg = {
|
|
458
|
+
positions: [],
|
|
459
|
+
indices: []
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
for (let j = 0; j < surface.length; j++) {
|
|
463
|
+
|
|
464
|
+
if (face.length > 0) {
|
|
465
|
+
holes.push(face.length);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const newFace = this._extractLocalIndices(ctx, surface[j], sharedIndices, geometryCfg);
|
|
469
|
+
|
|
470
|
+
face.push(...newFace);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (face.length === 3) { // Triangle
|
|
474
|
+
|
|
475
|
+
geometryCfg.indices.push(face[0]);
|
|
476
|
+
geometryCfg.indices.push(face[1]);
|
|
477
|
+
geometryCfg.indices.push(face[2]);
|
|
478
|
+
|
|
479
|
+
} else if (face.length > 3) { // Polygon
|
|
480
|
+
|
|
481
|
+
// Prepare to triangulate
|
|
482
|
+
|
|
483
|
+
const pList = [];
|
|
484
|
+
|
|
485
|
+
for (let k = 0; k < face.length; k++) {
|
|
486
|
+
pList.push({
|
|
487
|
+
x: vertices[sharedIndices[face[k]]][0],
|
|
488
|
+
y: vertices[sharedIndices[face[k]]][1],
|
|
489
|
+
z: vertices[sharedIndices[face[k]]][2]
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
const normal = this._getNormalOfPositions(pList, math.vec3());
|
|
494
|
+
|
|
495
|
+
// Convert to 2D
|
|
496
|
+
|
|
497
|
+
let pv = [];
|
|
498
|
+
|
|
499
|
+
for (let k = 0; k < pList.length; k++) {
|
|
500
|
+
|
|
501
|
+
this._to2D(pList[k], normal, tempVec2a);
|
|
502
|
+
|
|
503
|
+
pv.unshift(tempVec2a[0]);
|
|
504
|
+
pv.unshift(tempVec2a[1]);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// Triangulate
|
|
508
|
+
|
|
509
|
+
const tr = earcut(pv, holes, 2);
|
|
510
|
+
|
|
511
|
+
// Create triangles
|
|
512
|
+
|
|
513
|
+
for (let k = 0; k < tr.length; k += 3) {
|
|
514
|
+
geometryCfg.indices.unshift(face[tr[k]]);
|
|
515
|
+
geometryCfg.indices.unshift(face[tr[k + 1]]);
|
|
516
|
+
geometryCfg.indices.unshift(face[tr[k + 2]]);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
const meshId = "" + ctx.nextId++;
|
|
521
|
+
|
|
522
|
+
sceneModel.createMesh({
|
|
523
|
+
id: meshId,
|
|
524
|
+
primitive: "triangles",
|
|
525
|
+
positions: geometryCfg.positions,
|
|
526
|
+
indices: geometryCfg.indices,
|
|
527
|
+
color: (surfaceMaterial && surfaceMaterial.diffuseColor) ? surfaceMaterial.diffuseColor : [0.8, 0.8, 0.8],
|
|
528
|
+
opacity: (surfaceMaterial && surfaceMaterial.transparency !== undefined) ? (1.0 - surfaceMaterial.transparency) : 1.0
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
meshIds.push(meshId);
|
|
532
|
+
|
|
533
|
+
ctx.stats.numGeometries++;
|
|
534
|
+
ctx.stats.numVertices += geometryCfg.positions.length / 3;
|
|
535
|
+
ctx.stats.numTriangles += geometryCfg.indices.length / 3;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
_parseGeometrySurfacesWithSharedMaterial(ctx, geometry, objectMaterial, meshIds) {
|
|
540
|
+
|
|
541
|
+
const sceneModel = ctx.sceneModel;
|
|
542
|
+
const sharedIndices = [];
|
|
543
|
+
const geometryCfg = {
|
|
544
|
+
positions: [],
|
|
545
|
+
indices: []
|
|
546
|
+
};
|
|
547
|
+
|
|
548
|
+
const geomType = geometry.type;
|
|
549
|
+
|
|
550
|
+
switch (geomType) {
|
|
551
|
+
case "MultiPoint":
|
|
552
|
+
break;
|
|
553
|
+
|
|
554
|
+
case "MultiLineString":
|
|
555
|
+
break;
|
|
556
|
+
|
|
557
|
+
case "MultiSurface":
|
|
558
|
+
case "CompositeSurface":
|
|
559
|
+
const surfaces = geometry.boundaries;
|
|
560
|
+
this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
|
|
561
|
+
break;
|
|
562
|
+
|
|
563
|
+
case "Solid":
|
|
564
|
+
const shells = geometry.boundaries;
|
|
565
|
+
for (let j = 0; j < shells.length; j++) {
|
|
566
|
+
const surfaces = shells[j];
|
|
567
|
+
this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
|
|
568
|
+
}
|
|
569
|
+
break;
|
|
570
|
+
|
|
571
|
+
case "MultiSolid":
|
|
572
|
+
case "CompositeSolid":
|
|
573
|
+
const solids = geometry.boundaries;
|
|
574
|
+
for (let j = 0; j < solids.length; j++) {
|
|
575
|
+
for (let k = 0; k < solids[j].length; k++) {
|
|
576
|
+
const surfaces = solids[j][k];
|
|
577
|
+
this._parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, geometryCfg);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
break;
|
|
581
|
+
|
|
582
|
+
case "GeometryInstance":
|
|
583
|
+
break;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
if (geometryCfg.positions.length > 0 && geometryCfg.indices.length > 0) {
|
|
587
|
+
|
|
588
|
+
const meshId = "" + ctx.nextId++;
|
|
589
|
+
|
|
590
|
+
sceneModel.createMesh({
|
|
591
|
+
id: meshId,
|
|
592
|
+
primitive: "triangles",
|
|
593
|
+
positions: geometryCfg.positions,
|
|
594
|
+
indices: geometryCfg.indices,
|
|
595
|
+
color: (objectMaterial && objectMaterial.diffuseColor) ? objectMaterial.diffuseColor : [0.8, 0.8, 0.8],
|
|
596
|
+
opacity: 1.0
|
|
597
|
+
//opacity: (objectMaterial && objectMaterial.transparency !== undefined) ? (1.0 - objectMaterial.transparency) : 1.0
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
meshIds.push(meshId);
|
|
601
|
+
|
|
602
|
+
ctx.stats.numGeometries++;
|
|
603
|
+
ctx.stats.numVertices += geometryCfg.positions.length / 3;
|
|
604
|
+
ctx.stats.numTriangles += geometryCfg.indices.length / 3;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
_parseSurfacesWithSharedMaterial(ctx, surfaces, sharedIndices, primitiveCfg) {
|
|
609
|
+
|
|
610
|
+
const vertices = ctx.vertices;
|
|
611
|
+
|
|
612
|
+
for (let i = 0; i < surfaces.length; i++) {
|
|
613
|
+
|
|
614
|
+
let boundary = [];
|
|
615
|
+
let holes = [];
|
|
616
|
+
|
|
617
|
+
for (let j = 0; j < surfaces[i].length; j++) {
|
|
618
|
+
if (boundary.length > 0) {
|
|
619
|
+
holes.push(boundary.length);
|
|
620
|
+
}
|
|
621
|
+
const newBoundary = this._extractLocalIndices(ctx, surfaces[i][j], sharedIndices, primitiveCfg);
|
|
622
|
+
boundary.push(...newBoundary);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
if (boundary.length === 3) { // Triangle
|
|
626
|
+
|
|
627
|
+
primitiveCfg.indices.push(boundary[0]);
|
|
628
|
+
primitiveCfg.indices.push(boundary[1]);
|
|
629
|
+
primitiveCfg.indices.push(boundary[2]);
|
|
630
|
+
|
|
631
|
+
} else if (boundary.length > 3) { // Polygon
|
|
632
|
+
|
|
633
|
+
let pList = [];
|
|
634
|
+
|
|
635
|
+
for (let k = 0; k < boundary.length; k++) {
|
|
636
|
+
pList.push({
|
|
637
|
+
x: vertices[sharedIndices[boundary[k]]][0],
|
|
638
|
+
y: vertices[sharedIndices[boundary[k]]][1],
|
|
639
|
+
z: vertices[sharedIndices[boundary[k]]][2]
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
const normal = this._getNormalOfPositions(pList, math.vec3());
|
|
644
|
+
let pv = [];
|
|
645
|
+
|
|
646
|
+
for (let k = 0; k < pList.length; k++) {
|
|
647
|
+
this._to2D(pList[k], normal, tempVec2a);
|
|
648
|
+
pv.unshift(tempVec2a[0]);
|
|
649
|
+
pv.unshift(tempVec2a[1]);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
const tr = earcut(pv, holes, 2);
|
|
653
|
+
|
|
654
|
+
for (let k = 0; k < tr.length; k += 3) {
|
|
655
|
+
primitiveCfg.indices.unshift(boundary[tr[k]]);
|
|
656
|
+
primitiveCfg.indices.unshift(boundary[tr[k + 1]]);
|
|
657
|
+
primitiveCfg.indices.unshift(boundary[tr[k + 2]]);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
_extractLocalIndices(ctx, boundary, sharedIndices, geometryCfg) {
|
|
664
|
+
|
|
665
|
+
const vertices = ctx.vertices;
|
|
666
|
+
const newBoundary = []
|
|
667
|
+
|
|
668
|
+
for (let i = 0, len = boundary.length; i < len; i++) {
|
|
669
|
+
|
|
670
|
+
const index = boundary[i];
|
|
671
|
+
|
|
672
|
+
if (sharedIndices.includes(index)) {
|
|
673
|
+
const vertexIndex = sharedIndices.indexOf(index);
|
|
674
|
+
newBoundary.push(vertexIndex);
|
|
675
|
+
|
|
676
|
+
} else {
|
|
677
|
+
geometryCfg.positions.push(vertices[index][0]);
|
|
678
|
+
geometryCfg.positions.push(vertices[index][1]);
|
|
679
|
+
geometryCfg.positions.push(vertices[index][2]);
|
|
680
|
+
|
|
681
|
+
newBoundary.push(sharedIndices.length);
|
|
682
|
+
|
|
683
|
+
sharedIndices.push(index);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
return newBoundary
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
_getNormalOfPositions(positions, normal) {
|
|
691
|
+
|
|
692
|
+
for (let i = 0; i < positions.length; i++) {
|
|
693
|
+
|
|
694
|
+
let nexti = i + 1;
|
|
695
|
+
if (nexti === positions.length) {
|
|
696
|
+
nexti = 0;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
normal[0] += ((positions[i].y - positions[nexti].y) * (positions[i].z + positions[nexti].z));
|
|
700
|
+
normal[1] += ((positions[i].z - positions[nexti].z) * (positions[i].x + positions[nexti].x));
|
|
701
|
+
normal[2] += ((positions[i].x - positions[nexti].x) * (positions[i].y + positions[nexti].y));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
return math.normalizeVec3(normal);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
_to2D(_p, _n, re) {
|
|
708
|
+
|
|
709
|
+
const p = tempVec3a;
|
|
710
|
+
const n = tempVec3b;
|
|
711
|
+
const x3 = tempVec3c;
|
|
712
|
+
|
|
713
|
+
p[0] = _p.x;
|
|
714
|
+
p[1] = _p.y;
|
|
715
|
+
p[2] = _p.z;
|
|
716
|
+
|
|
717
|
+
n[0] = _n.x;
|
|
718
|
+
n[1] = _n.y;
|
|
719
|
+
n[2] = _n.z;
|
|
720
|
+
|
|
721
|
+
x3[0] = 1.1;
|
|
722
|
+
x3[1] = 1.1;
|
|
723
|
+
x3[2] = 1.1;
|
|
724
|
+
|
|
725
|
+
const dist = math.lenVec3(math.subVec3(x3, n));
|
|
726
|
+
|
|
727
|
+
if (dist < 0.01) {
|
|
728
|
+
x3[0] += 1.0;
|
|
729
|
+
x3[1] += 2.0;
|
|
730
|
+
x3[2] += 3.0;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
const dot = math.dotVec3(x3, n);
|
|
734
|
+
const tmp2 = math.mulVec3Scalar(n, dot, math.vec3());
|
|
735
|
+
|
|
736
|
+
x3[0] -= tmp2[0];
|
|
737
|
+
x3[1] -= tmp2[1];
|
|
738
|
+
x3[2] -= tmp2[2];
|
|
739
|
+
|
|
740
|
+
math.normalizeVec3(x3);
|
|
741
|
+
|
|
742
|
+
const y3 = math.cross3Vec3(n, x3, math.vec3());
|
|
743
|
+
const x = math.dotVec3(p, x3);
|
|
744
|
+
const y = math.dotVec3(p, y3);
|
|
745
|
+
|
|
746
|
+
re[0] = x;
|
|
747
|
+
re[1] = y;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
export {CityJSONLoaderPlugin};
|