From 8e594ae069ae4c45bfd82d75e27625bcf4097bb6 Mon Sep 17 00:00:00 2001
From: Tristan Carrier Baudouin <tristan.carrier@uclouvain.be>
Date: Fri, 23 Mar 2012 08:52:49 +0000
Subject: [PATCH] R-tree in GUI

---
 Common/CommandLine.cpp  | 2 ++
 Common/DefaultOptions.h | 2 +-
 Common/GmshDefines.h    | 1 +
 Common/Options.cpp      | 3 +++
 Fltk/optionWindow.cpp   | 2 ++
 Mesh/Generator.cpp      | 5 +++++
 6 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index dadf048f62..6f2d7e8609 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -580,6 +580,8 @@ void GetOptions(int argc, char *argv[])
             CTX::instance()->mesh.algo3d = ALGO_3D_FRONTAL_DEL;
           else if(!strncmp(argv[i], "delhex3d", 8))
             CTX::instance()->mesh.algo3d = ALGO_3D_FRONTAL_HEX;
+		  else if(!strncmp(argv[i], "rtree3d", 9))
+			CTX::instance()->mesh.algo3d = ALGO_3D_RTREE;
           else
             Msg::Fatal("Unknown mesh algorithm");
           i++;
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 560a279f8e..b7120cf054 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -772,7 +772,7 @@ StringXNumber MeshOptions_Number[] = {
 #else
     ALGO_3D_FRONTAL ,
 #endif
-    "3D mesh algorithm (1=Delaunay, 4=Frontal, 5=Frontal Delaunay, 6=Frontal Hex, 7=MMG3D)" },
+    "3D mesh algorithm (1=Delaunay, 4=Frontal, 5=Frontal Delaunay, 6=Frontal Hex, 7=MMG3D, 9=R-tree)" },
   { F|O, "AngleSmoothNormals" , opt_mesh_angle_smooth_normals , 30.0 ,
     "Threshold angle below which normals are not smoothed" },
   { F|O, "AnisoMax" , opt_mesh_aniso_max, 1.e33,
diff --git a/Common/GmshDefines.h b/Common/GmshDefines.h
index 3fdcb551b4..874b15a4d2 100644
--- a/Common/GmshDefines.h
+++ b/Common/GmshDefines.h
@@ -223,6 +223,7 @@
 #define ALGO_3D_FRONTAL_DEL    5
 #define ALGO_3D_FRONTAL_HEX    6
 #define ALGO_3D_MMG3D          7
+#define ALGO_3D_RTREE          9
 
 // Meshing methods
 #define MESH_NONE         0
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 657064bec7..f4c3dce18f 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -5046,6 +5046,9 @@ double opt_mesh_algo3d(OPT_ARGS_NUM)
     case ALGO_3D_FRONTAL:
       FlGui::instance()->options->mesh.choice[3]->value(1);
       break;
+	case ALGO_3D_RTREE:
+	  FlGui::instance()->options->mesh.choice[3]->value(5);
+	  break;
     case ALGO_3D_DELAUNAY:
     default:
       FlGui::instance()->options->mesh.choice[3]->value(0);
diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp
index ecd397fe4e..56cddad00b 100644
--- a/Fltk/optionWindow.cpp
+++ b/Fltk/optionWindow.cpp
@@ -517,6 +517,7 @@ static void mesh_options_ok_cb(Fl_Widget *w, void *data)
                   (o->mesh.choice[3]->value() == 2) ? ALGO_3D_FRONTAL_DEL :
                   (o->mesh.choice[3]->value() == 3) ? ALGO_3D_FRONTAL_HEX :
                   (o->mesh.choice[3]->value() == 4) ? ALGO_3D_MMG3D :
+				  (o->mesh.choice[3]->value() == 5) ? ALGO_3D_RTREE :
                   ALGO_3D_FRONTAL);
   opt_mesh_algo_recombine(0, GMSH_SET, o->mesh.choice[1]->value());
   opt_mesh_recombine_all(0, GMSH_SET, o->mesh.butt[21]->value());
@@ -2129,6 +2130,7 @@ optionWindow::optionWindow(int deltaFontSize)
         {"Frontal Delaunay", 0, 0, 0},
         {"Frontal Hex", 0, 0, 0},
         {"MMG3D", 0, 0, 0},
+		{"R-tree", 0, 0, 0},
         {0}
       };
       static Fl_Menu_Item menu_recombination_algo[] = {
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index c22b42aabc..47570a25ce 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -31,6 +31,7 @@
 #include "CenterlineField.h"
 #include "Field.h"
 #include "Options.h"
+#include "Simple3D.h"
 
 #if defined(HAVE_POST)
 #include "PView.h"
@@ -556,6 +557,10 @@ static void Mesh3D(GModel *m)
   FindConnectedRegions(delaunay, connected);
   for(unsigned int i = 0; i < connected.size(); i++){
     MeshDelaunayVolume(connected[i]);
+	if(CTX::instance()->mesh.algo3d==ALGO_3D_RTREE){
+	  Filler f;
+	  f.treat_region(connected[i][0]);
+	}
   }
 
   double t2 = Cpu();
-- 
GitLab