summaryrefslogtreecommitdiff
path: root/src/GipfelWidget.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/GipfelWidget.cxx')
-rw-r--r--src/GipfelWidget.cxx94
1 files changed, 89 insertions, 5 deletions
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx
index f9b5d21..8590b5c 100644
--- a/src/GipfelWidget.cxx
+++ b/src/GipfelWidget.cxx
@@ -50,6 +50,7 @@ GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) {
img_file = NULL;
track_width = 200.0;
show_hidden = 0;
+ have_gipfel_info = 0;
md = new ImageMetaData();
track_points = NULL;
fl_register_images();
@@ -58,6 +59,7 @@ GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) {
int
GipfelWidget::load_image(char *file) {
Fl_Image *new_img;
+ double direction, nick, tilt, fl;
new_img = new Fl_JPEG_Image(file);
@@ -90,11 +92,40 @@ GipfelWidget::load_image(char *file) {
set_view_long(md->get_longitude());
set_view_lat(md->get_latitude());
set_view_height(md->get_height());
- set_center_angle(md->get_direction());
- set_nick_angle(md->get_nick());
- set_tilt_angle(md->get_tilt());
set_projection((ProjectionLSQ::Projection_t) md->get_projection_type());
- set_focal_length_35mm(md->get_focal_length_35mm());
+
+ have_gipfel_info = 1;
+ direction = md->get_direction();
+ if (isnan(direction)) {
+ set_center_angle(0.0);
+ have_gipfel_info = 0;
+ } else {
+ set_center_angle(direction);
+ }
+
+ nick = md->get_nick();
+ if (isnan(nick)) {
+ set_nick_angle(0.0);
+ have_gipfel_info = 0;
+ } else {
+ set_nick_angle(nick);
+ }
+
+ tilt = md->get_tilt();
+ if (isnan(tilt)) {
+ set_tilt_angle(0.0);
+ have_gipfel_info = 0;
+ } else {
+ set_tilt_angle(tilt);
+ }
+
+ fl = md->get_focal_length_35mm();
+ if (isnan(fl)) {
+ set_focal_length_35mm(35.0);
+ have_gipfel_info = 0;
+ } else {
+ set_focal_length_35mm(fl);
+ }
// try to get distortion parameters in the following ordering:
// 1. gipfel data in JPEG comment
@@ -166,7 +197,7 @@ GipfelWidget::load_data(const char *file) {
int
GipfelWidget::load_track(const char *file) {
if (track_points) {
- pan->remove_trackpoints();
+ pan->remove_hills(Hill::TRACK_POINT);
track_points->clobber();
delete track_points;
}
@@ -675,6 +706,59 @@ GipfelWidget::handle(int event) {
}
int
+GipfelWidget::export_hills(const char *file, FILE *fp) {
+ Hills export_hills, *mnts;
+
+ if (!have_gipfel_info) {
+ fprintf(stderr, "No gipfel info available for %s.\n", img_file);
+ return 0;
+ }
+
+ if (file) {
+ if (export_hills.load(file) != 0) {
+ return 1;
+ }
+
+ for (int i=0; i<export_hills.get_num(); i++) {
+ export_hills.get(i)->flags |= Hill::EXPORT;
+ }
+
+ pan->add_hills(&export_hills);
+ }
+
+ fprintf(fp, "#\n# name\theight\tx\ty\tdistance\tflags\n#\n");
+
+ mnts = pan->get_visible_mountains();
+ for (int i=0; i<mnts->get_num(); i++) {
+ Hill *m = mnts->get(i);
+ char *flags;
+ int _x = (int) rint(m->x) + w() / 2;
+ int _y = (int) rint(m->y) + h() / 2;
+
+ if (m->flags & Hill::DUPLICATE || file && !(m->flags & Hill::EXPORT)) {
+ continue;
+ }
+
+ if (_x < 0 || _x > w() || _y < 0 || _y > h()) {
+ continue;
+ }
+
+ if (m->flags & Hill::HIDDEN) {
+ flags = "HIDDEN";
+ } else {
+ flags = "";
+ }
+ fprintf(fp, "%s\t%d\t%d\t%d\t%d\t%s\n",
+ m->name, (int) rint(m->height), _x, _y,
+ (int) rint(pan->get_real_distance(m)), flags);
+ }
+
+ pan->remove_hills(Hill::EXPORT);
+
+ return 0;
+}
+
+int
GipfelWidget::get_pixel(GipfelWidget::sample_mode_t m,
double a_alph, double a_nick, int *r, int *g, int *b) {
double px, py;