30#include <wx/dcmemory.h>
32#include <wx/glcanvas.h>
33#include <wx/notebook.h>
39#include "model/idents.h"
42#include "model/own_ship.h"
44#include "model/route.h"
45#include "model/track.h"
52#include "glChartCanvas.h"
56#include "OCPN_AUIManager.h"
57#include "ocpn_frame.h"
58#include "OCPNPlatform.h"
63#include "routemanagerdialog.h"
64#include "routeman_gui.h"
66#include "SoundFactory.h"
68#include "SystemCmdSound.h"
70#include "waypointman_gui.h"
71#include "shapefile_basemap.h"
78#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
79extern wxLocale* plocale_def_lang;
88extern bool g_bShowChartBar;
92extern RouteList* pRouteList;
93extern std::vector<Track*> g_TrackList;
95extern s52plib* ps52plib;
96extern wxString ChartListFileName;
98extern ColorScheme global_color_scheme;
99extern wxArrayString g_locale_catalog_array;
100extern int g_GUIScaleFactor;
101extern int g_ChartScaleFactor;
102extern wxString g_locale;
105extern int g_chart_zoom_modifier_raster;
106extern int g_chart_zoom_modifier_vector;
108extern bool g_bopengl;
114extern unsigned int g_canvasConfig;
116extern wxString g_CmdSoundString;
118unsigned int gs_plib_flags;
121extern bool g_bquiting;
122extern bool g_disable_main_toolbar;
123extern bool g_btenhertz;
124extern bool g_CanvasHideNotificationIcon;
125extern wxString g_default_wp_icon;
126extern bool g_bhide_route_console;
127extern bool g_bhide_context_menus;
128extern int g_maxzoomin;
129extern bool g_bhide_depth_units;
130extern bool g_bhide_overzoom_flag;
134WX_DEFINE_ARRAY_PTR(
ChartCanvas*, arrayofCanvasPtr);
135extern arrayofCanvasPtr g_canvasArray;
137void NotifySetupOptionsPlugin(
const PlugInData* pic);
152 wxItemKind kind, wxString shortHelp, wxString longHelp,
153 wxObject* clientData,
int position,
int tool_sel,
156 return s_ppim->AddToolbarTool(label, bitmap, bmpRollover, kind, shortHelp,
157 longHelp, clientData, position, tool_sel,
164 if (s_ppim) s_ppim->RemoveToolbarTool(tool_id);
168 if (s_ppim) s_ppim->SetToolbarToolViz(item, viz);
172 if (s_ppim) s_ppim->SetToolbarItemState(item, toggle);
176 if (s_ppim) s_ppim->SetToolbarItemBitmaps(item, bitmap, bmpRollover);
180 wxString SVGfileRollover, wxString SVGfileToggled,
181 wxItemKind kind, wxString shortHelp, wxString longHelp,
182 wxObject* clientData,
int position,
int tool_sel,
185 return s_ppim->AddToolbarTool(label, SVGfile, SVGfileRollover,
186 SVGfileToggled, kind, shortHelp, longHelp,
187 clientData, position, tool_sel, pplugin);
193 wxString SVGfileRollover,
194 wxString SVGfileToggled) {
196 s_ppim->SetToolbarItemBitmaps(item, SVGfile, SVGfileRollover,
204 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin, name,
false);
210 if (s_ppim) s_ppim->SetCanvasContextMenuItemViz(item, viz, name);
214 if (s_ppim) s_ppim->SetCanvasContextMenuItemGrey(item, grey, name);
218 if (s_ppim) s_ppim->RemoveCanvasContextMenuItem(item, name);
224 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
"",
false);
239int AddCanvasContextMenuItemExt(wxMenuItem* pitem,
opencpn_plugin* pplugin,
240 const std::string object_type) {
243 return s_ppim->AddCanvasContextMenuItemPIM(pitem, pplugin,
244 object_type.c_str(),
true);
252 return reinterpret_cast<wxFileConfig*
>(
259 wxWindow* pret = NULL;
261 MyFrame* pFrame = s_ppim->GetParentFrame();
262 pret = (wxWindow*)pFrame->GetPrimaryCanvas();
268 if (win) win->Refresh(
true);
328 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
331wxFont* GetOCPNScaledFont_PlugIn(wxString TextElement,
int default_size) {
332 return FontMgr::Get().GetFontLegacy(TextElement, default_size);
336 return g_Platform->GetToolbarScaleFactor(GUIScaleFactor);
340 return g_Platform->GetToolbarScaleFactor(g_GUIScaleFactor);
344 return g_Platform->GetChartScaleFactorExp(g_ChartScaleFactor);
352 return FontMgr::Get().
AddAuxKey(TextElement);
357 return g_StyleManager->GetCurrentStyle()->name;
363 unsigned int height) {
364 wxBitmap bmp = LoadSVG(filename, width, height);
372 SVGDocumentPixelSize(filename, w, h);
373 if (w == 0 || h == 0) {
380 return LoadSVG(filename, w, h);
391 return g_Platform->GetSharedDataDirPtr();
395 if (!g_pAIS)
return NULL;
397 ArrayOfPlugIn_AIS_Targets* pret =
new ArrayOfPlugIn_AIS_Targets;
400 for (
const auto& it : g_pAIS->GetTargetList()) {
409 td.n_alarm_state = AIS_ALARM_SET;
419 SendMessageToAllPlugins(message_id, message_body);
427 Nevent.SetID(message_id);
428 Nevent.SetJSONText(message_body);
429 gFrame->GetEventHandler()->AddPendingEvent(Nevent);
435 gFrame->JumpToPosition(gFrame->GetFocusCanvas(), lat, lon,
scale);
440#if wxUSE_XLOCALE || !wxCHECK_VERSION(3, 0, 0)
442 if (plocale_def_lang) {
444 g_locale_catalog_array.Add(catalog);
446 return plocale_def_lang->AddCatalog(catalog);
456 std::string full_sentence = buf.ToStdString();
458 if ((full_sentence[0] ==
'$') || (full_sentence[0] ==
'!')) {
460 std::string
id = full_sentence.substr(1, 5);
463 auto address = std::make_shared<NavAddr0183>(
"virtual");
464 auto msg = std::make_shared<const Nmea0183Msg>(
id, full_sentence, address);
465 NavMsgBus::GetInstance().
Notify(std::move(msg));
471 wxXmlDocument doc =
ChartData->GetXMLDescription(dbIndex, b_getGeom);
477 bool b_ProgressDialog) {
479 ArrayOfCDI ChartDirArray;
480 for (
unsigned int i = 0; i < dir_array.GetCount(); i++) {
481 wxString dirname = dir_array[i];
483 cdi.fullpath = dirname;
484 cdi.magic_number =
"";
485 ChartDirArray.Add(cdi);
487 bool b_ret = gFrame->UpdateChartDatabaseInplace(
488 ChartDirArray, b_force_update, b_ProgressDialog, ChartListFileName);
489 gFrame->RefreshGroupIndices();
490 gFrame->ChartsRefresh();
495 return ChartData->GetChartDirArrayString();
500 wxFileName fn(full_path);
501 wxString fdir = fn.GetPath();
505 bret =
ChartData->AddSingleChart(full_path);
509 pConfig->UpdateChartDirs(
ChartData->GetChartDirArray());
510 ChartData->SaveBinary(ChartListFileName);
513 ArrayOfCDI XnewChartDirArray;
514 pConfig->LoadChartDirArray(XnewChartDirArray);
522 if (g_options && g_options->IsShown())
523 g_options->UpdateDisplayedChartDirList(
ChartData->GetChartDirArray());
525 if (b_RefreshCanvas || !gFrame->GetPrimaryCanvas()->GetQuiltMode()) {
526 gFrame->ChartsRefresh();
536 bret =
ChartData->RemoveSingleChart(full_path);
539 pConfig->UpdateChartDirs(
ChartData->GetChartDirArray());
540 ChartData->SaveBinary(ChartListFileName);
543 ArrayOfCDI XnewChartDirArray;
544 pConfig->LoadChartDirArray(XnewChartDirArray);
552 if (g_options && g_options->IsShown())
553 g_options->UpdateDisplayedChartDirList(
ChartData->GetChartDirArray());
555 gFrame->ChartsRefresh();
565 if (!g_pOptions)
return NULL;
570 parentid = g_pOptions->m_pageDisplay;
573 parentid = g_pOptions->m_pageConnections;
576 parentid = g_pOptions->m_pageCharts;
579 parentid = g_pOptions->m_pageShips;
582 parentid = g_pOptions->m_pageUI;
585 parentid = g_pOptions->m_pagePlugins;
588 wxLogMessage(
"Error in PluginManager::AddOptionsPage: Unknown parent");
593 return g_pOptions->AddPage(parentid, title);
597 if (!g_pOptions)
return false;
598 return g_pOptions->DeletePluginPage(page);
602 wxString* accumulator) {
603 if (!pos)
return false;
606 AisError nerr = AIS_GENERIC_ERROR;
607 if (g_pAIS) nerr = g_pAIS->DecodeSingleVDO(str, &gpd, accumulator);
608 if (nerr == AIS_NoError) {
629 if (g_bShowChartBar) {
631 if (cc && cc->GetPiano()) {
632 val = cc->GetPiano()->GetHeight();
638bool GetRoutepointGPX(
RoutePoint* pRoutePoint,
char* buffer,
639 unsigned int buffer_length) {
643 pgpx->AddGPXWaypoint(pRoutePoint);
644 wxString gpxfilename = wxFileName::CreateTempFileName(
"gpx");
645 pgpx->SaveFile(gpxfilename);
648 wxFFile gpxfile(gpxfilename);
650 if (gpxfile.ReadAll(&s)) {
651 if (s.Length() < buffer_length) {
652 strncpy(buffer, (
const char*)s.mb_str(wxConvUTF8), buffer_length - 1);
658 ::wxRemoveFile(gpxfilename);
664 if (g_pRouteMan->IsAnyRouteActive())
665 return GetRoutepointGPX(g_pRouteMan->GetpActivePoint(), buffer,
672 double dist,
double* dlat,
674 PositionBearingDistanceMercator(lat, lon, brg, dist, dlat, dlon);
678 double lon1,
double* brg,
double* dist) {
679 DistanceBearingMercator(lat0, lon0, lat1, lon1, brg, dist);
684 return DistGreatCircle(slat, slon, dlat, dlon);
687void toTM_Plugin(
float lat,
float lon,
float lat0,
float lon0,
double* x,
689 toTM(lat, lon, lat0, lon0, x, y);
692void fromTM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
694 fromTM(x, y, lat0, lon0, lat, lon);
697void toSM_Plugin(
double lat,
double lon,
double lat0,
double lon0,
double* x,
699 toSM(lat, lon, lat0, lon0, x, y);
702void fromSM_Plugin(
double x,
double y,
double lat0,
double lon0,
double* lat,
704 fromSM(x, y, lat0, lon0, lat, lon);
708 double* x,
double* y) {
709 toSM_ECC(lat, lon, lat0, lon0, x, y);
713 double* lat,
double* lon) {
714 fromSM_ECC(x, y, lat0, lon0, lat, lon);
718 return toUsrDistance(nm_distance,
unit);
722 return fromUsrDistance(usr_distance,
unit);
726 return toUsrSpeed(kts_speed,
unit);
730 return toUsrWindSpeed(kts_speed,
unit);
734 return fromUsrSpeed(usr_speed,
unit);
738 return fromUsrWindSpeed(usr_wspeed,
unit);
742 return toUsrTemp(cel_temp,
unit);
746 return fromUsrTemp(usr_temp,
unit);
750 return getUsrDistanceUnit(
unit);
756 return getUsrWindSpeedUnit(
unit);
765 return toUsrDepth(m_depth,
unit);
769 return fromUsrDepth(usr_depth,
unit);
783 static bool loaded =
false;
785 gshhsCrossesLandInit();
788 return gshhsCrossesLand(lat1, lon1, lat2, lon2);
804 const wxString& icon_ident,
805 const wxString& wp_name,
806 const wxString& GUID) {
807 wxDateTime now = wxDateTime::Now();
818PlugIn_Waypoint::~PlugIn_Waypoint() {}
821PlugIn_Route::PlugIn_Route(
void) {
pWaypointList =
new Plugin_WaypointList; }
823PlugIn_Route::~PlugIn_Route(
void) {
831PlugIn_Track::PlugIn_Track(
void) {
pWaypointList =
new Plugin_WaypointList; }
833PlugIn_Track::~PlugIn_Track(
void) {
843 wxString description) {
844 wxImage image = pimage->ConvertToImage();
845 WayPointmanGui(*pWayPointMan).ProcessIcon(image, key, description);
854 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
860 h->Link = link->
Link;
861 h->LType = link->
Type;
865 linknode = linknode->GetNext();
875 bool b_unique =
true;
876 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
884 prpnode = prpnode->GetNext();
887 if (!b_unique)
return false;
895 cloneHyperlinkList(pWP, pwaypoint);
905 pWP->
m_btemp = (b_permanent ==
false);
910 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
913 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
914 pRouteManagerDialog->UpdateWptListCtrl();
921 bool b_found =
false;
922 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
924 if (prp) b_found =
true;
927 pWayPointMan->DestroyWaypoint(prp);
928 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
929 pRouteManagerDialog->UpdateWptListCtrl();
937 bool b_found =
false;
940 if (prp) b_found =
true;
943 double lat_save = prp->m_lat;
944 double lon_save = prp->m_lon;
946 prp->m_lat = pwaypoint->
m_lat;
947 prp->m_lon = pwaypoint->
m_lon;
960 wxPlugin_HyperlinkListNode* linknode =
967 h->Link = link->
Link;
968 h->LType = link->
Type;
972 linknode = linknode->GetNext();
977 if (prp) prp->ReLoadIcon();
979 auto canvas = gFrame->GetPrimaryCanvas();
980 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
981 canvas->GetScaleValue());
983 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
985 pFind->m_slat = pwaypoint->
m_lat;
986 pFind->m_slon = pwaypoint->
m_lon;
991 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
994 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
995 pRouteManagerDialog->UpdateWptListCtrl();
1004 dst->
m_lat = src->m_lat;
1005 dst->
m_lon = src->m_lon;
1028 h->
Link = link->Link;
1029 h->
Type = link->LType;
1033 linknode = linknode->GetNext();
1040 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
1042 if (!prp)
return false;
1044 PlugInFromRoutePoint(pwaypoint, prp);
1050 wxArrayString result;
1051 const RoutePointList* list = pWayPointMan->GetWaypointList();
1053 wxRoutePointListNode* prpnode = list->GetFirst();
1058 prpnode = prpnode->GetNext();
1065 wxArrayString result;
1066 RouteList* list = pRouteList;
1068 wxRouteListNode* prpnode = list->GetFirst();
1070 Route* proute = prpnode->GetData();
1071 result.Add(proute->
m_GUID);
1073 prpnode = prpnode->GetNext();
1080 wxArrayString result;
1081 for (
Track* ptrack : g_TrackList) {
1082 result.Add(ptrack->m_GUID);
1089 wxArrayString result;
1090 const RoutePointList* list = pWayPointMan->GetWaypointList();
1092 wxRoutePointListNode* prpnode = list->GetFirst();
1107 prpnode = prpnode->GetNext();
1114 wxArrayString result;
1115 RouteList* list = pRouteList;
1117 wxRouteListNode* prpnode = list->GetFirst();
1119 Route* proute = prpnode->GetData();
1122 result.Add(proute->
m_GUID);
1132 prpnode = prpnode->GetNext();
1139 wxArrayString result;
1140 for (
Track* ptrack : g_TrackList) {
1143 result.Add(ptrack->m_GUID);
1146 if (!ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1149 if (ptrack->m_bIsInLayer) result.Add(ptrack->m_GUID);
1158 wxArrayString result;
1160 for (
int i = 0; i < pWayPointMan->GetNumIcons(); i++) {
1161 wxString* ps = pWayPointMan->GetIconKey(i);
1173 wxDateTime plannedDeparture;
1175 wxPlugin_WaypointListNode* pwpnode = proute->
pWaypointList->GetFirst();
1177 pwp = pwpnode->GetData();
1183 cloneHyperlinkList(pWP, pwp);
1188 route->AddPoint(pWP);
1190 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
1193 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
1194 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1201 pwpnode = pwpnode->GetNext();
1209 if (!proute->
m_GUID.IsEmpty()) {
1212 route->
m_btemp = (b_permanent ==
false);
1214 pRouteList->Append(route);
1218 NavObj_dB::GetInstance().InsertRoute(route);
1220 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1221 pRouteManagerDialog->UpdateRouteListCtrl();
1227 bool b_found =
false;
1230 Route* pRoute = g_pRouteMan->FindRouteByGUID(GUID);
1239 bool b_found =
false;
1242 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
1243 if (pRoute) b_found =
true;
1246 bool b_permanent = (pRoute->
m_btemp ==
false);
1261 wxPlugin_WaypointListNode* pwpnode = ptrack->
pWaypointList->GetFirst();
1263 pwp = pwpnode->GetData();
1268 track->AddPoint(pWP);
1271 pSelect->AddSelectableTrackSegment(pWP_src->m_lat, pWP_src->m_lon,
1272 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
1277 pwpnode = pwpnode->GetNext();
1283 track->m_GUID = ptrack->
m_GUID;
1284 track->m_btemp = (b_permanent ==
false);
1286 g_TrackList.push_back(track);
1287 if (b_permanent) NavObj_dB::GetInstance().InsertTrack(track);
1290 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1291 pRouteManagerDialog->UpdateTrkListCtrl();
1297 bool b_found =
false;
1300 Track* pTrack = g_pRouteMan->FindTrackByGUID(GUID);
1302 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1307 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
1308 pRouteManagerDialog->UpdateTrkListCtrl();
1314 bool b_found =
false;
1317 Track* pTrack = g_pRouteMan->FindTrackByGUID(ptrack->
m_GUID);
1318 if (pTrack) b_found =
true;
1321 bool b_permanent = (pTrack->m_btemp ==
false);
1322 NavObj_dB::GetInstance().DeleteTrack(pTrack);
1336 return glChartCanvas::HasNormalizedViewPort(ocpn_vp);
1362 glChartCanvas::NormalizedViewPort(ocpn_vp, lat, lon);
1381 pret->
MMSI = ptarget->MMSI;
1382 pret->
Class = ptarget->Class;
1384 pret->
SOG = ptarget->SOG;
1385 pret->
COG = ptarget->COG;
1386 pret->
HDG = ptarget->HDG;
1387 pret->
Lon = ptarget->Lon;
1388 pret->
Lat = ptarget->Lat;
1389 pret->
ROTAIS = ptarget->ROTAIS;
1390 pret->
ShipType = ptarget->ShipType;
1391 pret->
IMO = ptarget->IMO;
1393 pret->
Range_NM = ptarget->Range_NM;
1394 pret->
Brg = ptarget->Brg;
1398 pret->
TCPA = ptarget->TCPA;
1399 pret->
CPA = ptarget->CPA;
1403 memcpy(pret->CallSign, ptarget->CallSign,
sizeof(ptarget->CallSign) - 1);
1404 memcpy(pret->ShipName, ptarget->ShipName,
sizeof(ptarget->ShipName) - 1);
1423 gFrame->GetPrimaryCanvas()->DoRotateCanvas(rotation);
1429 gFrame->GetPrimaryCanvas()->DoTiltCanvas(tilt);
1433 gFrame->GetPrimaryCanvas()->SetVPProjection(projection);
1436OcpnSound* g_PluginSound = SoundFactory();
1437static void onPlugInPlaySoundExFinished(
void* ptr) {}
1441 bool ok = g_PluginSound->Load(sound_file, deviceIndex);
1443 wxLogWarning(
"Cannot load sound file: %s", sound_file);
1446 auto cmd_sound =
dynamic_cast<SystemCmdSound*
>(g_PluginSound);
1447 if (cmd_sound) cmd_sound->SetCmd(g_CmdSoundString.mb_str(wxConvUTF8));
1449 g_PluginSound->SetFinishedCallback(onPlugInPlaySoundExFinished, NULL);
1450 ok = g_PluginSound->Play();
1452 wxLogWarning(
"Cannot play sound file: %s", sound_file);
1458 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1464 return style->GetIcon(name);
1468 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1473 g_options->AddChartDir(path);
1479 g_options->pScanCheckBox->SetValue(
true);
1480 g_options->pUpdateCheckBox->SetValue(
true);
1486 g_options->pUpdateCheckBox->SetValue(
true);
1493 wxString Title, wxString initDir) {
1494 return g_Platform->DoDirSelectorDialog(parent, file_spec, Title, initDir);
1498 wxString Title, wxString initDir,
1499 wxString suggestedName, wxString wildcard) {
1500 return g_Platform->DoFileSelectorDialog(parent, file_spec, Title, initDir,
1501 suggestedName, wildcard);
1524 if (gFrame->GetPrimaryCanvas())
1525 vp.
ref_scale = gFrame->GetPrimaryCanvas()->GetVP().ref_scale;
1536 ViewPort ocpn_vp = CreateCompatibleViewportEx(vp);
1541 AISDraw(dc, ocpn_vp, NULL);
1545 return FontMgr::Get().
SetFontColor(TextElement, color);
1555 wxFontStyle style, wxFontWeight weight,
1556 bool underline,
const wxString& facename,
1557 wxFontEncoding encoding) {
1559 underline, facename, encoding);
1562int PluginGetMinAvailableGshhgQuality() {
1563 return gFrame->GetPrimaryCanvas()->GetMinAvailableGshhgQuality();
1565int PluginGetMaxAvailableGshhgQuality() {
1566 return gFrame->GetPrimaryCanvas()->GetMaxAvailableGshhgQuality();
1571 g_bPluginHandleAutopilotRoute = enable;
1574bool LaunchDefaultBrowser_Plugin(wxString url) {
1575 if (g_Platform) g_Platform->platformLaunchDefaultBrowser(url);
1585 if (cc && cc->GetSelectedRoutePoint()) {
1586 return cc->GetSelectedRoutePoint()->
m_GUID;
1588 return wxEmptyString;
1593 if (cc && cc->GetSelectedRoute()) {
1594 return cc->GetSelectedRoute()->
m_GUID;
1596 return wxEmptyString;
1601 if (cc && cc->GetSelectedTrack()) {
1602 return cc->GetSelectedTrack()->m_GUID;
1604 return wxEmptyString;
1614 std::unique_ptr<PlugIn_Route> r;
1615 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
1616 if (route ==
nullptr)
return r;
1626 src_wp = node->GetData();
1629 PlugInFromRoutePoint(dst_wp, src_wp);
1633 node = node->GetNext();
1644 std::unique_ptr<PlugIn_Track> t;
1646 Track* pTrack = g_pRouteMan->FindTrackByGUID(GUID);
1647 if (!pTrack)
return t;
1649 std::unique_ptr<PlugIn_Track> tk =
1654 dst_track->
m_EndString = pTrack->m_TrackEndString;
1655 dst_track->
m_GUID = pTrack->m_GUID;
1657 for (
int i = 0; i < pTrack->GetnPoints(); i++) {
1662 dst_wp->
m_lat = ptp->m_lat;
1663 dst_wp->
m_lon = ptp->m_lon;
1682 auto oCanvas =
dynamic_cast<ChartCanvas*
>(canvas);
1683 if (oCanvas) gFrame->JumpToPosition(oCanvas, lat, lon,
scale);
1691 ChartCanvas* l_canvas = gFrame->GetCanvasUnderMouse();
1693 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); ++i) {
1694 if (l_canvas == g_canvasArray[i])
return i;
1712 if (g_canvasConfig == 0)
1713 return gFrame->GetPrimaryCanvas();
1715 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1716 return g_canvasArray[canvasIndex];
1724 if (g_canvasConfig == 0)
1725 return gFrame->GetPrimaryCanvas()->CheckEdgePan(x, y, dragging, margin,
1728 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1729 return g_canvasArray[canvasIndex]->CheckEdgePan(x, y, dragging, margin,
1738 if (g_canvasConfig == 0)
1739 gFrame->GetPrimaryCanvas()->pPlugIn_Cursor = pCursor;
1741 if ((canvasIndex >= 0) && g_canvasArray[canvasIndex]) {
1742 g_canvasArray[canvasIndex]->pPlugIn_Cursor = pCursor;
1748 if (g_canvasConfig == 1)
return 2;
1757 return g_MainToolbar->GetToolbarRect();
1759 return wxRect(0, 0, 1, 1);
1768 g_pRouteMan->ZeroCurrentXTEToActivePoint();
1789 pivp.
lat_min = tvp.GetBBox().GetMinLat();
1790 pivp.
lat_max = tvp.GetBBox().GetMaxLat();
1791 pivp.
lon_min = tvp.GetBBox().GetMinLon();
1792 pivp.
lon_max = tvp.GetBBox().GetMaxLon();
1794 pivp.
bValid = tvp.IsValid();
1799ListOfPI_S57Obj* PlugInManager::GetLightsObjRuleListVisibleAtLatLon(
1801 ListOfPI_S57Obj* list = NULL;
1815 list = picbx->GetLightsObjRuleListVisibleAtLatLon(zlat, zlon, &pi_vp);
1826#include <wx/listimpl.cpp>
1827WX_DEFINE_LIST(Plugin_WaypointExList)
1830PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex() {
InitDefaults(); }
1832PlugIn_Waypoint_Ex::PlugIn_Waypoint_Ex(
1833 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1834 const wxString& GUID,
const double ScaMin,
const bool bNameVisible,
1835 const int nRangeRings,
const double RangeDistance,
1836 const wxColor RangeColor) {
1868 if (!prp)
return false;
1870 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1881 wxRouteListNode* node = pRouteList->GetFirst();
1883 Route* proute = node->GetData();
1887 if (prp == pWP) nCount++;
1888 pnode = pnode->GetNext();
1891 node = node->GetNext();
1897PlugIn_Waypoint_Ex::~PlugIn_Waypoint_Ex() {}
1899WX_DEFINE_LIST(Plugin_WaypointExV2List)
1901PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2() {
InitDefaults(); }
1903PlugIn_Waypoint_ExV2::PlugIn_Waypoint_ExV2(
1904 double lat,
double lon,
const wxString& icon_ident,
const wxString& wp_name,
1905 const wxString& GUID,
const double ScaMin,
const double ScaMax,
1906 const bool bNameVisible,
const int nRangeRings,
const double RangeDistance,
1907 const int RangeDistanceUnits,
const wxColor RangeColor,
1908 const double WaypointArrivalRadius,
const bool ShowWaypointRangeRings,
1909 const double PlannedSpeed,
const wxString TideStation) {
1955PlugIn_Waypoint_ExV2::~PlugIn_Waypoint_ExV2() {}
1959 if (!prp)
return false;
1960 if (prp->
m_bIsInRoute && !prp->IsShared())
return false;
1970 wxRouteListNode* node = pRouteList->GetFirst();
1972 Route* proute = node->GetData();
1976 if (prp == pWP) nCount++;
1977 pnode = pnode->GetNext();
1980 node = node->GetNext();
1986PlugIn_Route_ExV2::PlugIn_Route_ExV2() {
1998 wxDateTime now = wxDateTime::Now();
1999 m_GUID = wxString::Format(
"RT%d%d%d%d", (
int)now.GetMillisecond(),
2000 (
int)now.GetSecond(), (
int)now.GetMinute(),
2001 (
int)now.GetHour());
2005PlugIn_Route_ExV2::~PlugIn_Route_ExV2() {
2015 dst->
m_lat = src->m_lat;
2016 dst->
m_lon = src->m_lon;
2017 dst->
IconName = src->GetIconName();
2020 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
2039 h->
Link = link->Link;
2040 h->
Type = link->LType;
2044 linknode = linknode->GetNext();
2058 dst->
scamin = src->GetScaMin();
2062 dst->
scamax = src->GetScaMax();
2071 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
2073 if (!prp)
return false;
2075 PlugInExV2FromRoutePoint(pwaypoint, prp);
2080static void cloneHyperlinkListExV2(
RoutePoint* dst,
2086 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
2092 h->Link = link->
Link;
2093 h->LType = link->
Type;
2097 linknode = linknode->GetNext();
2108 cloneHyperlinkListExV2(pWP, src);
2118 pWP->
m_btemp = (b_permanent ==
false);
2127 pWP->SetScaMin(src->
scamin);
2134 pWP->SetScaMax(src->
scamax);
2136 if (src->
m_ETD.IsValid())
2139 pWP->
SetETD(wxEmptyString);
2149 bool b_unique =
true;
2150 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
2158 prpnode = prpnode->GetNext();
2161 if (!b_unique)
return false;
2163 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2165 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2167 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2170 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2173 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2174 pRouteManagerDialog->UpdateWptListCtrl();
2181 bool b_found =
false;
2184 if (prp) b_found =
true;
2187 double lat_save = prp->m_lat;
2188 double lon_save = prp->m_lon;
2190 prp->m_lat = pwaypoint->
m_lat;
2191 prp->m_lon = pwaypoint->
m_lon;
2192 prp->SetIconName(pwaypoint->
IconName);
2204 wxPlugin_HyperlinkListNode* linknode =
2211 h->Link = link->
Link;
2212 h->LType = link->
Type;
2216 linknode = linknode->GetNext();
2222 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2227 prp->SetScaMin(pwaypoint->
scamin);
2231 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2233 if (prp) prp->ReLoadIcon();
2235 auto canvas = gFrame->GetPrimaryCanvas();
2236 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2237 canvas->GetScaleValue());
2239 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2241 pFind->m_slat = pwaypoint->
m_lat;
2242 pFind->m_slon = pwaypoint->
m_lon;
2247 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2250 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2251 pRouteManagerDialog->UpdateWptListCtrl();
2254 if (pwaypoint->
m_ETD.IsValid())
2257 prp->
SetETD(wxEmptyString);
2260 prp->SetScaMax(pwaypoint->
scamax);
2267 const wxString& GUID) {
2279 wxDateTime plannedDeparture;
2281 wxPlugin_WaypointExV2ListNode* pwpnode = proute->
pWaypointList->GetFirst();
2283 pwaypointex = pwpnode->GetData();
2285 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2287 pWP = CreateNewPoint(pwaypointex, b_permanent);
2291 route->AddPoint(pWP);
2293 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2296 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2297 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2304 pwpnode = pwpnode->GetNext();
2312 if (!proute->
m_GUID.IsEmpty()) {
2315 route->
m_btemp = (b_permanent ==
false);
2319 pRouteList->Append(route);
2323 NavObj_dB::GetInstance().InsertRoute(route);
2326 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2327 pRouteManagerDialog->UpdateRouteListCtrl();
2333 bool b_found =
false;
2336 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
2337 if (pRoute) b_found =
true;
2340 bool b_permanent = !pRoute->
m_btemp;
2350 std::unique_ptr<PlugIn_Route_ExV2> r;
2351 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
2352 if (route ==
nullptr)
return r;
2361 src_wp = node->GetData();
2364 PlugInExV2FromRoutePoint(dst_wp, src_wp);
2368 node = node->GetNext();
2374 dst_route->
m_isActive = g_pRouteMan->GetpActiveRoute() == route;
2382PlugIn_Route_Ex::PlugIn_Route_Ex(
void) {
2386PlugIn_Route_Ex::~PlugIn_Route_Ex(
void) {
2398 dst->
m_lat = src->m_lat;
2399 dst->
m_lon = src->m_lon;
2400 dst->
IconName = src->GetIconName();
2403 dst->
IconDescription = pWayPointMan->GetIconDescription(src->GetIconName());
2422 h->
Link = link->Link;
2423 h->
Type = link->LType;
2427 linknode = linknode->GetNext();
2439 dst->
scamin = src->GetScaMin();
2444static void cloneHyperlinkListEx(
RoutePoint* dst,
2450 wxPlugin_HyperlinkListNode* linknode = src->
m_HyperlinkList->GetFirst();
2456 h->Link = link->
Link;
2457 h->LType = link->
Type;
2461 linknode = linknode->GetNext();
2472 cloneHyperlinkListEx(pWP, src);
2482 pWP->
m_btemp = (b_permanent ==
false);
2489 pWP->SetScaMin(src->
scamin);
2498 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(GUID);
2500 if (!prp)
return false;
2502 PlugInExFromRoutePoint(pwaypoint, prp);
2512 bool b_unique =
true;
2513 wxRoutePointListNode* prpnode = pWayPointMan->GetWaypointList()->GetFirst();
2521 prpnode = prpnode->GetNext();
2524 if (!b_unique)
return false;
2526 RoutePoint* pWP = CreateNewPoint(pwaypointex, b_permanent);
2528 pWP->SetShowWaypointRangeRings(pwaypointex->
nrange_rings > 0);
2530 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2533 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
2535 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2536 pRouteManagerDialog->UpdateWptListCtrl();
2543 bool b_found =
false;
2546 if (prp) b_found =
true;
2549 double lat_save = prp->m_lat;
2550 double lon_save = prp->m_lon;
2552 prp->m_lat = pwaypoint->
m_lat;
2553 prp->m_lon = pwaypoint->
m_lon;
2554 prp->SetIconName(pwaypoint->
IconName);
2566 wxPlugin_HyperlinkListNode* linknode =
2573 h->Link = link->
Link;
2574 h->LType = link->
Type;
2578 linknode = linknode->GetNext();
2584 prp->SetWaypointRangeRingsNumber(pwaypoint->
nrange_rings);
2587 prp->SetScaMin(pwaypoint->
scamin);
2591 prp->SetShowWaypointRangeRings(pwaypoint->
nrange_rings > 0);
2593 if (prp) prp->ReLoadIcon();
2595 auto canvas = gFrame->GetPrimaryCanvas();
2596 SelectCtx ctx(canvas->m_bShowNavobjects, canvas->GetCanvasTrueScale(),
2597 canvas->GetScaleValue());
2599 pSelect->FindSelection(ctx, lat_save, lon_save, SELTYPE_ROUTEPOINT);
2601 pFind->m_slat = pwaypoint->
m_lat;
2602 pFind->m_slon = pwaypoint->
m_lon;
2607 NavObj_dB::GetInstance().UpdateRoutePoint(prp);
2610 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2611 pRouteManagerDialog->UpdateWptListCtrl();
2623 wxDateTime plannedDeparture;
2625 wxPlugin_WaypointExListNode* pwpnode = proute->
pWaypointList->GetFirst();
2627 pwaypointex = pwpnode->GetData();
2629 pWP = pWayPointMan->FindRoutePointByGUID(pwaypointex->
m_GUID);
2631 pWP = CreateNewPoint(pwaypointex, b_permanent);
2635 route->AddPoint(pWP);
2637 pSelect->AddSelectableRoutePoint(pWP->m_lat, pWP->m_lon, pWP);
2640 pSelect->AddSelectableRouteSegment(pWP_src->m_lat, pWP_src->m_lon,
2641 pWP->m_lat, pWP->m_lon, pWP_src, pWP,
2648 pwpnode = pwpnode->GetNext();
2656 if (!proute->
m_GUID.IsEmpty()) {
2659 route->
m_btemp = (b_permanent ==
false);
2663 pRouteList->Append(route);
2667 NavObj_dB::GetInstance().InsertRoute(route);
2670 if (pRouteManagerDialog && pRouteManagerDialog->IsShown())
2671 pRouteManagerDialog->UpdateRouteListCtrl();
2677 bool b_found =
false;
2680 Route* pRoute = g_pRouteMan->FindRouteByGUID(proute->
m_GUID);
2681 if (pRoute) b_found =
true;
2684 bool b_permanent = !pRoute->
m_btemp;
2699 std::unique_ptr<PlugIn_Route_Ex> r;
2700 Route* route = g_pRouteMan->FindRouteByGUID(GUID);
2701 if (route ==
nullptr)
return r;
2711 src_wp = node->GetData();
2714 PlugInExFromRoutePoint(dst_wp, src_wp);
2718 node = node->GetNext();
2724 dst_route->
m_isActive = g_pRouteMan->GetpActiveRoute() == route;
2733 RoutePoint* rp = g_pRouteMan->GetpActivePoint();
2735 return wxEmptyString;
2742 Route* rt = g_pRouteMan->GetpActiveRoute();
2744 return wxEmptyString;
2754 MyApp& app = wxGetApp();
2755 return (app.m_comm_bridge.GetPriorityMaps());
2759 MyApp& app = wxGetApp();
2760 app.m_comm_bridge.UpdateAndApplyMaps(map);
2764 std::vector<std::string> result;
2766 MyApp& app = wxGetApp();
2769 app.m_comm_bridge.GetPriorityContainer(
"position").active_source;
2770 result.push_back(
id);
2771 id = app.m_comm_bridge.GetPriorityContainer(
"velocity").active_source;
2772 result.push_back(
id);
2773 id = app.m_comm_bridge.GetPriorityContainer(
"heading").active_source;
2774 result.push_back(
id);
2775 id = app.m_comm_bridge.GetPriorityContainer(
"variation").active_source;
2776 result.push_back(
id);
2777 id = app.m_comm_bridge.GetPriorityContainer(
"satellites").active_source;
2778 result.push_back(
id);
2785#if defined(__WXOSX__) || defined(__WXGTK3__)
2787 if (gFrame) rv = gFrame->GetContentScaleFactor();
2792 double scaler = 1.0;
2794 if (gFrame) scaler = (double)(gFrame->ToDIP(100)) / 100.;
2811 bool state = gFrame->IsFullScreen();
2812 if (set_full_screen_on && !state)
2813 gFrame->ToggleFullScreen();
2814 else if (!set_full_screen_on && state)
2815 gFrame->ToggleFullScreen();
2818extern bool g_useMUI;
2820 bool current_mui_state = g_useMUI;
2823 if (enable && !current_mui_state) {
2825 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2827 if (cc) cc->CreateMUIBar();
2829 }
else if (!enable && current_mui_state) {
2831 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2833 if (cc) cc->DestroyMuiBar();
2842 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2843 if (cc) cc->SetShowGPSCompassWindow(enable);
2849 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2851 return cc->GetShowGPSCompassWindow();
2858extern bool g_bShowStatusBar;
2860 g_bShowStatusBar = enable;
2861 gFrame->ConfigureStatusBar();
2867 bool current_chartbar_state = g_bShowChartBar;
2868 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
2870 if (current_chartbar_state && !enable) {
2871 gFrame->ToggleChartBar(cc);
2872 g_bShowChartBar = current_chartbar_state;
2873 }
else if (!current_chartbar_state && enable) {
2874 gFrame->ToggleChartBar(cc);
2875 g_bShowChartBar = current_chartbar_state;
2878 g_bShowChartBar = enable;
2883extern bool g_bShowMenuBar;
2886 if (g_bShowMenuBar) {
2887 g_bShowMenuBar =
false;
2888 if (gFrame->m_pMenuBar) {
2889 gFrame->SetMenuBar(NULL);
2890 gFrame->m_pMenuBar->Destroy();
2891 gFrame->m_pMenuBar = NULL;
2895 g_bShowMenuBar =
true;
2896 gFrame->BuildMenuBar();
2903 if (ps52plib) ps52plib->m_chartSymbols.UpdateTableColor(table, name, color);
2907 wxColor ret = wxColor(*wxRED);
2909 int i_table = ps52plib->m_chartSymbols.FindColorTable(map_name.c_str());
2910 ret = ps52plib->m_chartSymbols.GetwxColor(name.c_str(), i_table);
2917 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2918 if (cc) cc->SetShowGrid(enable);
2924 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2925 if (cc) cc->SetShowOutlines(enable);
2931 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2932 if (cc) cc->SetShowDepthUnits(enable);
2938 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2939 if (cc) cc->SetShowAIS(enable);
2945 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2946 if (cc) cc->ShowTides(enable);
2952 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2953 if (cc) cc->ShowCurrents(enable);
2959 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2960 if (cc) cc->SetShowENCText(enable);
2966 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2967 if (cc) cc->SetShowENCDepth(enable);
2973 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2974 if (cc) cc->SetShowENCBuoyLabels(enable);
2980 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2981 if (cc) cc->SetShowENCLights(enable);
2987 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
2988 if (cc) cc->SetShowENCLightDesc(enable);
2993 int valSet = STANDARD;
2996 valSet = DISPLAYBASE;
3005 valSet = MARINERS_STANDARD;
3012 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3013 if (cc) cc->SetENCDisplayCategory(valSet);
3017 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3019 return ((
PI_DisCat)cc->GetENCDisplayCategory());
3021 return PI_DisCat::PI_STANDARD;
3025 int newMode = NORTH_UP_MODE;
3027 newMode = COURSE_UP_MODE;
3029 newMode = HEAD_UP_MODE;
3032 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3033 if (cc) cc->SetUpMode(newMode);
3038 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3039 if (cc)
return ((
PI_NavMode)cc->GetUpMode());
3041 return PI_NavMode::PI_NORTH_UP_MODE;
3046 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3047 if (cc)
return (cc->GetShowGrid());
3054 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3055 if (cc)
return (cc->GetShowOutlines());
3062 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3063 if (cc)
return (cc->GetShowDepthUnits());
3070 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3071 if (cc)
return (cc->GetShowAIS());
3078 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3079 if (cc)
return (cc->GetbShowTide());
3086 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3087 if (cc)
return (cc->GetbShowCurrent());
3094 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3095 if (cc)
return (cc->GetShowENCText());
3102 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3103 if (cc)
return (cc->GetShowENCDepth());
3110 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3111 if (cc)
return (cc->GetShowENCBuoyLabels());
3118 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3119 if (cc)
return (cc->GetShowENCLights());
3124bool GetShowENCLightDesc(
int CanvasIndex) {
3126 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3127 if (cc)
return (cc->GetbShowCurrent());
3138 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3139 if (cc) cc->ToggleLookahead();
3145 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3146 if (cc)
return (cc->GetLookahead());
3151extern bool g_bTrackActive;
3153 if (!g_bTrackActive && enable)
3155 else if (g_bTrackActive && !enable)
3161 gFrame->SetAndApplyColorScheme((ColorScheme)cs);
3168 if (win) win->Refresh(eraseBackground);
3172 if (g_canvasConfig == 1) {
3177 gFrame->CreateCanvasLayout();
3178 gFrame->DoChartUpdate();
3183 gFrame->CreateCanvasLayout();
3184 gFrame->DoChartUpdate();
3195 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3202 g_disable_main_toolbar = !enable;
3203 if (g_MainToolbar) g_MainToolbar->RefreshToolbar();
3207 if (gFrame) gFrame->ScheduleSettingsDialog();
3212 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3214 bool bfollow = cc->GetbFollow();
3215 cc->ResetOwnshipOffset();
3219 cc->JumpToPosition(gLat, gLon, cc->
GetVPScale());
3226 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3228 if (cc->GetbFollow() != enable_follow) cc->TogglebFollow();
3235 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3236 if (cc)
return cc->GetbFollow();
3243 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3244 if (cc) cc->SetShowFocusBar(enable);
3249 ChartCanvas* cc = g_canvasArray.Item(CanvasIndex);
3250 if (cc)
return (cc->GetShowFocusBar());
3264 pConfig->LoadMyConfigRaw(
false);
3267 pConfig->LoadCanvasConfigs(
false);
3268 auto& config_array = ConfigMgr::Get().GetCanvasConfigArray();
3269 for (
auto pcc : config_array) {
3270 if (pcc && pcc->canvas) {
3271 pcc->canvas->ApplyCanvasConfig(pcc);
3272 pcc->canvas->Refresh();
3282 g_CanvasHideNotificationIcon = !enable;
3291wxString DropMarkPI(
double lat,
double lon) {
3292 if ((fabs(lat) > 80.0) || (fabs(lon) > 180.))
return "";
3295 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3297 pSelect->AddSelectableRoutePoint(lat, lon, pWP);
3298 NavObj_dB::GetInstance().InsertRoutePoint(pWP);
3302wxString RouteCreatePI(
int canvas_index,
bool start) {
3303 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3304 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3310 return cc->FinishRoute();
3317bool DoMeasurePI(
int canvas_index,
bool start) {
3318 if ((
size_t)canvas_index < g_canvasArray.GetCount()) {
3319 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3322 cc->StartMeasureRoute();
3325 cc->CancelMeasureRoute();
3334wxString NavToHerePI(
double lat,
double lon) {
3336 new RoutePoint(lat, lon, g_default_wp_icon, wxEmptyString, wxEmptyString);
3337 pSelect->AddSelectableRoutePoint(lat, lon, pWP_dest);
3340 wxEmptyString, wxEmptyString);
3341 pSelect->AddSelectableRoutePoint(gLat, gLon, pWP_src);
3344 pRouteList->Append(temp_route);
3346 temp_route->AddPoint(pWP_src);
3347 temp_route->AddPoint(pWP_dest);
3349 pSelect->AddSelectableRouteSegment(gLat, gLon, lat, lon, pWP_src, pWP_dest,
3357 if (g_pRouteMan->GetpActiveRoute()) g_pRouteMan->DeactivateRoute();
3360 return temp_route->
m_GUID;
3363bool ActivateRoutePI(wxString route_guid,
bool activate) {
3364 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3365 if (!route)
return false;
3368 if (g_pRouteMan->GetpActiveRoute()) g_pRouteMan->DeactivateRoute();
3370 g_pRouteMan->FindBestActivatePoint(route, gLat, gLon, gCog, gSog);
3375 g_pRouteMan->DeactivateRoute();
3382void EnableDefaultConsole(
bool enable) { g_bhide_route_console = !enable; }
3383void EnableDefaultContextMenus(
bool enable) { g_bhide_context_menus = !enable; }
3385void SetMinZoomScale(
double min_scale) {
3386 for (
unsigned int i = 0; i < g_canvasArray.GetCount(); i++) {
3388 cc->SetAbsoluteMinScale(min_scale);
3392void SetMaxZoomScale(
double max_scale) {
3393 g_maxzoomin = wxRound(wxMax(max_scale, 100.));
3396std::shared_ptr<PI_PointContext> GetContextAtPoint(
int x,
int y,
3398 ChartCanvas* cc = g_canvasArray.Item(canvas_index);
3400 return cc->GetCanvasContextAtPoint(x, y);
3402 auto rstruct = std::make_shared<PI_PointContext>();
3403 rstruct->object_type = OBJECT_UNKNOWN;
3404 rstruct->object_ident =
"";
3409wxBitmap GetObjectIcon_PlugIn(
const wxString& name) {
3411 return *pWayPointMan->GetIconBitmap(name);
3413 return wxNullBitmap;
3416bool IsRouteActive(wxString route_guid) {
3417 if (g_pRouteMan->GetpActiveRoute())
3418 return (route_guid.IsSameAs(g_pRouteMan->GetpActiveRoute()->
m_GUID));
3423void SetBoatPosition(
double zlat,
double zlon) {
3426 gFrame->UpdateStatusBar();
3429void RouteInsertWaypoint(
int canvas_index, wxString route_guid,
double zlat,
3433 if (!parent)
return;
3435 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3441 if ((seltype & SELTYPE_ROUTESEGMENT) != SELTYPE_ROUTESEGMENT)
return;
3443 bool rename =
false;
3444 route->InsertPointAfter(parent->GetFoundRoutepoint(), zlat, zlon, rename);
3446 pSelect->DeleteAllSelectableRoutePoints(route);
3447 pSelect->DeleteAllSelectableRouteSegments(route);
3448 pSelect->AddAllSelectableRouteSegments(route);
3449 pSelect->AddAllSelectableRoutePoints(route);
3451 NavObj_dB::GetInstance().UpdateRoute(route);
3454void RouteAppendWaypoint(
int canvas_index, wxString route_guid) {
3455 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3460 if (!parent)
return;
3462 parent->m_pMouseRoute = route;
3463 parent->m_routeState = route->GetnPoints() + 1;
3465 parent->m_pMouseRoute->SetHiLite(50);
3467 auto pLast = route->GetLastPoint();
3469 parent->m_prev_rlat = pLast->m_lat;
3470 parent->m_prev_rlon = pLast->m_lon;
3471 parent->m_prev_pMousePoint = pLast;
3473 parent->m_bAppendingRoute =
true;
3476void FinishRoute(
int canvas_index) {
3479 if (!parent)
return;
3481 parent->FinishRoute();
3484bool IsRouteBeingCreated(
int canvas_index) {
3487 if (!parent)
return false;
3488 return !(parent->m_pMouseRoute == NULL);
3491bool AreRouteWaypointNamesVisible(wxString route_guid) {
3492 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3493 if (!route)
return false;
3494 return route->AreWaypointNamesVisible();
3497void ShowRouteWaypointNames(wxString route_guid,
bool show) {
3498 Route* route = g_pRouteMan->FindRouteByGUID(route_guid);
3500 route->ShowWaypointNames(show);
3503void NavigateToWaypoint(wxString waypoint_guid) {
3504 RoutePoint* prp = pWayPointMan->FindRoutePointByGUID(waypoint_guid);
3508 wxEmptyString, wxEmptyString);
3509 pSelect->AddSelectableRoutePoint(gLat, gLon, pWP_src);
3512 pRouteList->Append(temp_route);
3514 temp_route->AddPoint(pWP_src);
3515 temp_route->AddPoint(prp);
3516 prp->SetShared(
true);
3518 pSelect->AddSelectableRouteSegment(gLat, gLon, prp->m_lat, prp->m_lon,
3519 pWP_src, prp, temp_route);
3521 wxString name = prp->GetName();
3522 if (name.IsEmpty()) name = _(
"(Unnamed Waypoint)");
3523 wxString rteName = _(
"Go to ");
3524 rteName.Append(name);
3530 if (g_pRouteMan->GetpActiveRoute()) g_pRouteMan->DeactivateRoute();
3535bool IsAISTrackVisible(wxString ais_mmsi) {
3537 ais_mmsi.ToLong(&mmsi);
3538 auto myptarget = g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3540 return myptarget->b_show_track;
3545void AISToggleShowTrack(wxString ais_mmsi) {
3547 ais_mmsi.ToLong(&mmsi);
3548 auto myptarget = g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3549 if (myptarget) myptarget->ToggleShowTrack();
3552bool IsAIS_CPAVisible(wxString ais_mmsi) {
3554 ais_mmsi.ToLong(&mmsi);
3555 auto myptarget = g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3557 return myptarget->b_show_AIS_CPA;
3562void AISToggleShowCPA(wxString ais_mmsi) {
3564 ais_mmsi.ToLong(&mmsi);
3565 auto myptarget = g_pAIS->Get_Target_Data_From_MMSI(mmsi);
3566 if (myptarget) myptarget->Toggle_AIS_CPA();
3569void ShowAISTargetQueryDialog(
int canvas_index, wxString ais_mmsi) {
3572 if (!parent)
return;
3575 ais_mmsi.ToLong(&mmsi);
3576 ShowAISTargetQueryDialog(parent, mmsi);
3579void ShowAISTargetList(
int canvas_index) {
3582 if (!parent)
return;
3583 parent->ShowAISTargetList();
3586bool IsMeasureActive(
int canvas_index) {
3589 if (!parent)
return false;
3590 return parent->m_bMeasure_Active;
3593void CancelMeasure(
int canvas_index) {
3596 if (!parent)
return;
3597 parent->CancelMeasureRoute();
3600void SetDepthUnitVisible(
bool bviz) { g_bhide_depth_units = !bviz; }
3602void SetOverzoomFlagVisible(
bool bviz) { g_bhide_overzoom_flag = !bviz; }
3605void AddNoShowDirectory(std::string chart_dir) {
3608void RemoveNoShowDirectory(std::string chart_dir) {
3615const std::vector<std::string>& GetNoShowVector() {
Class AisDecoder and helpers.
std::vector< std::string > ChartDirectoryExcludedVector
Global instance.
Charts database management
ChartGroupArray * g_pGroupArray
Global instance.
ChartCanvas * g_overlayCanvas
Global instance.
Generic Chart canvas base.
ChartCanvas - Main chart display and interaction component.
int PrepareContextSelections(double lat, double lon)
float GetVPScale()
Return the ViewPort scale factor, in physical pixels per meter.
void ZoomCanvasSimple(double factor)
Perform an immediate zoom operation without smooth transitions.
Manages the chart database and provides access to chart data.
bool LoadBinary(const wxString &filename, ArrayOfCDI &dir_array_check)
Load the chart database from a binary file.
Wrapper class for plugin-based charts.
wxFont * FindOrCreateFont(int point_size, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underline=false, const wxString &facename=wxEmptyString, wxFontEncoding encoding=wxFONTENCODING_DEFAULT)
Creates or finds a matching font in the font cache.
wxColour GetFontColor(const wxString &TextElement) const
Gets the text color for a UI element.
bool AddAuxKey(wxString key)
Adds new plugin-defined font configuration key.
bool SetFontColor(const wxString &TextElement, const wxColour color) const
Sets the text color for a UI element.
static wxString GetUUID(void)
Return a unique RFC4122 version 4 compliant GUID string.
Handle logging and forwarding of incoming n0183/n2k messages.
void Notify(std::shared_ptr< const NavMsg > message)
Accept message received by driver, make it available for upper layers.
Extended OpenGL-optimized chart base class with additional querying capabilities.
virtual ListOfPI_S57Obj * GetLightsObjRuleListVisibleAtLatLon(float lat, float lon, PlugIn_ViewPort *VPoint)
Gets list of visible light objects at specified position.
Basic data for a loaded plugin, trivially copyable.
AIS target information accessible to plugins.
double HDG
Heading in degrees true.
int ROTAIS
Rate of turn as indicated in AIS message.
unsigned char ShipType
Ship type as per ITU-R M.1371.
double Lat
Latitude in decimal degrees.
int MMSI
Maritime Mobile Service Identity number.
bool bCPA_Valid
True if CPA calculation is valid.
double Brg
Bearing to target in degrees true.
double Lon
Longitude in decimal degrees.
double CPA
Closest Point of Approach in nautical miles.
int Class
AIS class (Class A: 0, Class B: 1)
double SOG
Speed over ground in knots.
double Range_NM
Range to target in nautical miles.
int NavStatus
Navigational status (0-15 as per ITU-R M.1371)
int IMO
IMO ship identification number.
double TCPA
Time to Closest Point of Approach in minutes.
double COG
Course over ground in degrees.
plugin_ais_alarm_type alarm_state
Current alarm state for this target.
Extended position fix information.
int nSats
Number of satellites used in the fix.
double Var
Magnetic variation in degrees, typically from RMC message.
double Cog
Course over ground in degrees [0-360).
double Lat
Latitude in decimal degrees.
double Hdm
Heading magnetic in degrees [0-360).
time_t FixTime
UTC time of fix.
double Lon
Longitude in decimal degrees.
double Sog
Speed over ground in knots.
double Hdt
Heading true in degrees [0-360).
Enhanced route class for working with PlugIn_Waypoint_ExV2 waypoints.
bool m_isVisible
True if route should be displayed.
Plugin_WaypointExV2List * pWaypointList
List of waypoints making up this route in order.
wxString m_StartString
Description of route start point.
wxString m_Description
Optional route description/notes.
wxString m_NameString
User-visible name of the route.
bool m_isActive
True if this is the active route.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Description of route end point.
Extended route class for managing complex route features.
wxString m_Description
Optional route description/notes.
wxString m_EndString
Description of route end point.
Plugin_WaypointExList * pWaypointList
List of waypoints making up this route in order.
wxString m_NameString
User-visible name of the route.
bool m_isVisible
True if route should be displayed.
wxString m_GUID
Globally unique identifier.
bool m_isActive
True if this is the active route.
wxString m_StartString
Description of route start point.
Plugin route class for managing ordered waypoint collections.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Name/description of ending point.
wxString m_NameString
Route name.
Plugin_WaypointList * pWaypointList
List of waypoints making up this route in order.
wxString m_StartString
Name/description of starting point.
Plugin track class for managing recorded track data.
Plugin_WaypointList * pWaypointList
List of waypoints making up this track in chronological order.
wxString m_GUID
Globally unique identifier.
wxString m_EndString
Description of track end point/time.
wxString m_StartString
Description of track start point/time.
wxString m_NameString
Display name of the track.
Contains view parameters and status information for a chart display viewport.
double view_scale_ppm
Display scale in pixels per meter.
wxRect rv_rect
Rectangle defining the rendered view area.
int pix_width
Viewport width in pixels.
double lon_max
Maximum longitude of the viewport.
double clon
Center longitude of the viewport in decimal degrees.
double lat_max
Maximum latitude of the viewport.
int pix_height
Viewport height in pixels.
double clat
Center latitude of the viewport in decimal degrees.
double skew
Display skew angle in radians.
double rotation
Display rotation angle in radians.
bool bValid
True if this viewport is valid and can be used for rendering.
double lon_min
Minimum longitude of the viewport.
double lat_min
Minimum latitude of the viewport.
int m_projection_type
Chart projection type (PROJECTION_MERCATOR, etc.)
bool b_quilt
True if the viewport is in quilt mode (showing multiple charts)
float chart_scale
Conventional chart displayed scale (e.g., 1:50000)
wxDateTime m_ETD
Estimated departure time in UTC, or wxInvalidDateTime if not set.
wxString m_MarkDescription
Optional description text.
int GetRouteMembershipCount()
Gets number of routes containing this waypoint.
wxString m_GUID
Globally unique identifier.
wxString m_TideStation
Tide Station Identifier.
void InitDefaults()
Initializes waypoint properties to default values.
wxDateTime m_CreateTime
Creation timestamp in UTC.
bool m_bShowWaypointRangeRings
True to show range rings on chart.
wxString IconDescription
User-friendly description of icon.
double m_lat
Latitude in decimal degrees.
wxColour RangeRingColor
Color to draw range rings.
bool IsActive
Active state (e.g. destination)
Plugin_HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
double scamin
Minimum display scale (1:X) for waypoint visibility.
double scamax
Maximum display scale (1:X) for waypoint visibility.
bool b_useScamin
True to enable scale-dependent visibility.
wxString IconName
Name of icon to use for waypoint symbol.
bool IsNameVisible
True to show waypoint name on chart.
double m_PlannedSpeed
Planned speed for next leg (knots)
double RangeRingSpace
Distance between range rings in preferred units.
double m_lon
Longitude in decimal degrees.
double m_WaypointArrivalRadius
Arrival radius in nautical miles.
int RangeRingSpaceUnits
Units for range ring spacing - 0:nm, 1:km.
wxString m_MarkName
Display name of waypoint.
bool IsVisible
Visibility state on chart.
int nrange_rings
Number of range rings to display around waypoint.
bool GetFSStatus()
Gets "free-standing" status of waypoint.
Extended waypoint class with additional navigation features.
bool GetFSStatus()
Gets "free-standing" status of waypoint.
wxDateTime m_CreateTime
Creation timestamp in UTC.
wxColour RangeRingColor
Color to draw range rings.
int nrange_rings
Number of range rings to display around waypoint.
wxString IconDescription
User-friendly description of icon.
bool b_useScamin
True to enable scale-dependent visibility.
double RangeRingSpace
Distance between range rings in preferred units.
Plugin_HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
wxString m_MarkName
Display name of waypoint.
wxString m_GUID
Globally unique identifier.
double m_lon
Longitude in decimal degrees.
wxString IconName
Name of icon to use for waypoint symbol.
void InitDefaults()
Initializes waypoint properties to default values.
double scamin
Minimum display scale (1:X) for waypoint visibility.
bool IsNameVisible
True to show waypoint name on chart.
double m_lat
Latitude in decimal degrees.
wxString m_MarkDescription
Optional description text.
int GetRouteMembershipCount()
Gets number of routes containing this waypoint.
bool IsActive
Active state (e.g. destination)
bool IsVisible
Visibility state on chart.
Plugin waypoint class providing core waypoint/mark functionality.
double m_lon
Longitude in decimal degrees.
wxString m_IconName
Icon identifier.
wxString m_MarkDescription
Optional description.
wxString m_GUID
Globally unique identifier.
bool m_IsVisible
Visibility state.
PlugIn_Waypoint()
Default constructor - creates waypoint at 0,0.
wxDateTime m_CreateTime
Creation timestamp in UTC.
wxString m_MarkName
Display name.
double m_lat
Latitude in decimal degrees.
Plugin_HyperlinkList * m_HyperlinkList
List of associated hyperlinks.
Class representing a hyperlink associated with a waypoint or route.
wxString Link
The actual URL or file path.
wxString DescrText
User-visible description of the link.
wxString Type
Link type identifier (e.g., "Website", "Chart", "Image")
Represents a waypoint or mark within the navigation system.
HyperlinkList * m_HyperlinkList
List of hyperlinks associated with this waypoint.
wxColour m_wxcWaypointRangeRingsColour
Color for the range rings display.
wxString m_MarkDescription
Description text for the waypoint.
int m_iWaypointRangeRingsNumber
Number of range rings to display around the waypoint.
void SetCreateTime(wxDateTime dt)
Sets the create time of this RoutePoint in UTC.
wxString m_GUID
Globally Unique Identifier for the waypoint.
bool m_bIsolatedMark
Flag indicating if the waypoint is a standalone mark.
bool m_bIsActive
Flag indicating if this waypoint is active for navigation.
wxDateTime GetManualETD()
Retrieves the manually set Estimated Time of Departure for this waypoint, in UTC.
bool m_bIsInRoute
Flag indicating if this waypoint is part of a route.
bool m_bShowName
Flag indicating if the waypoint name should be shown.
double GetPlannedSpeed()
Return the planned speed associated with this waypoint.
bool m_bIsInLayer
Flag indicating if the waypoint belongs to a layer.
bool m_btemp
Flag indicating if this is a temporary waypoint.
int m_iWaypointRangeRingsStepUnits
Units for the range rings step (0=nm, 1=km).
wxDateTime GetCreateTime(void)
Returns the Create Time of this RoutePoint in UTC.
float m_fWaypointRangeRingsStep
Distance between consecutive range rings.
wxString m_TideStation
Associated tide station identifier.
void SetETD(const wxDateTime &etd)
Sets the Estimated Time of Departure for this waypoint, in UTC.
Represents a navigational route in the navigation system.
bool m_bRtIsSelected
Flag indicating whether this route is currently selected in the UI.
wxString m_RouteStartString
Name or description of the route's starting point.
wxString m_RouteDescription
Additional descriptive information about the route.
RoutePointList * pRoutePointList
Ordered list of waypoints (RoutePoints) that make up this route.
bool m_bDeleteOnArrival
Flag indicating whether the route should be deleted once navigation reaches the end.
wxString m_RouteEndString
Name or description of the route's ending point.
bool m_btemp
Flag indicating if this is a temporary route.
wxString m_RouteNameString
User-assigned name for the route.
wxString m_GUID
Globally unique identifier for this route.
wxDateTime m_PlannedDeparture
Planned departure time for the route, in UTC.
bool m_bIsInLayer
Flag indicating whether this route belongs to a layer.
int m_lastMousePointIndex
Index of the most recently interacted with route point.
bool DeleteRoute(Route *pRoute)
bool ActivateRoute(Route *pRouteToActivate, RoutePoint *pStartPoint=NULL)
Activates a route for navigation.
Manages a set of ShapeBaseChart objects at different resolutions.
Represents a single point in a track.
wxDateTime GetCreateTime(void)
Retrieves the creation timestamp of a track point as a wxDateTime object.
void SetCreateTime(wxDateTime dt)
Sets the creation timestamp for a track point.
Represents a track, which is a series of connected track points.
ViewPort - Core geographic projection and coordinate transformation engine.
double view_scale_ppm
Requested view scale in physical pixels per meter (ppm), before applying projections.
double ref_scale
The nominal scale of the "reference chart" for this view.
int pix_height
Height of the viewport in physical pixels.
void SetBoxes(void)
Computes the bounding box coordinates for the current viewport.
double rotation
Rotation angle of the viewport in radians.
int pix_width
Width of the viewport in physical pixels.
wxPoint2DDouble GetDoublePixFromLL(double lat, double lon)
Convert latitude and longitude on the ViewPort to physical pixel coordinates with double precision.
double skew
Angular distortion (shear transform) applied to the viewport in radians.
void GetLLFromPix(const wxPoint &p, double *lat, double *lon)
Convert physical pixel coordinates on the ViewPort to latitude and longitude.
double clon
Center longitude of the viewport in degrees.
double clat
Center latitude of the viewport in degrees.
wxPoint GetPixFromLL(double lat, double lon)
Convert latitude and longitude on the ViewPort to physical pixel coordinates.
double chart_scale
Chart scale denominator (e.g., 50000 for a 1:50000 scale).
Device context class that can use either wxDC or OpenGL for drawing.
Base class for OpenCPN plugins.
Raw messages layer, supports sending and recieving navmsg messages.
Config file user configuration interface.
wxFont GetOCPNGUIScaledFont(wxString item)
Retrieves a font optimized for touch and high-resolution interfaces.
General purpose GUI support.
Multiplexer class and helpers.
Class NotificationManager.
PlugIn Object Definition/API.
@ OBJECTS_ALL
Return all objects including those in layers.
@ OBJECTS_ONLY_LAYERS
Return only objects that are in layers.
@ OBJECTS_NO_LAYERS
Exclude objects that are in layers.
plugin_ais_alarm_type
Enumeration of AIS alarm states.
enum _PI_DisCat PI_DisCat
Display categories for S52 chart features.
PI_ColorScheme
Enumeration of color schemes.
@ PI_COURSE_UP_MODE
Course Up Mode - Current course over ground at the top.
@ PI_HEAD_UP_MODE
Head Up Mode - Current vessel heading at the top.
@ PI_OTHER
Other - additional features for detailed navigation.
@ PI_DISPLAYBASE
Display Base - features that must always be shown.
@ PI_STANDARD
Standard - default features for safe navigation.
@ PI_MARINERS_STANDARD
Mariner specified standard features.
enum _PI_NavMode PI_NavMode
Navigation mode options for chart display orientation.
enum _OBJECT_LAYER_REQ OBJECT_LAYER_REQ
Filter options for object queries.
OptionsParentPI
Enum defining parent pages in OpenCPN options dialog where plugins can add panels.
@ PI_OPTIONS_PARENT_DISPLAY
Display settings section.
@ PI_OPTIONS_PARENT_UI
User Interface section.
@ PI_OPTIONS_PARENT_SHIPS
Ships section.
@ PI_OPTIONS_PARENT_CHARTS
Charts section.
@ PI_OPTIONS_PARENT_PLUGINS
Plugins section.
@ PI_OPTIONS_PARENT_CONNECTIONS
Connections section.
void EnableNotificationCanvasIcon(bool enable)
Plugin Notification Framework GUI support.
void SetCanvasContextMenuItemGrey(int item, bool grey)
Sets menu item enabled/disabled state.
bool UpdateSingleWaypoint(PlugIn_Waypoint *pwaypoint)
Updates a single waypoint.
bool PlugInHasNormalizedViewPort(PlugIn_ViewPort *vp)
Checks if viewport has been normalized.
void PluginCenterOwnship(int CanvasIndex)
Center the chart view on the own ship position for a specific canvas.
void SetCanvasRotation(double rotation)
Sets chart display rotation angle.
wxString GetSelectedWaypointGUID_Plugin()
Gets GUID of currently selected waypoint.
int GetChartbarHeight(void)
Gets height of chart bar in pixels.
void RemovePlugInTool(int tool_id)
Removes a tool from OpenCPN's toolbar.
void SetCanvasProjection(int projection)
Sets chart projection type.
wxString * GetpSharedDataLocation(void)
Gets shared application data location.
double toUsrTemp_Plugin(double cel_temp, int unit)
Converts Celsius to user's preferred temperature unit.
wxWindow * PluginGetFocusCanvas()
Gets the currently focused chart canvas.
int AddChartToDBInPlace(wxString &full_path, bool b_RefreshCanvas)
Adds a chart to the database without full rebuild.
ChartCanvas * g_focusCanvas
Global instance.
void fromSM_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Simple Mercator coordinates to geographic.
wxWindow * GetOCPNCanvasWindow()
Gets OpenCPN's main canvas window.
bool GetEnableLatLonGrid(int CanvasIndex)
Gets latitude/longitude grid visibility state.
bool UpdatePlugInRouteEx(PlugIn_Route_Ex *proute)
Updates an existing extended route.
void SetCanvasContextMenuItemViz(int item, bool viz)
Temporarily changes context menu item visibility.
int PlatformDirSelectorDialog(wxWindow *parent, wxString *file_spec, wxString Title, wxString initDir)
Shows platform-optimized directory selector dialog.
bool GetTouchMode()
Gets touch interface mode state.
int GetCanvasCount()
Gets total number of chart canvases.
bool GetSingleWaypointExV2(wxString GUID, PlugIn_Waypoint_ExV2 *pwaypoint)
Gets extended waypoint data by GUID.
ArrayOfPlugIn_AIS_Targets * GetAISTargetArray(void)
Gets array of AIS targets.
wxString getUsrWindSpeedUnit_Plugin(int unit)
Gets display string for user's preferred wind speed unit.
void SetCanvasMenuItemViz(int item, bool viz, const char *name)
Temporarily changes context menu item visibility.
void PlugInMultMatrixViewport(PlugIn_ViewPort *vp, float lat, float lon)
Applies viewport transformation matrix.
wxFont * OCPNGetFont(wxString TextElement, int default_size)
Gets a font for UI elements.
bool GetEnableMainToolbar()
Check if the main toolbar is enabled.
bool GetEnableENCTextDisplay(int CanvasIndex)
Gets ENC text label visibility.
bool UpdateSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypoint)
Updates an existing extended waypoint.
wxArrayString GetTrackGUIDArray(void)
Gets array of track GUIDs.
wxString getUsrDistanceUnit_Plugin(int unit)
Gets display string for user's preferred distance unit.
bool DeletePlugInTrack(wxString &GUID)
Deletes a track.
bool DeletePlugInRoute(wxString &GUID)
Deletes a route.
void EnableSplitScreenLayout(bool enable)
Enable or disable the split-screen layout.
double toUsrWindSpeed_Plugin(double kts_speed, int unit)
Converts knots to user's preferred wind speed unit.
bool GetEnableLightsDisplay(int CanvasIndex)
Gets light icon visibility.
OCPN_AUIManager * g_pauimgr
Global instance.
wxFont GetOCPNGUIScaledFont_PlugIn(wxString item)
Gets a uniquely scaled font copy for responsive UI elements.
wxBitmap GetBitmapFromSVGFile(wxString filename, unsigned int width, unsigned int height)
Creates bitmap from SVG file.
wxFont * FindOrCreateFont_PlugIn(int point_size, wxFontFamily family, wxFontStyle style, wxFontWeight weight, bool underline, const wxString &facename, wxFontEncoding encoding)
Creates or finds a font in the font cache.
int GetGlobalWatchdogTimoutSeconds()
Comm Global Watchdog Query
wxColour GetFontColour_PlugIn(wxString TextElement)
Gets color configured for a UI text element.
void EnableChartBar(bool enable, int CanvasIndex)
Controls visibility of chart info bar.
void PositionBearingDistanceMercator_Plugin(double lat, double lon, double brg, double dist, double *dlat, double *dlon)
Calculates destination point given starting point, bearing and distance.
double toUsrDistance_Plugin(double nm_distance, int unit)
Converts nautical miles to user's preferred distance unit.
void SetENCDisplayCategory(PI_DisCat cat, int CanvasIndex)
Sets ENC (Electronic Navigation Chart) feature display category.
void toSM_Plugin(double lat, double lon, double lat0, double lon0, double *x, double *y)
Converts geographic coordinates to Simple Mercator projection.
PI_DisCat GetENCDisplayCategory(int CanvasIndex)
Gets current ENC display category.
void EnableTouchMode(bool enable)
Enables/disables touch interface mode.
void EnableCurrentStationsDisplay(bool enable, int CanvasIndex)
Controls current station icon display.
void EnableChartOutlines(bool enable, int CanvasIndex)
Controls chart outline display.
void EnableMUIBar(bool enable, int CanvasIndex)
Controls visibility of MUI (Mobile/Touch User Interface) bar.
double OCPN_GetDisplayContentScaleFactor()
Gets content scaling factor for current display.
double DistGreatCircle_Plugin(double slat, double slon, double dlat, double dlon)
Calculates great circle distance between two points.
bool AddSingleWaypointExV2(PlugIn_Waypoint_ExV2 *pwaypointex, bool b_permanent)
Adds a waypoint with extended V2 properties.
void EnableLookaheadMode(bool enable, int CanvasIndex)
Enables/disables look-ahead mode for a canvas.
bool PluginGetFollowMode(int CanvasIndex)
Get the current follow mode status for a specific canvas.
wxArrayString GetRouteGUIDArray(void)
Gets array of route GUIDs.
ShapeBaseChartSet gShapeBasemap
global instance
wxScrolledWindow * AddOptionsPage(OptionsParentPI parent, wxString title)
Adds a new preferences page to OpenCPN options dialog.
void EnableLightsDisplay(bool enable, int CanvasIndex)
Controls light icon display.
void PlugInHandleAutopilotRoute(bool enable)
Controls autopilot route handling.
wxString getUsrDepthUnit_Plugin(int unit)
Gets display string for user's preferred depth unit.
void RemoveCanvasMenuItem(int item, const char *name)
Removes a context menu item completely.
void JumpToPosition(double lat, double lon, double scale)
Centers chart display on specified position at given scale.
int InsertPlugInToolSVG(wxString label, wxString SVGfile, wxString SVGfileRollover, wxString SVGfileToggled, wxItemKind kind, wxString shortHelp, wxString longHelp, wxObject *clientData, int position, int tool_sel, opencpn_plugin *pplugin)
Adds a tool using SVG graphics.
bool GetEnableCurrentStationsDisplay(int CanvasIndex)
Gets current station icon visibility.
wxDialog * GetActiveOptionsDialog()
Gets pointer to active options dialog.
wxString getUsrSpeedUnit_Plugin(int unit)
Gets display string for user's preferred speed unit.
std::unique_ptr< PlugIn_Waypoint > GetWaypoint_Plugin(const wxString &GUID)
Gets waypoint details by GUID.
bool GetEnableLookaheadMode(int CanvasIndex)
Gets look-ahead mode state for a canvas.
void EnableTideStationsDisplay(bool enable, int CanvasIndex)
Controls tide station icon display.
bool GetEnableChartBar(int CanvasIndex)
Gets chart bar visibility state.
wxBitmap GetIcon_PlugIn(const wxString &name)
Gets icon bitmap by name.
wxArrayString GetIconNameArray(void)
Gets array of available waypoint icons.
bool PlugIn_GSHHS_CrossesLand(double lat1, double lon1, double lat2, double lon2)
Checks if a great circle route crosses land.
void SetNavigationMode(PI_NavMode mode, int CanvasIndex)
Sets the navigation mode for a specific chart canvas.
bool GetEnableStatusBar()
Gets status bar visibility state.
bool GetEnableDepthUnitDisplay(int CanvasIndex)
Gets depth unit display state.
int InsertPlugInTool(wxString label, wxBitmap *bitmap, wxBitmap *bmpRollover, wxItemKind kind, wxString shortHelp, wxString longHelp, wxObject *clientData, int position, int tool_sel, opencpn_plugin *pplugin)
Adds a tool to OpenCPN's toolbar.
void EnableENCDepthSoundingsDisplay(bool enable, int CanvasIndex)
Controls ENC depth sounding display.
void PlugInAISDrawGL(wxGLCanvas *glcanvas, const PlugIn_ViewPort &vp)
Renders AIS targets on a secondary OpenGL canvas.
double GetCanvasTilt()
Gets current canvas tilt angle.
void AddChartDirectory(wxString &path)
Adds a chart directory to OpenCPN's chart database.
double fromDMM_PlugIn(wxString sdms)
Parse a formatted coordinate string to get decimal degrees.
double toUsrDepth_Plugin(double m_depth, int unit)
Converts meters to user's preferred depth unit.
bool GetActiveRoutepointGPX(char *buffer, unsigned int buffer_length)
Gets GPX representation of active route waypoint.
std::unique_ptr< PlugIn_Waypoint_ExV2 > GetWaypointExV2_Plugin(const wxString &GUID)
Gets complete waypoint details by GUID.
double PlugInGetDisplaySizeMM()
Gets physical display size in millimeters.
bool UpdatePlugInRoute(PlugIn_Route *proute)
Updates an existing route.
void SetToolbarToolBitmaps(int item, wxBitmap *bitmap, wxBitmap *bmpRollover)
Updates toolbar tool bitmaps.
void EnableBuoyLightLabelsDisplay(bool enable, int CanvasIndex)
Controls buoy/light name label display.
wxString GetActiveWaypointGUID(void)
Gets GUID of currently active waypoint.
void ConfigFlushAndReload()
Flush configuration changes to disk and reload settings.
void EnableAisTargetDisplay(bool enable, int CanvasIndex)
Controls AIS target display.
int PlatformFileSelectorDialog(wxWindow *parent, wxString *file_spec, wxString Title, wxString initDir, wxString suggestedName, wxString wildcard)
Shows platform-optimized file selector dialog.
bool CheckMUIEdgePan_PlugIn(int x, int y, bool dragging, int margin, int delta, int canvasIndex)
Checks if chart should pan when cursor near edge.
std::unique_ptr< PlugIn_Route_ExV2 > GetRouteExV2_Plugin(const wxString &GUID)
Gets route details with V2 waypoints by GUID.
double fromUsrDepth_Plugin(double usr_depth, int unit)
Converts from user's preferred depth unit to meters.
bool AddPlugInRoute(PlugIn_Route *proute, bool b_permanent)
Adds a new route.
wxString GetNewGUID(void)
Generates a new globally unique identifier (GUID).
double fromDMM_Plugin(wxString sdms)
Converts degrees/decimal minutes string to decimal degrees.
void EnableENCTextDisplay(bool enable, int CanvasIndex)
Controls ENC text label display.
int GetCanvasIndexUnderMouse(void)
Gets index of chart canvas under mouse cursor.
void EnableTenHertzUpdate(bool enable)
Enable or disable 10 Hz update rate.
wxRect GetMasterToolbarRect()
Gets bounding rectangle of master toolbar.
void toTM_Plugin(float lat, float lon, float lat0, float lon0, double *x, double *y)
Converts geographic coordinates to Transverse Mercator projection.
void CanvasJumpToPosition(wxWindow *canvas, double lat, double lon, double scale)
Centers specified canvas on given position at given scale.
bool GetGlobalColor(wxString colorName, wxColour *pcolour)
Gets a global color value.
double fromUsrSpeed_Plugin(double usr_speed, int unit)
Converts from user's preferred speed unit to knots.
void GetDoubleCanvasPixLL(PlugIn_ViewPort *vp, wxPoint2DDouble *pp, double lat, double lon)
Converts lat/lon to canvas pixels with double precision.
std::unique_ptr< PlugIn_Track > GetTrack_Plugin(const wxString &GUID)
Gets track details by GUID.
bool PlugInPlaySoundEx(wxString &sound_file, int deviceIndex)
Start playing a sound file asynchronously.
void EnableCompassGPSIcon(bool enable, int CanvasIndex)
Controls visibility of compass/GPS status icon.
wxString GetActiveRouteGUID(void)
Gets GUID of currently active route.
void EnableDepthUnitDisplay(bool enable, int CanvasIndex)
Controls depth unit display.
bool GetEnableTideStationsDisplay(int CanvasIndex)
Gets tide station icon visibility.
bool PlugInSetFontColor(const wxString TextElement, const wxColour color)
Sets text color for a UI element.
wxWindow * GetCanvasUnderMouse(void)
Gets canvas window under mouse cursor.
ChartDB * ChartData
Global instance.
std::unique_ptr< PlugIn_Waypoint_Ex > GetWaypointEx_Plugin(const wxString &GUID)
Gets extended waypoint by GUID.
bool GetTrackingMode()
Get the current tracking mode status.
bool GetEnableChartOutlines(int CanvasIndex)
Gets chart outline visibility state.
void GetCanvasPixLL(PlugIn_ViewPort *vp, wxPoint *pp, double lat, double lon)
Converts lat/lon to canvas physical pixel coordinates.
wxColor GetGlobalColorD(std::string map_name, std::string name)
Gets a color from the global color scheme.
bool GetEnableCompassGPSIcon(int CanvasIndex)
Gets compass icon visibility state.
void SetMUICursor_PlugIn(wxCursor *pCursor, int canvasIndex)
Sets mouse cursor for specific canvas.
void EnableMenu(bool enable)
Shows/hides the main menu bar.
void DimeWindow(wxWindow *win)
Applies system color scheme to window.
bool GetEnableAisTargetDisplay(int CanvasIndex)
Gets AIS target display state.
bool AddPlugInRouteExV2(PlugIn_Route_ExV2 *proute, bool b_permanent)
Adds a new route with V2 waypoints.
std::vector< std::string > GetPriorityMaps()
Comm Priority query support methods
double GetOCPNGUIToolScaleFactor_PlugIn()
Gets current global GUI scaling factor.
void SetToolbarToolBitmapsSVG(int item, wxString SVGfile, wxString SVGfileRollover, wxString SVGfileToggled)
Updates SVG graphics for toolbar tool.
wxString getUsrTempUnit_Plugin(int unit)
Gets display string for user's preferred temperature unit.
bool AddSingleWaypointEx(PlugIn_Waypoint_Ex *pwaypointex, bool b_permanent)
Adds a waypoint with extended properties.
wxArrayString GetWaypointGUIDArray(void)
Gets array of all waypoint/marks GUIDs.
int AddCanvasContextMenuItem(wxMenuItem *pitem, opencpn_plugin *pplugin)
Adds item to chart canvas context menu.
wxString GetActiveStyleName()
Gets name of currently active style sheet.
wxArrayString GetChartDBDirArrayString()
Gets chart database directory list.
void SetCursor_PlugIn(wxCursor *pCursor)
Sets mouse cursor.
bool GetEnableTenHertzUpdate()
Check if 10 Hz update rate is enabled.
wxString GetLocaleCanonicalName()
Gets system locale canonical name.
wxWindow * PluginGetOverlayRenderCanvas()
Gets the canvas currently designated for overlay rendering.
bool AddPersistentFontKey(wxString TextElement)
Registers a new font configuration element.
bool AddPlugInTrack(PlugIn_Track *ptrack, bool b_permanent)
Adds a new track.
bool UpdateChartDBInplace(wxArrayString dir_array, bool b_force_update, bool b_ProgressDialog)
Updates chart database in place.
void UpdateAndApplyPriorityMaps(std::vector< std::string > map)
Sets and applies new priority mapping scheme.
void RequestWindowRefresh(wxWindow *win, bool eraseBackground)
Requests window refresh.
Select * pSelect
Global instance.
void EnableLatLonGrid(bool enable, int CanvasIndex)
Controls latitude/longitude grid display.
void SetAppColorScheme(PI_ColorScheme cs)
Set the application color scheme.
bool DeleteSingleWaypoint(wxString &GUID)
Deletes a single waypoint.
void RemoveCanvasContextMenuItem(int item)
Removes a context menu item completely.
bool DecodeSingleVDOMessage(const wxString &str, PlugIn_Position_Fix_Ex *pos, wxString *accumulator)
Decodes a single VDO (Own Ship AIS) message.
bool AddCustomWaypointIcon(wxBitmap *pimage, wxString key, wxString description)
Adds a custom waypoint icon.
bool CheckEdgePan_PlugIn(int x, int y, bool dragging, int margin, int delta)
Checks if chart should pan when cursor near edge.
double toUsrSpeed_Plugin(double kts_speed, int unit)
Converts knots to user's preferred speed unit.
std::unique_ptr< PlugIn_Route_Ex > GetRouteEx_Plugin(const wxString &GUID)
Gets extended route by GUID.
bool UpdatePlugInRouteExV2(PlugIn_Route_ExV2 *proute)
Updates existing route with V2 waypoints.
std::vector< std::string > GetActivePriorityIdentifiers()
Gets list of active priority identifiers.
bool GetEnableENCDepthSoundingsDisplay(int CanvasIndex)
Gets ENC depth sounding visibility.
void SetToolbarItemState(int item, bool toggle)
Sets toolbar item toggle state.
bool DeleteOptionsPage(wxScrolledWindow *page)
Remove a previously added options page.
void EnableLightDescriptionsDisplay(bool enable, int CanvasIndex)
Controls light description text display.
float GetOCPNChartScaleFactor_Plugin()
Gets chart rendering scale factor.
PI_NavMode GetNavigationMode(int CanvasIndex)
Gets current navigation mode for a canvas.
int AddCanvasMenuItem(wxMenuItem *pitem, opencpn_plugin *pplugin, const char *name)
Adds item to canvas context menu.
int RemoveChartFromDBInPlace(wxString &full_path)
Removes a chart from database without full rebuild.
void PlugInNormalizeViewport(PlugIn_ViewPort *vp, float lat, float lon)
Normalizes viewport parameters.
PI_ColorScheme GetAppColorScheme()
Get the current application color scheme.
void ExitOCPN()
Exits OpenCPN application.
wxWindow * GetCanvasByIndex(int canvasIndex)
Gets chart canvas window by index.
void fromTM_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Transverse Mercator coordinates to geographic.
double OCPN_GetWinDIPScaleFactor()
Gets Windows-specific DPI scaling factor.
void PushNMEABuffer(wxString buf)
Pushes NMEA sentence to the system.
void SetEnableMainToolbar(bool enable)
Show or hide the main toolbar.
void SetFullScreen(bool set_full_screen_on)
Sets full screen mode.
bool GetEnableMenu()
Gets menu bar visibility state.
void SetCanvasMenuItemGrey(int item, bool grey, const char *name)
Sets menu item enabled/disabled state.
bool GetEnableBuoyLightLabelsDisplay(int CanvasIndex)
Gets buoy/light label visibility.
double fromUsrWindSpeed_Plugin(double usr_wspeed, int unit)
Converts from user's preferred wind speed unit to knots.
bool GetEnableCanvasFocusBar(int CanvasIndex)
Gets focus indicator visibility state.
wxXmlDocument GetChartDatabaseEntryXML(int dbIndex, bool b_getGeom)
Gets chart database entry as XML.
wxAuiManager * GetFrameAuiManager(void)
Gets main frame AUI manager.
void SendPluginMessage(wxString message_id, wxString message_body)
Sends message to other plugins.
bool AddPlugInRouteEx(PlugIn_Route_Ex *proute, bool b_permanent)
Adds a route with extended features.
void fromSM_ECC_Plugin(double x, double y, double lat0, double lon0, double *lat, double *lon)
Converts Elliptical Simple Mercator coordinates to geographic.
void EnableStatusBar(bool enable)
Shows/hides the status bar.
void RequestRefresh(wxWindow *win)
Requests window refresh.
bool UpdateSingleWaypointExV2(PlugIn_Waypoint_ExV2 *pwaypoint)
Updates an existing extended V2 waypoint.
void PluginZoomCanvas(int CanvasIndex, double factor)
Zoom a specific chart canvas by the given factor.
int GetLatLonFormat()
Gets currently selected latitude/longitude display format.
bool AddSingleWaypoint(PlugIn_Waypoint *pwaypoint, bool b_permanent)
Adds a single waypoint.
bool IsTouchInterface_PlugIn(void)
Checks if touch interface mode is enabled.
bool GetSingleWaypoint(wxString GUID, PlugIn_Waypoint *pwaypoint)
Gets waypoint data by GUID.
void SetToolbarToolViz(int item, bool viz)
Temporarily changes toolbar tool visibility.
double fromUsrTemp_Plugin(double usr_temp, int unit)
Converts from user's preferred temperature unit to Celsius.
void SetCanvasTilt(double tilt)
Gets current canvas tilt angle.
std::unique_ptr< PlugIn_Route > GetRoute_Plugin(const wxString &GUID)
Gets route details by GUID.
bool GetEnableMUIBar(int CanvasIndex)
Gets MUI bar visibility state.
bool AddLocaleCatalog(wxString catalog)
Adds a locale catalog for translations.
bool GetFullScreen()
Gets full screen state.
void SetTrackingMode(bool enable)
Enable or disable tracking mode.
void PluginSetFollowMode(int CanvasIndex, bool enable_follow)
Set follow mode for a specific canvas.
void ShowGlobalSettingsDialog()
Display the global settings dialog.
void toSM_ECC_Plugin(double lat, double lon, double lat0, double lon0, double *x, double *y)
Converts geographic coordinates to Elliptical Simple Mercator projection.
bool UpdatePlugInTrack(PlugIn_Track *ptrack)
Updates an existing track.
double fromUsrDistance_Plugin(double usr_distance, int unit)
Converts from user's preferred distance unit to nautical miles.
wxString GetSelectedTrackGUID_Plugin()
Gets GUID of currently selected track.
wxFileConfig * GetOCPNConfigObject(void)
Gets OpenCPN's configuration object.
void DistanceBearingMercator_Plugin(double lat0, double lon0, double lat1, double lon1, double *brg, double *dist)
Calculates bearing and distance between two points using Mercator projection.
void SetGlobalColor(std::string table, std::string name, wxColor color)
Sets a color in the global color scheme.
void ZeroXTE()
Resets cross track error to zero.
void PlugInPlaySound(wxString &sound_file)
Plays a sound file asynchronously.
void GetCanvasLLPix(PlugIn_ViewPort *vp, wxPoint p, double *plat, double *plon)
Converts canvas physical pixel coordinates to lat/lon.
void EnableCanvasFocusBar(bool enable, int CanvasIndex)
Controls visibility of canvas focus indicator.
wxString GetSelectedRouteGUID_Plugin()
Gets GUID of currently selected route.
double g_display_size_mm
Physical display width (mm)
void ForceChartDBUpdate()
Forces an update of the chart database.
bool GetSingleWaypointEx(wxString GUID, PlugIn_Waypoint_Ex *pwaypoint)
Gets extended waypoint data by GUID.
bool ShuttingDown(void)
Checks if OpenCPN is in shutdown process.
void ForceChartDBRebuild()
Forces complete rebuild of chart database.
Tools to send data to plugins.
PlugInManager and helper classes – Mostly gui parts (dialogs) and plugin API stuff.
A generic position and navigation data structure.
double kCog
Course over ground in degrees.
double kHdt
True heading in degrees.
double kLat
Latitude in decimal degrees.
double kSog
Speed over ground in knots.
double kLon
Longitude in decimal degrees.