export * from "./custom/start.js"; export {settings, config} from './custom/settings.js' export * from "./Actions.js"; export * from "./AnimationPath.js"; export * from "./Annotation.js"; export * from "./defines.js"; export * from "./Enum.js"; export * from "./EventDispatcher.js"; export * from "./Features.js"; export * from "./KeyCodes.js"; export * from "./LRU.js"; export * from "./PointCloudEptGeometry.js"; export * from "./PointCloudOctree.js"; //export * from "./custom/ExtendPointCloudOctree.js"; export * from "./PointCloudOctreeGeometry.js"; export * from "./PointCloudTree.js"; export * from "./Points.js"; // export * from "./Potree_update_visibility.js"; //export * from "./custom/ExtendPotree_update_visibility.js"; export * from "./PotreeRenderer.js"; export * from "./ProfileRequest.js"; export * from "./TextSprite.js"; export * from "./utils.js"; export * from "./Version.js"; export * from "./WorkerPool.js"; export * from "./XHRFactory.js"; export * from "./viewer/SaveProject.js"; export * from "./viewer/LoadProject.js"; export * from "./materials/ClassificationScheme.js"; export * from "./materials/EyeDomeLightingMaterial.js"; export * from "./materials/Gradients.js"; export * from "./materials/NormalizationEDLMaterial.js"; export * from "./materials/NormalizationMaterial.js"; export * from "./materials/PointCloudMaterial.js"; export * from "./loader/POCLoader.js"; export * from "./modules/loader/2.0/OctreeLoader.js"; export * from "./loader/EptLoader.js"; export * from "./loader/ept/BinaryLoader.js"; export * from "./loader/ept/LaszipLoader.js"; export * from "./loader/ept/ZstandardLoader.js"; export * from "./loader/PointAttributes.js"; export * from "./loader/ShapefileLoader.js"; export * from "./loader/GeoPackageLoader.js"; // export * from "./objects/tool/Box3Helper.js"; // export * from "./objects/tool/ClippingTool.js"; // export * from "./objects/tool/ClipVolume.js"; export * from "./utils/Box3Helper.js"; export * from "./utils/ClippingTool.js"; export * from "./utils/ClipVolume.js"; export * from "./utils/GeoTIFF.js"; // export * from "./objects/tool/Measure.js"; // export * from "./objects/tool/MeasuringTool.js"; export * from "./utils/Measure.js"; export * from "./utils/MeasuringTool.js"; export * from "./utils/Message.js"; export * from "./utils/PointCloudSM.js"; // export * from "./objects/tool/PolygonClipVolume.js"; // export * from "./objects/tool/Profile.js"; // export * from "./objects/tool/ProfileTool.js"; // export * from "./objects/tool/ScreenBoxSelectTool.js"; // export * from "./objects/tool/SpotLightHelper.js"; // export * from "./objects/tool/TransformationTool.js"; // export * from "./objects/tool/Volume.js"; // export * from "./objects/tool/VolumeTool.js"; // export * from "./objects/tool/Compass.js"; export * from "./utils/PolygonClipVolume.js"; export * from "./utils/Profile.js"; export * from "./utils/ProfileTool.js"; export * from "./utils/ScreenBoxSelectTool.js"; export * from "./utils/SpotLightHelper.js"; export * from "./utils/TransformationTool.js"; export * from "./utils/Volume.js"; export * from "./utils/VolumeTool.js"; export * from "./utils/Compass.js"; export * from "./custom/viewer/ExtendViewer.js"; export * from "./viewer/Scene.js"; export * from "./viewer/HierarchicalSlider.js"; export * from "./modules/OrientedImages/OrientedImages.js"; export * from "./modules/Images360/Images360.js"; export * from "./modules/CameraAnimation/CameraAnimation.js"; export * from "./modules/loader/2.0/OctreeLoader.js"; export {OrbitControls} from "./navigation/OrbitControls.js"; export {FirstPersonControls} from "./navigation/FirstPersonControls.js"; export {EarthControls} from "./navigation/EarthControls.js"; export {DeviceOrientationControls} from "./navigation/DeviceOrientationControls.js"; export {VRControls} from "./navigation/VRControls.js"; import "./extensions/OrthographicCamera.js"; import "./extensions/PerspectiveCamera.js"; import "./extensions/Ray.js"; import {LRU} from "./LRU.js"; import {OctreeLoader} from "./modules/loader/2.0/OctreeLoader.js"; import {POCLoader} from "./loader/POCLoader.js"; import {EptLoader} from "./loader/EptLoader.js"; import {ExtendPointCloudOctree} from "./ExtendPointCloudOctree.js"; //import {ExtendPointCloudOctree} from "./custom/ExtendPointCloudOctree.js"; import {WorkerPool} from "./WorkerPool.js"; export const workerPool = new WorkerPool(); export const version = { major: 1, minor: 8, suffix: '.0' }; export let lru = new LRU(); console.log('Potree ' + version.major + '.' + version.minor + version.suffix); export let pointBudget = 1 * 1000 * 1000; export let framenumber = 0; export let numNodesLoading = 0; export let maxNodesLoading = 4; export const debug = {}; let scriptPath = ""; if (document.currentScript && document.currentScript.src) { scriptPath = new URL(document.currentScript.src + '/..').href; if (scriptPath.slice(-1) === '/') { scriptPath = scriptPath.slice(0, -1); } } else if(import.meta){ scriptPath = new URL(import.meta.url + "/..").href; if (scriptPath.slice(-1) === '/') { scriptPath = scriptPath.slice(0, -1); } }else { console.error('Potree was unable to find its script path using document.currentScript. Is Potree included with a script tag? Does your browser support this function?'); } let resourcePath = scriptPath + '/resources'; // scriptPath: build/potree // resourcePath:build/potree/resources export {scriptPath, resourcePath}; //add: export async function loadFile(path, callback, onError){ if(Potree.fileServer){ Potree.fileServer.get(path).then(data=>{ if(data.data)data = data.data if(data.data)data = data.data //融合页面getdataset需要查找两次data callback && callback(data) }).catch(onError) }else{ try{ let response = await fetch(path); let text = await response.text(); var data = JSON.parse(text) if(data.data) data = data.data callback && callback(data) return data }catch(e){ onError && onError(e) } } //查询: http://192.168.0.26:8080/doc.html#/default/filter-%E6%BC%AB%E6%B8%B8%E7%82%B9/filterUsingGET } export async function loadDatasets(callback,sceneCode,onError){//之后直接把path写进来 let path sceneCode = sceneCode || Potree.settings.number if(Potree.fileServer){ path = `/laser/dataset/${sceneCode}/getDataSet` }else{ //path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/datasets` //现在只能加载得了本地的了 path = `${Potree.settings.urls.prefix}/laser/dataset/${sceneCode}/getDataSet` //path = `${Potree.scriptPath}/data/${sceneCode}/getDataSet.json` } return loadFile(path, callback,onError) } //目前上传平面图后如果不点击保存按钮,数据还是旧的不生效 export async function loadMapEntity(datasetId, force){ if(!Potree.settings.floorplanEnable && !force && Potree.fileServer )return /* 等待平面图类型定义好会加载 */ let loaded = 0 let needLoads = datasetId == 'all' ? viewer.scene.pointclouds.map(e=>e.dataset_id) : [datasetId] let callback = (dataset_id, floorplanType, data )=>{ //要防止旧的比新的先获取到导致覆盖新的,因为两种type随时可能切换 if(floorplanType != Potree.settings.floorplanType[dataset_id]) return //如果请求的floorplanType不是当前最新的floorplanType就返回 var map = viewer.mapViewer.mapLayer.maps.find(e => e.name == 'floorplan_'+ dataset_id) if(map){ viewer.mapViewer.mapLayer.removeMap(map) } var mapNew = viewer.mapViewer.mapLayer.addMapEntity(data.data || data, dataset_id) if(map){ mapNew.visibleReasons = map.visibleReasons mapNew.unvisibleReasons = map.unvisibleReasons } loaded ++; } needLoads.forEach(dataset_id=>{ let floorplanType = Potree.settings.floorplanType[dataset_id], prefix = '' if(!Potree.fileServer){ prefix = Potree.settings.urls.prefix } if(!floorplanType)return var path /* if(Potree.fileServer){ path = `/laser/tiledMap/${Potree.settings.number}/tiledMap/${floorplanType}/${dataset_id}` }else{ path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/tiled_maps` } */ path = `${prefix}/laser/tiledMap/${Potree.settings.number}/tiledMap/${floorplanType}/${dataset_id}` Potree.settings.floorplanRequests[dataset_id] = true //开始加载了 return loadFile(path, callback.bind(this, dataset_id, floorplanType) ) }) } export async function loadPanos(datasetId, callback){ var path let query = `?datasetId=${datasetId}` //`?lat=${center.lat}&lon=${center.lon}&radius=200000` if(Potree.fileServer){ path = `/laser/filter/${Potree.settings.number}/query` + query }else{ //path = `${Potree.settings.urls.prefix2}/indoor/${Potree.settings.number}/api/images/filter` + query //path = `${Potree.scriptPath}/data/${Potree.settings.number}/panos-${datasetId}.json` path = `${Potree.settings.urls.prefix}/laser/filter/${Potree.settings.number}/query` + query } return loadFile(path, callback) } export async function loadPanosInfo(callback){ var path if(Potree.fileServer){ }else{ path = `${Potree.scriptPath}/data/panoEdit/vision_edit.txt` } return loadFile(path, callback) } //site_model /* { "area": 2503.30551910935, "attributes": {}, "center": [ 113.59568277455075, 22.366566635195288, 12.78751625 ], "children": [], "geometry_hash": 1891071345, "id": 10, "name": "港湾一号", "parentId": null, "polygon": { "coordinates": [ [ [ 113.59590810534583, 22.36679132753878 ], [ 113.59590810534583, 22.366807172528629 ], [ 113.59545610274934, 22.366807172528629 ], [ 113.59545610274934, 22.36679132753878 ] ] ], "type": "Polygon" }, "type": "BUILDING", "volume": null, "z_max": null, "z_min": null } */ export function Log(value, color, fontSize){ color = color || '#13f' fontSize = fontSize || 14 console.warn(`%c${value}`, `color:${color};font-size:${fontSize}px`) } export function loadPointCloud(path, name, sceneCode, timeStamp, callback, onError){ let loaded = function(e){ e.pointcloud.name = name; e.pointcloud.sceneCode = sceneCode //对应4dkk的场景码 callback(e); }; let promise = new Promise( resolve => { // load pointcloud if (!path){ // TODO: callback? comment? Hello? Bueller? Anyone? } else if (path.indexOf('ept.json') > 0) { EptLoader.load(path, function(geometry) { if (!geometry) { console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new ExtendPointCloudOctree(geometry); //loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else if (path.indexOf('cloud.js') > 0) { POCLoader.load(path, timeStamp, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); onError && onError() } else { let pointcloud = new ExtendPointCloudOctree(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); }/* else if (path.indexOf('metadata.json') > 0) { //部分浏览器(如uc)不支持NodeLoader中的1n的大数据写法 Potree.OctreeLoader.load(path).then(e => { let geometry = e.geometry; if(!geometry){ console.error(new Error(`failed to load point cloud from URL: ${path}`)); }else{ let pointcloud = new ExtendPointCloudOctree(geometry); let aPosition = pointcloud.getAttribute("position"); let material = pointcloud.material; material.elevationRange = [ aPosition.range[0][2], aPosition.range[1][2], ]; // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); OctreeLoader.load(path, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new ExtendPointCloudOctree(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } */else if (path.indexOf('.vpc') > 0) { PointCloudArena4DGeometry.load(path, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new PointCloudArena4D(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else { //callback({'type': 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } }); if(callback){ promise.then(pointcloud => { loaded(pointcloud); }); }else{ return promise; } }; // add selectgroup (function($){ $.fn.extend({ selectgroup: function(args = {}){ let elGroup = $(this); let rootID = elGroup.prop("id"); let groupID = `${rootID}`; let groupTitle = (args.title !== undefined) ? args.title : ""; let elButtons = []; elGroup.find("option").each((index, value) => { let buttonID = $(value).prop("id"); let label = $(value).html(); let optionValue = $(value).prop("value"); let elButton = $(` `); let elLabel = elButton.find("label"); let elInput = elButton.find("input"); elInput.change( () => { elGroup.find("label").removeClass("ui-state-active"); elGroup.find("label").addClass("ui-state-default"); if(elInput.is(":checked")){ elLabel.addClass("ui-state-active"); }else{ //elLabel.addClass("ui-state-default"); } }); elButtons.push(elButton); }); let elFieldset = $(`
`); let elButtonContainer = elFieldset.find("span"); for(let elButton of elButtons){ elButtonContainer.append(elButton); } elButtonContainer.find("label").each( (index, value) => { $(value).css("margin", "0px"); $(value).css("border-radius", "0px"); $(value).css("border", "1px solid black"); $(value).css("border-left", "none"); }); elButtonContainer.find("label:first").each( (index, value) => { $(value).css("border-radius", "4px 0px 0px 4px"); }); elButtonContainer.find("label:last").each( (index, value) => { $(value).css("border-radius", "0px 4px 4px 0px"); $(value).css("border-left", "none"); }); elGroup.empty(); elGroup.append(elFieldset); } }); })(jQuery);