summaryrefslogtreecommitdiff
path: root/src/Panorama.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Panorama.cxx')
-rw-r--r--src/Panorama.cxx47
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();
}