From 8c4b7004661e42aadc46aea7de9750d6c6cbddf3 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sun, 1 Nov 2020 20:10:08 +0100 Subject: [PATCH] show_hyperboloid_flat option --- config.cpp | 1 + drawing.cpp | 2 +- hyper.h | 2 ++ hypgraph.cpp | 1 + models.cpp | 6 ++++++ 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/config.cpp b/config.cpp index 347468ee..93a902fc 100644 --- a/config.cpp +++ b/config.cpp @@ -515,6 +515,7 @@ EX void initConfig() { addsaver(vid.binary_width, "binary-tiling-width", 1); addsaver(pconf.collignon_parameter, "collignon-parameter", 1); addsaver(pconf.collignon_reflected, "collignon-reflect", false); + addsaver(pconf.show_hyperboloid_flat, "hyperboloid-flat", true); addsaver(pconf.aitoff_parameter, "aitoff-parameter"); addsaver(pconf.miller_parameter, "miller-parameter"); diff --git a/drawing.cpp b/drawing.cpp index 10903952..ebbc4fb3 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -2164,7 +2164,7 @@ EX void reverse_side_priorities() { // on the sphere, parts on the back are drawn first EX void draw_backside() { DEBBI(DF_GRAPH, ("draw_backside")); - if(pmodel == mdHyperboloid && hyperbolic) { + if(pmodel == mdHyperboloid && hyperbolic && pconf.show_hyperboloid_flat) { dynamicval dv (pmodel, mdHyperboloidFlat); for(auto& ptd: ptds) if(!among(ptd->prio, PPR::MOBILE_ARROW, PPR::OUTCIRCLE, PPR::CIRCLE)) diff --git a/hyper.h b/hyper.h index 3137dc2f..9bae1b9b 100644 --- a/hyper.h +++ b/hyper.h @@ -242,6 +242,7 @@ struct projection_configuration { ld model_orientation, halfplane_scale, model_orientation_yz; ld collignon_parameter; ld aitoff_parameter, miller_parameter, loximuthal_parameter, winkel_parameter; + bool show_hyperboloid_flat; bool collignon_reflected; string formula; eModel basic_model; @@ -272,6 +273,7 @@ struct projection_configuration { miller_parameter = .8; loximuthal_parameter = 0; winkel_parameter = .5; + show_hyperboloid_flat = true; } }; diff --git a/hypgraph.cpp b/hypgraph.cpp index 1b6076f8..4ab6fda0 100644 --- a/hypgraph.cpp +++ b/hypgraph.cpp @@ -2000,6 +2000,7 @@ EX void draw_model_elements() { } case mdHyperboloid: { + if(!pconf.show_hyperboloid_flat) return; if(hyperbolic) { #if CAP_QUEUE curvepoint(point3(0,0,1)); diff --git a/models.cpp b/models.cpp index 71abf96c..c82dd7c8 100644 --- a/models.cpp +++ b/models.cpp @@ -445,6 +445,8 @@ EX namespace models { } if(among(vpmodel, mdDisk, mdBall, mdHyperboloid, mdRotatedHyperboles, mdPanini)) { + dynamicval v(vpconf.model, vpconf.model); + if(vpmodel == mdHyperboloid) vpconf.model = mdDisk; dialog::addSelItem(XLAT("projection distance"), fts(vpconf.alpha) + " (" + current_proj_name() + ")", 'p'); dialog::add_action(projectionDialog); } @@ -615,6 +617,10 @@ EX namespace models { dialog::scaleLog(); }); } + + if(vpmodel == mdHyperboloid) { + dialog::addBoolItem_action(XLAT("show flat"), pconf.show_hyperboloid_flat, 'b'); + } if(vpmodel == mdCollignon) { dialog::addSelItem(XLAT("parameter"), fts(vpconf.collignon_parameter) + (vpconf.collignon_reflected ? " (r)" : ""), 'b');