Skip to content
Snippets Groups Projects
CutSphere.cpp 2.02 KiB
Newer Older
// $Id: CutSphere.cpp,v 1.16 2001-08-09 20:53:23 geuzaine Exp $
Christophe Geuzaine's avatar
Christophe Geuzaine committed

#include <string.h>
#include "CutSphere.h"
#include "List.h"

StringXNumber CutSphereOptions_Number[] = {
  { GMSH_FULLRC, "Xc" , NULL , 0. },
  { GMSH_FULLRC, "Yc" , NULL , 0. },
  { GMSH_FULLRC, "Zc" , NULL , 0. },
  { GMSH_FULLRC, "R"  , NULL , 0.25 },
Christophe Geuzaine's avatar
Christophe Geuzaine committed
  { GMSH_FULLRC, "iView" , NULL , -1. }
};

extern "C"
{
  GMSH_Plugin *GMSH_RegisterCutSpherePlugin ()
  {
    return new GMSH_CutSpherePlugin ();
GMSH_CutSpherePlugin::GMSH_CutSpherePlugin()
{
}

void GMSH_CutSpherePlugin::getName(char *name) const
{
  strcpy(name,"Cut Sphere");
}

void GMSH_CutSpherePlugin::getInfos(char *author, char *copyright, char *help_text) const
{
  strcpy(author,"J.-F. Remacle (remacle@scorec.rpi.edu)");
  strcpy(copyright,"DGR (www.multiphysics.com)");
  strcpy(help_text,
	 "Cuts a 3D scalar view with the sphere\n"
	 "(X-Xc)^2 + (Y-Yc)^2 + (Z-Zc)^2  = R^2.\n"
	 "Script name: Plugin(CutSphere).");
}

int GMSH_CutSpherePlugin::getNbOptions() const
{
  return sizeof(CutSphereOptions_Number)/sizeof(StringXNumber);
StringXNumber* GMSH_CutSpherePlugin:: GetOption (int iopt)
  return &CutSphereOptions_Number[iopt];
}

void GMSH_CutSpherePlugin::CatchErrorMessage (char *errorMessage) const
{
  strcpy(errorMessage,"CutSphere failed...");
double GMSH_CutSpherePlugin :: levelset (double x, double y, double z, double val) const
  double a = CutSphereOptions_Number[0].def;
  double b = CutSphereOptions_Number[1].def;
  double c = CutSphereOptions_Number[2].def;
  double r = CutSphereOptions_Number[3].def;
  return (x-a)*(x-a) + (y-b)*(y-b) + (z-c)*(z-c) - r*r;
}

extern List_T *Post_ViewList;
Post_View *GMSH_CutSpherePlugin::execute (Post_View *v)
{
Christophe Geuzaine's avatar
Christophe Geuzaine committed
  Post_View *vv;
  int iView = (int)CutSphereOptions_Number[4].def;

Christophe Geuzaine's avatar
Christophe Geuzaine committed
  if(v && iView < 0)
    vv = v;
  else{
    if(!v && iView < 0) iView = 0;
    if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){
Christophe Geuzaine's avatar
Christophe Geuzaine committed
      Msg(WARNING,"View[%d] does not exist",iView);
Christophe Geuzaine's avatar
Christophe Geuzaine committed

  return GMSH_LevelsetPlugin::execute(vv);
}