source: git/src/mainfrm.h @ e59fed7

RELEASE/1.0RELEASE/1.2debug-cidebug-ci-sanitisersfaster-cavernloglog-selectstereostereo-2025walls-datawalls-data-hanging-as-warningwarn-only-for-hanging-survey
Last change on this file since e59fed7 was 9f9c05e, checked in by Olly Betts <olly@…>, 23 years ago

Improved handling of Compass PLT files and CMAP xyz files - no longer change
dots to spaces in survey and station names - instead use a space as the
separator between survey name and station name.

git-svn-id: file:///home/survex-svn/survex/trunk@2058 4b37db11-9a0c-4f06-9ece-9ab7cdaee568

  • Property mode set to 100644
File size: 20.4 KB
Line 
1//
2//  mainfrm.h
3//
4//  Main frame handling for Aven.
5//
6//  Copyright (C) 2000-2001, Mark R. Shinwell.
7//  Copyright (C) 2001-2002 Olly Betts
8//
9//  This program is free software; you can redistribute it and/or modify
10//  it under the terms of the GNU General Public License as published by
11//  the Free Software Foundation; either version 2 of the License, or
12//  (at your option) any later version.
13//
14//  This program is distributed in the hope that it will be useful,
15//  but WITHOUT ANY WARRANTY; without even the implied warranty of
16//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17//  GNU General Public License for more details.
18//
19//  You should have received a copy of the GNU General Public License
20//  along with this program; if not, write to the Free Software
21//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22//
23
24#ifndef mainfrm_h
25#define mainfrm_h
26
27#include "wx.h"
28#include "wx/docview.h"
29#include "gfxcore.h"
30#include "message.h"
31#include "aventreectrl.h"
32#include "img.h"
33
34#include <list>
35#if 0 // if you turn this back on, reenabled the check in configure.in too
36#ifdef HAVE_EXT_HASH_MAP
37#include <ext/hash_map>
38#elif defined HAVE_HASH_MAP
39#include <hash_map>
40#else
41#include <map>
42#define hash_map map
43#endif
44#endif
45
46using namespace std;
47
48#include <math.h>
49
50// This is for mingw32/Visual C++:
51#ifndef M_PI
52#define M_PI 3.14159265358979323846
53#endif
54
55extern const int NUM_DEPTH_COLOURS;
56
57enum {
58    menu_FILE_OPEN = 1000,
59    menu_FILE_OPEN_PRES,
60#ifdef AVENGL
61    menu_FILE_OPEN_TERRAIN,
62#endif
63    menu_FILE_QUIT,
64    menu_ROTATION_START,
65    menu_ROTATION_STOP,
66    menu_ROTATION_TOGGLE,
67    menu_ROTATION_SPEED_UP,
68    menu_ROTATION_SLOW_DOWN,
69    menu_ROTATION_REVERSE,
70    menu_ROTATION_STEP_CCW,
71    menu_ROTATION_STEP_CW,
72    menu_ORIENT_MOVE_NORTH,
73    menu_ORIENT_MOVE_EAST,
74    menu_ORIENT_MOVE_SOUTH,
75    menu_ORIENT_MOVE_WEST,
76    menu_ORIENT_SHIFT_LEFT,
77    menu_ORIENT_SHIFT_RIGHT,
78    menu_ORIENT_SHIFT_UP,
79    menu_ORIENT_SHIFT_DOWN,
80    menu_ORIENT_PLAN,
81    menu_ORIENT_ELEVATION,
82    menu_ORIENT_HIGHER_VP,
83    menu_ORIENT_LOWER_VP,
84    menu_ORIENT_ZOOM_IN,
85    menu_ORIENT_ZOOM_OUT,
86    menu_ORIENT_DEFAULTS,
87    menu_VIEW_SHOW_LEGS,
88    menu_VIEW_SHOW_CROSSES,
89    menu_VIEW_SHOW_NAMES,
90    menu_VIEW_SHOW_SURFACE,
91    menu_VIEW_SURFACE_DEPTH,
92    menu_VIEW_SURFACE_DASHED,
93    menu_VIEW_SHOW_OVERLAPPING_NAMES,
94    menu_VIEW_SHOW_ENTRANCES,
95    menu_VIEW_SHOW_FIXED_PTS,
96    menu_VIEW_SHOW_EXPORTED_PTS,
97    menu_VIEW_INDICATORS,
98    menu_VIEW_COMPASS,
99    menu_VIEW_CLINO,
100    menu_VIEW_DEPTH_BAR,
101    menu_VIEW_SCALE_BAR,
102    menu_VIEW_STATUS_BAR,
103    menu_VIEW_GRID,
104    menu_VIEW_SIDE_PANEL,
105#ifdef AVENGL
106    menu_VIEW_ANTIALIAS,
107    menu_VIEW_SOLID_SURFACE,
108#endif
109    menu_VIEW_METRIC,
110    menu_VIEW_DEGREES,
111    menu_PRES_CREATE,
112    menu_PRES_GO,
113    menu_PRES_GO_BACK,
114    menu_PRES_RESTART,
115    menu_PRES_RECORD,
116    menu_PRES_FINISH,
117    menu_PRES_ERASE,
118    menu_PRES_ERASE_ALL,
119    menu_CTL_REVERSE,
120    menu_CTL_CANCEL_DIST_LINE,
121    menu_HELP_ABOUT,
122    button_FIND,
123    button_HIDE
124};
125
126class PointInfo {
127    friend class MainFrm;
128    Double x, y, z;
129    bool isLine; // false => move, true => draw line
130    bool isSurface;
131
132public:
133    Double GetX() const { return x; }
134    Double GetY() const { return y; }
135    Double GetZ() const { return z; }
136    bool IsLine() const { return isLine; }
137    bool IsSurface() const { return isSurface; }
138};
139
140#define LFLAG_SURFACE           img_SFLAG_SURFACE
141#define LFLAG_UNDERGROUND       img_SFLAG_UNDERGROUND
142#define LFLAG_EXPORTED          img_SFLAG_EXPORTED
143#define LFLAG_FIXED             img_SFLAG_FIXED
144#define LFLAG_ENTRANCE          0x100
145#define LFLAG_HIGHLIGHTED       0x200
146
147class LabelPlotCmp;
148
149class LabelInfo {
150    friend class MainFrm;
151    friend class GfxCore;
152    friend class LabelPlotCmp;
153    Double x, y, z;
154    wxString text;
155    int flags;
156    wxTreeItemId tree_id;
157
158public:
159    Double GetX() const { return x; }
160    Double GetY() const { return y; }
161    Double GetZ() const { return z; }
162
163    wxString GetText() const { return text; }
164
165    bool IsEntrance() const { return flags & LFLAG_ENTRANCE; }
166    bool IsFixedPt() const { return flags & LFLAG_FIXED; }
167    bool IsExportedPt() const { return flags & LFLAG_EXPORTED; }
168    bool IsUnderground() const { return flags & LFLAG_UNDERGROUND; }
169    bool IsSurface() const { return flags & LFLAG_SURFACE; }
170    bool IsHighLighted() const { return flags & LFLAG_HIGHLIGHTED; }
171};
172
173class MainFrm : public wxFrame {
174    wxFileHistory m_history;
175    int m_SashPosition;
176    list<PointInfo*>* m_Points;
177    list<LabelInfo*> m_Labels;
178    Double m_XExt;
179    Double m_YExt;
180    Double m_ZExt;
181    Double m_XMin;
182    Double m_YMin;
183    Double m_ZMin;
184    int m_NumLegs;
185    int m_NumPoints;
186    int m_NumCrosses;
187    int m_NumExtraLegs;
188    GfxCore* m_Gfx;
189    wxPen* m_Pens;
190    wxBrush* m_Brushes;
191    int m_NumEntrances;
192    int m_NumFixedPts;
193    int m_NumExportedPts;
194    wxSplitterWindow* m_Splitter;
195    wxPanel* m_Panel;
196    AvenTreeCtrl* m_Tree;
197    wxTreeItemId m_TreeRoot;
198    wxTextCtrl* m_FindBox;
199    wxStaticText* m_MousePtr;
200    wxStaticText* m_Coords;
201    wxStaticText* m_StnCoords;
202    wxStaticText* m_StnName;
203    wxStaticText* m_StnAlt;
204    wxStaticText* m_Dist1;
205    wxStaticText* m_Dist2;
206    wxStaticText* m_Dist3;
207    wxStaticText* m_Found;
208    wxCheckBox* m_RegexpCheckBox;
209    wxString m_File;
210    int separator; // character separating survey levels (often '.')
211#ifdef AVENPRES
212    FILE* m_PresFP;
213    bool m_PresLoaded;
214    bool m_Recording;
215#endif
216
217    struct {
218        Double x, y, z;
219    } m_Offsets;
220
221#ifdef AVENGL
222    struct {
223        Double xmin, xmax;
224        Double ymin, ymax;
225        Double zmin, zmax;
226    } m_TerrainExtents;
227
228    struct {
229        int x, y;
230    } m_TerrainSize;
231
232    Double* m_TerrainGrid;
233#endif
234
235    void SetTreeItemColour(LabelInfo* label);
236    void FillTree();
237    void ClearPointLists();
238    bool LoadData(const wxString& file, wxString prefix = "");
239#ifdef AVENGL
240    bool LoadTerrain(const wxString& file);
241    void OpenTerrain(const wxString& file);
242#endif
243    void SortIntoDepthBands(list<PointInfo*>& points);
244    void IntersectLineWithPlane(Double x0, Double y0, Double z0,
245                                Double x1, Double y1, Double z1,
246                                Double z, Double& x, Double& y);
247    Double GetDepthBoundaryBetweenBands(int a, int b);
248    int GetDepthColour(Double z);
249    void CentreDataset(Double xmin, Double ymin, Double zmin);
250
251    wxString GetTabMsg(int key) {
252        wxString x(msg(key)); x.Replace("##", "\t"); x.Replace("@", "&"); return x;
253    }
254
255    void InitialisePensAndBrushes();
256    void CreateMenuBar();
257    void CreateToolBar();
258    void CreateSidePanel();
259
260public:
261    MainFrm(const wxString& title, const wxPoint& pos, const wxSize& size);
262    ~MainFrm();
263
264    void OnMRUFile(wxCommandEvent& event);
265    void OpenFile(const wxString& file, wxString survey = "", bool delay = false);
266#ifdef AVENPRES
267    void OnOpenPresUpdate(wxUpdateUIEvent& event);
268#endif
269    void OnFileOpenTerrainUpdate(wxUpdateUIEvent& event);
270
271    void OnFind(wxCommandEvent& event);
272    void OnHide(wxCommandEvent& event);
273
274    void OnOpen(wxCommandEvent& event);
275    void OnFileOpenTerrain(wxCommandEvent& event);
276#ifdef AVENPRES
277    void OnOpenPres(wxCommandEvent& event);
278#endif
279    void OnQuit(wxCommandEvent& event);
280
281#ifdef AVENPRES
282    void OnPresCreate(wxCommandEvent& event);
283    void OnPresGo(wxCommandEvent& event);
284    void OnPresGoBack(wxCommandEvent& event);
285    void OnPresFinish(wxCommandEvent& event);
286    void OnPresRestart(wxCommandEvent& event);
287    void OnPresRecord(wxCommandEvent& event);
288    void OnPresErase(wxCommandEvent& event);
289    void OnPresEraseAll(wxCommandEvent& event);
290
291    void OnPresCreateUpdate(wxUpdateUIEvent& event);
292    void OnPresGoUpdate(wxUpdateUIEvent& event);
293    void OnPresGoBackUpdate(wxUpdateUIEvent& event);
294    void OnPresFinishUpdate(wxUpdateUIEvent& event);
295    void OnPresRestartUpdate(wxUpdateUIEvent& event);
296    void OnPresRecordUpdate(wxUpdateUIEvent& event);
297    void OnPresEraseUpdate(wxUpdateUIEvent& event);
298    void OnPresEraseAllUpdate(wxUpdateUIEvent& event);
299#endif
300
301    void OnAbout(wxCommandEvent& event);
302    void OnClose(wxCloseEvent&);
303
304    void OnSetFocus(wxFocusEvent &e) { if (m_Gfx) m_Gfx->SetFocus(); }
305
306    // temporary bodges until event handling problem is sorted out:
307    void OnDefaultsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnDefaultsUpdate(event); }
308    void OnPlanUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnPlanUpdate(event); }
309    void OnElevationUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnElevationUpdate(event); }
310    void OnDisplayOverlappingNamesUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnDisplayOverlappingNamesUpdate(event); }
311    void OnShowCrossesUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowCrossesUpdate(event); }
312    void OnShowEntrancesUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowEntrancesUpdate(event); }
313    void OnShowFixedPtsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowFixedPtsUpdate(event); }
314    void OnShowExportedPtsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowExportedPtsUpdate(event); }
315    void OnShowStationNamesUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowStationNamesUpdate(event); }
316    void OnShowSurveyLegsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowSurveyLegsUpdate(event); }
317    void OnShowSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowSurfaceUpdate(event); }
318    void OnShowSurfaceDepthUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowSurfaceDepthUpdate(event); }
319    void OnShowSurfaceDashedUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShowSurfaceDashedUpdate(event); }
320    void OnMoveEastUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnMoveEastUpdate(event); }
321    void OnMoveNorthUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnMoveNorthUpdate(event); }
322    void OnMoveSouthUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnMoveSouthUpdate(event); }
323    void OnMoveWestUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnMoveWestUpdate(event); }
324    void OnStartRotationUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnStartRotationUpdate(event); }
325    void OnToggleRotationUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnToggleRotationUpdate(event); }
326    void OnStopRotationUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnStopRotationUpdate(event); }
327    void OnReverseControlsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnReverseControlsUpdate(event); }
328    void OnSlowDownUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnSlowDownUpdate(event); }
329    void OnSpeedUpUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnSpeedUpUpdate(event); }
330    void OnStepOnceAnticlockwiseUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnStepOnceAnticlockwiseUpdate(event); }
331    void OnStepOnceClockwiseUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnStepOnceClockwiseUpdate(event); }
332    void OnHigherViewpointUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnHigherViewpointUpdate(event); }
333    void OnLowerViewpointUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnLowerViewpointUpdate(event); }
334    void OnShiftDisplayDownUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayDownUpdate(event); }
335    void OnShiftDisplayLeftUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayLeftUpdate(event); }
336    void OnShiftDisplayRightUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayRightUpdate(event); }
337    void OnShiftDisplayUpUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayUpUpdate(event); }
338    void OnZoomInUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnZoomInUpdate(event); }
339    void OnZoomOutUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnZoomOutUpdate(event); }
340    void OnToggleScalebarUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnToggleScalebarUpdate(event); }
341    void OnToggleDepthbarUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnToggleDepthbarUpdate(event); }
342    void OnViewCompassUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnViewCompassUpdate(event); }
343    void OnViewGridUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnViewGridUpdate(event); }
344    void OnViewClinoUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnViewClinoUpdate(event); }
345    void OnReverseDirectionOfRotationUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnReverseDirectionOfRotationUpdate(event); }
346    void OnCancelDistLineUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnCancelDistLineUpdate(event); }
347#ifdef AVENGL
348    void OnAntiAliasUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnAntiAliasUpdate(event); }
349    void OnSolidSurfaceUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnSolidSurfaceUpdate(event); }
350#endif
351    void OnIndicatorsUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnIndicatorsUpdate(event); }
352
353    void OnDefaults(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnDefaults(); }
354    void OnPlan(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnPlan(); }
355    void OnElevation(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnElevation(); }
356    void OnDisplayOverlappingNames(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnDisplayOverlappingNames(); }
357    void OnShowCrosses(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowCrosses(); }
358    void OnShowEntrances(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowEntrances(); }
359    void OnShowFixedPts(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowFixedPts(); }
360    void OnShowExportedPts(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowExportedPts(); }
361    void OnShowStationNames(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowStationNames(); }
362    void OnShowSurveyLegs(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowSurveyLegs(); }
363    void OnShowSurface(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowSurface(); }
364    void OnShowSurfaceDepth(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowSurfaceDepth(); }
365    void OnShowSurfaceDashed(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShowSurfaceDashed(); }
366    void OnMoveEast(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnMoveEast(); }
367    void OnMoveNorth(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnMoveNorth(); }
368    void OnMoveSouth(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnMoveSouth(); }
369    void OnMoveWest(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnMoveWest(); }
370    void OnStartRotation(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnStartRotation(); }
371    void OnToggleRotation(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnToggleRotation(); }
372    void OnStopRotation(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnStopRotation(); }
373    void OnReverseControls(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnReverseControls(); }
374    void OnSlowDown(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnSlowDown(); }
375    void OnSpeedUp(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnSpeedUp(); }
376    void OnStepOnceAnticlockwise(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnStepOnceAnticlockwise(); }
377    void OnStepOnceClockwise(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnStepOnceClockwise(); }
378    void OnHigherViewpoint(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnHigherViewpoint(); }
379    void OnLowerViewpoint(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnLowerViewpoint(); }
380    void OnShiftDisplayDown(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayDown(); }
381    void OnShiftDisplayLeft(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayLeft(); }
382    void OnShiftDisplayRight(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayRight(); }
383    void OnShiftDisplayUp(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnShiftDisplayUp(); }
384    void OnZoomIn(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnZoomIn(); }
385    void OnZoomOut(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnZoomOut(); }
386    void OnToggleScalebar(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnToggleScalebar(); }
387    void OnToggleDepthbar(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnToggleDepthbar(); }
388    void OnViewCompass(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnViewCompass(); }
389    void OnViewClino(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnViewClino(); }
390    void OnViewGrid(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnViewGrid(); }
391    void OnReverseDirectionOfRotation(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnReverseDirectionOfRotation(); }
392    void OnCancelDistLine(wxCommandEvent& event) { if (m_Gfx) m_Gfx->OnCancelDistLine(); }
393#ifdef AVENGL
394    void OnAntiAlias(wxCommandEvent&) { if (m_Gfx) m_Gfx->OnAntiAlias(); }
395    void OnSolidSurface(wxCommandEvent&) { if (m_Gfx) m_Gfx->OnSolidSurface(); }
396#endif
397    // end of horrible bodges
398
399    void OnToggleMetric(wxCommandEvent&) { if (m_Gfx) m_Gfx->OnToggleMetric(); }
400    void OnToggleDegrees(wxCommandEvent&) { if (m_Gfx) m_Gfx->OnToggleDegrees(); }
401
402    void OnToggleMetricUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnToggleMetricUpdate(event); }
403    void OnToggleDegreesUpdate(wxUpdateUIEvent& event) { if (m_Gfx) m_Gfx->OnToggleDegreesUpdate(event); }
404
405    void OnViewSidePanelUpdate(wxUpdateUIEvent& event);
406    void OnViewSidePanel(wxCommandEvent& event);
407    void ToggleSidePanel();
408
409    Double GetXExtent() const { return m_XExt; }
410    Double GetYExtent() const { return m_YExt; }
411    Double GetZExtent() const { return m_ZExt; }
412    Double GetXMin() const { return m_XMin; }
413    Double GetYMin() const { return m_YMin; }
414    Double GetYMax() const { return m_YMin + m_YExt; }
415    Double GetZMin() const { return m_ZMin; }
416    Double GetZMax() const { return m_ZMin + m_ZExt; }
417
418#ifdef AVENGL
419    int GetTerrainXSize() const { return m_TerrainSize.x; }
420    int GetTerrainYSize() const { return m_TerrainSize.y; }
421
422    Double GetTerrainMinX() const { return m_TerrainExtents.xmin; }
423    Double GetTerrainMaxX() const { return m_TerrainExtents.xmax; }
424    Double GetTerrainMinY() const { return m_TerrainExtents.ymin; }
425    Double GetTerrainMaxY() const { return m_TerrainExtents.ymax; }
426    Double GetTerrainMinZ() const { return m_TerrainExtents.zmin; }
427    Double GetTerrainMaxZ() const { return m_TerrainExtents.zmax; }
428
429    Double GetTerrainXSquareSize() const {
430        return (m_TerrainExtents.xmax - m_TerrainExtents.xmin)
431                / m_TerrainSize.x;
432    }
433    Double GetTerrainYSquareSize() const {
434        return (m_TerrainExtents.ymax - m_TerrainExtents.ymin)
435                / m_TerrainSize.y;
436    }
437
438    Double GetTerrainHeight(int x, int y) const {
439        assert(x >= 0 && x < m_TerrainSize.x);
440        assert(y >= 0 && y < m_TerrainSize.y);
441
442        return m_TerrainGrid[x + m_TerrainSize.x * y];
443    }
444#endif
445
446    int GetNumLegs() const { return m_NumLegs; }
447    int GetNumPoints() const { return m_NumPoints; }
448    int GetNumCrosses() const { return m_NumCrosses; }
449
450    int GetNumDepthBands() const { return NUM_DEPTH_COLOURS; }
451
452    wxPen GetPen(int band) const {
453        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
454        return m_Pens[band];
455    }
456
457    wxBrush GetBrush(int band) const {
458        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
459        return m_Brushes[band];
460    }
461
462    void GetColour(int band, Double& r, Double& g, Double& b) const;
463
464    wxPen GetSurfacePen() const { return m_Pens[NUM_DEPTH_COLOURS]; }
465
466    void SelectTreeItem(LabelInfo* label);
467    void ClearTreeSelection();
468
469    int GetNumFixedPts() const { return m_NumFixedPts; }
470    int GetNumExportedPts() const { return m_NumExportedPts; }
471    int GetNumEntrances() const { return m_NumEntrances; }
472
473    void ClearCoords();
474    void SetCoords(Double x, Double y);
475    void SetAltitude(Double z);
476
477    Double GetXOffset() const { return m_Offsets.x; }
478    Double GetYOffset() const { return m_Offsets.y; }
479    Double GetZOffset() const { return m_Offsets.z; }
480
481    void SetMouseOverStation(LabelInfo* label);
482
483    list<PointInfo*>::iterator GetPointsNC(int band) const {
484        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
485        return m_Points[band].begin();
486    }
487
488    list<PointInfo*>::iterator GetPointsEndNC(int band) const {
489        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
490        return m_Points[band].end();
491    }
492
493    list<PointInfo*>::const_iterator GetPoints(int band) const {
494        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
495        return m_Points[band].begin();
496    }
497
498    list<PointInfo*>::const_iterator GetPointsEnd(int band) const {
499        assert(band >= 0 && band < NUM_DEPTH_COLOURS);
500        return m_Points[band].end();
501    }
502
503    list<LabelInfo*>::const_iterator GetLabels() const {
504        return m_Labels.begin();
505    }
506
507    list<LabelInfo*>::const_iterator GetLabelsEnd() const {
508        return m_Labels.end();
509    }
510
511    list<LabelInfo*>::const_reverse_iterator GetRevLabels() const {
512        return m_Labels.rbegin();
513    }
514
515    list<LabelInfo*>::const_reverse_iterator GetRevLabelsEnd() const {
516        return m_Labels.rend();
517    }
518
519    void ShowInfo(const LabelInfo *label);
520    void DisplayTreeInfo(const wxTreeItemData* data);
521    void TreeItemSelected(wxTreeItemData* data);
522
523private:
524    DECLARE_EVENT_TABLE()
525};
526
527#endif
Note: See TracBrowser for help on using the repository browser.