OpenCPN Partial API docs
Loading...
Searching...
No Matches
chcanv.h
Go to the documentation of this file.
1
2/**************************************************************************
3 * Copyright (C) 2010 by David S. Register *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, see <https://www.gnu.org/licenses/>. *
17 **************************************************************************/
18
25#ifndef _CHCANV_H__
26#define _CHCANV_H__
27
28#include "gl_headers.h" // Must go before wx/glcanvas
29
30#include <wx/datetime.h>
31#include <wx/grid.h>
32#include <wx/treectrl.h>
33
34#ifdef ocpnUSE_GL
35#include <wx/glcanvas.h>
36#endif
37
38#include "observable/evtvar.h"
39#include "observable/observable.h"
40
41#include "model/route.h"
42#include "model/route_point.h"
43#include "model/select_item.h"
44
45#include "abstract_chart_canv.h"
46#include "bbox.h"
47#include "canvas_menu.h"
48#include "chartdb.h"
49#include "chartimg.h"
50#include "ch_info_win.h"
51#include "compass.h"
52#include "emboss_data.h"
53#include "gshhs.h"
54#include "gl_chart_canvas.h"
55#include "gui_lib.h"
56#include "idx_entry.h"
57#include "mui_bar.h"
59#include "ocp_cursor.h"
60#include "ocpn_pixel.h"
61#include "ocpn_plugin.h"
62#include "piano.h"
63#include "quilt.h"
64#include "rollover_win.h"
65#include "s57_sector.h"
66#include "tc_win.h"
67#include "undo.h"
68
69WX_DEFINE_ARRAY_PTR(ChartCanvas *, arrayofCanvasPtr);
70
71#ifdef __ANDROID__
72#define STAT_FIELD_TICK -1
73#define STAT_FIELD_SOGCOG 0
74#define STAT_FIELD_CURSOR_LL -1
75#define STAT_FIELD_CURSOR_BRGRNG -1
76#define STAT_FIELD_SCALE 1
77#else
78#define STAT_FIELD_TICK 0
79#define STAT_FIELD_SOGCOG 1
80#define STAT_FIELD_CURSOR_LL 2
81#define STAT_FIELD_CURSOR_BRGRNG 3
82#define STAT_FIELD_SCALE 4
83#endif
84
85class canvasConfig; // circular
86class CanvasMenuHandler; // circular
87class MyFrame; // circular
88class NotificationsList; // circular
89class NotificationButton; // circular
90class Quilt; // circular
91class TCWin; // circular
92class Undo; // circular
93
94class ChartCanvas; // forward
97extern arrayofCanvasPtr g_canvasArray;
98
99// Useful static routines
100void ShowAISTargetQueryDialog(wxWindow *parent, int mmsi);
101
102// Set up the preferred quilt type
103#define QUILT_TYPE_2
104
105//----------------------------------------------------------------------------
106// Forward Declarations
107//----------------------------------------------------------------------------
108
109//--------------------------------------------------------
110// Screen Brightness Control Support Routines
111//
112//--------------------------------------------------------
113
114int InitScreenBrightness(void);
115int RestoreScreenBrightness(void);
116int SetScreenBrightness(int brig1Ghtness);
117
118enum // specify the render behaviour of SetViewPoint()
119{
120 CURRENT_RENDER, // use the current render type
121 FORCE_SUBSAMPLE // force sub-sampled render, with re-render timer
122};
123
124// Cursor region enumerator
125enum {
126 CENTER,
127 MID_RIGHT,
128 MID_LEFT,
129 MID_TOP,
130 MID_BOT,
131};
132
133typedef enum ownship_state_t {
134 SHIP_NORMAL = 0,
135 SHIP_LOWACCURACY,
136 SHIP_INVALID
137} _ownship_state_t;
138
139enum { ID_S57QUERYTREECTRL = 10000, ID_AISDIALOGOK };
140
141enum {
142 ID_PIANO_DISABLE_QUILT_CHART = 32000,
143 ID_PIANO_ENABLE_QUILT_CHART,
144 ID_PIANO_CONTRACT_PIANO,
145 ID_PIANO_EXPAND_PIANO
146};
147
148enum { NORTH_UP_MODE, COURSE_UP_MODE, HEAD_UP_MODE };
149
150extern void pupHandler_PasteRoute(); // forward
151
152extern void pupHandler_PasteWaypoint(); // forward
153
154extern void pupHandler_PasteTrack(); // forward
155
175 friend class glChartCanvas;
176
177public:
178 ChartCanvas(wxFrame *frame, int canvasIndex, wxWindow *nmea_log);
179 ~ChartCanvas();
180
181 virtual void ReloadVP(bool b_adjust = true) override;
182
184 float GetVPScale() override { return GetVP().view_scale_ppm; }
185
186 bool Show(bool show = true) override { return wxWindow::Show(show); }
187 double GetCanvasRangeMeters() override;
188 int GetENCDisplayCategory() override { return m_encDisplayCategory; }
189 void SetCanvasRangeMeters(double range) override;
190 wxBitmap *GetScratchBitmap() const override { return pscratch_bm; }
191 void ResetGridFont() override { m_pgridFont = nullptr; }
192 void ResetGlGridFont() override;
193 void EnablePaint(bool b_enable) override;
194 bool CanAccelerateGlPanning() override;
195 void SetupGlCompression() override;
196
197 void TriggerDeferredFocus() override;
198 void Refresh(bool eraseBackground = true,
199 const wxRect *rect = nullptr) override;
200 wxWindow *GetWindow() override { return this; }
201 double GetScaleValue() override { return m_scaleValue; }
202
203 void SetupGlCanvas();
204
205 // Methods
206 void OnKeyDown(wxKeyEvent &event);
207 void OnKeyUp(wxKeyEvent &event);
208 void OnKeyChar(wxKeyEvent &event);
209 void OnPaint(wxPaintEvent &event);
210 void OnToolLeftClick(wxCommandEvent &event);
211 void PaintCleanup();
212 void Scroll(int dx, int dy);
213
214 bool MouseEventOverlayWindows(wxMouseEvent &event);
215 bool MouseEventChartBar(wxMouseEvent &event);
216 bool MouseEventMUIBar(wxMouseEvent &event);
217 bool MouseEventToolbar(wxMouseEvent &event);
218 bool MouseEventIENCBar(wxMouseEvent &event);
219
220 bool MouseEventSetup(wxMouseEvent &event, bool b_handle_dclick = true);
221 bool MouseEventProcessObjects(wxMouseEvent &event);
237 bool MouseEventProcessCanvas(wxMouseEvent &event);
238 void SetCanvasCursor(wxMouseEvent &event);
239 void OnKillFocus(wxFocusEvent &WXUNUSED(event));
240 void OnSetFocus(wxFocusEvent &WXUNUSED(event));
241#ifdef HAVE_WX_GESTURE_EVENTS
242 void OnZoom(wxZoomGestureEvent &event);
243 void OnLongPress(wxLongPressEvent &event);
244 void OnPressAndTap(wxPressAndTapEvent &event);
245
246 void OnLeftDown(wxMouseEvent &evt);
247 void OnLeftUp(wxMouseEvent &evt);
248
249 void OnRightUp(wxMouseEvent &event);
250 void OnRightDown(wxMouseEvent &event);
251
252 void OnDoubleLeftClick(wxMouseEvent &event);
253
254 void OnWheel(wxMouseEvent &event);
255 void OnMotion(wxMouseEvent &event);
256#endif /* HAVE_WX_GESTURE_EVENTS */
257
258 void PopupMenuHandler(wxCommandEvent &event);
259 bool IsPrimaryCanvas() { return (m_canvasIndex == 0); }
260
261 bool SetUserOwnship();
262
263 bool SetCursor(const wxCursor &c) override;
264 void Update() override;
265
266 void LostMouseCapture(wxMouseCaptureLostEvent &event);
267
268 void CancelMouseRoute();
272 void SetDisplaySizeMM(double size);
276 double GetDisplaySizeMM() { return m_display_size_mm; }
277
289 bool SetVPScale(double sc, bool b_refresh = true);
290 bool SetVPProjection(int projection);
298 bool SetViewPoint(double lat, double lon);
299 bool SetViewPointByCorners(double latSW, double lonSW, double latNE,
300 double lonNE);
315 bool SetViewPoint(double lat, double lon, double scale_ppm, double skew,
316 double rotation, int projection = 0, bool b_adjust = true,
317 bool b_refresh = true);
318 void LoadVP(ViewPort &vp, bool b_adjust = true);
319
320 ChartStack *GetpCurrentStack() { return m_pCurrentStack; }
321 void SetGroupIndex(int index, bool autoswitch = false);
322 bool CheckGroup(int igroup);
323 void canvasRefreshGroupIndex(void);
324 void canvasChartsRefresh(int dbi_hint);
325
326 void CheckGroupValid(bool showMessage = true, bool switchGroup0 = true);
327
328 void UpdateCanvasS52PLIBConfig();
329
330 void OnDeferredFocusTimerEvent(wxTimerEvent &event);
331 void OnRouteFinishTimerEvent(wxTimerEvent &event);
332
333 void ClearS52PLIBStateHash() { m_s52StateHash = 0; }
334 void SetupCanvasQuiltMode(void);
335 void ApplyCanvasConfig(canvasConfig *pcc);
336
337 bool SetVPRotation(double angle);
338 double GetVPRotation(void) { return GetVP().rotation; }
339 double GetVPSkew(void) { return GetVP().skew; }
340 double GetVPTilt(void) { return GetVP().tilt; }
341
342 void ClearbFollow(void);
343 void SetbFollow(void);
344 void TogglebFollow(void);
345 bool GetbFollow() { return m_bFollow; }
346
347 void JumpToPosition(double lat, double lon, double scale);
348 void SetFirstAuto(bool b_auto) { m_bFirstAuto = b_auto; }
349 void SetAbsoluteMinScale(double min_scale);
350 std::shared_ptr<HostApi121::PiPointContext> GetCanvasContextAtPoint(int x,
351 int y);
352
365 void GetDoubleCanvasPointPix(double rlat, double rlon, wxPoint2DDouble *r);
379 void GetDoubleCanvasPointPixVP(ViewPort &vp, double rlat, double rlon,
380 wxPoint2DDouble *r);
381
398 bool GetCanvasPointPix(double rlat, double rlon, wxPoint *r);
399
420 bool GetCanvasPointPixVP(ViewPort &vp, double rlat, double rlon, wxPoint *r);
421
437 void GetCanvasPixPoint(double x, double y, double &lat, double &lon);
438 void WarpPointerDeferred(int x, int y);
439 void UpdateShips();
440 void UpdateAIS();
441 void UpdateAlerts(); // pjotrc 2010.02.22
442 void ToggleCPAWarn();
443
444 bool IsMeasureActive() { return m_bMeasure_Active; }
445 wxBitmap &GetTideBitmap() { return m_cTideBitmap; }
446 Undo *undo;
447
448 int GetUpMode() { return m_upMode; }
449 bool GetLookahead() { return m_bLookAhead; }
450
451 void UnlockQuilt();
452 void SetQuiltMode(bool b_quilt);
453 bool GetQuiltMode(void);
454 std::vector<int> GetQuiltIndexArray(void);
455 bool IsQuiltDelta(void);
456 void SetQuiltChartHiLiteIndex(int dbIndex);
457 void SetQuiltChartHiLiteIndexArray(std::vector<int> hilite_array);
458 void ClearQuiltChartHiLiteIndexArray();
459 int GetQuiltReferenceChartIndex(void);
460 double GetBestStartScale(int dbi_hint, const ViewPort &vp);
461 void ConfigureChartBar();
462
463 int GetNextContextMenuId();
464
465 TCWin *getTCWin() { return pCwin; }
466
467 bool StartTimedMovement(bool stoptimer = true);
468 void DoTimedMovement();
481 void DoMovement(long dt);
482 void StopMovement();
483
484 void StartTimedMovementVP(double target_lat, double target_lon, int nstep);
485 void DoTimedMovementVP();
486 void StopMovementVP();
487
488 void StartTimedMovementTarget();
489 void DoTimedMovementTarget();
490 void StopMovementTarget();
491
492 void SetColorScheme(ColorScheme cs);
493 ColorScheme GetColorScheme() { return m_cs; }
494
495 void CanvasApplyLocale();
496 void RebuildCursors();
497
498 // Accessors
499 int GetCanvasWidth() { return m_canvas_width; }
500 int GetCanvasHeight() { return m_canvas_height; }
503 float GetVPChartScale() { return GetVP().chart_scale; }
512 double GetCanvasScaleFactor() { return m_canvas_scale_factor; }
513 /*chcanv*
514 * Return the physical pixels per meter at chart center, accounting for
515 * latitude distortion.
516 */
517 double GetCanvasTrueScale() { return m_true_scale_ppm; }
518 double GetAbsoluteMinScalePpm() { return m_absolute_min_scale_ppm; }
519 ViewPort *GetpVP() { return &VPoint; }
520 void SetVP(ViewPort &);
521 ChartBase *GetChartAtCursor();
522 ChartBase *GetOverlayChartAtCursor();
523 Piano *GetPiano() { return m_Piano; }
524 int GetPianoHeight();
525
526 bool isRouteEditing(void) {
527 return m_bRouteEditing && m_pRoutePointEditTarget;
528 }
529 bool isMarkEditing(void) { return m_bMarkEditing && m_pRoutePointEditTarget; }
530
531 GSHHSChart *GetWorldBackgroundChart() { return pWorldBackgroundChart; }
532 void ResetWorldBackgroundChart() { pWorldBackgroundChart->Reset(); }
533
534 void SetbTCUpdate(bool f) { m_bTCupdate = f; }
535 bool GetbTCUpdate() { return m_bTCupdate; }
536 void SetbShowCurrent(bool f) { m_bShowCurrent = f; }
537 bool GetbShowCurrent() { return m_bShowCurrent; }
538 void SetbShowTide(bool f) { m_bShowTide = f; }
539 bool GetbShowTide() { return m_bShowTide; }
540 void SetShowVisibleSectors(bool val) { m_bShowVisibleSectors = val; }
541 bool GetShowVisibleSectors() { return m_bShowVisibleSectors; }
543 double GetPixPerMM() { return m_pix_per_mm; }
544 void SetbEnableBasemapTile(bool f) { m_bEnableBasemapTile = f; }
545 bool GetbEnableBasemapTile() { return m_bEnableBasemapTile; }
546
547 void SetOwnShipState(ownship_state_t state) { m_ownship_state = state; }
548 void SetCursorStatus(double cursor_lat, double cursor_lon);
549 void GetCursorLatLon(double *lat, double *lon);
552 bool PanCanvas(double dx, double dy);
553 void StopAutoPan(void);
554 bool IsOwnshipOnScreen();
555 void DisableQuiltAdjustOnZoom(bool disable) {
556 m_disable_adjust_on_zoom = disable;
557 }
558
577 void ZoomCanvas(double factor, bool can_zoom_to_cursor = true,
578 bool stoptimer = true);
579
592 void ZoomCanvasSimple(double factor);
593
594 void RotateCanvas(double dir);
595 void DoRotateCanvas(double rotation);
596 void DoTiltCanvas(double tilt);
597
598 void ShowAISTargetList(void);
599
600 void ShowGoToPosition(void);
601 void HideGlobalToolbar();
602 void ShowGlobalToolbar();
603
604 bool GetShowDepthUnits() { return m_bShowDepthUnits; }
605 void SetShowDepthUnits(bool show) { m_bShowDepthUnits = show; }
606 bool GetShowGrid() { return m_bDisplayGrid; }
607 void SetShowGrid(bool show) { m_bDisplayGrid = show; }
608 bool GetShowOutlines() { return m_bShowOutlines; }
609 void SetShowOutlines(bool show) { m_bShowOutlines = show; }
610 bool GetShowChartbar() { return true; }
611 wxRect GetMUIBarRect();
612 void SetMUIBarPosition();
613 void DestroyMuiBar();
614 void CreateMUIBar();
615
616 void ToggleChartOutlines(void);
617 void ToggleCanvasQuiltMode(void);
618
619 wxString GetScaleText() { return m_scaleText; }
620 bool GetShowAIS() { return m_bShowAIS; }
621 void SetShowAIS(bool show);
622 bool GetAttenAIS() { return m_bShowAISScaled; }
623 void SetAttenAIS(bool show);
624 void SetShowFocusBar(bool enable) { m_show_focus_bar = enable; }
625 bool GetShowFocusBar() { return m_show_focus_bar; }
626 MUIBar *GetMUIBar() { return m_muiBar; }
627 void SetAlertString(wxString str) { m_alertString = str; }
628 wxString GetAlertString() { return m_alertString; }
629 bool GetShowENCText() { return m_encShowText; }
630 void SetShowENCText(bool show);
631
632 bool GetShowENCDepth() { return m_encShowDepth; }
633 void SetShowENCDepth(bool show);
634
635 bool GetShowENCLightDesc() { return m_encShowLightDesc; }
636 void SetShowENCLightDesc(bool show);
637
638 bool GetShowENCBuoyLabels() { return m_encShowBuoyLabels; }
639 void SetShowENCBuoyLabels(bool show);
640
641 bool GetShowENCLights() { return m_encShowLights; }
642 void SetShowENCLights(bool show);
643
644 void SetENCDisplayCategory(int category);
645
646 bool GetShowENCAnchor() { return m_encShowAnchor; }
647 void SetShowENCAnchor(bool show);
648
649 bool GetShowENCDataQual() { return m_encShowDataQual; }
650 void SetShowENCDataQual(bool show);
651
652 void JaggyCircle(ocpnDC &dc, wxPen pen, int x, int y, int radius);
653 int m_canvasIndex;
654 void ShowTides(bool bShow);
655 void ShowCurrents(bool bShow);
656 void SetUpMode(int mode);
657 void ToggleLookahead();
658 void SetShowGPS(bool show);
659 void UpdateFollowButtonState(void);
660 void InvalidateGL();
661 bool IsTileOverlayIndexInYesShow(int index);
662 bool IsTileOverlayIndexInNoShow(int index);
663 void AddTileOverlayIndexToNoShow(int index);
664 int m_groupIndex;
665 Route *m_pMouseRoute;
666 bool m_bMeasure_Active;
667 ViewPort &GetVP();
668 ChartBase *m_singleChart;
669 Quilt *m_pQuilt;
670 wxString FindValidUploadPort();
671 wxString m_active_upload_port;
672
673 // protected:
674
675 // private:
676 ChartBase *GetLargestScaleQuiltChart();
677 ChartBase *GetFirstQuiltChart();
678 ChartBase *GetNextQuiltChart();
679 int GetQuiltChartCount();
680 void InvalidateAllQuiltPatchs(void);
681 void SetQuiltRefChart(int dbIndex);
682 std::vector<int> GetQuiltCandidatedbIndexArray(bool flag1 = true,
683 bool flag2 = true);
684 std::vector<int> &GetQuiltExtendedStackdbIndexArray();
685 std::vector<int> &GetQuiltFullScreendbIndexArray();
686 std::vector<int> GetQuiltEclipsedStackdbIndexArray();
687 int GetQuiltRefChartdbIndex(void);
688 void InvalidateQuilt(void);
689 double GetQuiltMaxErrorFactor();
690 bool IsChartQuiltableRef(int db_index);
691 bool IsChartLargeEnoughToRender(ChartBase *chart, ViewPort &vp);
692 int GetCanvasChartNativeScale();
693 int FindClosestCanvasChartdbIndex(int scale);
694 void UpdateCanvasOnGroupChange(void);
695
696 void ShowObjectQueryWindow(int x, int y, float zlat, float zlon);
697 void ShowMarkPropertiesDialog(RoutePoint *markPoint);
698 void ShowRoutePropertiesDialog(wxString title, Route *selected);
699 void ShowTrackPropertiesDialog(Track *selected);
702 void DrawTCWindow(int x, int y, void *pIDX);
703
716 void ShowSingleTideDialog(int x, int y, void *pvIDX);
717
719 bool IsTideDialogOpen() const;
720
722 void CloseTideDialog();
723
724 void UpdateGPSCompassStatusBox(bool b_force_new);
725 ocpnCompass *GetCompass() { return m_Compass; }
726
727 wxColour GetFogColor() { return m_fog_color; }
728
729 void ShowChartInfoWindow(int x, int dbIndex);
730 void HideChartInfoWindow(void);
731 void ShowCompositeInfoWindow(int x, int n_charts, int scale,
732 const std::vector<int> &index_vector);
733
734 void StartMeasureRoute();
735 void CancelMeasureRoute();
736
737 bool DoCanvasUpdate(void);
738 void SelectQuiltRefdbChart(int db_index, bool b_autoscale = true);
739 void SelectQuiltRefChart(int selected_index);
740 double GetBestVPScale(ChartBase *pchart);
741 void selectCanvasChartDisplay(int type, int family);
742 void RemoveChartFromQuilt(int dbIndex);
743
744 void HandlePianoClick(int selected_index,
745 const std::vector<int> &selected_dbIndex_array);
746 void HandlePianoRClick(int x, int y, int selected_index,
747 const std::vector<int> &selected_dbIndex_array);
748 void HandlePianoRollover(int selected_index,
749 const std::vector<int> &selected_dbIndex_array,
750 int n_charts, int scale);
751 void ClearPianoRollover();
752 void UpdateCanvasControlBar(void);
753 void FormatPianoKeys(void);
754 void PianoPopupMenu(int x, int y, int selected_index,
755 const std::vector<int> &selected_dbIndex_array);
756 void OnPianoMenuDisableChart(wxCommandEvent &event);
757 void OnPianoMenuEnableChart(wxCommandEvent &event);
758
759 bool IsPianoContextMenuActive() { return m_piano_ctx_menu != 0; }
760 bool DoCanvasCOGSet(void);
761 void ApplyGlobalSettings();
762 void SetShowGPSCompassWindow(bool bshow);
763 bool GetShowGPSCompassWindow() { return m_bShowCompassWin; }
764 void FreezePiano() { m_pianoFrozen = true; }
765 void ThawPiano() { m_pianoFrozen = false; }
766 void StartChartDragInertia();
767 void SetupGridFont();
768
769 // Todo build more accessors
770 bool m_bFollow;
771 wxCursor *pCursorPencil;
772 wxCursor *pCursorArrow;
773 wxCursor *pCursorCross;
774 wxCursor *pPlugIn_Cursor;
775 TCWin *pCwin;
776 bool m_brepaint_piano;
809 wxPoint r_rband;
810 double m_prev_rlat;
811 double m_prev_rlon;
812 RoutePoint *m_prev_pMousePoint;
813 bool m_bShowNavobjects;
814 int m_routeState;
815 int m_upMode;
816 bool m_bLookAhead;
817
818#ifdef HAVE_WX_GESTURE_EVENTS
819 double m_oldVPSScale;
820 bool m_popupWanted;
821 bool m_leftdown;
822 wxPoint m_zoomStartPoint;
823#endif /* HAVE_WX_GESTURE_EVENTS */
824
825 void DrawBlinkObjects(void);
826
827 void StartRoute(void);
828 wxString FinishRoute(void);
829
830#ifdef ocpnUSE_GL
831 glChartCanvas *GetglCanvas() { return m_glcc; }
832#endif
833
834 bool CheckEdgePan(int x, int y, bool bdragging, int margin, int delta);
835
836 bool m_FinishRouteOnKillFocus;
837 bool m_bMeasure_DistCircle;
838 bool m_bAppendingRoute;
839 int m_nMeasureState;
840 Route *m_pMeasureRoute;
841 wxWindow *parent_frame;
842 CanvasMenuHandler *m_canvasMenu;
843 int GetMinAvailableGshhgQuality() {
844 return pWorldBackgroundChart->GetMinAvailableQuality();
845 }
846 int GetMaxAvailableGshhgQuality() {
847 return pWorldBackgroundChart->GetMaxAvailableQuality();
848 }
849 Route *GetSelectedRoute() const { return m_pSelectedRoute; }
850 Track *GetSelectedTrack() const { return m_pSelectedTrack; }
851 RoutePoint *GetSelectedRoutePoint() const { return m_pFoundRoutePoint; }
852
853 void SetAISCanvasDisplayStyle(int StyleIndx);
854 void TouchAISToolActive(void);
855 void UpdateAISTBTool(void);
856
857 void SelectChartFromStack(int index, bool bDir = false,
858 ChartTypeEnum New_Type = CHART_TYPE_DONTCARE,
859 ChartFamilyEnum New_Family = CHART_FAMILY_DONTCARE);
860 void SelectdbChart(int dbindex);
861
862 void DoCanvasStackDelta(int direction);
863
864 void ProcessNewGUIScale();
865
866 bool m_b_paint_enable;
867
868 wxRect GetScaleBarRect() { return m_scaleBarRect; }
869 void RenderAlertMessage(wxDC &dc, const ViewPort &vp);
870
871 std::vector<int> m_tile_noshow_index_array;
872 std::vector<int> m_tile_yesshow_index_array;
873 std::vector<int> m_quilt_noshow_index_array;
874
875 std::vector<int> GetQuiltNoshowIindexArray() {
876 return m_quilt_noshow_index_array;
877 }
887 double GetDisplayScale() { return m_displayScale; }
888 void ResetOwnshipOffset() { m_OSoffsetx = m_OSoffsety = 0; }
889 NotificationsList *GetNotificationsList() { return m_NotificationsList; }
890
891 int PrepareContextSelections(double lat, double lon);
892
893 RoutePoint *GetFoundRoutepoint() { return m_pFoundRoutePoint; }
894
899 obs::EventVar json_msg;
900
901 bool m_inPinch;
902
903private:
917 void DoZoomCanvas(double factor, bool can_zoom_to_cursor = true);
918
919 int AdjustQuiltRefChart();
920 bool UpdateS52State();
921 void CallPopupMenu(int x, int y);
922 bool IsTempMenuBarEnabled();
923 bool InvokeCanvasMenu(int x, int y, int seltype);
924 void OnMenuTimer(wxTimerEvent &event);
925 wxTimer m_menuTimer;
926 wxPoint m_menuPos;
927 bool m_inLongPress;
928
929 wxBitmap *pscratch_bm;
930 ViewPort VPoint;
931 void PositionConsole(void);
932 wxWindow *m_nmea_log;
933
934 wxColour PredColor();
935 wxColour ShipColor();
936
937 void ComputeShipScaleFactor(float icon_hdt, int ownShipWidth,
938 int ownShipLength, wxPoint2DDouble &lShipMidPoint,
939 wxPoint &GpsOffsetPixels,
940 wxPoint2DDouble lGPSPoint, float &scale_factor_x,
941 float &scale_factor_y);
942
943 void ShipDrawLargeScale(ocpnDC &dc, wxPoint2DDouble lShipMidPoint);
944 void ShipIndicatorsDraw(ocpnDC &dc, int img_height, wxPoint GPSOffsetPixels,
945 wxPoint2DDouble lGPSPoint);
946
947 ChInfoWin *m_pCIWin;
948
949 bool m_bShowCurrent;
950 bool m_bShowTide;
951 int cursor_region;
952 bool m_bTCupdate;
953 wxString m_scaleText;
954 double m_scaleValue;
955 bool m_bShowScaleInStatusBar;
956 wxRect bbRect;
957 bool m_bEnableBasemapTile;
958
959 wxPoint LastShipPoint;
960 wxPoint LastPredPoint;
961 bool m_bDrawingRoute;
962 bool m_bRouteEditing;
963 bool m_bMarkEditing;
964 bool m_bRoutePoinDragging;
965 bool m_bIsInRadius;
966 bool m_bMayToggleMenuBar;
967
968 // True only while replaying delayed single-click timer event.
969 bool m_isReplayingClickEvent = false;
970
971 RoutePoint *m_pRoutePointEditTarget;
972 RoutePoint *m_lastRoutePointEditTarget;
973 SelectItem *m_pFoundPoint;
974 bool m_bChartDragging;
975 wxPoint
976 m_touchdownPos; // LeftDown position for touch drag displacement check
977 Route *m_pSelectedRoute;
978 Track *m_pSelectedTrack;
979 wxArrayPtrVoid *m_pEditRouteArray;
980 RoutePoint *m_pFoundRoutePoint;
981
982 int m_FoundAIS_MMSI;
983
984 wxCursor *pCursorLeft;
985 wxCursor *pCursorRight;
986 wxCursor *pCursorUp;
987 wxCursor *pCursorDown;
988
989 wxCursor *pCursorUpLeft;
990 wxCursor *pCursorUpRight;
991 wxCursor *pCursorDownLeft;
992 wxCursor *pCursorDownRight;
993
994 int popx, popy;
995
996 wxBitmap *pThumbDIBShow;
997 wxBitmap *pThumbShowing;
998
999 bool bShowingCurrent;
1000 bool bShowingTide;
1001
1008 double m_canvas_scale_factor;
1010 double m_pix_per_mm;
1011 double m_display_size_mm;
1012
1013 double m_absolute_min_scale_ppm;
1014
1015 bool singleClickEventIsValid;
1016 wxMouseEvent singleClickEvent;
1017
1018 std::vector<s57Sector_t> extendedSectorLegs;
1019 wxFont m_overzoomFont;
1020 int m_overzoomTextWidth;
1021 int m_overzoomTextHeight;
1022
1023 // Methods
1024 void OnActivate(wxActivateEvent &event);
1025 void OnSize(wxSizeEvent &event);
1026 void MouseTimedEvent(wxTimerEvent &event);
1027 void MouseEvent(wxMouseEvent &event);
1028 void ShipDraw(ocpnDC &dc);
1029 void DrawArrow(ocpnDC &dc, int x, int y, double rot_angle, double scale);
1030 void OnRolloverPopupTimerEvent(wxTimerEvent &event);
1031 void FindRoutePointsAtCursor(float selectRadius, bool setBeingEdited);
1032
1033 void RotateTimerEvent(wxTimerEvent &event);
1034 void PanTimerEvent(wxTimerEvent &event);
1035 void MovementTimerEvent(wxTimerEvent &);
1036 void MovementStopTimerEvent(wxTimerEvent &);
1037 void OnCursorTrackTimerEvent(wxTimerEvent &event);
1038
1039 void MovementVPTimerEvent(wxTimerEvent &event);
1040
1041 void DrawAllTracksInBBox(ocpnDC &dc, LLBBox &BltBBox);
1042 void DrawActiveTrackInBBox(ocpnDC &dc, LLBBox &BltBBox);
1043 void DrawAllRoutesInBBox(ocpnDC &dc, LLBBox &BltBBox);
1044 void DrawActiveRouteInBBox(ocpnDC &dc, LLBBox &BltBBox);
1045 void DrawAllWaypointsInBBox(ocpnDC &dc, LLBBox &BltBBox);
1046 void DrawAnchorWatchPoints(ocpnDC &dc);
1047 double GetAnchorWatchRadiusPixels(RoutePoint *pAnchorWatchPoint);
1048
1049 void DrawAllTidesInBBox(ocpnDC &dc, LLBBox &BBox);
1050 void DrawAllCurrentsInBBox(ocpnDC &dc, LLBBox &BBox);
1051 void RebuildTideSelectList(LLBBox &BBox);
1052 void RebuildCurrentSelectList(LLBBox &BBox);
1053 IDX_entry *FindBestCurrentObject(double lat, double lon);
1054
1055 void RenderAllChartOutlines(ocpnDC &dc, ViewPort &vp);
1056 void RenderChartOutline(ocpnDC &dc, int dbIndex, ViewPort &vp);
1057 void RenderRouteLegs(ocpnDC &dc);
1058 void RenderVisibleSectorLights(ocpnDC &dc);
1059
1060 void AlertDraw(ocpnDC &dc); // pjotrc 2010.02.22
1061
1062 void GridDraw(ocpnDC &dc); // Display lat/lon Grid in chart display
1063 void ScaleBarDraw(ocpnDC &dc);
1064
1065 void DrawOverlayObjects(ocpnDC &dc, const wxRegion &ru);
1066 void RenderShipToActive(ocpnDC &dc, bool Use_Opengl);
1067
1068 emboss_data *EmbossDepthScale();
1069 emboss_data *CreateEmbossMapData(wxFont &font, int width, int height,
1070 const wxString &str, ColorScheme cs);
1071 void CreateDepthUnitEmbossMaps(ColorScheme cs);
1072 wxBitmap CreateDimBitmap(wxBitmap &Bitmap, double factor);
1073
1074 void CreateOZEmbossMapData(ColorScheme cs);
1075 emboss_data *EmbossOverzoomIndicator(ocpnDC &dc);
1076 void SetOverzoomFont();
1077
1078 // void CreateCM93OffsetEmbossMapData(ColorScheme cs);
1079 // void EmbossCM93Offset ( wxMemoryDC *pdc);
1080
1081 void DrawEmboss(ocpnDC &dc, emboss_data *pemboss);
1082
1083 void ShowBrightnessLevelTimedPopup(int brightness, int min, int max);
1084 void HandleNotificationMouseClick();
1085
1086 // Data
1088 int m_canvas_width;
1090 int m_canvas_height;
1091
1092 int xr_margin; // chart scroll margins, control cursor, etc.
1093 int xl_margin;
1094 int yt_margin;
1095 int yb_margin;
1096
1097 wxPoint last_drag;
1098 wxPoint m_last_touch_down_pos;
1099
1100 wxMemoryDC *pmemdc;
1101
1102 int warp_x, warp_y;
1103 bool warp_flag;
1104
1105 wxTimer *
1106 pPanTimer; // This timer used for auto panning on route creation and edit
1107 wxTimer *
1108 pMovementTimer; // This timer used for smooth movement in non-opengl mode
1109 wxTimer *pMovementStopTimer; // This timer used to stop movement if a keyup
1110 // event is lost
1111 wxTimer *pCurTrackTimer; // This timer used to update the status window on
1112 // mouse idle
1113 wxTimer *pRotDefTimer; // This timer used to control rotaion rendering on
1114 // mouse moves
1115 wxTimer *m_DoubleClickTimer;
1116 wxTimer m_routeFinishTimer;
1117
1118 wxTimer m_RolloverPopupTimer;
1119
1120 wxTimer m_VPMovementTimer;
1121
1122 int m_wheelzoom_stop_oneshot;
1123 int m_last_wheel_dir;
1124 wxStopWatch m_wheelstopwatch;
1125 double m_zoom_target;
1126
1127 int m_curtrack_timer_msec;
1128 int m_rollover_popup_timer_msec;
1129
1130 GSHHSChart *pWorldBackgroundChart;
1131
1132 ChartBaseBSB *pCBSB;
1133 wxBitmap *pss_overlay_bmp;
1134 wxMask *pss_overlay_mask;
1135
1136 wxRect ship_draw_rect;
1137 wxRect ship_draw_last_rect;
1138 wxRect ais_draw_rect;
1139 wxRect alert_draw_rect; // pjotrc 2010.02.22
1140
1141 wxBitmap *proute_bm; // a bitmap and dc used to calculate route bounding box
1142 wxMemoryDC m_dc_route; // seen in mouse->edit->route
1143
1144 emboss_data *m_pEM_Feet; // maps for depth unit emboss pattern
1145 emboss_data *m_pEM_Meters;
1146 emboss_data *m_pEM_Fathoms;
1147
1148 emboss_data *m_pEM_OverZoom;
1149 // emboss_data *m_pEM_CM93Offset; // Flav
1150
1166 double m_true_scale_ppm;
1167
1168 ownship_state_t m_ownship_state;
1169
1170 ColorScheme m_cs;
1171
1172 wxBitmap m_bmTideDay;
1173 wxBitmap m_bmTideDusk;
1174 wxBitmap m_bmTideNight;
1175 wxBitmap m_bmCurrentDay;
1176 wxBitmap m_bmCurrentDusk;
1177 wxBitmap m_bmCurrentNight;
1178 wxBitmap m_cTideBitmap;
1179 wxBitmap m_cCurrentBitmap;
1180
1181 RolloverWin *m_pRouteRolloverWin;
1182 RolloverWin *m_pTrackRolloverWin;
1183 RolloverWin *m_pAISRolloverWin;
1184
1185 TimedPopupWin *m_pBrightPopup;
1186
1187 wxImage m_os_image_red_day;
1188 wxImage m_os_image_red_dusk;
1189 wxImage m_os_image_red_night;
1190 wxImage m_os_image_grey_day;
1191 wxImage m_os_image_grey_dusk;
1192 wxImage m_os_image_grey_night;
1193 wxImage m_os_image_yellow_day;
1194 wxImage m_os_image_yellow_dusk;
1195 wxImage m_os_image_yellow_night;
1196
1197 wxImage *m_pos_image_red;
1198 wxImage *m_pos_image_grey;
1199 wxImage *m_pos_image_yellow;
1200
1201 wxImage *m_pos_image_user;
1202 wxImage *m_pos_image_user_grey;
1203 wxImage *m_pos_image_user_yellow;
1204
1205 wxImage *m_pos_image_user_day;
1206 wxImage *m_pos_image_user_dusk;
1207 wxImage *m_pos_image_user_night;
1208 wxImage *m_pos_image_user_grey_day;
1209 wxImage *m_pos_image_user_grey_dusk;
1210 wxImage *m_pos_image_user_grey_night;
1211 wxImage *m_pos_image_user_yellow_day;
1212 wxImage *m_pos_image_user_yellow_dusk;
1213 wxImage *m_pos_image_user_yellow_night;
1214
1215 wxImage m_ship_pix_image; // cached ship draw image for high overzoom
1216 int m_cur_ship_pix;
1217 bool m_cur_ship_pix_isgrey;
1218 ColorScheme m_ship_cs;
1219
1220 ViewPort m_cache_vp;
1221 wxBitmap *m_prot_bm;
1222 wxPoint m_roffset;
1223
1224 bool m_b_rot_hidef;
1225
1226 SelectItem *m_pRolloverRouteSeg;
1227 SelectItem *m_pRolloverTrackSeg;
1228
1229 double m_wheel_lat, m_wheel_lon;
1230 int m_wheel_x, m_wheel_y;
1231
1232 ViewPort m_bm_cache_vp;
1233 wxBitmap m_working_bm; // Used to build quilt in OnPaint()
1234 wxBitmap m_cached_chart_bm; // A cached copy of the fully drawn quilt
1235
1236 bool m_bbrightdir;
1237 int m_brightmod;
1238
1239 bool m_bzooming, m_bzooming_to_cursor;
1240 IDX_entry *m_pIDXCandidate;
1241
1242 // #ifdef ocpnUSE_GL
1243 glChartCanvas *m_glcc;
1244 // #endif
1245
1246 // Smooth movement member variables
1247 wxPoint m_pan_drag;
1248 int m_panx, m_pany, m_modkeys;
1249 double m_panspeed;
1250 bool m_bmouse_key_mod;
1251 double m_zoom_factor, m_rotation_speed;
1257 int m_mustmove;
1258
1259 wxDateTime m_last_movement_time;
1260
1261 int m_AISRollover_MMSI;
1262 bool m_bsectors_shown;
1263 bool m_bedge_pan;
1264 double m_displayed_scale_factor;
1265
1266 wxColour m_fog_color;
1267 bool m_disable_edge_pan;
1268 wxFont *m_pgridFont;
1269
1270 bool m_dragoffsetSet;
1271
1272 bool m_bautofind;
1273 bool m_bFirstAuto;
1274 double m_vLat, m_vLon;
1275 ChartStack *m_pCurrentStack;
1276 Piano *m_Piano;
1277 bool m_bpersistent_quilt;
1278
1279 wxMenu *m_piano_ctx_menu;
1280 int menu_selected_dbIndex, menu_selected_index;
1281
1282 ocpnCompass *m_Compass;
1283 bool m_bShowGPS;
1288 bool m_mouseWasInCompass;
1289
1290 wxRect m_mainlast_tb_rect;
1291 int m_restore_dbindex;
1292 int m_restore_group;
1293
1294 MUIBar *m_muiBar;
1295 wxSize m_muiBarHOSize;
1296
1297 bool m_bShowOutlines;
1298 bool m_bDisplayGrid;
1299 bool m_bShowDepthUnits;
1300 bool m_bShowAIS;
1301 bool m_bShowAISScaled;
1302
1303 // S52PLib state storage
1304 long m_s52StateHash;
1305 bool m_encShowText;
1306 bool m_encShowDepth;
1307 bool m_encShowLightDesc;
1308 bool m_encShowBuoyLabels;
1309 int m_encDisplayCategory;
1310 bool m_encShowLights;
1311 bool m_encShowAnchor;
1312 bool m_encShowDataQual;
1313
1314 wxTimer m_deferredFocusTimer;
1315 float m_focus_indicator_pix;
1316 bool m_bENCGroup;
1317 bool m_last_TBviz;
1318
1319 double m_OSoffsetx, m_OSoffsety;
1320 bool m_MouseDragging;
1321
1322 wxString m_alertString;
1323 wxRect m_scaleBarRect;
1324 bool m_bShowCompassWin;
1325 bool m_pianoFrozen;
1326
1327 double m_sector_glat, m_sector_glon;
1328 std::vector<s57Sector_t> m_sectorlegsVisible;
1329 bool m_bShowVisibleSectors;
1331 double m_displayScale;
1332 bool m_show_focus_bar;
1333
1334 double m_panx_target_final;
1335 double m_pany_target_final;
1336 double m_panx_target_now;
1337 double m_pany_target_now;
1338
1339 double m_start_lat, m_start_lon;
1340 double m_target_lat, m_target_lon;
1341 double m_run_lat, m_run_lon;
1342 bool m_timed_move_vp_active;
1343 int m_timedVP_step;
1344 int m_stvpc;
1345
1346 double meters_to_shift = 0;
1347 double dir_to_shift = 0;
1348
1349 // Chart drag inertia support
1350 wxTimer m_chart_drag_inertia_timer;
1351 void OnChartDragInertiaTimer(wxTimerEvent &event);
1352
1353 uint64_t m_last_drag_time;
1354 int m_chart_drag_total_x;
1355 int m_chart_drag_total_y;
1356 double m_chart_drag_total_time;
1357 double m_chart_drag_velocity_x;
1358 double m_chart_drag_velocity_y;
1359 wxLongLong m_chart_drag_inertia_time;
1360 wxLongLong m_chart_drag_inertia_start_time;
1361 bool m_chart_drag_inertia_active;
1362 double m_last_elapsed;
1363 std::vector<int> m_drag_vec_x;
1364 std::vector<int> m_drag_vec_y;
1365 std::vector<double> m_drag_vec_t;
1366 int m_inertia_last_drag_x;
1367 int m_inertia_last_drag_y;
1368
1369 // For Jump animation
1370 wxTimer m_easeTimer;
1371 wxLongLong m_animationStart;
1372 wxLongLong m_animationDuration; // e.g. 300 ms
1373 double m_startLat, m_startLon, m_startScale;
1374 double m_endLat, m_endLon, m_endScale;
1375 bool m_animationActive;
1376 void OnJumpEaseTimer(wxTimerEvent &event);
1377 bool StartSmoothJump(double lat, double lon, double scale_ppm);
1378 bool m_disable_adjust_on_zoom;
1379
1380 NotificationButton *m_notification_button;
1381 NotificationsList *m_NotificationsList;
1382 ObservableListener evt_notificationlist_change_listener;
1383
1384 wxStopWatch m_sw_left_down;
1385 wxStopWatch m_sw_left_up;
1386 long m_sw_down_time;
1387 long m_sw_up_time;
1388 wxTimer m_tap_timer;
1389 wxPoint m_lastTapPos;
1390 int m_tap_count;
1391 void OnTapTimer(wxTimerEvent &event);
1392 int m_DragTrigger;
1393 uint64_t m_DragTriggerStartTime;
1394
1395 DECLARE_EVENT_TABLE()
1396};
1397
1398// CUSTOMIZATION - FORMAT MINUTES
1399
1400wxString minutesToHoursDays(float timeInMinutes);
1401
1402// END OF CUSTOMIZATION - FORMAT MINUTES
1403
1408#ifndef wxCLOSE_BOX
1409#define wxCLOSE_BOX 0x1000
1410#endif
1411#ifndef wxFIXED_MINSIZE
1412#define wxFIXED_MINSIZE 0
1413#endif
1414
1415#endif // _CHCANV_H__
Minimal ChartCanvas interfaces.
Canvas context (right click) menu handler.
Chart info panel.
Charts database management
BSB chart management.
ChartCanvas * g_focusCanvas
Global instance.
Definition chcanv.cpp:1316
arrayofCanvasPtr g_canvasArray
Global instance.
Definition chcanv.cpp:173
ChartCanvas * g_overlayCanvas
Global instance.
Definition chcanv.cpp:1315
Minimal ChartCAnvas interface with very little dependencies.
Handles context menu events for the chart canvas.
Definition canvas_menu.h:45
A custom panel for displaying chart information.
Definition ch_info_win.h:36
Base class for BSB (Maptech/NOS) format nautical charts.
Definition chartimg.h:128
Base class for all chart types.
Definition chartbase.h:126
ChartCanvas - Main chart display and interaction component.
Definition chcanv.h:174
void CloseTideDialog()
Close any open tide dialog.
Definition chcanv.cpp:13969
bool GetCanvasPointPixVP(ViewPort &vp, double rlat, double rlon, wxPoint *r)
Convert latitude/longitude to canvas pixel coordinates rounded to nearest integer using specified vie...
Definition chcanv.cpp:4608
float GetVPChartScale()
Return the ViewPort chart scale denominator (e.g., 50000 for a 1:50000 scale).
Definition chcanv.h:503
void OnPaint(wxPaintEvent &event)
Definition chcanv.cpp:11994
bool GetCanvasPointPix(double rlat, double rlon, wxPoint *r)
Convert latitude/longitude to canvas pixel coordinates (physical pixels) rounded to nearest integer.
Definition chcanv.cpp:4604
void DoMovement(long dt)
Performs a step of smooth movement animation on the chart canvas.
Definition chcanv.cpp:3688
void ShowSingleTideDialog(int x, int y, void *pvIDX)
Display tide/current dialog with single-instance management.
Definition chcanv.cpp:13928
obs::EventVar json_msg
Notified with message targeting all plugins.
Definition chcanv.h:899
void GetDoubleCanvasPointPixVP(ViewPort &vp, double rlat, double rlon, wxPoint2DDouble *r)
Convert latitude/longitude to canvas pixel coordinates (physical pixels) with double precision,...
Definition chcanv.cpp:4554
double m_cursor_lat
The latitude in degrees corresponding to the most recently processed cursor position.
Definition chcanv.h:808
double GetCanvasScaleFactor()
Return the number of logical pixels per meter for the screen.
Definition chcanv.h:512
double GetPixPerMM()
Get the number of logical pixels per millimeter on the screen.
Definition chcanv.h:543
double GetDisplaySizeMM()
Get the width of the screen in millimeters.
Definition chcanv.h:276
double GetDisplayScale()
Get the ratio of physical to logical pixel for the display.
Definition chcanv.h:887
void SetDisplaySizeMM(double size)
Set the width of the screen in millimeters.
Definition chcanv.cpp:2360
int PrepareContextSelections(double lat, double lon)
Definition chcanv.cpp:8095
bool MouseEventSetup(wxMouseEvent &event, bool b_handle_dclick=true)
Definition chcanv.cpp:7901
bool PanCanvas(double dx, double dy)
Pans (moves) the canvas by the specified physical pixels in x and y directions.
Definition chcanv.cpp:5136
void ZoomCanvasSimple(double factor)
Perform an immediate zoom operation without smooth transitions.
Definition chcanv.cpp:4685
bool SetVPScale(double sc, bool b_refresh=true)
Sets the viewport scale while maintaining the center point.
Definition chcanv.cpp:5414
float GetVPScale() override
Return ViewPort scale factor, in physical pixels per meter.
Definition chcanv.h:184
double m_cursor_lon
The longitude in degrees corresponding to the most recently processed cursor position.
Definition chcanv.h:792
void GetCanvasPixPoint(double x, double y, double &lat, double &lon)
Convert canvas pixel coordinates (physical pixels) to latitude/longitude.
Definition chcanv.cpp:4629
bool IsTideDialogOpen() const
Definition chcanv.cpp:13967
void ZoomCanvas(double factor, bool can_zoom_to_cursor=true, bool stoptimer=true)
Perform a smooth zoom operation on the chart canvas by the specified factor.
Definition chcanv.cpp:4691
void DrawTCWindow(int x, int y, void *pIDX)
Legacy tide dialog creation method.
Definition chcanv.cpp:13924
void GetDoubleCanvasPointPix(double rlat, double rlon, wxPoint2DDouble *r)
Convert latitude/longitude to canvas pixel coordinates (physical pixels) with double precision.
Definition chcanv.cpp:4549
bool SetViewPoint(double lat, double lon)
Centers the view on a specific lat/lon position.
Definition chcanv.cpp:5433
bool MouseEventProcessCanvas(wxMouseEvent &event)
Processes mouse events for core chart panning and zooming operations.
Definition chcanv.cpp:10401
Represents an index entry for tidal and current data.
Definition idx_entry.h:48
Modern User Interface Control Bar for OpenCPN.
Definition mui_bar.h:60
Main application frame.
Definition ocpn_frame.h:109
Definition piano.h:59
Definition quilt.h:82
Represents a waypoint or mark within the navigation system.
Definition route_point.h:71
Represents a navigational route in the navigation system.
Definition route.h:99
Definition tc_win.h:46
Represents a track, which is a series of connected track points.
Definition track.h:117
Definition undo.h:36
ViewPort - Core geographic projection and coordinate transformation engine.
Definition viewport.h:56
double view_scale_ppm
Requested view scale in physical pixels per meter (ppm), before applying projections.
Definition viewport.h:204
double rotation
Rotation angle of the viewport in radians.
Definition viewport.h:214
double tilt
Tilt angle for perspective view in radians.
Definition viewport.h:216
double skew
Angular distortion (shear transform) applied to the viewport in radians.
Definition viewport.h:212
double chart_scale
Chart scale denominator (e.g., 50000 for a 1:50000 scale).
Definition viewport.h:219
Encapsulates persistent canvas configuration.
Stores emboss effect data for textures.
Definition emboss_data.h:34
OpenGL chart rendering canvas.
Represents a compass display in the OpenCPN navigation system.
Definition compass.h:39
Device context class that can use either wxDC or OpenGL for drawing.
Definition ocpndc.h:60
Texture emboss effects storage.
OpenGL chart rendering canvas.
Platform independent GL includes.
GSHHS Chart Object (Global Self-consistent, Hierarchical, High-resolution Shoreline) Derived from htt...
General purpose GUI support.
Tidal data container.
MUI (Modern User Interface) Control bar.
Notification Manager GUI.
Platform specific wxCursor extension.
Optimized wxBitmap Object.
PlugIn Object Definition/API.
void SetENCDisplayCategory(PI_DisCat cat, int CanvasIndex)
Sets ENC (Electronic Navigation Chart) feature display category.
PI_DisCat GetENCDisplayCategory(int CanvasIndex)
Gets current ENC display category.
void JumpToPosition(double lat, double lon, double scale)
Centers chart display on specified position at given scale.
Chart Bar Window.
Dashboard compass instrument.
Chart quilt support.
Route abstraction.
Waypoint or mark abstraction.
S57 chart sector encapsulation.
A single, selected generic item.
Tide and currents window.
Framework for Undo features.