From 6d2030858e35224128dbe658634890ebb021cd59 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Tue, 6 Mar 2001 04:38:56 +0000
Subject: [PATCH] *** empty log message ***

---
 Fltk/Callbacks.cpp           | 23 +++++++++++++++++---
 Fltk/GUI.cpp                 | 11 ++++++----
 Makefile                     |  4 ++--
 Plugin/Cutplane/CutPlane.cpp | 42 +++++++++++++++++++++++++++++++++---
 Plugin/Cutplane/CutPlane.h   |  1 +
 Plugin/Cutplane/Makefile     |  8 +++----
 6 files changed, 73 insertions(+), 16 deletions(-)

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 22f980c7b2..ee02235ddf 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,5 +1,6 @@
-// $Id: Callbacks.cpp,v 1.38 2001-03-05 23:14:57 remacle Exp $
+// $Id: Callbacks.cpp,v 1.39 2001-03-06 04:38:56 remacle Exp $
 
+#include <map>
 #include "Gmsh.h"
 #include "GmshUI.h"
 #include "Geo.h"
@@ -1447,9 +1448,25 @@ void view_options_cb(CALLBACK_ARGS){
 
 void view_plugin_cb(CALLBACK_ARGS){
   char name[256];
-  GMSH_Plugin *p = (GMSH_Plugin*)data;
+  std::pair<int,GMSH_Plugin*> *pair =  (std::pair<int,GMSH_Plugin*>*)data;
+  int iView = pair->first;
+  GMSH_Post_Plugin *p = (GMSH_Post_Plugin*)pair->second;
   p->getName(name);
-  Msg(INFO,"Plugin %s called",name);
+  // here we should perhaps launch 
+  // a dialogbox for setting up Plugin 
+  // properties
+  try
+    {
+      Post_View *v = (Post_View*)List_Pointer(Post_ViewList,iView);
+      p->execute(v);
+      Msg(INFO,"Plugin %s was called",name);
+    }
+  catch (GMSH_Plugin *err)
+    {
+      p->CatchErrorMessage(name);
+      Msg(WARNING,"%s",name);
+    }
+  //
 }
 
 void view_options_custom_cb(CALLBACK_ARGS){
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index cdb0cb808e..8dcb6ed135 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.55 2001-03-05 23:14:57 remacle Exp $
+// $Id: GUI.cpp,v 1.56 2001-03-06 04:38:56 remacle Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the BH, BW, WB, IW values for button heights/widths, window borders, etc.
@@ -505,7 +505,7 @@ void GUI::wait(){
 
 //********************************* Create the menu window *****************************
 
-void add_post_plugins ( Fl_Menu_Button *button )
+void add_post_plugins ( Fl_Menu_Button *button , int iView)
 {
   char name[256],menuname[256];
   for(GMSH_PluginManager::iter it = GMSH_PluginManager::Instance()->begin();
@@ -516,8 +516,11 @@ void add_post_plugins ( Fl_Menu_Button *button )
       if(p->getType() == GMSH_Plugin::GMSH_POST_PLUGIN)
 	{
 	  p->getName(name);
+	  std::pair<int,GMSH_Plugin*> *pair = 
+	    new  std::pair<int,GMSH_Plugin*>(iView,p);
 	  sprintf(menuname,"Plugins/%s",name);
-	  button->add(menuname, 0,(Fl_Callback *)view_plugin_cb, (void*)p, 0);
+	  button->add(menuname, 0,(Fl_Callback *)view_plugin_cb, 
+		      (void*)(pair), 0);
 	}
     }
 }
@@ -595,7 +598,7 @@ void GUI::create_menu_window(int argc, char **argv){
 			   (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER);
       m_popup_butt[i]->add("Options...", 0,
 			   (Fl_Callback *)view_options_cb, (void*)i, 0);
-      add_post_plugins ( m_popup_butt[i] );
+      add_post_plugins ( m_popup_butt[i] , i);
       m_popup_butt[i]->textsize(CTX.fontsize);
       m_popup_butt[i]->hide();
     }
diff --git a/Makefile b/Makefile
index 25ec4993ad..3dd0dbd2db 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.74 2001-03-05 23:13:02 remacle Exp $
+# $Id: Makefile,v 1.75 2001-03-06 04:38:56 remacle Exp $
 # ----------------------------------------------------------------------
 #  Makefile for Gmsh  
 # ----------------------------------------------------------------------
@@ -17,7 +17,7 @@
             MOTIF_INC = -I/usr/X11R6/LessTif/Motif1.2/include
            FLTK_INC   = -I$(HOME)/SOURCES/fltk
       FLTK_INC_SCOREC   = -I/users/develop/develop/visual/fltk/1.0/include
-      FLTK_INC_LAPTOPJF = -I../../fltk-1.0.9
+      FLTK_INC_LAPTOPJF = -I../../fltk-1.0.9
 	FLTK_INC_GERTHA_BURO = -I../../fltk
 
            OPENGL_LIB = -lGLU -lGL
diff --git a/Plugin/Cutplane/CutPlane.cpp b/Plugin/Cutplane/CutPlane.cpp
index 15d6802083..9ee89f9b5d 100644
--- a/Plugin/Cutplane/CutPlane.cpp
+++ b/Plugin/Cutplane/CutPlane.cpp
@@ -1,5 +1,7 @@
 #include "CutPlane.h"
-//#include "Views.h"
+#include "List.h"
+#include "Views.h"
+#include "Iso.h"
 /*
   Plugin Entry : GMSH_RegisterPlugin
  */
@@ -10,6 +12,7 @@ GMSH_Plugin *GMSH_RegisterPlugin ()
 }
 }
 
+
 GMSH_CutPlanePlugin::GMSH_CutPlanePlugin(double A, double B, double C, double D)
   :a(A),b(B),c(C),d(D)
 {
@@ -43,13 +46,46 @@ void GMSH_CutPlanePlugin::CatchErrorMessage (char *errorMessage) const
   strcpy(errorMessage,"CutPlane Failed...");
 }
 
-Post_View *GMSH_CutPlanePlugin::execute (Post_View *)
+Post_View *GMSH_CutPlanePlugin::execute (Post_View *v)
 {
-  throw this;
+  int i,nb,edtet[6][2] = {{0,1},{0,2},{0,3},{1,2},{1,3},{2,3}};
+  /* for all scalar simplices */
+  if(v->NbSS)
+    {
+      nb = List_Nbr(v->ST) / v->NbST ;
+      for(i = 0 ; i < List_Nbr(v->ST) ; i+=nb)
+	{
+	  double levels[4],Xp[4],Yp[4],Zp[4];
+	  double *X   = (double*)List_Pointer_Fast(v->SS,i);
+	  double *Y   = (double*)List_Pointer_Fast(v->SS,i+4);
+	  double *Z   = (double*)List_Pointer_Fast(v->SS,i+8);
+	  for(int j=0;j<4;j++)levels[j] = levelset(X[j],Y[j],Z[j]);
+	  double *VAL = (double*)List_Pointer_Fast(v->SS,i+12);
+	  int nx = 0;
+	  for(int k=0;k<6;k++)
+	    {
+	      if(levels[edtet[k][0]] * levels[edtet[k][1]] <= 0.0)
+		{
+		  InterpolateIso(X,Y,Z,levels,0.0,
+				 edtet[k][0],edtet[k][1],
+				 &Xp[nx],&Yp[nx],&Zp[nx]); 
+		  nx++;
+		}
+	    }
+	  if(nx == 3)
+	    {
+	    }
+	}
+    }
+  return 0;
 }
 
 void GMSH_CutPlanePlugin::SetOption (char *optionName, void *optionValue)
 {
 }
 
+double GMSH_CutPlanePlugin :: levelset (double x, double y, double z)
+{
+  return a * x + b * y + c * z + d;
+}
 
diff --git a/Plugin/Cutplane/CutPlane.h b/Plugin/Cutplane/CutPlane.h
index 5624284d1a..54ab0fd754 100644
--- a/Plugin/Cutplane/CutPlane.h
+++ b/Plugin/Cutplane/CutPlane.h
@@ -5,6 +5,7 @@ class GMSH_CutPlanePlugin : public GMSH_Post_Plugin
 {
   /*Plane a x + b y + c z + d = 0*/
   double a,b,c,d;
+  double levelset (double x, double y, double z);
 public:
   GMSH_CutPlanePlugin(double A, double B, double C, double D);
   virtual void getName  (char *name) const;
diff --git a/Plugin/Cutplane/Makefile b/Plugin/Cutplane/Makefile
index 5a71d9ea47..9139f33feb 100644
--- a/Plugin/Cutplane/Makefile
+++ b/Plugin/Cutplane/Makefile
@@ -1,17 +1,17 @@
-# $Id: Makefile,v 1.3 2001-03-05 23:14:57 remacle Exp $
+# $Id: Makefile,v 1.4 2001-03-06 04:38:56 remacle Exp $
 #
 # Makefile for "libAdapt.a"
 #
 
 .IGNORE:
 
-CC        = c++
-AR        = c++ -Wl,--subsystem,windows -shared -o
+CC        = c++ -fPIC
+AR        = gcc -shared -o
 RM        = rm
 RANLIB    = ranlib
 
 LIB       = ../lib/libCutPlane.so
-INCLUDE   = -I../../Common -I../
+INCLUDE   = -I../../Common -I../../DataStr -I../ -I../../Graphics
 
 C_FLAGS       = -g -Wall 
 OS_FLAGS      = 
-- 
GitLab