|
@@ -29,8 +29,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
Potree.settings.showObjectsOnMap = true
|
|
|
Potree.settings.mergeType2 = true //标识新版
|
|
|
Potree.settings.modelSkybox = true //是否将全景图贴在模型上(会导致卡顿)。若不显示模型将不显示Reticule
|
|
|
-
|
|
|
-
|
|
|
+ Potree.settings.tiles3DMaxMemory = 300 //稍微增加点
|
|
|
|
|
|
let { THREE } = Potree.mergeEditStart(dom, mapDom)
|
|
|
let MergeEditor = viewer.modules.MergeEditor
|
|
@@ -71,17 +70,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
|
|
|
});
|
|
|
|
|
|
- /* proj4.defs("LOCAL", "+proj=tmerc +ellps=WGS84 +lon_0=" + lonlat[0].toPrecision(15) + " +lat_0=" + lonlat[1].toPrecision(15)); //高德坐标系
|
|
|
- proj4.defs("LOCAL_MAP", "+proj=tmerc +ellps=WGS84 +lon_0=" + lonlat[0].toPrecision(15) + " +lat_0=" + lonlat[1].toPrecision(15)); //地图和本地一样
|
|
|
- proj4.defs("WGS84", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
|
|
|
-
|
|
|
- let transform1 = proj4("WGS84", "LOCAL"); //这个ok 是展开的平面投影 LOCAL即NAVVIS:TMERC
|
|
|
- let transform2 = proj4("+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs;");
|
|
|
- //注:转入后再转出,和原来的有偏差。如果输入是local坐标,数字越大偏差越大,当百万时就明显了。如果是lonlat,很奇怪经度小于50时就乱了。
|
|
|
- viewer.transform = {
|
|
|
- lonlatToLocal : transform1,
|
|
|
- lonlatTo4550 : transform2 // 转大地坐标EPSG:4550
|
|
|
- } */
|
|
|
+
|
|
|
//lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
|
|
|
Potree.setLonlat(lonlat[0], lonlat[1])
|
|
|
}
|
|
@@ -146,7 +135,15 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-
|
|
|
+ viewer.inputHandler.addEventListener('keydown', (e)=>{
|
|
|
+ if(e.event.key == "e" ){
|
|
|
+ MergeEditor.transformControls.mode = 'rotate'
|
|
|
+ }else if(e.event.key == "w"){
|
|
|
+ MergeEditor.transformControls.mode = 'translate'
|
|
|
+ }else if(e.event.key == "s"){
|
|
|
+ MergeEditor.transformControls.mode = 'scale'
|
|
|
+ }
|
|
|
+ })
|
|
|
|
|
|
viewer.addEventListener('webglError', e => {
|
|
|
console.error('viewer webglError: ' + e)
|
|
@@ -233,7 +230,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
window.THREE = THREE
|
|
|
//isLocal = false
|
|
|
- let autoLoads = []
|
|
|
+ let autoLoads = window.autoLoads = []
|
|
|
let readyToAddModel
|
|
|
let maxLoadingCount = /* isLocal ? 1 : */2; //正在加载模型的最大数目
|
|
|
|
|
@@ -615,7 +612,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
addModel(props) {
|
|
|
|
|
|
- let bus = mitt()
|
|
|
+ let bus = props.bus = mitt()
|
|
|
//console.log('addModel',props)
|
|
|
props.isFirstLoad = isLocal ? props.bottom == void 0 : (props.isDynamicAdded || props.mode == 'single') // 在编辑时用户添加的 或 展示单个模型 (props.mode='single'模型展示页, props.mode='many'融合页)
|
|
|
if (props.opacity == void 0) props.opacity = 1
|
|
@@ -660,61 +657,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- let startLoad = (prop) => {
|
|
|
- //if(autoLoads.filter(e=>e.loaded).length>1)return console.log('取消加载', prop), prop.onError()
|
|
|
-/* if(props.raw.visible === 0){//用于临时隐藏
|
|
|
- setTimeout(()=>{
|
|
|
- spliceFromArr(model, false)
|
|
|
- bus.emit('loadError' )
|
|
|
- },1)
|
|
|
-
|
|
|
- return
|
|
|
-} */
|
|
|
- Potree.Log(`--开始加载--`, { font: { color: '#f68' } });
|
|
|
- console.log('id:', prop.id, ', title:', prop.title, ', filename:', Potree.Common.getNameFromURL(prop.url), ', type:', prop.type, prop)
|
|
|
-
|
|
|
- prop.unlit = props.renderType != 'normal'
|
|
|
- prop.maximumScreenSpaceError = 60
|
|
|
- Potree.addModel(prop, prop.done, prop.progressFun, prop.onError)
|
|
|
- prop.loading = true
|
|
|
+
|
|
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
- let loadNext = () => {
|
|
|
- let haventLoad = autoLoads.filter(e => !e.loading && !e.loadFinish);
|
|
|
- let loading = autoLoads.filter(e => e.loading);
|
|
|
- haventLoad.slice(0, maxLoadingCount - loading.length).forEach(e => startLoad(e))
|
|
|
- return haventLoad.length > 0
|
|
|
- }
|
|
|
-
|
|
|
- let spliceFromArr = (model, loaded) => {
|
|
|
- //let autoLoads.find()
|
|
|
- props.loadFinish = true
|
|
|
- props.loading = false
|
|
|
-
|
|
|
- if (loaded) {
|
|
|
- props.loaded = true
|
|
|
- props.model = model
|
|
|
- } else {
|
|
|
- props.error = true
|
|
|
- }
|
|
|
-
|
|
|
- /* let haventLoad = autoLoads.filter(e=>!e.loading && !e.loadFinish);
|
|
|
- if( haventLoad[0]){
|
|
|
- startLoad(haventLoad[0])
|
|
|
- */
|
|
|
- if (!loadNext()) {
|
|
|
- if (autoLoads.filter(e => !e.loadFinish).length == 0 && autoLoads.filter(e => e.loaded).length > 0 && !props.isFirstLoad) {//设置相机位置:当自动开始加载第一个模型时(其余的也跟着自动加载),等这批加载完后;
|
|
|
- let autoLoadsDone = autoLoads.filter(e => e.loaded).map(e => e.model)
|
|
|
- console.log('所有模型加载完毕')
|
|
|
- autoLoads.filter(e => e.loaded && e.show).forEach(e => e.model.visible = true)
|
|
|
-
|
|
|
- MergeEditor.focusOn(autoLoadsDone, 1000, true, true)
|
|
|
- autoLoads.length = 0
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
let model
|
|
|
let done = (model_) => {
|
|
@@ -745,10 +693,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
//console.log(msg)
|
|
|
bus.emit('transformChanged', msg)
|
|
|
})
|
|
|
- spliceFromArr(model, true)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ spliceFromArr(model, props, true)
|
|
|
+
|
|
|
model.addEventListener('changeSelect', (e) => {
|
|
|
e.selected ? MergeEditor.transformControls.attach(model) : MergeEditor.transformControls.detach()
|
|
|
})
|
|
@@ -779,7 +725,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
let onError = function (xhr) {
|
|
|
bus.emit('loadError', xhr)
|
|
|
console.log('loadError!!!!!!!!!', Potree.Common.getNameFromURL(props.url), props.size, xhr)
|
|
|
- spliceFromArr(model, false)
|
|
|
+ spliceFromArr(model, props, false)
|
|
|
}
|
|
|
|
|
|
try {
|
|
@@ -1260,27 +1206,77 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ function spliceFromArr(model, props, loaded){
|
|
|
+ //let autoLoads.find()
|
|
|
+ props.loadFinish = true
|
|
|
+ props.loading = false
|
|
|
+
|
|
|
+ if (loaded) {
|
|
|
+ props.loaded = true
|
|
|
+ props.model = model
|
|
|
+ } else {
|
|
|
+ props.error = true
|
|
|
+ }
|
|
|
+
|
|
|
+ /* let haventLoad = autoLoads.filter(e=>!e.loading && !e.loadFinish);
|
|
|
+ if( haventLoad[0]){
|
|
|
+ startLoad(haventLoad[0])
|
|
|
+ */
|
|
|
+ if (!loadNext()) {
|
|
|
+ if (autoLoads.filter(e => !e.loadFinish).length == 0 && autoLoads.filter(e => e.loaded).length > 0 && !props.isFirstLoad) {//设置相机位置:当自动开始加载第一个模型时(其余的也跟着自动加载),等这批加载完后;
|
|
|
+ let autoLoadsDone = autoLoads.filter(e => e.loaded).map(e => e.model)
|
|
|
+ console.log('所有模型加载完毕')
|
|
|
+ autoLoads.filter(e => e.loaded && e.show).forEach(e => e.model.visible = true)
|
|
|
+
|
|
|
+ MergeEditor.focusOn(autoLoadsDone, 1000, true, true)
|
|
|
+ autoLoads.length = 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ function loadNext(){
|
|
|
+ let haventLoad = autoLoads.filter(e => !e.loading && !e.loadFinish);
|
|
|
+ let loading = autoLoads.filter(e => e.loading);
|
|
|
+ let needLoad = haventLoad.slice(0, maxLoadingCount - loading.length)
|
|
|
+ needLoad.forEach(e => startLoad(e))
|
|
|
+ return haventLoad.length > 0
|
|
|
+ }
|
|
|
+
|
|
|
+ function startLoad(prop){
|
|
|
+ if(prop.raw.visible !== 1){//用于临时隐藏
|
|
|
+ setTimeout(()=>{
|
|
|
+ spliceFromArr(null, prop, false)
|
|
|
+ prop.bus.emit('loadError' )
|
|
|
+ },1)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if(prop.loading || prop.loadFinish)return
|
|
|
+
|
|
|
+ Potree.Log(`--开始加载--`, { font: { color: '#f68' } });
|
|
|
+ console.log('id:', prop.id, ', title:', prop.title, ', filename:', Potree.Common.getNameFromURL(prop.url), ', type:', prop.type, prop)
|
|
|
+
|
|
|
+ prop.unlit = prop.renderType != 'normal'
|
|
|
+ prop.maximumScreenSpaceError = 100
|
|
|
+ prop.prefix = prop.raw.prefix
|
|
|
+ Potree.addModel(prop, prop.done, prop.progressFun, prop.onError)
|
|
|
+ prop.loading = true
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- //sdk.hideGrid()
|
|
|
|
|
|
|
|
|
return sdk
|
|
|
}
|
|
|
|
|
|
-/* function load4dkkPanos(url, model, done){
|
|
|
- let sceneCode
|
|
|
- if(url.includes('4dkk.4dage.com/scene_view_data/')){
|
|
|
- sceneCode = url.split('https://4dkk.4dage.com/scene_view_data/')[1].split('/images/')[0]
|
|
|
- }else if(url.includes('4dkk.4dage.com/fusion/xj/model/')){
|
|
|
- sceneCode = url.split('https://4dkk.4dage.com/fusion/xj/model/')[1].split('/mesh/')[0]
|
|
|
- }else{
|
|
|
- return console.error('未知url,无法获得sceneCode',url)
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Potree.load4dkkPanos(sceneCode, model, done)
|
|
|
-} */
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/*
|
|
|
|
|
|
暂定不同场景间的漫游点不能互通。虽然它们可能是摆放正确的,如果是组成一整个场景的话还是要打通……
|