Private Sub GE_Update_Chart() '************************************************************************************ 'This procedure updates the GE chart overlay 'The input parameters are: ' None 'Notes on this procedure: ' o For a procedure in greater C_wiz to update the GE chart overlay it: ' o Sets the GE_status_chart_update flag to 1 ' o Waits for GE_interrogate_Timer to call this procedure ' o See the notes in GE_interrogate_Timer for the reasons why '************************************************************************************ 'Flag GE chart update in progress GE_status_chart_update = 2 '************************************************************************************ 'Set up chart parameters... '************************************************************************************ 'Some C_wiz co-existence code here, the objective being to establish... '... chart kml file name kml$ = ... '... chart top LH corner latitude and longitude chart_lat1# = ... chart_long1# = ... '... chart bottom RH corner latitude and longitude chart_lat2# = ... chart_long2# = ... '************************************************************************************ 'Flush the current chart overlay... '************************************************************************************ 'If a chart currently overlaid on GE... If GE_last_chart <> "" Then 'Open minimal chart kml file for output File_xkm = FreeFile Open mydirectory + GE_last_chart + ".kml" For Output As #File_xkm 'Build minimal kml file content Print #File_xkm, GE_kml_header1 Print #File_xkm, GE_kml_header2 Print #File_xkm, "</kml>" 'Close minimal chart kml file Close #File_xkm 'Send minimal chart kml file to GE (this will flush the chart overlay from 'GE) and if successful flush name of last chart overlaid on GE If GE_Send_Kml(GE_last_chart) Then GE_last_chart = "" End If '************************************************************************************ 'Build chart kml file... '************************************************************************************ 'Open chart kml file for output File_xkm = FreeFile Open mydirectory + kml$ + ".kml" For Output As #File_xkm 'Build kml file header Print #File_xkm, GE_kml_header1 Print #File_xkm, GE_kml_header2 'Start description of overlay Print #File_xkm, " <GroundOverlay>" Print #File_xkm, " <name>" + kml$ + "</name>" Print #File_xkm, " <visibility>1</visibility>" 'If chart background exists... If kml$ <> "(none)" Then 'If it really exists... If Dir(mydirectory + kml$ + ".img") <> "" Then 'Set up description of overlay opacity Print #File_xkm, " <color>" + Right$("0" + Hex(GE_launch_opacity), 2) + "FFFFFF</color>" 'Set up description of overlay background image Print #File_xkm, " <Icon>" Print #File_xkm, " <href>" + mydirectory + kml$ + ".img</href>" Print #File_xkm, " </Icon>" 'Set up description of overlay extent - GE needs this to know where to 'stick the overlay Print #File_xkm, " <LatLonBox>" Print #File_xkm, " <north>" + Format$(chart_lat1#) + "</north>" Print #File_xkm, " <south>" + Format$(chart_lat2#) + "</south>" Print #File_xkm, " <east>" + Format$(chart_long2#) + "</east>" Print #File_xkm, " <west>" + Format$(chart_long1#) + "</west>" Print #File_xkm, " </LatLonBox>" End If End If '************************************************************************************ 'Set up LookAt latitude and longitude... '************************************************************************************ 'If vessel locked to cursor and has been found... If ... Then 'Some C_wiz co-existence code here, establishing... '... latitude of vessel locked to cursor vessel_lat# = ... '... longitude of vessel locked to cursor vessel_long# = ... 'Set LookAt latitude and longitude to vessel locked to cursor lookat_lat# = vessel_lat# lookat_long# = vessel_long# 'Otherwise... Else 'Set LookAt latitude and longitude to centre of overlay lookat_lat# = (chart_lat1# + chart_lat2#) / 2 lookat_long# = (chart_long1# + chart_long2#) / 2 End If '************************************************************************************ 'Note Note Note 'Set up description of overlay LookAt - you would think this would be unneccessary 'by virtue of the SetCamera call below, however if this is left out GE will '(after the SetCamera call is digested) zoom in/out to frame the overlay '************************************************************************************ Print #File_xkm, " <LookAt>" Print #File_xkm, " <longitude>" + Format$(lookat_long#) + "</longitude>" Print #File_xkm, " <latitude>" + Format$(lookat_lat#) + "</latitude>" Print #File_xkm, " <range>" + Format$(GE_range) + "</range>" Print #File_xkm, " <heading>" + Format$(GE_bearing) + "</heading>" Print #File_xkm, " <tilt>" + Format$(GE_tilt) + "</tilt>" Print #File_xkm, " </LookAt>" 'End description of overlay Print #File_xkm, " </GroundOverlay>" Print #File_xkm, "</kml>" 'Close chart kml file Close #File_xkm 'Send chart kml file to GE (this will add the chart overlay to GE) and if 'successful update name of last chart overlaid on GE If GE_Send_Kml(kml$) Then GE_last_chart = kml$ '************************************************************************************ 'Move GE view if appropriate... '************************************************************************************ 'If view needs to be moved... If lookat_lat# <> GE_view_last_lat Or lookat_long# <> GE_view_last_long Then 'Set up error handler On Error GoTo BAD_GE 'Move the view to coincide with LookAt latitude and longitude - this call is 'made to force the view to change at top speed ("teleport" in GE parlance - 'the 6 parameter) thus overriding any user speed settings - this avoids the 'poncey bounce that GE can indulge in when changing views which stuffs up 'the range/bearing/tilt monitoring done by GE_interrogate GE_interface_view.FocusPointLatitude = lookat_lat# GE_interface_view.FocusPointLongitude = lookat_long# GE_interface_view.range = GE_range GE_interface_view.Tilt = GE_tilt GE_interface_view.Azimuth = GE_bearing Call GE_interface.SetCamera(GE_interface_view, 6) 'Give GE a chance to digest it DoEvents 'Turn default error handling back on On Error GoTo 0 'Update latitude and longitude to which view was last moved GE_view_last_lat = lookat_lat# GE_view_last_long = lookat_long# End If 'If GE chart update in progress then flag GE chart update not required (it is 'possible for this flag to be flicked to "GE chart update required" during the 'execution of this procedure, in which case don't change it) If GE_status_chart_update = 2 Then GE_status_chart_update = 0 'Quit Exit Sub '************************************************************************************ 'This GOSUB handles a GE error... '************************************************************************************ BAD_GE: 'Turn default error handling back on On Error GoTo 0 'In the next split second a similar error should occur in GE_interrogate_Timer 'which can tidy up End Sub