diff options
Diffstat (limited to 'src/Panorama.cxx')
-rw-r--r-- | src/Panorama.cxx | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Panorama.cxx b/src/Panorama.cxx index 61ba781..6c0b6ba 100644 --- a/src/Panorama.cxx +++ b/src/Panorama.cxx @@ -37,6 +37,7 @@ Panorama::Panorama() { close_mountains = new Hills(); visible_mountains = new Hills(); height_dist_ratio = 0.07; + hide_value = 1.0; pi_d = asin(1.0) * 2.0; deg2rad = pi_d / 180.0; parms.a_center = 0.0; @@ -398,11 +399,56 @@ Panorama::update_angles() { } } + mountains->sort(); update_close_mountains(); } +void +Panorama::set_hide_value(double h) { + hide_value = h; + update_visible_mountains(); +} + +void +Panorama::mark_hidden() { + int i, j; + Hill *m, *n; + double h; + + for (i=0; i<visible_mountains->get_num(); i++) { + m = visible_mountains->get(i); + + m->flags &= ~Hill::HIDDEN; + + if (m->flags & Hill::DUPLICATE) { + continue; + } + + for (j=0; j<visible_mountains->get_num(); j++) { + n = visible_mountains->get(j); + + if (n->flags & Hill::DUPLICATE || n->flags & Hill::TRACK_POINT) { + continue; + } + if (m == n || fabs(m->a_view - n->a_view > pi_d / 2.0)) { + continue; + } + if (m->dist < n->dist || m->a_nick > n->a_nick) { + continue; + } + + h = (n->a_nick - m->a_nick) / fabs(m->a_view - n->a_view); + if (isinf(h) || h > hide_value) { + m->flags |= Hill::HIDDEN; + } + } + + } + +} + void Panorama::update_close_mountains() { int i; @@ -451,6 +497,7 @@ Panorama::update_visible_mountains() { } } + mark_hidden(); update_coordinates(); } |