From e86e6267ec916ed371fd7745189db6881b6d2529 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 13 Aug 2022 22:42:59 +0200 Subject: [PATCH] the implementation in reg3 can now be used for the cube tiling --- cell.cpp | 2 ++ config.cpp | 1 + euclid.cpp | 1 + geom-exp.cpp | 4 ++-- reg3.cpp | 9 ++++++++- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cell.cpp b/cell.cpp index 831ece6c..707390fc 100644 --- a/cell.cpp +++ b/cell.cpp @@ -1308,6 +1308,8 @@ EX int celldistance(cell *c1, cell *c2) { /* TODO */ } + if(euclid) return clueless_celldistance(c1, c2); + return hyperbolic_celldistance(c1, c2); } diff --git a/config.cpp b/config.cpp index e265d416..72d8524d 100644 --- a/config.cpp +++ b/config.cpp @@ -648,6 +648,7 @@ EX void initConfig() { param_b(no_find_player, "no_find_player"); param_b(game_keys_scroll, "game_keys_scroll"); + param_b(reg3::cubes_reg3, "cubes_reg3"); param_b(arb::apeirogon_consistent_coloring, "apeirogon_consistent_coloring", true) -> editable("apeirogon_consistent_coloring", 'c'); diff --git a/euclid.cpp b/euclid.cpp index e10fe406..aa1ac010 100644 --- a/euclid.cpp +++ b/euclid.cpp @@ -1356,6 +1356,7 @@ EX void generate() { */ EX bool in() { if(fake::in()) return FPIU(in()); + if(geometry == gCubeTiling && (reg3::cubes_reg3 || !PURE)) return false; return euclid && standard_tiling(); } diff --git a/geom-exp.cpp b/geom-exp.cpp index 5a625c5a..4fceddc0 100644 --- a/geom-exp.cpp +++ b/geom-exp.cpp @@ -650,7 +650,7 @@ void action_change_variation() { else if(arcm::in()) arcm::next_variation(); #endif #if MAXMDIM >= 4 - else if(reg3::in()) reg3::configure_variation(); + else if(reg3::in() || geometry == gCubeTiling) reg3::configure_variation(); #endif else if(euc::in(2,4) || !CAP_GP) dialog::do_if_confirmed([] { set_variation(PURE ? eVariation::bitruncated : eVariation::pure); @@ -1015,7 +1015,7 @@ EX void showEuclideanMenu() { else if(nil) { menuitem_nilwidth('v'); } - else if((WDIM == 3 || kite::in() || arb::in()) && !reg3::in()) dialog::addBreak(100); + else if((WDIM == 3 || kite::in() || arb::in()) && !reg3::in() && geometry != gCubeTiling) dialog::addBreak(100); else menuitem_change_variation('v'); diff --git a/reg3.cpp b/reg3.cpp index 183089c0..bb2de114 100644 --- a/reg3.cpp +++ b/reg3.cpp @@ -116,9 +116,12 @@ EX namespace reg3 { EX bool ultra_mirror_in() { return (cgflags & qULTRA) && ultra_mirror_on; } + EX bool cubes_reg3; + EX bool in() { if(fake::in()) return FPIU(in()); - return WDIM == 3 && !euclid && !bt::in() && !nonisotropic && !hybri && !kite::in(); + if(geometry == gCubeTiling && (cubes_reg3 || !PURE)) return true; + return WDIM == 3 && /* !euclid && */ !bt::in() && !nonisotropic && !hybri && !kite::in(); } EX void compute_ultra() { @@ -266,6 +269,8 @@ EX namespace reg3 { /* precise ideal vertex */ if(klein_scale > 1-1e-5 && klein_scale < 1+1e-5) klein_scale = 1; + + if(euclid) klein_scale = sqrt(3)/2; /* actual vertex */ hyperpoint v2 = C0 + klein_scale * h012; @@ -1319,6 +1324,8 @@ EX namespace reg3 { else if(hyperbolic) { return new hrmap_field3(&fp); } + else if(geometry == gCubeTiling) + return new seifert_weber::hrmap_singlecell(0); #endif return nullptr; }