123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- import ConvertViews from '@/utils/ConvertViews'
- import browser from '@/utils/browser'
- const views = new ConvertViews()
- let sourceApp = null,
- targetApp = null
-
- const isEdit = browser.urlHasValue('adjust')
- let panoData //= {p1:{id:0},p2:{id:1}}//默认
- let targetPano /* = isEdit ? null : [//targetPano
- {position: new THREE.Vector3( -5.313605730801787, -4.889868407960505, 1.237447893355817),},
- {position: new THREE.Vector3( -5.337403524084278, -2.5012228235167737, 1.2808838933558175),}
- ] */
- export function setPanoWithBim(data){
- if(!isEdit){
- panoData = data
- }
- }
- export function flyToP1P2(data){
- //left
- views.flyToPano(sourceApp, data.id, {duration : views.settings.durations.flyToPano})
-
- {//right
- views.bimFlyTo({position:data.position, duration : views.settings.durations.flyToPano})
- }
- }
- /* export function flyToP1P2(data){
- //left
- if(sourceApp.sceneType == 'laser'){
- sourceApp.viewer.images360.flyToPano({pano:sourceApp.viewer.images360.getPano(data.id)})
- }else{
- let player = sourceApp.app.core.get('Player')
- player.flyToPano({pano:model.panos.index[data.id]})
- }
-
- {//right
- views.bimFlyTo({position:data.position})
- }
- } */
- /* const getSourcePanos = (sourceApp)=>{
- let sourcePanos
- if(sourceApp.sceneType == 'laser'){
- sourcePanos = [sourceApp.viewer.images360.panos[panoData.p1.id], sourceApp.viewer.images360.panos[panoData.p2.id]], //sourceApp.viewer.images360.panos.slice(0, 2),
-
- sourceApp.Potree.settings.rotAroundPoint = false
-
- }else if(sourceApp.sceneType == 'kankan'){
- sourcePanos = [sourceApp.app.core.get('Player').model.panos.index[panoData.p1.id], sourceApp.app.core.get('Player').model.panos.index[panoData.p2.id]],//sourceApp.app.core.get('Player').model.panos.list.slice(0, 2),
-
- }
- return sourcePanos
- } */
-
- const initConvertView = (isSwitchScene) => {
- if (sourceApp && targetApp) {
- if(targetApp.sceneType == 'bim'){
- views.bindWithBim( sourceApp, targetApp, panoData/* getSourcePanos(sourceApp), targetPano */)
-
- }else if(sourceApp.sceneType == targetApp.sceneType){
-
- views.bindWithSameType(sourceApp,targetApp, isSwitchScene)
-
- }
-
- }
- }
- export function singleConvert(lastFakeApp, targetApp ){//单屏转换
- if(targetApp.sceneType == 'bim'){
-
- views.fakeWithBim(lastFakeApp, targetApp, getSourcePanos(sourceApp), targetPano)
- }
-
- }
- let isSwitchScene
-
- export function beforeChangeURL(which ){
- //if (views.loaded ) {
- isSwitchScene = true
- views.clear({ dontClearTarget: targetApp && targetApp.sceneType == 'bim' })
- //}
- }
- /**
- * 左屏加载
- * @param {String} type kankan|laser
- */
- export function loadSourceScene(sourceFrame,type,mode) {
-
- /* if (views.loaded ) {
- isSwitchScene = true
- views.clear({ dontClearTarget: targetApp.sceneType == 'bim' })
- } */
-
- Log('loadSourceScene, ' + type)
- sourceApp = window.app1 = null
- let win = sourceFrame.value.contentWindow
- win.sceneType = type
-
-
- let loaded = ()=>{
- sourceApp = window.app1 = win
- initConvertView(isSwitchScene && 'source')
- }
-
-
- if(type == 'laser'){
- win.loaded.then(sdk => {
- sdk.scene.changeMode(mode)
- laserLoaded(win,mode)
- loaded()
- })
- }else if(type == 'kankan'){
- win.app.Scene.on('loaded', (e) => {
-
- loaded()
- })
- }
- }
- /**
- * 右屏加载
- * @param {String} type kankan|laser|bim
- * @param {mode} mode 0|1
- */
- export function loadTargetScene(targetFrame, type, mode) {
-
- Log('loadTargetScene, ' + type)
-
- if (views.loaded ) {
-
- views.clear( )
- }
- targetApp = window.app2 = null
-
-
- let win = targetFrame.value.contentWindow //其实只用赋值一次
- win.sceneType = type
-
- let loaded = ()=>{
- targetApp = window.app2 = win
-
-
- initConvertView( 'target')
- }
-
-
-
- if(type == 'kankan'){
- win.app.Scene.on('loaded', () => {
- loaded()
- })
- }else{
- win.loaded.then(sdk => {
- //targetApp.viewer.scene.changeMode(mode)
- if(type == 'laser'){
- laserLoaded(win,mode)
- }else if(type == 'bim'){
- }
-
- loaded()
- })
-
- }
- }
- /* views.addEventListener('sendCameraData', e => {
- //同步右侧数据到左侧
- if(sourceApp.sceneType == 'laser'){
- sourceApp.viewer.mainViewport.view.position.copy(e.data.position)
- sourceApp.viewer.mainViewport.view.lookAt(e.data.target)
- }
- }) */
- window.Log = function(value, color, fontSize){
- color = color || '#ff4399'
- fontSize = fontSize || 13
- console.warn(`%c${value}`, `color:${color};font-size:${fontSize}px`)
- }
-
- function laserLoaded(app,mode){
- if(!app.viewer){
- return console.error('!app.viewer', app.viewer)
- }
-
- app.viewer.images360.cancelFlyToPano()
- app.viewer.mainViewport.view.minPitch += 0.01 //防止bim垂直视角上的闪烁(似乎是因 up 要乘以某矩阵导致微小偏差所致)
- app.viewer.mainViewport.view.minPitch -= 0.01
- app.viewer.images360.panos.forEach(pano=>{
- app.viewer.updateVisible(pano.label2, 'notDisplay', true)
- pano.dispatchEvent({type:'changeMarkerTex',name:'ring'})
- })
- //app.Potree.settings.pointDensity = 'high'
- app.Potree.settings.UserDensityPercent = 1 ; //因为nodeMaxLevel不同,感觉只有最高质量能看起来一样
- app.viewer.setPointLevels()
- app.Potree.settings.rotAroundPoint = false //去除原因:比较好同步,尤其当左边在当前点位,右边同步后却离开当前点位的话拖拽就会绕点旋转了
- setTimeout(()=>{//laser的代码中莫名会请求showPointCloud,所以尽量晚一点覆盖它
- app.Potree.settings.displayMode = mode == 0 ? "showPanos" : "showPointCloud"
- },1000)
- }
- window.addEventListener('mouseup',(e)=>{
- //iframe的window的mouseup 在拖拽出窗口外居然不执行,只好用全局的通知它们
- sourceApp && sourceApp.sceneType == 'laser' && sourceApp.viewer && sourceApp.viewer.inputHandler.onMouseUp(e)
- targetApp && targetApp.sceneType == 'laser' && targetApp.viewer && targetApp.viewer.inputHandler.onMouseUp(e)
- views.dispatchEvent({type:'globalMouseUp'})
- })
-
- export default {
- views,
- get sourceInst() {
- return sourceApp
- },
- get targetInst() {
- return targetApp
- },
-
- }
- /*
- matchPanos:[
- {
- id: 0,
- position : {x: 1, y: 1, z: 1}
- },
- {
- id: 3
- position : {x: 2, y: 1, z: 2}
- }
- ]
- */
|