From 40ec0d6689260d45d00fb06c7555c328e41f0593 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Fri, 26 Nov 2004 15:13:07 +0000
Subject: [PATCH] *** empty log message ***

---
 Plugin/Levelset.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 54 insertions(+), 3 deletions(-)

diff --git a/Plugin/Levelset.cpp b/Plugin/Levelset.cpp
index ecad0ae210..1ee06de79f 100644
--- a/Plugin/Levelset.cpp
+++ b/Plugin/Levelset.cpp
@@ -1,4 +1,4 @@
-// $Id: Levelset.cpp,v 1.20 2004-11-26 14:42:56 remacle Exp $
+// $Id: Levelset.cpp,v 1.21 2004-11-26 15:13:07 remacle Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -556,7 +556,7 @@ Post_View *GMSH_LevelsetPlugin::execute(Post_View * v)
 static bool recur_sign_change (_triangle *t, double val, const GMSH_LevelsetPlugin *plug)
 {
 
-  if (!t->t[0])
+  if (!t->t[0]|| t->visible)
     {
       double v1 = plug->levelset (t->p[0]->X,t->p[0]->Y,t->p[0]->Z,t->p[0]->val);
       double v2 = plug->levelset (t->p[1]->X,t->p[1]->Y,t->p[1]->Z,t->p[1]->val);
@@ -589,7 +589,7 @@ static bool recur_sign_change (_triangle *t, double val, const GMSH_LevelsetPlug
 static bool recur_sign_change (_tet *t, double val, const GMSH_LevelsetPlugin *plug)
 {
 
-  if (!t->t[0])
+  if (!t->t[0] || t->visible)
     {
       double v1 = plug->levelset (t->p[0]->X,t->p[0]->Y,t->p[0]->Z,t->p[0]->val);
       double v2 = plug->levelset (t->p[1]->X,t->p[1]->Y,t->p[1]->Z,t->p[1]->val);
@@ -628,6 +628,52 @@ static bool recur_sign_change (_tet *t, double val, const GMSH_LevelsetPlugin *p
     }      
 }
 
+static bool recur_sign_change (_hex *t, double val, const GMSH_LevelsetPlugin *plug)
+{
+
+  if (!t->h[0]|| t->visible)
+    {
+      double v1 = plug->levelset (t->p[0]->X,t->p[0]->Y,t->p[0]->Z,t->p[0]->val);
+      double v2 = plug->levelset (t->p[1]->X,t->p[1]->Y,t->p[1]->Z,t->p[1]->val);
+      double v3 = plug->levelset (t->p[2]->X,t->p[2]->Y,t->p[2]->Z,t->p[2]->val);
+      double v4 = plug->levelset (t->p[3]->X,t->p[3]->Y,t->p[3]->Z,t->p[3]->val);
+      double v5 = plug->levelset (t->p[4]->X,t->p[4]->Y,t->p[4]->Z,t->p[4]->val);
+      double v6 = plug->levelset (t->p[5]->X,t->p[5]->Y,t->p[5]->Z,t->p[5]->val);
+      double v7 = plug->levelset (t->p[6]->X,t->p[6]->Y,t->p[6]->Z,t->p[6]->val);
+      double v8 = plug->levelset (t->p[7]->X,t->p[7]->Y,t->p[7]->Z,t->p[7]->val);
+      if ( v1 * v2 > 0 && v1 * v3 > 0 && v1 * v4 > 0 && v1 * v5 > 0 && v1 * v6 > 0 && v1 * v7 > 0 && v1 * v8 > 0)
+	t->visible = false;
+      else
+	t->visible = true;
+      return t->visible;
+    }
+  else
+    {
+      bool sc1 = recur_sign_change(t->h[0],val,plug);
+      bool sc2 = recur_sign_change(t->h[1],val,plug);
+      bool sc3 = recur_sign_change(t->h[2],val,plug);
+      bool sc4 = recur_sign_change(t->h[3],val,plug);
+      bool sc5 = recur_sign_change(t->h[4],val,plug);
+      bool sc6 = recur_sign_change(t->h[5],val,plug);
+      bool sc7 = recur_sign_change(t->h[6],val,plug);
+      bool sc8 = recur_sign_change(t->h[7],val,plug);
+      if (sc1 || sc2 || sc3 || sc4 || sc5 || sc6 || sc7 || sc8)
+	{
+	  if (!sc1) t->h[0]->visible = true;
+	  if (!sc2) t->h[1]->visible = true;
+	  if (!sc3) t->h[2]->visible = true;
+	  if (!sc4) t->h[3]->visible = true;
+	  if (!sc5) t->h[4]->visible = true;
+	  if (!sc6) t->h[5]->visible = true;
+	  if (!sc7) t->h[6]->visible = true;
+	  if (!sc8) t->h[7]->visible = true;
+	  return true;
+	}
+      t->visible = false;
+      return false;
+    }      
+}
+
 static bool recur_sign_change (_quad *q, double val, const GMSH_LevelsetPlugin *plug)
 {
 
@@ -679,4 +725,9 @@ void GMSH_LevelsetPlugin::assign_specific_visibility () const
       _quad *qe  = *_quad::all_quads.begin();
       qe->visible = !recur_sign_change (qe, _valueView, this);
     }
+  if (_hex::all_hexes.size())
+    {
+      _hex *he  = *_hex::all_hexes.begin();
+      he->visible = !recur_sign_change (he, _valueView, this);
+    }
 }
-- 
GitLab