@collabdt/core 0.0.42 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/components/Toolbar.d.ts.map +1 -1
- package/dist/core/components/Toolbar.js.map +1 -1
- package/dist/core/components/ToolbarBody.js.map +1 -1
- package/dist/core/components/TopNavigationBar.js.map +1 -1
- package/dist/core/components/authentication/ForgotPassword.js.map +1 -1
- package/dist/core/components/authentication/Signin.js.map +1 -1
- package/dist/core/components/authentication/Signup.js.map +1 -1
- package/dist/core/components/settings/src/OrganizationSkeleton.js.map +1 -1
- package/dist/core/components/settings/src/SettingsSkeleton.js.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CollapsibleCommentItem.js.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Comments/CommentsSection.js.map +1 -1
- package/dist/core/components/ui/DataTable.d.ts.map +1 -1
- package/dist/core/components/ui/DataTable.js +7 -0
- package/dist/core/components/ui/DataTable.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileItemComponent.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts +5 -2
- package/dist/core/components/ui/FilesManager/src/FileMarker.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/FileMarker.js +84 -21
- package/dist/core/components/ui/FilesManager/src/FileMarker.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/convertIfcToFragmentsFile.js.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.d.ts.map +1 -1
- package/dist/core/components/ui/FilesManager/src/useFileUploadHandler.js.map +1 -1
- package/dist/core/components/ui/Icons/IfcIcon.d.ts.map +1 -1
- package/dist/core/components/ui/Icons/IfcIcon.js.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.d.ts.map +1 -1
- package/dist/core/components/ui/InfoSidebar/index.js.map +1 -1
- package/dist/core/components/ui/Navbar.d.ts.map +1 -1
- package/dist/core/components/ui/Navbar.js.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/CollapsibleSensorItem.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorTagsSection.js.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.d.ts.map +1 -1
- package/dist/core/components/ui/Sensors/SensorsSection.js.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.d.ts.map +1 -1
- package/dist/core/components/ui/ShareFeature/ShareToolSubmenu.js.map +1 -1
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js +2 -2
- package/dist/core/components/viewers/Data/buildingDetails/GeocoderInput.js.map +1 -1
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js +2 -2
- package/dist/core/components/viewers/Data/siteDetails/AssociatedBuildings.js.map +1 -1
- package/dist/core/components/viewers/Viewer.d.ts.map +1 -1
- package/dist/core/components/viewers/Viewer.js +5 -1
- package/dist/core/components/viewers/Viewer.js.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimToolbar.js.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/BimViewer.js +14 -5
- package/dist/core/components/viewers/bim/BimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js +6 -0
- package/dist/core/components/viewers/bim/src/BimLoadingState/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js +168 -39
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js +1 -1
- package/dist/core/components/viewers/bim/src/BimSidebar/src/LayersTab/src/FloorplanSection.js.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts +14 -37
- package/dist/core/components/viewers/bim/src/DXFLoader/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js +31 -318
- package/dist/core/components/viewers/bim/src/DXFLoader/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts +66 -7
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js +253 -21
- package/dist/core/components/viewers/bim/src/FloorplanTool/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/ModelManager/index.js +9 -0
- package/dist/core/components/viewers/bim/src/ModelManager/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/SimpleBimViewer.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts +3 -2
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/TrueNorthPopover.js.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js +3 -4
- package/dist/core/components/viewers/bim/src/lib/useFriendlyIfcClassName.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js +40 -18
- package/dist/core/components/viewers/bim/src/tools/AddToBim/index.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts +2 -5
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js +45 -59
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/AddDxf.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js +1 -0
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/BimSensor.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts +10 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js +25 -73
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileHandler.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts +7 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js +42 -78
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/FileMarkerUtils.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js +52 -75
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/Position3DCard.js.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts +15 -3
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.d.ts.map +1 -1
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js +165 -105
- package/dist/core/components/viewers/bim/src/tools/AddToBim/src/useFilePlacement.js.map +1 -1
- package/dist/core/components/viewers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/index.js.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/MapViewer.js +1 -0
- package/dist/core/components/viewers/map/MapViewer.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js +4 -3
- package/dist/core/components/viewers/map/datasets/DatasetManager/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/RowActions.js +148 -0
- package/dist/core/components/viewers/map/datasets/RowActions.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/index.js +32 -15
- package/dist/core/components/viewers/map/datasets/index.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts +4 -0
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.d.ts.map +1 -0
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js +43 -0
- package/dist/core/components/viewers/map/datasets/src/builtinLiveDatasets.js.map +1 -0
- package/dist/core/components/viewers/map/datasets/src/localDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js +39 -3
- package/dist/core/components/viewers/map/datasets/src/localDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.d.ts.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.js +2 -1
- package/dist/core/components/viewers/map/datasets/src/minioDatasets.js.map +1 -1
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts +47 -0
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.d.ts.map +1 -0
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.js +114 -0
- package/dist/core/components/viewers/map/datasets/src/publishedTiles.js.map +1 -0
- package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts +49 -0
- package/dist/core/components/viewers/map/datasets/src/wmsTime.d.ts.map +1 -0
- package/dist/core/components/viewers/map/datasets/src/wmsTime.js +100 -0
- package/dist/core/components/viewers/map/datasets/src/wmsTime.js.map +1 -0
- package/dist/core/components/viewers/map/src/Geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/Geocoder.js +9 -9
- package/dist/core/components/viewers/map/src/Geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js +25 -43
- package/dist/core/components/viewers/map/src/MapFeaturePopoverMenu/src/NonDatabaseBuildingPopover.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js +19 -2
- package/dist/core/components/viewers/map/src/MapLayers/src/BimLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts +9 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js +28 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/countryLayerUtils.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js +1 -16
- package/dist/core/components/viewers/map/src/MapLayers/src/CountryLayer/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/FileModelLayer/FileModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js +31 -2
- package/dist/core/components/viewers/map/src/MapLayers/src/FileLayer/utils/CustomModelLayer.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts +21 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.d.ts.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js +111 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/WmsTimeControl.js.map +1 -0
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js +77 -2
- package/dist/core/components/viewers/map/src/MapLayers/src/OpenDataLayer/src/index.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/FileTab/src/ModelsSection.js.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.d.ts.map +1 -1
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js +10 -3
- package/dist/core/components/viewers/map/src/MapSidebar/src/SettingsTab/src/TerrainLevel.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.d.ts +6 -2
- package/dist/core/components/viewers/map/utils/geocoder.d.ts.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoder.js +10 -62
- package/dist/core/components/viewers/map/utils/geocoder.js.map +1 -1
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts +5 -0
- package/dist/core/components/viewers/map/utils/geocoding/adapters.d.ts.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/adapters.js +192 -0
- package/dist/core/components/viewers/map/utils/geocoding/adapters.js.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/config.d.ts +6 -0
- package/dist/core/components/viewers/map/utils/geocoding/config.d.ts.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/config.js +14 -0
- package/dist/core/components/viewers/map/utils/geocoding/config.js.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts +8 -0
- package/dist/core/components/viewers/map/utils/geocoding/index.d.ts.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/index.js +44 -0
- package/dist/core/components/viewers/map/utils/geocoding/index.js.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts +6 -0
- package/dist/core/components/viewers/map/utils/geocoding/osm.d.ts.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/osm.js +39 -0
- package/dist/core/components/viewers/map/utils/geocoding/osm.js.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts +8 -0
- package/dist/core/components/viewers/map/utils/geocoding/pelias.d.ts.map +1 -0
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js +35 -0
- package/dist/core/components/viewers/map/utils/geocoding/pelias.js.map +1 -0
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudToolbar.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js +1 -3
- package/dist/core/components/viewers/pointcloud/PointCloudViewer.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js +2 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/index.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js +8 -2
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/FilesSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.d.ts.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudSidebar/src/FileTab/src/PointCloudSection.js.map +1 -1
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js +9 -9
- package/dist/core/components/viewers/pointcloud/src/tools/PerformanceSettingsTools/NodeSizeSelectionTool.js.map +1 -1
- package/dist/core/hooks/provider.js.map +1 -1
- package/dist/core/plugins/host/provider.d.ts.map +1 -1
- package/dist/core/plugins/host/provider.js.map +1 -1
- package/dist/core/store/AppConfig/context.d.ts.map +1 -1
- package/dist/core/store/AppConfig/context.js.map +1 -1
- package/dist/core/store/BIM/context.d.ts.map +1 -1
- package/dist/core/store/BIM/context.js.map +1 -1
- package/dist/core/store/BIM/reducer.d.ts +0 -1
- package/dist/core/store/BIM/reducer.d.ts.map +1 -1
- package/dist/core/store/BIM/reducer.js +0 -4
- package/dist/core/store/BIM/reducer.js.map +1 -1
- package/dist/core/store/Buildings/context.d.ts.map +1 -1
- package/dist/core/store/Buildings/context.js.map +1 -1
- package/dist/core/store/Content/context.d.ts.map +1 -1
- package/dist/core/store/Content/context.js.map +1 -1
- package/dist/core/store/Datasets/context.d.ts.map +1 -1
- package/dist/core/store/Datasets/context.js +2 -1
- package/dist/core/store/Datasets/context.js.map +1 -1
- package/dist/core/store/Datasets/reducer.d.ts +2 -0
- package/dist/core/store/Datasets/reducer.d.ts.map +1 -1
- package/dist/core/store/Datasets/reducer.js +9 -4
- package/dist/core/store/Datasets/reducer.js.map +1 -1
- package/dist/core/store/Files/context.d.ts.map +1 -1
- package/dist/core/store/Files/context.js.map +1 -1
- package/dist/core/store/Map/context.d.ts.map +1 -1
- package/dist/core/store/Map/context.js.map +1 -1
- package/dist/core/store/Menus/context.d.ts.map +1 -1
- package/dist/core/store/Menus/context.js.map +1 -1
- package/dist/core/store/Permissions/context.d.ts.map +1 -1
- package/dist/core/store/Permissions/context.js.map +1 -1
- package/dist/core/store/PointCloud/context.d.ts.map +1 -1
- package/dist/core/store/PointCloud/context.js.map +1 -1
- package/dist/core/store/Tools/context.d.ts.map +1 -1
- package/dist/core/store/Tools/context.js.map +1 -1
- package/dist/core/types/datasetTypes.d.ts +8 -1
- package/dist/core/types/datasetTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.d.ts +13 -13
- package/dist/core/types/dbTypes.d.ts.map +1 -1
- package/dist/core/types/dbTypes.js +13 -13
- package/dist/core/types/dbTypes.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/utils/imageUtils.js +1 -1
- package/dist/core/utils/imageUtils.js.map +1 -1
- package/package.json +4 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts +0 -3
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.d.ts.map +0 -1
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js +0 -173
- package/dist/core/components/viewers/pointcloud/src/PointCloudManagement/PointCloudViewer-old.js.map +0 -1
|
@@ -1,348 +1,61 @@
|
|
|
1
1
|
import * as THREE from "three";
|
|
2
2
|
import * as OBC from "@thatopen/components";
|
|
3
3
|
import { DxfViewer } from "dxf-viewer";
|
|
4
|
-
import { TransformControls } from "three/examples/jsm/Addons.js";
|
|
5
|
-
import { CurrentWorld } from "../CurrentWorld";
|
|
6
4
|
const _DXFManager = class _DXFManager extends OBC.Component {
|
|
7
5
|
constructor(components) {
|
|
8
6
|
super(components);
|
|
9
7
|
this.enabled = true;
|
|
10
|
-
this.
|
|
11
|
-
this.onDXFTransformed = new OBC.Event();
|
|
12
|
-
this._world = null;
|
|
13
|
-
this._scale = 1;
|
|
14
|
-
this._id = null;
|
|
15
|
-
this._rotation = 0;
|
|
16
|
-
this._origin = new THREE.Vector3();
|
|
17
|
-
this._rotationMatrix = new THREE.Matrix4().makeRotationX(
|
|
18
|
-
THREE.MathUtils.degToRad(-90)
|
|
19
|
-
);
|
|
20
|
-
this._list = {};
|
|
21
|
-
this.container = document.createElement("bim-viewport");
|
|
8
|
+
this._container = document.createElement("bim-viewport");
|
|
22
9
|
components.add(_DXFManager.uuid, this);
|
|
23
|
-
this._dxfViewer = new DxfViewer(this.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
get scale() {
|
|
32
|
-
return this._scale;
|
|
33
|
-
}
|
|
34
|
-
set scale(scale) {
|
|
35
|
-
this._scale = scale;
|
|
36
|
-
}
|
|
37
|
-
get rotation() {
|
|
38
|
-
return this._rotation;
|
|
39
|
-
}
|
|
40
|
-
set rotation(rotation) {
|
|
41
|
-
this._rotation = rotation;
|
|
42
|
-
}
|
|
43
|
-
get origin() {
|
|
44
|
-
return this._origin;
|
|
45
|
-
}
|
|
46
|
-
set origin(value) {
|
|
47
|
-
this._origin = value;
|
|
48
|
-
}
|
|
49
|
-
setupDxfViewer() {
|
|
50
|
-
const scene = this._dxfViewer.GetScene();
|
|
51
|
-
const camera = this._dxfViewer.GetCamera();
|
|
52
|
-
const canvas = this._dxfViewer.GetCanvas();
|
|
53
|
-
const mouse = new OBC.Mouse(canvas);
|
|
54
|
-
const raycaster = new THREE.Raycaster();
|
|
55
|
-
raycaster.params.Line.threshold = 3;
|
|
56
|
-
const geometry = new THREE.SphereGeometry(5);
|
|
57
|
-
const material = new THREE.MeshBasicMaterial({ color: 16711680 });
|
|
58
|
-
const sphere = new THREE.Mesh(geometry, material);
|
|
59
|
-
sphere.visible = false;
|
|
60
|
-
scene.add(sphere);
|
|
61
|
-
document.addEventListener("mousemove", () => {
|
|
62
|
-
if (scene.children.length === 0) return;
|
|
63
|
-
raycaster.setFromCamera(mouse.position, camera);
|
|
64
|
-
const result = raycaster.intersectObjects(scene.children, true);
|
|
65
|
-
if (result.length > 0) {
|
|
66
|
-
const element = result[0];
|
|
67
|
-
sphere.position.copy(element.point);
|
|
68
|
-
if (element instanceof THREE.Line) console.log(element);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
async load(url, id, name, origin) {
|
|
73
|
-
var _a;
|
|
74
|
-
const existingDrawing = this._list[name];
|
|
75
|
-
this._id = id;
|
|
10
|
+
this._dxfViewer = new DxfViewer(this._container, null);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Load and parse a DXF into a THREE.Group centered on its own origin and laid
|
|
14
|
+
* flat on the world ground (XZ) plane. DXF coordinates can carry huge offsets,
|
|
15
|
+
* so recentering keeps the drawing co-located with whatever point it is placed at.
|
|
16
|
+
*/
|
|
17
|
+
async parse(url) {
|
|
76
18
|
await this._dxfViewer.Load({
|
|
77
19
|
url,
|
|
78
20
|
fonts: ["/fonts/Roboto-LightItalic.ttf"],
|
|
79
21
|
progressCbk: null,
|
|
80
22
|
workerFactory: null
|
|
81
23
|
});
|
|
82
|
-
const
|
|
83
|
-
if (existingDrawing) {
|
|
84
|
-
if ((_a = this._world) == null ? void 0 : _a.scene.three.children.includes(existingDrawing.drawing)) {
|
|
85
|
-
this._world.scene.three.remove(existingDrawing.drawing);
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
dxfGroup.name = name;
|
|
89
|
-
this._list[name] = {
|
|
90
|
-
drawing: dxfGroup,
|
|
91
|
-
matrix: new THREE.Matrix4().set(
|
|
92
|
-
1,
|
|
93
|
-
0,
|
|
94
|
-
0,
|
|
95
|
-
0,
|
|
96
|
-
0,
|
|
97
|
-
1,
|
|
98
|
-
0,
|
|
99
|
-
0,
|
|
100
|
-
0,
|
|
101
|
-
0,
|
|
102
|
-
1,
|
|
103
|
-
0,
|
|
104
|
-
0,
|
|
105
|
-
0,
|
|
106
|
-
0,
|
|
107
|
-
1
|
|
108
|
-
)
|
|
109
|
-
};
|
|
110
|
-
}
|
|
24
|
+
const inner = new THREE.Group();
|
|
111
25
|
const dxfScene = this._dxfViewer.GetScene();
|
|
112
|
-
for (const child of dxfScene.children) {
|
|
113
|
-
this.
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
const clone = dxfGroup.clone();
|
|
117
|
-
clone.scale.set(this._scale, this._scale, this._scale);
|
|
118
|
-
if (origin) {
|
|
119
|
-
clone.position.x = origin.x;
|
|
120
|
-
clone.position.z = origin.y;
|
|
121
|
-
clone.position.y = -origin.z;
|
|
122
|
-
}
|
|
123
|
-
clone.rotateZ(THREE.MathUtils.degToRad(this._rotation));
|
|
124
|
-
if (!this._world) return;
|
|
125
|
-
clone.name = this._id;
|
|
126
|
-
this._world.scene.three.add(clone);
|
|
127
|
-
const rotationMatrix = new THREE.Matrix4().makeRotationX(
|
|
128
|
-
THREE.MathUtils.degToRad(-90)
|
|
129
|
-
);
|
|
130
|
-
clone.applyMatrix4(rotationMatrix);
|
|
131
|
-
for (const child of clone.children) {
|
|
132
|
-
this._world.meshes.add(child);
|
|
26
|
+
for (const child of [...dxfScene.children]) {
|
|
27
|
+
this.flattenTo3D(child);
|
|
28
|
+
inner.add(child);
|
|
133
29
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
setupTransformControls(dxfGroup, name) {
|
|
139
|
-
var _a, _b;
|
|
140
|
-
if (!((_a = this._world) == null ? void 0 : _a.camera) || !((_b = this._world) == null ? void 0 : _b.renderer)) return;
|
|
141
|
-
const controls = new TransformControls(
|
|
142
|
-
this._world.camera.three,
|
|
143
|
-
// Use .three to get the actual THREE.Camera
|
|
144
|
-
this._world.renderer.three.domElement
|
|
145
|
-
);
|
|
146
|
-
controls.setMode("translate");
|
|
147
|
-
controls.addEventListener("dragging-changed", (event) => {
|
|
148
|
-
var _a2, _b2;
|
|
149
|
-
if ((_b2 = (_a2 = this._world) == null ? void 0 : _a2.camera) == null ? void 0 : _b2.controls) {
|
|
150
|
-
this._world.camera.controls.enabled = !event.value;
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
controls.addEventListener("change", () => {
|
|
154
|
-
dxfGroup.updateMatrixWorld(true);
|
|
155
|
-
this.onDXFTransformed.trigger();
|
|
156
|
-
});
|
|
157
|
-
const handleKeyDown = (event) => {
|
|
158
|
-
switch (event.key.toLowerCase()) {
|
|
159
|
-
case "g":
|
|
160
|
-
controls.setMode("translate");
|
|
161
|
-
break;
|
|
162
|
-
case "r":
|
|
163
|
-
controls.setMode("rotate");
|
|
164
|
-
break;
|
|
165
|
-
case "s":
|
|
166
|
-
controls.setMode("scale");
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
document.addEventListener("keydown", handleKeyDown);
|
|
171
|
-
controls.attach(dxfGroup);
|
|
172
|
-
const gizmo = controls.getHelper();
|
|
173
|
-
this._world.scene.three.add(controls);
|
|
174
|
-
this._world.scene.three.add(gizmo);
|
|
175
|
-
if (this._list[name]) {
|
|
176
|
-
this._list[name].controls = controls;
|
|
177
|
-
this._list[name].gizmo = gizmo;
|
|
178
|
-
this._list[name].keydownHandler = handleKeyDown;
|
|
30
|
+
const box = new THREE.Box3().setFromObject(inner);
|
|
31
|
+
if (!box.isEmpty()) {
|
|
32
|
+
const center = box.getCenter(new THREE.Vector3());
|
|
33
|
+
for (const child of inner.children) child.position.sub(center);
|
|
179
34
|
}
|
|
35
|
+
inner.rotateX(THREE.MathUtils.degToRad(-90));
|
|
36
|
+
const group = new THREE.Group();
|
|
37
|
+
group.add(inner);
|
|
38
|
+
return group;
|
|
180
39
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const existingDrawing = (_a = this._list[dxfName]) == null ? void 0 : _a.drawing;
|
|
184
|
-
if (!existingDrawing) {
|
|
185
|
-
console.warn(`There is no dxf drawing called ${dxfName}`);
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const matrix = this.getTransformMatrix(
|
|
189
|
-
baseA,
|
|
190
|
-
baseB,
|
|
191
|
-
targetA,
|
|
192
|
-
targetB,
|
|
193
|
-
targetPlaneNormal
|
|
194
|
-
);
|
|
195
|
-
this._list[dxfName].matrix = matrix;
|
|
196
|
-
for (const child of existingDrawing.children) {
|
|
197
|
-
child.geometry.getAttribute("position").applyMatrix4(matrix);
|
|
198
|
-
}
|
|
199
|
-
this.onDXFTransformed.trigger(matrix);
|
|
200
|
-
}
|
|
201
|
-
setPosition(object) {
|
|
40
|
+
/** DxfViewer line geometry is 2D (x, y); promote it to 3D (x, y, 0) for the world scene. */
|
|
41
|
+
flattenTo3D(object) {
|
|
202
42
|
if (!("geometry" in object)) return;
|
|
203
43
|
const geometry = object.geometry;
|
|
204
44
|
const position = geometry.getAttribute("position");
|
|
205
|
-
|
|
45
|
+
if (!position || position.itemSize === 3) return;
|
|
46
|
+
const flattened = [];
|
|
206
47
|
for (let i = 0; i < position.array.length; i += position.itemSize) {
|
|
207
|
-
|
|
48
|
+
flattened.push(position.array[i], position.array[i + 1], 0);
|
|
208
49
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
getTransformMatrix(baseA, baseB, targetA, targetB, targetPlaneNormal) {
|
|
213
|
-
const matrix = new THREE.Matrix4();
|
|
214
|
-
baseB.sub(baseA);
|
|
215
|
-
targetB.sub(targetA);
|
|
216
|
-
const scaleFactor = targetB.length() / baseB.length();
|
|
217
|
-
const scaleVector = new THREE.Vector3(1, 1, 1).multiplyScalar(scaleFactor);
|
|
218
|
-
const angle = targetB.angleTo(baseB);
|
|
219
|
-
const axis = baseB.clone().cross(targetB).normalize();
|
|
220
|
-
const rotationMatrix = new THREE.Matrix4().makeRotationAxis(axis, angle);
|
|
221
|
-
const upDirection = new THREE.Vector3(0, 1, 0);
|
|
222
|
-
const upAngle = upDirection.angleTo(targetPlaneNormal);
|
|
223
|
-
const upAxis = upDirection.clone().cross(targetPlaneNormal).normalize();
|
|
224
|
-
const upRotationMatrix = new THREE.Matrix4().makeRotationAxis(
|
|
225
|
-
upAxis,
|
|
226
|
-
upAngle
|
|
50
|
+
geometry.setAttribute(
|
|
51
|
+
"position",
|
|
52
|
+
new THREE.BufferAttribute(new Float32Array(flattened), 3)
|
|
227
53
|
);
|
|
228
|
-
const finalRotation = upRotationMatrix.multiply(rotationMatrix);
|
|
229
|
-
matrix.multiply(finalRotation);
|
|
230
|
-
matrix.scale(scaleVector);
|
|
231
|
-
const finalPosition = baseA.multiplyScalar(scaleFactor * -1).applyMatrix4(finalRotation.clone().setPosition(targetA));
|
|
232
|
-
matrix.setPosition(
|
|
233
|
-
finalPosition.add(
|
|
234
|
-
new THREE.Vector3().addScalar(this._scale).multiply(targetPlaneNormal)
|
|
235
|
-
)
|
|
236
|
-
);
|
|
237
|
-
return matrix;
|
|
238
54
|
}
|
|
239
55
|
dispose() {
|
|
240
56
|
var _a, _b;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
this._world.scene.three.remove(controls);
|
|
244
|
-
const gizmo = controls.gizmo;
|
|
245
|
-
if (gizmo) {
|
|
246
|
-
this._world.scene.three.remove(gizmo);
|
|
247
|
-
}
|
|
248
|
-
controls.dispose();
|
|
249
|
-
}
|
|
250
|
-
if (drawing && ((_b = this._world) == null ? void 0 : _b.scene.three)) {
|
|
251
|
-
this._world.scene.three.remove(drawing);
|
|
252
|
-
}
|
|
253
|
-
const keydownHandler = this._list.keydownHandler;
|
|
254
|
-
if (keydownHandler) {
|
|
255
|
-
document.removeEventListener("keydown", keydownHandler);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
this._list = {};
|
|
259
|
-
}
|
|
260
|
-
removeTransformControls(name) {
|
|
261
|
-
var _a;
|
|
262
|
-
const dxfData = this._list[name];
|
|
263
|
-
if ((dxfData == null ? void 0 : dxfData.controls) && ((_a = this._world) == null ? void 0 : _a.scene.three)) {
|
|
264
|
-
this._world.scene.three.remove(dxfData.controls);
|
|
265
|
-
const gizmo = dxfData.gizmo;
|
|
266
|
-
if (gizmo) {
|
|
267
|
-
this._world.scene.three.remove(gizmo);
|
|
268
|
-
}
|
|
269
|
-
dxfData.controls.dispose();
|
|
270
|
-
const keydownHandler = dxfData.keydownHandler;
|
|
271
|
-
if (keydownHandler) {
|
|
272
|
-
document.removeEventListener("keydown", keydownHandler);
|
|
273
|
-
}
|
|
274
|
-
delete dxfData.controls;
|
|
275
|
-
delete dxfData.gizmo;
|
|
276
|
-
delete dxfData.keydownHandler;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
enableEditMode(name) {
|
|
280
|
-
var _a, _b;
|
|
281
|
-
const dxfData = this._list[name];
|
|
282
|
-
if (!(dxfData == null ? void 0 : dxfData.drawing) || !((_a = this._world) == null ? void 0 : _a.camera) || !((_b = this._world) == null ? void 0 : _b.renderer)) {
|
|
283
|
-
console.warn(`Cannot enable edit mode: DXF "${name}" not found or world not available`);
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
if (dxfData.controls) {
|
|
287
|
-
console.log(`Edit mode already enabled for DXF "${name}"`);
|
|
288
|
-
return true;
|
|
289
|
-
}
|
|
290
|
-
console.log(`Enabling edit mode for DXF "${name}"`);
|
|
291
|
-
const controls = new TransformControls(
|
|
292
|
-
this._world.camera.three,
|
|
293
|
-
this._world.renderer.three.domElement
|
|
294
|
-
);
|
|
295
|
-
controls.setMode("translate");
|
|
296
|
-
controls.addEventListener("dragging-changed", (event) => {
|
|
297
|
-
var _a2, _b2;
|
|
298
|
-
if ((_b2 = (_a2 = this._world) == null ? void 0 : _a2.camera) == null ? void 0 : _b2.controls) {
|
|
299
|
-
this._world.camera.controls.enabled = !event.value;
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
controls.addEventListener("change", () => {
|
|
303
|
-
dxfData.drawing.updateMatrixWorld(true);
|
|
304
|
-
this.onDXFTransformed.trigger();
|
|
305
|
-
});
|
|
306
|
-
const handleKeyDown = (event) => {
|
|
307
|
-
switch (event.key.toLowerCase()) {
|
|
308
|
-
case "g":
|
|
309
|
-
controls.setMode("translate");
|
|
310
|
-
break;
|
|
311
|
-
case "r":
|
|
312
|
-
controls.setMode("rotate");
|
|
313
|
-
break;
|
|
314
|
-
case "s":
|
|
315
|
-
controls.setMode("scale");
|
|
316
|
-
break;
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
document.addEventListener("keydown", handleKeyDown);
|
|
320
|
-
controls.attach(dxfData.drawing);
|
|
321
|
-
const gizmo = controls.getHelper();
|
|
322
|
-
this._world.scene.three.add(controls);
|
|
323
|
-
this._world.scene.three.add(gizmo);
|
|
324
|
-
dxfData.controls = controls;
|
|
325
|
-
dxfData.gizmo = gizmo;
|
|
326
|
-
dxfData.keydownHandler = handleKeyDown;
|
|
327
|
-
console.log(`Edit mode enabled for DXF "${name}"`);
|
|
328
|
-
return true;
|
|
329
|
-
}
|
|
330
|
-
isInEditMode(name) {
|
|
331
|
-
const dxfData = this._list[name];
|
|
332
|
-
return Boolean(dxfData == null ? void 0 : dxfData.controls);
|
|
333
|
-
}
|
|
334
|
-
getDxfList() {
|
|
335
|
-
return Object.keys(this._list);
|
|
336
|
-
}
|
|
337
|
-
getDxfInfo(name) {
|
|
338
|
-
const dxfData = this._list[name];
|
|
339
|
-
if (!dxfData) return null;
|
|
340
|
-
return {
|
|
341
|
-
name,
|
|
342
|
-
hasControls: Boolean(dxfData.controls),
|
|
343
|
-
drawing: dxfData.drawing,
|
|
344
|
-
matrix: dxfData.matrix
|
|
345
|
-
};
|
|
57
|
+
;
|
|
58
|
+
(_b = (_a = this._dxfViewer).Destroy) == null ? void 0 : _b.call(_a);
|
|
346
59
|
}
|
|
347
60
|
};
|
|
348
61
|
_DXFManager.uuid = "2cf1b746-3b3d-4988-960b-ea640e0e8925";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DxfViewer } from 'dxf-viewer'\r\nimport { TransformControls } from 'three/examples/jsm/Addons.js'\r\nimport { CurrentWorld } from '../CurrentWorld'\r\n\r\nexport interface Position {\r\n x: number\r\n y: number\r\n z: number\r\n}\r\n\r\nexport class DXFManager extends OBC.Component {\r\n static uuid = '2cf1b746-3b3d-4988-960b-ea640e0e8925' as const\r\n\r\n enabled = true\r\n\r\n onDXFImported = new OBC.Event<THREE.Group>()\r\n\r\n onDXFTransformed = new OBC.Event()\r\n\r\n private _world: OBC.World | null = null\r\n\r\n private _scale: number = 1\r\n\r\n private _id: string | null = null\r\n\r\n get scale() {\r\n return this._scale\r\n }\r\n\r\n set scale(scale: number) {\r\n this._scale = scale\r\n }\r\n\r\n private _rotation: number = 0\r\n\r\n get rotation() {\r\n return this._rotation\r\n }\r\n\r\n set rotation(rotation: number) {\r\n this._rotation = rotation\r\n }\r\n\r\n private _origin: THREE.Vector3 = new THREE.Vector3()\r\n\r\n get origin() {\r\n return this._origin\r\n }\r\n\r\n set origin(value: THREE.Vector3) {\r\n this._origin = value\r\n }\r\n\r\n private _dxfViewer: DxfViewer\r\n\r\n private _rotationMatrix = new THREE.Matrix4().makeRotationX(\r\n THREE.MathUtils.degToRad(-90),\r\n )\r\n\r\n private _list: {\r\n [id: string]: {\r\n drawing: THREE.Group\r\n matrix: THREE.Matrix4\r\n controls?: TransformControls\r\n }\r\n } = {}\r\n\r\n readonly container = document.createElement('bim-viewport')\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(DXFManager.uuid, this)\r\n this._dxfViewer = new DxfViewer(this.container, null)\r\n this.container.addEventListener('resize', () => {\r\n const { width, height } = this.container.getBoundingClientRect()\r\n this._dxfViewer.SetSize(width, height)\r\n })\r\n\r\n this.setupDxfViewer()\r\n this._world = components.get(CurrentWorld).world\r\n }\r\n\r\n private setupDxfViewer() {\r\n const scene = this._dxfViewer.GetScene()\r\n const camera = this._dxfViewer.GetCamera()\r\n const canvas = this._dxfViewer.GetCanvas()\r\n const mouse = new OBC.Mouse(canvas)\r\n const raycaster = new THREE.Raycaster()\r\n raycaster.params.Line.threshold = 3\r\n\r\n const geometry = new THREE.SphereGeometry(5)\r\n const material = new THREE.MeshBasicMaterial({ color: 0xFF_00_00 })\r\n\r\n const sphere = new THREE.Mesh(geometry, material)\r\n sphere.visible = false\r\n scene.add(sphere)\r\n\r\n document.addEventListener('mousemove', () => {\r\n if (scene.children.length === 0) return\r\n raycaster.setFromCamera(mouse.position, camera)\r\n const result = raycaster.intersectObjects(scene.children, true)\r\n if (result.length > 0) {\r\n const element = result[0]\r\n sphere.position.copy(element.point)\r\n if (element instanceof THREE.Line) console.log(element)\r\n }\r\n })\r\n }\r\n\r\n async load(url: string, id: string, name: string, origin?: Position) {\r\n const existingDrawing = this._list[name]\r\n this._id = id\r\n\r\n await this._dxfViewer.Load({\r\n url,\r\n fonts: ['/fonts/Roboto-LightItalic.ttf'],\r\n progressCbk: null,\r\n workerFactory: null,\r\n })\r\n\r\n const dxfGroup = existingDrawing\r\n ? existingDrawing.drawing\r\n : new THREE.Group()\r\n\r\n if (existingDrawing) {\r\n // Remove existing from scene if present\r\n if (this._world?.scene.three.children.includes(existingDrawing.drawing)) {\r\n this._world.scene.three.remove(existingDrawing.drawing)\r\n }\r\n }\r\n else {\r\n dxfGroup.name = name\r\n this._list[name] = {\r\n drawing: dxfGroup,\r\n matrix: new THREE.Matrix4().set(\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n 0, 0, 0, 1,\r\n ),\r\n }\r\n }\r\n\r\n const dxfScene = this._dxfViewer.GetScene()\r\n for (const child of dxfScene.children) {\r\n this.setPosition(child)\r\n dxfGroup.add(child)\r\n }\r\n\r\n // Apply transformations\r\n const clone = dxfGroup.clone()\r\n clone.scale.set(this._scale, this._scale, this._scale)\r\n\r\n if (origin) {\r\n clone.position.x = origin.x\r\n clone.position.z = origin.y\r\n clone.position.y = -origin.z\r\n }\r\n\r\n clone.rotateZ(THREE.MathUtils.degToRad(this._rotation))\r\n\r\n if (!this._world) return\r\n\r\n clone.name = this._id\r\n\r\n // Add to world scene\r\n this._world.scene.three.add(clone)\r\n\r\n const rotationMatrix = new THREE.Matrix4().makeRotationX(\r\n THREE.MathUtils.degToRad(-90),\r\n )\r\n clone.applyMatrix4(rotationMatrix)\r\n\r\n for (const child of clone.children) {\r\n // @ts-ignore\r\n this._world.meshes.add(child)\r\n }\r\n\r\n // Setup transform controls (gizmo)\r\n this.setupTransformControls(clone, name)\r\n\r\n this.onDXFImported.trigger(clone)\r\n\r\n return clone\r\n }\r\n\r\n private setupTransformControls(dxfGroup: THREE.Group, name: string) {\r\n if (!this._world?.camera || !this._world?.renderer) return\r\n\r\n const controls = new TransformControls(\r\n this._world.camera.three, // Use .three to get the actual THREE.Camera\r\n this._world.renderer.three.domElement,\r\n )\r\n\r\n // Set the initial mode to translate (move)\r\n controls.setMode('translate') // This allows X, Y, Z movement\r\n\r\n // You can also switch modes programmatically:\r\n // controls.setMode('rotate'); // For rotation\r\n // controls.setMode('scale'); // For scaling\r\n\r\n controls.addEventListener('dragging-changed', (event: any) => {\r\n if (this._world?.camera?.controls) {\r\n this._world.camera.controls.enabled = !event.value\r\n }\r\n })\r\n\r\n controls.addEventListener('change', () => {\r\n dxfGroup.updateMatrixWorld(true)\r\n this.onDXFTransformed.trigger()\r\n })\r\n\r\n // Add keyboard shortcuts for switching modes\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n switch (event.key.toLowerCase()) {\r\n case 'g': // G for grab/translate\r\n controls.setMode('translate')\r\n break\r\n case 'r': // R for rotate\r\n controls.setMode('rotate')\r\n break\r\n case 's': // S for scale\r\n controls.setMode('scale')\r\n break\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n\r\n controls.attach(dxfGroup)\r\n\r\n // Get the gizmo helper and add it to the scene\r\n const gizmo = controls.getHelper()\r\n this._world.scene.three.add(controls)\r\n this._world.scene.three.add(gizmo)\r\n\r\n // Store controls reference\r\n if (this._list[name]) {\r\n this._list[name].controls = controls;\r\n // Store the gizmo helper reference for cleanup\r\n (this._list[name] as any).gizmo = gizmo;\r\n // Store the cleanup function for the keyboard listener\r\n (this._list[name] as any).keydownHandler = handleKeyDown\r\n }\r\n }\r\n\r\n transform(\r\n dxfName: string,\r\n baseA: THREE.Vector3,\r\n baseB: THREE.Vector3,\r\n targetA: THREE.Vector3,\r\n targetB: THREE.Vector3,\r\n targetPlaneNormal: THREE.Vector3,\r\n ) {\r\n const existingDrawing = this._list[dxfName]?.drawing\r\n if (!existingDrawing) {\r\n console.warn(`There is no dxf drawing called ${dxfName}`)\r\n return\r\n }\r\n const matrix = this.getTransformMatrix(\r\n baseA,\r\n baseB,\r\n targetA,\r\n targetB,\r\n targetPlaneNormal,\r\n )\r\n this._list[dxfName].matrix = matrix\r\n for (const child of existingDrawing.children) {\r\n // @ts-ignore\r\n child.geometry.getAttribute('position').applyMatrix4(matrix)\r\n }\r\n this.onDXFTransformed.trigger(matrix)\r\n }\r\n\r\n private setPosition(object: THREE.Object3D) {\r\n if (!('geometry' in object)) return\r\n const geometry = object.geometry as THREE.BufferGeometry\r\n const position = geometry.getAttribute('position')\r\n const array: number[] = []\r\n for (let i = 0; i < position.array.length; i += position.itemSize) {\r\n array.push(position.array[i], position.array[i + 1], 0)\r\n }\r\n const newPosition = new THREE.BufferAttribute(new Float32Array(array), 3)\r\n geometry.setAttribute('position', newPosition)\r\n }\r\n\r\n private getTransformMatrix(\r\n baseA: THREE.Vector3,\r\n baseB: THREE.Vector3,\r\n targetA: THREE.Vector3,\r\n targetB: THREE.Vector3,\r\n targetPlaneNormal: THREE.Vector3,\r\n ) {\r\n const matrix = new THREE.Matrix4()\r\n\r\n baseB.sub(baseA)\r\n targetB.sub(targetA)\r\n\r\n // Scale\r\n const scaleFactor = targetB.length() / baseB.length()\r\n const scaleVector = new THREE.Vector3(1, 1, 1).multiplyScalar(scaleFactor)\r\n\r\n // Rotation\r\n const angle = targetB.angleTo(baseB)\r\n const axis = baseB.clone().cross(targetB).normalize()\r\n const rotationMatrix = new THREE.Matrix4().makeRotationAxis(axis, angle)\r\n\r\n // Additional rotation to align object's up direction with target plane normal\r\n const upDirection = new THREE.Vector3(0, 1, 0)\r\n const upAngle = upDirection.angleTo(targetPlaneNormal)\r\n const upAxis = upDirection.clone().cross(targetPlaneNormal).normalize()\r\n const upRotationMatrix = new THREE.Matrix4().makeRotationAxis(\r\n upAxis,\r\n upAngle,\r\n )\r\n\r\n const finalRotation = upRotationMatrix.multiply(rotationMatrix)\r\n\r\n // Transform matrix\r\n matrix.multiply(finalRotation)\r\n matrix.scale(scaleVector)\r\n const finalPosition = baseA\r\n .multiplyScalar(scaleFactor * -1)\r\n .applyMatrix4(finalRotation.clone().setPosition(targetA))\r\n matrix.setPosition(\r\n finalPosition.add(\r\n new THREE.Vector3().addScalar(this._scale).multiply(targetPlaneNormal),\r\n ),\r\n )\r\n\r\n return matrix\r\n }\r\n\r\n dispose() {\r\n // Clean up transform controls and keyboard listeners\r\n for (const { controls, drawing } of Object.values(this._list)) {\r\n if (controls && this._world?.scene.three) {\r\n this._world.scene.three.remove(controls)\r\n\r\n // Remove gizmo helper\r\n const gizmo = (controls as any).gizmo\r\n if (gizmo) {\r\n this._world.scene.three.remove(gizmo)\r\n }\r\n\r\n controls.dispose()\r\n }\r\n if (drawing && this._world?.scene.three) {\r\n this._world.scene.three.remove(drawing)\r\n }\r\n // Clean up keyboard event listener\r\n const keydownHandler = (this._list as any).keydownHandler\r\n if (keydownHandler) {\r\n document.removeEventListener('keydown', keydownHandler)\r\n }\r\n }\r\n this._list = {}\r\n }\r\n\r\n removeTransformControls(name: string) {\r\n const dxfData = this._list[name]\r\n if (dxfData?.controls && this._world?.scene.three) {\r\n // Remove the controls from the scene\r\n this._world.scene.three.remove(dxfData.controls)\r\n\r\n // Remove the gizmo helper from the scene\r\n const gizmo = (dxfData as any).gizmo\r\n if (gizmo) {\r\n this._world.scene.three.remove(gizmo)\r\n }\r\n\r\n // Dispose of the controls\r\n dxfData.controls.dispose()\r\n\r\n // Remove keyboard event listener\r\n const keydownHandler = (dxfData as any).keydownHandler\r\n if (keydownHandler) {\r\n document.removeEventListener('keydown', keydownHandler)\r\n }\r\n\r\n // Clear the controls and gizmo references\r\n delete dxfData.controls\r\n delete (dxfData as any).gizmo\r\n delete (dxfData as any).keydownHandler\r\n }\r\n }\r\n\r\n enableEditMode(name: string) {\r\n const dxfData = this._list[name]\r\n if (!dxfData?.drawing || !this._world?.camera || !this._world?.renderer) {\r\n console.warn(`Cannot enable edit mode: DXF \"${name}\" not found or world not available`)\r\n return false\r\n }\r\n\r\n // If controls already exist, don't recreate them\r\n if (dxfData.controls) {\r\n console.log(`Edit mode already enabled for DXF \"${name}\"`)\r\n return true\r\n }\r\n\r\n console.log(`Enabling edit mode for DXF \"${name}\"`)\r\n\r\n // Create new transform controls\r\n const controls = new TransformControls(\r\n this._world.camera.three,\r\n this._world.renderer.three.domElement,\r\n )\r\n\r\n // Set the initial mode to translate\r\n controls.setMode('translate')\r\n\r\n controls.addEventListener('dragging-changed', (event: any) => {\r\n if (this._world?.camera?.controls) {\r\n this._world.camera.controls.enabled = !event.value\r\n }\r\n })\r\n\r\n controls.addEventListener('change', () => {\r\n dxfData.drawing.updateMatrixWorld(true)\r\n this.onDXFTransformed.trigger()\r\n })\r\n\r\n // Add keyboard shortcuts for switching modes\r\n const handleKeyDown = (event: KeyboardEvent) => {\r\n switch (event.key.toLowerCase()) {\r\n case 'g': // G for grab/translate\r\n controls.setMode('translate')\r\n break\r\n case 'r': // R for rotate\r\n controls.setMode('rotate')\r\n break\r\n case 's': // S for scale\r\n controls.setMode('scale')\r\n break\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n\r\n // Attach controls to the DXF group\r\n controls.attach(dxfData.drawing)\r\n\r\n // Get the gizmo helper and add both to the scene\r\n const gizmo = controls.getHelper()\r\n this._world.scene.three.add(controls)\r\n this._world.scene.three.add(gizmo)\r\n\r\n // Store references for cleanup\r\n dxfData.controls = controls;\r\n (dxfData as any).gizmo = gizmo;\r\n (dxfData as any).keydownHandler = handleKeyDown\r\n\r\n console.log(`Edit mode enabled for DXF \"${name}\"`)\r\n return true\r\n }\r\n\r\n isInEditMode(name: string): boolean {\r\n const dxfData = this._list[name]\r\n return Boolean(dxfData?.controls)\r\n }\r\n\r\n getDxfList(): string[] {\r\n return Object.keys(this._list)\r\n }\r\n\r\n getDxfInfo(name: string) {\r\n const dxfData = this._list[name]\r\n if (!dxfData) return null\r\n\r\n return {\r\n name,\r\n hasControls: Boolean(dxfData.controls),\r\n drawing: dxfData.drawing,\r\n matrix: dxfData.matrix,\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/core/components/viewers/bim/src/DXFLoader/index.ts"],"sourcesContent":["import * as THREE from 'three'\r\nimport * as OBC from '@thatopen/components'\r\nimport { DxfViewer } from 'dxf-viewer'\r\n\r\n/**\r\n * Parses DXF files into THREE.Groups for the BIM world. This is a pure parser:\r\n * it owns no scene placement, transforms or gizmos — the caller (AddDxf) decides\r\n * where the drawing goes. A single off-screen DxfViewer is reused as the parser.\r\n */\r\nexport class DXFManager extends OBC.Component {\r\n static uuid = '2cf1b746-3b3d-4988-960b-ea640e0e8925' as const\r\n\r\n enabled = true\r\n\r\n private readonly _container = document.createElement('bim-viewport')\r\n private _dxfViewer: DxfViewer\r\n\r\n constructor(components: OBC.Components) {\r\n super(components)\r\n components.add(DXFManager.uuid, this)\r\n this._dxfViewer = new DxfViewer(this._container, null)\r\n }\r\n\r\n /**\r\n * Load and parse a DXF into a THREE.Group centered on its own origin and laid\r\n * flat on the world ground (XZ) plane. DXF coordinates can carry huge offsets,\r\n * so recentering keeps the drawing co-located with whatever point it is placed at.\r\n */\r\n async parse(url: string): Promise<THREE.Group> {\r\n await this._dxfViewer.Load({\r\n url,\r\n fonts: ['/fonts/Roboto-LightItalic.ttf'],\r\n progressCbk: null,\r\n workerFactory: null,\r\n })\r\n\r\n const inner = new THREE.Group()\r\n const dxfScene = this._dxfViewer.GetScene()\r\n for (const child of [...dxfScene.children]) {\r\n this.flattenTo3D(child)\r\n inner.add(child)\r\n }\r\n\r\n // Recenter geometry on the group origin so placement lands the drawing's\r\n // center at the chosen point regardless of the DXF's authored coordinates.\r\n const box = new THREE.Box3().setFromObject(inner)\r\n if (!box.isEmpty()) {\r\n const center = box.getCenter(new THREE.Vector3())\r\n for (const child of inner.children) child.position.sub(center)\r\n }\r\n\r\n // DXF is authored in the XY plane; tip it onto the world XZ ground plane (Y up).\r\n inner.rotateX(THREE.MathUtils.degToRad(-90))\r\n\r\n const group = new THREE.Group()\r\n group.add(inner)\r\n return group\r\n }\r\n\r\n /** DxfViewer line geometry is 2D (x, y); promote it to 3D (x, y, 0) for the world scene. */\r\n private flattenTo3D(object: THREE.Object3D) {\r\n if (!('geometry' in object)) return\r\n const geometry = object.geometry as THREE.BufferGeometry\r\n const position = geometry.getAttribute('position')\r\n if (!position || position.itemSize === 3) return\r\n\r\n const flattened: number[] = []\r\n for (let i = 0; i < position.array.length; i += position.itemSize) {\r\n flattened.push(position.array[i], position.array[i + 1], 0)\r\n }\r\n geometry.setAttribute(\r\n 'position',\r\n new THREE.BufferAttribute(new Float32Array(flattened), 3),\r\n )\r\n }\r\n\r\n dispose() {\r\n ;(this._dxfViewer as unknown as { Destroy?: () => void }).Destroy?.()\r\n }\r\n}\r\n"],"mappings":"AAAA,YAAY,WAAW;AACvB,YAAY,SAAS;AACrB,SAAS,iBAAiB;AAOnB,MAAM,cAAN,MAAM,oBAAmB,IAAI,UAAU;AAAA,EAQ5C,YAAY,YAA4B;AACtC,UAAM,UAAU;AANlB,mBAAU;AAEV,SAAiB,aAAa,SAAS,cAAc,cAAc;AAKjE,eAAW,IAAI,YAAW,MAAM,IAAI;AACpC,SAAK,aAAa,IAAI,UAAU,KAAK,YAAY,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAM,KAAmC;AAC7C,UAAM,KAAK,WAAW,KAAK;AAAA,MACzB;AAAA,MACA,OAAO,CAAC,+BAA+B;AAAA,MACvC,aAAa;AAAA,MACb,eAAe;AAAA,IACjB,CAAC;AAED,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,WAAW,KAAK,WAAW,SAAS;AAC1C,eAAW,SAAS,CAAC,GAAG,SAAS,QAAQ,GAAG;AAC1C,WAAK,YAAY,KAAK;AACtB,YAAM,IAAI,KAAK;AAAA,IACjB;AAIA,UAAM,MAAM,IAAI,MAAM,KAAK,EAAE,cAAc,KAAK;AAChD,QAAI,CAAC,IAAI,QAAQ,GAAG;AAClB,YAAM,SAAS,IAAI,UAAU,IAAI,MAAM,QAAQ,CAAC;AAChD,iBAAW,SAAS,MAAM,SAAU,OAAM,SAAS,IAAI,MAAM;AAAA,IAC/D;AAGA,UAAM,QAAQ,MAAM,UAAU,SAAS,GAAG,CAAC;AAE3C,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAM,IAAI,KAAK;AACf,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,YAAY,QAAwB;AAC1C,QAAI,EAAE,cAAc,QAAS;AAC7B,UAAM,WAAW,OAAO;AACxB,UAAM,WAAW,SAAS,aAAa,UAAU;AACjD,QAAI,CAAC,YAAY,SAAS,aAAa,EAAG;AAE1C,UAAM,YAAsB,CAAC;AAC7B,aAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK,SAAS,UAAU;AACjE,gBAAU,KAAK,SAAS,MAAM,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC;AAAA,IAC5D;AACA,aAAS;AAAA,MACP;AAAA,MACA,IAAI,MAAM,gBAAgB,IAAI,aAAa,SAAS,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,UAAU;AA5EZ;AA6EI;AAAC,KAAC,gBAAK,YAAmD,YAAxD;AAAA,EACJ;AACF;AAtEa,YACJ,OAAO;AADT,IAAM,aAAN;","names":[]}
|
|
@@ -27,8 +27,26 @@ export declare class FloorplanTool extends OBC.Component {
|
|
|
27
27
|
/** True-north rotation in degrees (clockwise from default screen-up).
|
|
28
28
|
* Persists across storey switches but resets to 0 on tool dispose. */
|
|
29
29
|
private _northAngle;
|
|
30
|
+
/** True while the user is drawing the two-point north line. */
|
|
30
31
|
private _pickingNorth;
|
|
31
32
|
private _pickHandler;
|
|
33
|
+
private _moveHandler;
|
|
34
|
+
private _keyHandler;
|
|
35
|
+
/** First clicked point of the north line, in drawing-local space (Y=0).
|
|
36
|
+
* Null until the user places the first point. */
|
|
37
|
+
private _drawStart;
|
|
38
|
+
/** Cached snap targets — projected-geometry vertices flattened as
|
|
39
|
+
* [x0,z0, x1,z1, …] in drawing-local space. Rebuilt each time draw mode
|
|
40
|
+
* starts so it reflects the active storey's lines. */
|
|
41
|
+
private _snapVerts;
|
|
42
|
+
/** Rubber-band preview line + cursor snap marker, parented to the active
|
|
43
|
+
* drawing so they inherit its world transform. */
|
|
44
|
+
private _previewLine;
|
|
45
|
+
private _snapMarker;
|
|
46
|
+
/** Canvas cursor before draw mode swapped in the crosshair — typically the
|
|
47
|
+
* floorplan-mode "grab" hand. Restored (not cleared) on exit so panning
|
|
48
|
+
* keeps the hand; only leaving floorplan mode reverts to the default. */
|
|
49
|
+
private _savedPickCursor;
|
|
32
50
|
private projector;
|
|
33
51
|
private renderer;
|
|
34
52
|
private camera;
|
|
@@ -74,16 +92,57 @@ export declare class FloorplanTool extends OBC.Component {
|
|
|
74
92
|
* camera azimuth immediately if a floorplan is currently active so the
|
|
75
93
|
* view re-orients. */
|
|
76
94
|
setNorthAngle(degrees: number): void;
|
|
77
|
-
/** Enter
|
|
78
|
-
*
|
|
79
|
-
*
|
|
95
|
+
/** Enter two-point draw mode. The user clicks two points on the active
|
|
96
|
+
* floorplan (each snapped to the nearest projected-geometry vertex); the
|
|
97
|
+
* bearing of the segment between them becomes the new true-north angle.
|
|
98
|
+
* A rubber-band preview + snap marker track the cursor; Esc cancels.
|
|
99
|
+
* No-op if no floorplan is active. */
|
|
80
100
|
startPickNorth(): void;
|
|
81
|
-
/** Exit
|
|
101
|
+
/** Exit draw mode without applying any rotation. Tears down the canvas
|
|
102
|
+
* listeners and removes the rubber-band preview. */
|
|
82
103
|
cancelPickNorth(): void;
|
|
83
|
-
/** Click handler
|
|
84
|
-
*
|
|
85
|
-
* (
|
|
104
|
+
/** Click handler for draw mode. First click places the start point; the
|
|
105
|
+
* second rotates the view so the drawn segment becomes parallel to the
|
|
106
|
+
* screen X-axis (horizontal). Both points lie on the drawing's horizontal
|
|
107
|
+
* plane (Y=0), so only the in-plane direction matters. */
|
|
86
108
|
private _onPickClick;
|
|
109
|
+
/** Camera azimuth (degrees) that rotates the top-down view so the world
|
|
110
|
+
* segment a→b lands parallel to the screen X-axis (horizontal).
|
|
111
|
+
*
|
|
112
|
+
* Derivation: with the standard Y-up spherical convention camera-controls
|
|
113
|
+
* uses, the camera's screen-right world direction has angle ρ = −θ + C
|
|
114
|
+
* (θ = azimuth). We measure ρ₀ and θ₀ from the live camera so C cancels —
|
|
115
|
+
* making the result independent of the drawing's orientation and the
|
|
116
|
+
* controls' up-space. We then solve ρ(θ) = λ (the segment's world angle),
|
|
117
|
+
* giving θ = ρ₀ + θ₀ − λ. Returns null if the controls are unavailable. */
|
|
118
|
+
private _azimuthToAlignLineToX;
|
|
119
|
+
/** Mousemove handler for draw mode — keeps the snap marker (and, after the
|
|
120
|
+
* first click, the rubber-band line) glued to the cursor's snapped point. */
|
|
121
|
+
private _onPickMove;
|
|
122
|
+
/** Convert a canvas mouse event into a point on the drawing plane, in
|
|
123
|
+
* drawing-local space (XZ plane, Y=0). Casts a ray from the active camera,
|
|
124
|
+
* transforms it into the drawing's local frame, and intersects Y=0. */
|
|
125
|
+
private _eventToLocalPoint;
|
|
126
|
+
/** Snap a drawing-local point to the nearest projected-geometry vertex
|
|
127
|
+
* within the snap radius; returns the point unchanged if none is close. */
|
|
128
|
+
private _snap;
|
|
129
|
+
/** Snap radius in drawing-local units (= world units; the drawing is
|
|
130
|
+
* unscaled), derived from a fixed ~12 px tolerance at the current ortho
|
|
131
|
+
* zoom so it feels consistent as the user zooms. */
|
|
132
|
+
private _snapRadiusLocal;
|
|
133
|
+
/** Flatten every visible projected line vertex into drawing-local [x,z]
|
|
134
|
+
* pairs for endpoint snapping. Each vertex is transformed through its
|
|
135
|
+
* owning object's world matrix into the drawing's local frame, so it
|
|
136
|
+
* works regardless of how layers nest the `LineSegments`. */
|
|
137
|
+
private _collectSnapVertices;
|
|
138
|
+
/** Update (creating on first use) the cursor snap marker and, once the
|
|
139
|
+
* first point is placed, the rubber-band line from start → cursor. Both
|
|
140
|
+
* live in drawing-local space, Y=0. */
|
|
141
|
+
private _updatePreview;
|
|
142
|
+
/** Remove + dispose the preview line and snap marker. Uses each object's
|
|
143
|
+
* own parent so it stays correct even when called from deactivate(),
|
|
144
|
+
* where `_activeId` is already null. */
|
|
145
|
+
private _clearPreview;
|
|
87
146
|
/** Push `_northAngle` into the camera-controls azimuth so the view
|
|
88
147
|
* rotates around the active floor's centre. Called on every activate
|
|
89
148
|
* and whenever the angle changes while a floorplan is active. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/FloorplanTool/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAA;AAW3C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,EAAqB,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAyB,cAAc,EAAuB,MAAM,aAAa,CAAA;AAMxF,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,gBAAgB,GAChB,WAAW,GACX,SAAS,GACT,MAAM,CAAA;AAEV,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;AAc3E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,GAAG,SAAS,GACvC,MAAM,CAER;AAED,qBAAa,aAAc,SAAQ,GAAG,CAAC,SAAS;IAC9C,MAAM,CAAC,IAAI,yCAAsB;IAEjC,OAAO,UAAQ;IAEf,QAAQ,CAAC,iBAAiB,8BAAoC;IAC9D,QAAQ,CAAC,sBAAsB,4BAAyC;IACxE,QAAQ,CAAC,wBAAwB,mCAAyC;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,eAAe,4BAAkC;IAC1D,0EAA0E;IAC1E,QAAQ,CAAC,mBAAmB,oBAA0B;IACtD,gDAAgD;IAChD,QAAQ,CAAC,qBAAqB,qBAA2B;IAEzD,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAsB;IACvC;;qEAEiE;IACjE,OAAO,CAAC,YAAY,CAAI;IACxB;2EACuE;IACvE,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAyC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/components/viewers/bim/src/FloorplanTool/index.ts"],"names":[],"mappings":"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"}
|