From 04a0d9ff294ebe038ffca8cc15c24b056f93bbb5 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Tue, 15 Jun 2004 16:17:59 +0000
Subject: [PATCH] *** empty log message ***

---
 Plugin/CutCircle.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++
 Plugin/CutCircle.h   |  46 +++++++++++++++++
 Plugin/CutCurve.cpp  |  66 ++++++++++++++++++++++++
 Plugin/CutCurve.h    |  35 +++++++++++++
 Plugin/Makefile      |  22 +++++---
 Plugin/Plugin.cpp    |   5 +-
 6 files changed, 285 insertions(+), 8 deletions(-)
 create mode 100644 Plugin/CutCircle.cpp
 create mode 100644 Plugin/CutCircle.h
 create mode 100644 Plugin/CutCurve.cpp
 create mode 100644 Plugin/CutCurve.h

diff --git a/Plugin/CutCircle.cpp b/Plugin/CutCircle.cpp
new file mode 100644
index 0000000000..4e31bea1ef
--- /dev/null
+++ b/Plugin/CutCircle.cpp
@@ -0,0 +1,119 @@
+// $Id: CutCircle.cpp,v 1.1 2004-06-15 16:17:58 remacle Exp $
+//
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "CutCircle.h"
+#include "List.h"
+#include "Context.h"
+#include <math.h>
+
+extern Context_T CTX;
+
+StringXNumber CutCircleOptions_Number[] = {
+  {GMSH_FULLRC, "Xc", NULL, 0.},
+  {GMSH_FULLRC, "Yc", NULL, 0.},
+  {GMSH_FULLRC, "Zc", NULL, 0.},
+  {GMSH_FULLRC, "R", NULL,  1},
+  {GMSH_FULLRC, "nbPoints", NULL,  360},
+  {GMSH_FULLRC, "iView", NULL, -1.}
+};
+
+extern "C"
+{
+  GMSH_Plugin *GMSH_RegisterCutCirclePlugin()
+  {
+    return new GMSH_CutCirclePlugin();
+  }
+}
+
+
+GMSH_CutCirclePlugin::GMSH_CutCirclePlugin()
+{
+  ;
+}
+
+void GMSH_CutCirclePlugin::getName(char *name) const
+{
+  strcpy(name, "Cut circle");
+}
+
+void GMSH_CutCirclePlugin::getInfos(char *author, char *copyright,
+                                   char *help_text) const
+{
+  strcpy(author, "J.-F. Remacle (remacle@gce.ucl.ac.be)");
+  strcpy(copyright, "DGR (www.multiphysics.com)");
+  strcpy(help_text,
+         "Plugin(CutCircle) cuts the view `iView' with\n"
+	 "the circle centered at Xc,Yc,Zc and of Radius R If\n"
+	 "`iView' < 0, the plugin is run on the current\n"
+	 "view.\n"
+	 "\n"
+	 "Plugin(CutCircle) creates one new view.\n");
+}
+
+int GMSH_CutCirclePlugin::getNbOptions() const
+{
+  return sizeof(CutCircleOptions_Number) / sizeof(StringXNumber);
+}
+
+StringXNumber *GMSH_CutCirclePlugin::getOption(int iopt)
+{
+  return &CutCircleOptions_Number[iopt];
+}
+
+void GMSH_CutCirclePlugin::catchErrorMessage(char *errorMessage) const
+{
+  strcpy(errorMessage, "CutCircle failed...");
+}
+
+void GMSH_CutCirclePlugin::getPoint(const double &u, double &x, double &y, double &z) const
+{
+  const double Xc =CutCircleOptions_Number[0].def;
+  const double Yc =CutCircleOptions_Number[1].def;
+  const double Zc =CutCircleOptions_Number[2].def;
+  const double R  =CutCircleOptions_Number[3].def;
+
+  const double theta = u * 2 * 3.1415926;
+  x = Xc + R * cos (theta);
+  y = Yc + R * sin (theta);
+  z = 0.0;
+}
+
+int GMSH_CutCirclePlugin::getNbPoints() const
+{
+  return (int)CutCircleOptions_Number[4].def;
+}
+
+Post_View *GMSH_CutCirclePlugin::execute(Post_View * v)
+{
+  int iView = (int)CutCircleOptions_Number[5].def;
+
+  if(iView < 0)
+    iView = v ? v->Index : 0;
+
+  if(!List_Pointer_Test(CTX.post.list, iView)) {
+    Msg(GERROR, "View[%d] does not exist", iView);
+    return v;
+  }
+
+  Post_View *v1 = (Post_View*)List_Pointer(CTX.post.list, iView);
+
+  return GMSH_CutCurvePlugin:: GenerateView(v1);
+}
diff --git a/Plugin/CutCircle.h b/Plugin/CutCircle.h
new file mode 100644
index 0000000000..658a0443b5
--- /dev/null
+++ b/Plugin/CutCircle.h
@@ -0,0 +1,46 @@
+#ifndef _CUT_CIRCLE_H_
+#define _CUT_CIRCLE_H
+
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "CutCurve.h"
+
+extern "C"
+{
+  GMSH_Plugin *GMSH_RegisterCutCirclePlugin ();
+}
+
+class GMSH_CutCirclePlugin : public GMSH_CutCurvePlugin 
+{ 
+  virtual void getPoint ( const double &u , double &x, double &y, double &z) const ;
+  virtual int  getNbPoints ( ) const ;
+public:
+  GMSH_CutCirclePlugin();
+  void getName  (char *name) const;
+  void getInfos (char *author, 
+  		 char *copyright,
+  		 char *help_text) const;
+  void catchErrorMessage (char *errorMessage) const;
+  int getNbOptions() const;
+  StringXNumber *getOption (int iopt);  
+  Post_View *execute (Post_View *);
+};
+
+#endif
diff --git a/Plugin/CutCurve.cpp b/Plugin/CutCurve.cpp
new file mode 100644
index 0000000000..7ed63598f4
--- /dev/null
+++ b/Plugin/CutCurve.cpp
@@ -0,0 +1,66 @@
+// $Id: CutCurve.cpp,v 1.1 2004-06-15 16:17:58 remacle Exp $
+//
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "OctreePost.h"
+#include "CutCurve.h"
+#include "List.h"
+#include "Context.h"
+#include "Views.h"
+#include "Message.h"
+
+extern Context_T CTX;
+
+
+GMSH_CutCurvePlugin::GMSH_CutCurvePlugin()
+{
+  ;
+}
+
+Post_View * GMSH_CutCurvePlugin::GenerateView(Post_View * v) const 
+{
+  Post_View * View = BeginView(1);
+
+  double *VALUES = new double [9*v->NbTimeStep];
+  OctreePost o(v);
+
+  for(int i = 0; i < getNbPoints(); ++i){
+    const double xi = (double)(i)/(double)(getNbPoints()-1);
+    double x,y,z;
+    getPoint (xi,x,y,z);
+    if(v->NbSS || v->NbSH || v->NbST || v->NbSQ){
+      List_Add(View->SP, &x);
+      List_Add(View->SP, &y);
+      List_Add(View->SP, &z);
+      View->NbSP++;
+      o.searchScalar(x, y, z, VALUES);
+      for(int k = 0; k < v->NbTimeStep; ++k){
+	List_Add(View->SP, &VALUES[k]);	      
+      }
+    }
+  }
+  char name[1024], filename[1024];
+  sprintf(name, "%s_CutCurve", v->Name);
+  sprintf(filename, "%s_CutCurve.pos", v->Name);
+  EndView(View, v->NbTimeStep, filename, name);
+  delete [] VALUES;
+  return View;
+}
+
diff --git a/Plugin/CutCurve.h b/Plugin/CutCurve.h
new file mode 100644
index 0000000000..fca9071fff
--- /dev/null
+++ b/Plugin/CutCurve.h
@@ -0,0 +1,35 @@
+#ifndef _CUT_GRID_H_
+#define _CUT_GRID_H
+
+// Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+// 
+// Please report all bugs and problems to <gmsh@geuz.org>.
+
+#include "Plugin.h"
+
+class GMSH_CutCurvePlugin : public GMSH_Post_Plugin
+{
+ protected:
+  virtual void getPoint ( const double &u , double &x, double &y, double &z) const = 0;
+  virtual int  getNbPoints ( ) const = 0;
+public:
+  GMSH_CutCurvePlugin();
+  virtual Post_View * GenerateView (Post_View * v) const ;
+};
+
+#endif
diff --git a/Plugin/Makefile b/Plugin/Makefile
index 94d6493c49..5539fee85d 100644
--- a/Plugin/Makefile
+++ b/Plugin/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.49 2004-05-29 10:11:12 geuzaine Exp $
+# $Id: Makefile,v 1.50 2004-06-15 16:17:58 remacle Exp $
 #
 # Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 #
@@ -28,8 +28,8 @@ CFLAGS  = -DMPICH_SKIP_MPICXX ${OPTIM} ${FLAGS} ${INCLUDE}
 
 SRC = Plugin.cpp\
         Levelset.cpp\
-          CutPlane.cpp CutSphere.cpp CutMap.cpp\
-        Smooth.cpp\
+          CutPlane.cpp CutSphere.cpp CutMap.cpp \
+        Smooth.cpp CutCurve.cpp CutCircle.cpp\
 	Octree.cpp OctreeInternals.cpp OctreePost.cpp\
           StreamLines.cpp CutGrid.cpp\
         Transform.cpp\
@@ -68,10 +68,10 @@ depend:
 Plugin.o: Plugin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h PluginManager.h CutMap.h Levelset.h CutGrid.h \
-  StreamLines.h CutPlane.h CutSphere.h Skin.h ../DataStr/Tree.h \
-  ../DataStr/avl.h Extract.h Harmonic2Time.h DecomposeInSimplex.h \
-  Smooth.h Transform.h Triangulate.h SphericalRaise.h DisplacementRaise.h \
-  Evaluate.h
+  StreamLines.h CutPlane.h CutCircle.h CutCurve.h CutSphere.h Skin.h \
+  ../DataStr/Tree.h ../DataStr/avl.h Extract.h Harmonic2Time.h \
+  DecomposeInSimplex.h Smooth.h Transform.h Triangulate.h \
+  SphericalRaise.h DisplacementRaise.h Evaluate.h
 Levelset.o: Levelset.cpp Levelset.h Plugin.h ../Common/Options.h \
   ../Common/Message.h ../Common/Views.h ../Common/ColorTable.h \
   ../DataStr/List.h ../Common/VertexArray.h DecomposeInSimplex.h \
@@ -91,6 +91,14 @@ CutMap.o: CutMap.cpp CutMap.h Levelset.h Plugin.h ../Common/Options.h \
 Smooth.o: Smooth.cpp Plugin.h ../Common/Options.h ../Common/Message.h \
   ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
   ../Common/VertexArray.h Smooth.h ../Common/Context.h
+CutCurve.o: CutCurve.cpp OctreePost.h Octree.h OctreeInternals.h \
+  CutCurve.h Plugin.h ../Common/Options.h ../Common/Message.h \
+  ../Common/Views.h ../Common/ColorTable.h ../DataStr/List.h \
+  ../Common/VertexArray.h ../Common/Context.h
+CutCircle.o: CutCircle.cpp CutCircle.h CutCurve.h Plugin.h \
+  ../Common/Options.h ../Common/Message.h ../Common/Views.h \
+  ../Common/ColorTable.h ../DataStr/List.h ../Common/VertexArray.h \
+  ../Common/Context.h
 Octree.o: Octree.cpp Octree.h OctreeInternals.h
 OctreeInternals.o: OctreeInternals.cpp ../Common/Message.h \
   OctreeInternals.h
diff --git a/Plugin/Plugin.cpp b/Plugin/Plugin.cpp
index 4a93ad60f7..62c652a5d1 100644
--- a/Plugin/Plugin.cpp
+++ b/Plugin/Plugin.cpp
@@ -1,4 +1,4 @@
-// $Id: Plugin.cpp,v 1.52 2004-05-22 01:24:18 geuzaine Exp $
+// $Id: Plugin.cpp,v 1.53 2004-06-15 16:17:59 remacle Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -36,6 +36,7 @@
 #include "CutGrid.h"
 #include "StreamLines.h"
 #include "CutPlane.h"
+#include "CutCircle.h"
 #include "CutSphere.h"
 #include "Skin.h"
 #include "Extract.h"
@@ -145,6 +146,8 @@ void GMSH_PluginManager::registerDefaultPlugins()
 		    ("CutMap", GMSH_RegisterCutMapPlugin()));
   allPlugins.insert(std::pair < char *, GMSH_Plugin * >
 		    ("CutPlane", GMSH_RegisterCutPlanePlugin()));
+  allPlugins.insert(std::pair < char *, GMSH_Plugin * >
+		    ("CutCircle", GMSH_RegisterCutCirclePlugin()));
   allPlugins.insert(std::pair < char *, GMSH_Plugin * >
 		    ("CutSphere", GMSH_RegisterCutSpherePlugin()));
   allPlugins.insert(std::pair < char *, GMSH_Plugin * >
-- 
GitLab