source: git/src/mainfrm.h @ 7a89dc2

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

aven: you can now select distances to be displayed in feet (or miles when
you zoom right out) instead of metres, and angles to be in grads instead
of degrees.

aven: show altitude of mouse pointer when in elevation view.

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

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