From f680b80a513c991f9afdb6c96566cfbb22a7f208 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Fri, 20 May 2005 11:34:39 +0000 Subject: add viewpoint name to control window add viewpoint name to control window --- src/GipfelWidget.H | 20 +++++++++++--- src/GipfelWidget.cxx | 43 ++++++++++++++++++++++++++++++- src/Panorama.H | 17 +++++++++++- src/Panorama.cxx | 48 +++++++++++++++++++++++++++++++++- src/gipfel.cxx | 73 +++++++++++++++++++++++++++++++++++++++++++--------- 5 files changed, 183 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/GipfelWidget.H b/src/GipfelWidget.H index 3058b68..a0459a6 100644 --- a/src/GipfelWidget.H +++ b/src/GipfelWidget.H @@ -1,5 +1,5 @@ // -// "$Id: GipfelWidget.H,v 1.20 2005/05/10 17:57:11 hofmann Exp $" +// "$Id: GipfelWidget.H,v 1.21 2005/05/20 13:34:39 hofmann Exp $" // // Copyright 2005 by Johannes Hofmann // @@ -61,6 +61,16 @@ class GipfelWidget : public Fl_Widget { void set_scale(double s); + void set_height_dist_ratio(double r); + + void set_view_lat(double v); + + void set_view_long(double v); + + void set_view_height(double v); + + const char * get_viewpoint(); + double get_center_angle(); double get_nick_angle(); @@ -70,8 +80,12 @@ class GipfelWidget : public Fl_Widget { double get_scale(); double get_height_dist_ratio(); - - void set_height_dist_ratio(double r); + + double get_view_lat(); + + double get_view_long(); + + double get_view_height(); int comp_params(); diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index c291685..85669b1 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -1,5 +1,5 @@ // -// "$Id: GipfelWidget.cxx,v 1.31 2005/05/17 09:20:38 hofmann Exp $" +// "$Id: GipfelWidget.cxx,v 1.32 2005/05/20 13:34:39 hofmann Exp $" // // GipfelWidget routines. // @@ -317,6 +317,26 @@ GipfelWidget::get_height_dist_ratio() { return pan->get_height_dist_ratio(); } +const char * +GipfelWidget::get_viewpoint() { + return pan->get_viewpoint(); +} + +double +GipfelWidget::get_view_lat() { + return pan->get_view_lat(); +} + +double +GipfelWidget::get_view_long() { + return pan->get_view_long(); +} + +double +GipfelWidget::get_view_height() { + return pan->get_view_height(); +} + void GipfelWidget::set_height_dist_ratio(double r) { pan->set_height_dist_ratio(r); @@ -324,6 +344,27 @@ GipfelWidget::set_height_dist_ratio(double r) { redraw(); } +void +GipfelWidget::set_view_lat(double v) { + pan->set_view_lat(v); + set_labels(pan->get_visible_mountains()); + redraw(); +} + +void +GipfelWidget::set_view_long(double v) { + pan->set_view_long(v); + set_labels(pan->get_visible_mountains()); + redraw(); +} + +void +GipfelWidget::set_view_height(double v) { + pan->set_view_height(v); + set_labels(pan->get_visible_mountains()); + redraw(); +} + int GipfelWidget::comp_params() { if (m1 == NULL || m2 == NULL) { diff --git a/src/Panorama.H b/src/Panorama.H index 66a9a3f..15e51cb 100644 --- a/src/Panorama.H +++ b/src/Panorama.H @@ -1,5 +1,5 @@ // -// "$Id: Panorama.H,v 1.18 2005/05/10 17:57:11 hofmann Exp $" +// "$Id: Panorama.H,v 1.19 2005/05/20 13:34:39 hofmann Exp $" // // Copyright 2005 by Johannes Hofmann // @@ -27,6 +27,7 @@ class Panorama { private: double view_phi, view_lam, view_height; + char *view_name; double height_dist_ratio; Hills *mountains; Hills *visible_mountains; @@ -85,6 +86,14 @@ class Panorama { void set_scale(double s); + void set_view_lat(double v); + + void set_view_long(double v); + + void set_view_height(double v); + + const char * get_viewpoint(); + double get_center_angle(); double get_nick_angle(); @@ -94,6 +103,12 @@ class Panorama { double get_scale(); double get_height_dist_ratio(); + + double get_view_lat(); + + double get_view_long(); + + double get_view_height(); int comp_params(Hill *m1, Hill *m2); diff --git a/src/Panorama.cxx b/src/Panorama.cxx index 7321c3a..7e1ccff 100644 --- a/src/Panorama.cxx +++ b/src/Panorama.cxx @@ -1,5 +1,5 @@ // -// "$Id: Panorama.cxx,v 1.42 2005/05/10 18:45:29 hofmann Exp $" +// "$Id: Panorama.cxx,v 1.43 2005/05/20 13:34:39 hofmann Exp $" // // Panorama routines. // @@ -60,6 +60,7 @@ Panorama::Panorama() { a_nick = 0.0; a_tilt = 0.0; scale = 3500.0; + view_name = NULL; } Panorama::~Panorama() { @@ -91,6 +92,13 @@ Panorama::set_viewpoint(const char *name) { return 1; } + if (view_name) { + free(view_name); + view_name = NULL; + } + + view_name = strdup(name); + update_angles(); return 0; @@ -330,6 +338,29 @@ Panorama::set_height_dist_ratio(double r) { update_visible_mountains(); } +void +Panorama::set_view_lat(double v) { + view_lam = v * deg2rad; + update_angles(); +} + +void +Panorama::set_view_long(double v) { + view_phi = v * deg2rad; + update_angles(); +} + +void +Panorama::set_view_height(double v) { + view_height = v; + update_angles(); +} + +const char * +Panorama::get_viewpoint() { + return view_name; +} + double Panorama::get_center_angle() { return a_center / deg2rad; @@ -355,6 +386,21 @@ Panorama::get_height_dist_ratio() { return height_dist_ratio; } +double +Panorama::get_view_lat() { + return view_lam / deg2rad; +} + +double +Panorama::get_view_long() { + return view_phi / deg2rad; +} + +double +Panorama::get_view_height() { + return view_height; +} + int Panorama::get_pos(const char *name, double *phi, double *lam, double *height) { int i; diff --git a/src/gipfel.cxx b/src/gipfel.cxx index db1e863..e21f5f0 100644 --- a/src/gipfel.cxx +++ b/src/gipfel.cxx @@ -1,5 +1,5 @@ // -// "$Id: gipfel.cxx,v 1.25 2005/05/18 11:34:30 hofmann Exp $" +// "$Id: gipfel.cxx,v 1.26 2005/05/20 13:34:39 hofmann Exp $" // // gipfel program. // @@ -44,6 +44,7 @@ #include #include #include +#include #include "Fl_Value_Dial.H" #include "GipfelWidget.H" @@ -53,13 +54,19 @@ char *data_file; GipfelWidget *gipf = NULL; Fl_Dial *s_center = NULL; Fl_Slider *s_nick = NULL, *s_scale = NULL, *s_tilt = NULL, *s_height_dist; +Fl_Value_Input *i_view_lat, *i_view_long, *i_view_height; +Fl_Box *b_viewpoint; -void set_valuators() { +void set_values() { s_center->value(gipf->get_center_angle()); s_nick->value(gipf->get_nick_angle()); s_scale->value(gipf->get_scale()); s_tilt->value(gipf->get_tilt_angle()); s_height_dist->value(gipf->get_height_dist_ratio()); + i_view_lat->value(gipf->get_view_lat()); + i_view_long->value(gipf->get_view_long()); + i_view_height->value(gipf->get_view_height()); + b_viewpoint->label(gipf->get_viewpoint()); } void quit_cb() { @@ -75,45 +82,63 @@ void open_cb() { void scale_cb(Fl_Slider* o, void*) { if (gipf) { - gipf->set_scale((double)(o->value())); + gipf->set_scale(o->value()); } } void angle_cb(Fl_Slider* o, void*) { if (gipf) { - gipf->set_center_angle((double)(o->value())); + gipf->set_center_angle(o->value()); } } void nick_cb(Fl_Slider* o, void*) { if (gipf) { - gipf->set_nick_angle((double)(o->value())); + gipf->set_nick_angle(o->value()); } } void tilt_cb(Fl_Slider* o, void*) { if (gipf) { - gipf->set_tilt_angle((double)(o->value())); + gipf->set_tilt_angle(o->value()); } } void h_d_cb(Fl_Slider* o, void*) { if (gipf) { - gipf->set_height_dist_ratio((double)(o->value())); + gipf->set_height_dist_ratio(o->value()); + } +} + +void view_lat_cb(Fl_Value_Input* o, void*) { + if (gipf) { + gipf->set_view_lat(o->value()); + } +} + +void view_long_cb(Fl_Value_Input* o, void*) { + if (gipf) { + gipf->set_view_long(o->value()); + } +} + +void view_height_cb(Fl_Value_Input* o, void*) { + if (gipf) { + gipf->set_view_height(o->value()); } } void comp_cb(Fl_Widget *, void *) { if (gipf) { gipf->comp_params(); - set_valuators(); + set_values(); } } void guess_cb(Fl_Widget *, void *) { if (gipf) { gipf->guess(); - set_valuators(); + set_values(); } } @@ -147,7 +172,7 @@ void usage() { Fl_Window * create_control_window() { Fl_Menu_Bar *m; - Fl_Window *win = new Fl_Window(400,250); + Fl_Window *win = new Fl_Window(400,350); m = new Fl_Menu_Bar(0, 0, 400, 30); m->menu(menuitems); @@ -199,12 +224,36 @@ create_control_window() { s_height_dist->type(1); s_height_dist->box(FL_THIN_DOWN_BOX); s_height_dist->labelsize(10); - s_height_dist->step(-0.002); + s_height_dist->step(-0.001); s_height_dist->bounds(0.2, 0.01); s_height_dist->slider(FL_UP_BOX); s_height_dist->callback((Fl_Callback*)h_d_cb); s_height_dist->align(FL_ALIGN_TOP); + // Viewpoint Stuff + + b_viewpoint = new Fl_Box(FL_DOWN_BOX, 30, 255, 300, 80, ""); + b_viewpoint->align(FL_ALIGN_TOP); + + i_view_lat = new Fl_Value_Input(40, 270, 100, 20, "Latitude"); + i_view_lat->labelsize(10); + i_view_lat->align(FL_ALIGN_TOP); + i_view_lat->when(FL_WHEN_ENTER_KEY); + i_view_lat->callback((Fl_Callback*)view_lat_cb); + + i_view_long = new Fl_Value_Input(200, 270, 100, 20, "Longitude"); + i_view_long->labelsize(10); + i_view_long->align(FL_ALIGN_TOP); + i_view_long->when(FL_WHEN_ENTER_KEY); + i_view_long->callback((Fl_Callback*)view_long_cb); + + i_view_height = new Fl_Value_Input(40, 310, 80, 20, "Height"); + i_view_height->labelsize(10); + i_view_height->align(FL_ALIGN_TOP); + i_view_height->when(FL_WHEN_ENTER_KEY); + i_view_height->callback((Fl_Callback*)view_height_cb); + + // Buttons Fl_Button *b = new Fl_Button(240, 180, 50, 15, "comp"); b->color(FL_RED); b->callback(comp_cb); @@ -270,7 +319,7 @@ int main(int argc, char** argv) { } scroll->end(); - set_valuators(); + set_values(); view_win->resizable(scroll); -- cgit v1.2.3