@@ -61,8 +61,9 @@ define([
61
61
var balloonContainer = document . createElement ( 'div' ) ;
62
62
balloonContainer . className = 'cesium-viewer-balloonContainer' ;
63
63
viewer . _viewerContainer . appendChild ( balloonContainer ) ;
64
- var balloon = new Balloon ( balloonContainer , viewer . scene ) ;
65
64
65
+ var balloon = new Balloon ( balloonContainer , viewer . scene ) ;
66
+ var balloonViewModel = balloon . viewModel ;
66
67
viewer . _balloon = balloon ;
67
68
68
69
var eventHelper = new EventHelper ( ) ;
@@ -71,50 +72,44 @@ define([
71
72
var balloonedObject ;
72
73
73
74
//Subscribe to onTick so that we can update the view each update.
74
- function updateView ( clock ) {
75
+ function onTick ( clock ) {
75
76
if ( typeof dynamicObjectView !== 'undefined' ) {
76
77
dynamicObjectView . update ( clock . currentTime ) ;
77
78
}
78
- var viewModel = viewer . _balloon . viewModel ;
79
- if ( typeof trackedObject === 'undefined' && typeof balloonedObject !== 'undefined' &&
80
- typeof balloonedObject . position !== 'undefined' && viewModel . showBalloon ) {
81
- viewModel . position = balloonedObject . position . getValueCartesian ( clock . currentTime ) ;
82
- viewModel . update ( ) ;
83
- } else {
84
- viewModel . showBalloon = false ;
79
+ if ( typeof balloonedObject !== 'undefined' && typeof balloonedObject . position !== 'undefined' ) {
80
+ balloonViewModel . position = balloonedObject . position . getValueCartesian ( clock . currentTime ) ;
81
+ balloonViewModel . update ( ) ;
85
82
}
86
83
}
87
- eventHelper . add ( viewer . clock . onTick , updateView ) ;
84
+ eventHelper . add ( viewer . clock . onTick , onTick ) ;
88
85
89
86
function pickAndTrackObject ( e ) {
90
87
var pickedPrimitive = viewer . scene . pick ( e . position ) ;
91
- if ( typeof pickedPrimitive !== 'undefined' &&
92
- typeof pickedPrimitive . dynamicObject !== 'undefined' &&
93
- typeof pickedPrimitive . dynamicObject . position !== 'undefined' ) {
88
+ if ( typeof pickedPrimitive !== 'undefined' && typeof pickedPrimitive . dynamicObject !== 'undefined' && typeof pickedPrimitive . dynamicObject . position !== 'undefined' ) {
94
89
viewer . trackedObject = pickedPrimitive . dynamicObject ;
95
90
}
96
91
}
97
92
98
- function showBalloon ( e ) {
93
+ function pickAndShowBalloon ( e ) {
99
94
var pickedPrimitive = viewer . scene . pick ( e . position ) ;
100
95
if ( typeof pickedPrimitive !== 'undefined' && typeof pickedPrimitive . dynamicObject !== 'undefined' ) {
101
96
viewer . balloonedObject = pickedPrimitive . dynamicObject ;
102
97
}
103
98
}
104
99
105
- function clearTrackedObject ( ) {
100
+ function onHomeButtonClicked ( ) {
106
101
viewer . trackedObject = undefined ;
107
102
viewer . balloonedObject = undefined ;
108
103
}
109
104
110
- //Subscribe to the home button click if it exists, so that we can
111
- //clear the trackedObject when it is clicked .
105
+ //Subscribe to the home button beforeExecute event if it exists,
106
+ // so that we can clear the trackedObject and balloon .
112
107
if ( typeof viewer . homeButton !== 'undefined' ) {
113
- eventHelper . add ( viewer . homeButton . viewModel . command . beforeExecute , clearTrackedObject ) ;
108
+ eventHelper . add ( viewer . homeButton . viewModel . command . beforeExecute , onHomeButtonClicked ) ;
114
109
}
115
110
116
111
//Subscribe to left clicks and zoom to the picked object.
117
- viewer . screenSpaceEventHandler . setInputAction ( showBalloon , ScreenSpaceEventType . LEFT_CLICK ) ;
112
+ viewer . screenSpaceEventHandler . setInputAction ( pickAndShowBalloon , ScreenSpaceEventType . LEFT_CLICK ) ;
118
113
viewer . screenSpaceEventHandler . setInputAction ( pickAndTrackObject , ScreenSpaceEventType . RIGHT_CLICK ) ;
119
114
120
115
defineProperties ( viewer , {
@@ -131,13 +126,11 @@ define([
131
126
if ( trackedObject !== value ) {
132
127
trackedObject = value ;
133
128
dynamicObjectView = typeof value !== 'undefined' ? new DynamicObjectView ( value , viewer . scene , viewer . centralBody . getEllipsoid ( ) ) : undefined ;
134
-
135
- if ( balloonedObject !== trackedObject ) {
136
- viewer . _balloon . viewModel . showBalloon = false ;
137
- }
129
+ //Hide the balloon if it's not the object we are following.
130
+ balloonViewModel . showBalloon = balloonedObject === trackedObject ;
138
131
}
139
- var sceneMode = viewer . scene . getFrameState ( ) . mode ;
140
132
133
+ var sceneMode = viewer . scene . getFrameState ( ) . mode ;
141
134
if ( sceneMode === SceneMode . COLUMBUS_VIEW || sceneMode === SceneMode . SCENE2D ) {
142
135
viewer . scene . getScreenSpaceCameraController ( ) . enableTranslate = typeof value === 'undefined' ;
143
136
}
@@ -158,24 +151,25 @@ define([
158
151
return balloonedObject ;
159
152
} ,
160
153
set : function ( value ) {
161
- var viewModel = viewer . _balloon . viewModel ;
162
154
var content ;
155
+ var position ;
163
156
if ( typeof value !== 'undefined' ) {
164
- if ( typeof value . dynamicObject !== 'undefined' && typeof value . dynamicObject . position !== 'undefined' ) {
165
- viewModel . position = value . dynamicObject . position . getValue ( viewer . clock . currentTime ) ;
157
+ if ( typeof value . position !== 'undefined' ) {
158
+ position = value . position . getValueCartesian ( viewer . clock . currentTime ) ;
166
159
}
160
+
167
161
if ( typeof value . balloon !== 'undefined' ) {
168
162
content = value . balloon . getValue ( viewer . clock . currentTime ) ;
169
- } else {
170
- content = value . id ;
171
163
}
172
164
173
- if ( value !== balloonedObject ) {
174
- viewModel . content = content ;
165
+ if ( typeof content === 'undefined' ) {
166
+ content = value . id ;
175
167
}
168
+ balloonViewModel . content = content ;
176
169
}
177
170
balloonedObject = value ;
178
- viewModel . showBalloon = typeof content !== 'undefined' ;
171
+ balloonViewModel . position = position ;
172
+ balloonViewModel . showBalloon = typeof content !== 'undefined' ;
179
173
}
180
174
}
181
175
} ) ;
0 commit comments