|
@@ -6018,67 +6018,76 @@ export class Viewer extends ViewerBase{
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
}else if(fileInfo.fileType == '3dTiles'){
|
|
}else if(fileInfo.fileType == '3dTiles'){
|
|
|
-
|
|
|
|
|
- let result = await Loader3DTiles.load({
|
|
|
|
|
- url: fileInfo.url,
|
|
|
|
|
- gltfLoader : loaders.glbLoader,
|
|
|
|
|
- //renderer: SceneRenderer.renderer
|
|
|
|
|
- options: {
|
|
|
|
|
- //dracoDecoderPath: '../utils/loaders/DRACOLoader/draco',
|
|
|
|
|
- //basisTranscoderPath: '../utils/loaders/KTX2Loader/basis',
|
|
|
|
|
- maximumScreenSpaceError: fileInfo.maximumScreenSpaceError || 80 , //越小越清晰。 如果本身tiles很密很小这个值就不能很大。
|
|
|
|
|
- //maxDepth: 100,
|
|
|
|
|
- //maximumMemoryUsage: 100, //缓存大小,见tiles3DMaxMemory。单位M(但实际结果是 2.5*maximumMemoryUsage + 750 。超过2G会崩, 所以应该小于540) 若太小,密集的tile反复加载很卡. (任务管理器刷新网页后若内存不掉就要结束进程否则虚高)
|
|
|
|
|
- debug: browser.urlHasValue('tilesBox'), //show box
|
|
|
|
|
- parent: this.scene.scene,
|
|
|
|
|
- is4dkkModel: fileInfo.is4dkkModel, //是否是4dkk中的模型. 通常maximumScreenSpaceError需要10
|
|
|
|
|
- updateTime: fileInfo.updateTime, //加后缀防止缓存
|
|
|
|
|
- //cesiumIONToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5OTc4MTFiYS1hYzhlLTQ3ZjYtYWJmMi1hODMwMWMxZGRiYTQiLCJpZCI6ODU1NDksImlhdCI6MTY1Mzc5NDc5N30.ldTi8bF3XvSOgnZrMITokRW4kE3i8Mwbarhk5OQbPsI',
|
|
|
|
|
- },
|
|
|
|
|
- })
|
|
|
|
|
- //console.log(result)
|
|
|
|
|
- result.model.runtime = result.runtime
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- let loaded = false
|
|
|
|
|
- let tileset = result.runtime.getTileset()
|
|
|
|
|
- tileset.addEventListener('endTileLoading', function (data) {//Tileset3D
|
|
|
|
|
- if (data.loadingCount == 0 && !loaded) {
|
|
|
|
|
- loaded = true;
|
|
|
|
|
- //console.log('loaded!!!!!!!!!!!!!')
|
|
|
|
|
|
|
+ let result
|
|
|
|
|
+ try{
|
|
|
|
|
+ result = await Loader3DTiles.load({
|
|
|
|
|
+ url: fileInfo.url,
|
|
|
|
|
+ gltfLoader : loaders.glbLoader,
|
|
|
|
|
+ //renderer: SceneRenderer.renderer
|
|
|
|
|
+ options: {
|
|
|
|
|
+ //dracoDecoderPath: '../utils/loaders/DRACOLoader/draco',
|
|
|
|
|
+ //basisTranscoderPath: '../utils/loaders/KTX2Loader/basis',
|
|
|
|
|
+ maximumScreenSpaceError: fileInfo.maximumScreenSpaceError || 80 , //越小越清晰。 如果本身tiles很密很小这个值就不能很大。
|
|
|
|
|
+ //maxDepth: 100,
|
|
|
|
|
+ //maximumMemoryUsage: 100, //缓存大小,见tiles3DMaxMemory。单位M(但实际结果是 2.5*maximumMemoryUsage + 750 。超过2G会崩, 所以应该小于540) 若太小,密集的tile反复加载很卡. (任务管理器刷新网页后若内存不掉就要结束进程否则虚高)
|
|
|
|
|
+ debug: browser.urlHasValue('tilesBox'), //show box
|
|
|
|
|
+ parent: this.scene.scene,
|
|
|
|
|
+ is4dkkModel: fileInfo.is4dkkModel, //是否是4dkk中的模型. 通常maximumScreenSpaceError需要10
|
|
|
|
|
+ updateTime: fileInfo.updateTime, //加后缀防止缓存
|
|
|
|
|
+ //cesiumIONToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5OTc4MTFiYS1hYzhlLTQ3ZjYtYWJmMi1hODMwMWMxZGRiYTQiLCJpZCI6ODU1NDksImlhdCI6MTY1Mzc5NDc5N30.ldTi8bF3XvSOgnZrMITokRW4kE3i8Mwbarhk5OQbPsI',
|
|
|
|
|
+ },
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ //console.log(result)
|
|
|
|
|
+ result.model.runtime = result.runtime
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ let loaded = false
|
|
|
|
|
+ let tileset = result.runtime.getTileset()
|
|
|
|
|
+ tileset.addEventListener('endTileLoading', function (data) {//Tileset3D
|
|
|
|
|
+ if (data.loadingCount == 0 && !loaded) {
|
|
|
|
|
+ loaded = true;
|
|
|
|
|
+ //console.log('loaded!!!!!!!!!!!!!')
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ tileset.addEventListener('tileLoaded',(e)=>{ //每一个tile加载完要更改透明度
|
|
|
|
|
+ let master = result.model.parent == this.objs ? result.model : result.model.parent//最多两层
|
|
|
|
|
+ MergeEditor.changeOpacity(e.tileContent, master.opacity)
|
|
|
|
|
+ if(master.panos) viewer.images360.judgeModelMat(e.tileContent)
|
|
|
|
|
+ //set Layers ?
|
|
|
|
|
+ Potree.Utils.setObjectLayers(e.tileContent, 'model')
|
|
|
|
|
+ fileInfo.side && e.tileContent.traverse(e=>e.material && (e.material.side = fileInfo.side))//新软件导出的带坐标的box型模型要反面才看的到,干脆双面
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ {
|
|
|
|
|
+ let vi = true
|
|
|
|
|
+ Object.defineProperty( result.model, "visible", {
|
|
|
|
|
+ get: function() {
|
|
|
|
|
+ return vi
|
|
|
|
|
+ },
|
|
|
|
|
+ set: function(v) {
|
|
|
|
|
+ vi = v
|
|
|
|
|
+ result.model.visiChangeCallback()
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
- tileset.addEventListener('tileLoaded',(e)=>{ //每一个tile加载完要更改透明度
|
|
|
|
|
- let master = result.model.parent == this.objs ? result.model : result.model.parent//最多两层
|
|
|
|
|
- MergeEditor.changeOpacity(e.tileContent, master.opacity)
|
|
|
|
|
- if(master.panos) viewer.images360.judgeModelMat(e.tileContent)
|
|
|
|
|
- //set Layers ?
|
|
|
|
|
- Potree.Utils.setObjectLayers(e.tileContent, 'model')
|
|
|
|
|
- fileInfo.side && e.tileContent.traverse(e=>e.material && (e.material.side = fileInfo.side))//新软件导出的带坐标的box型模型要反面才看的到,干脆双面
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ let v = true
|
|
|
|
|
+ result.model.visiChangeCallback = (force)=>{
|
|
|
|
|
+ let visi = result.model.realVisible()
|
|
|
|
|
+ tileset.visible = visi; //同步,使不加载
|
|
|
|
|
+ if(force || v != visi){
|
|
|
|
|
+ tileset.nextForceUpdate = true
|
|
|
|
|
+ v = visi
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ loadDone(result.model/* , null, fileInfo.url */)
|
|
|
|
|
+
|
|
|
|
|
+ }catch(e){
|
|
|
|
|
+ //debugger // Error: Failed to fetch resource
|
|
|
|
|
+ console.error(e)
|
|
|
|
|
+ onError && onError(e)
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- {
|
|
|
|
|
- let vi = true
|
|
|
|
|
- Object.defineProperty( result.model, "visible", {
|
|
|
|
|
- get: function() {
|
|
|
|
|
- return vi
|
|
|
|
|
- },
|
|
|
|
|
- set: function(v) {
|
|
|
|
|
- vi = v
|
|
|
|
|
- result.model.visiChangeCallback()
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- let v = true
|
|
|
|
|
- result.model.visiChangeCallback = (force)=>{
|
|
|
|
|
- let visi = result.model.realVisible()
|
|
|
|
|
- tileset.visible = visi; //同步,使不加载
|
|
|
|
|
- if(force || v != visi){
|
|
|
|
|
- tileset.nextForceUpdate = true
|
|
|
|
|
- v = visi
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- loadDone(result.model/* , null, fileInfo.url */)
|
|
|
|
|
|
|
|
|
|
}else if(fileInfo.fileType == 'dxf'){
|
|
}else if(fileInfo.fileType == 'dxf'){
|
|
|
loaders.dxfLoader.load(fileInfo.url,(object)=>{
|
|
loaders.dxfLoader.load(fileInfo.url,(object)=>{
|
|
@@ -6797,8 +6806,8 @@ export class Viewer extends ViewerBase{
|
|
|
Gradients.ir = segs
|
|
Gradients.ir = segs
|
|
|
this.switchHotType()
|
|
this.switchHotType()
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
applyViewJson(info) {
|
|
applyViewJson(info) {
|
|
|
if(info.yaw != void 0){
|
|
if(info.yaw != void 0){
|
|
|
this.mainViewport.view.applyJson(info)
|
|
this.mainViewport.view.applyJson(info)
|