Skip to content
Snippets Groups Projects
CutSphere.cpp 3.18 KiB
Newer Older
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
// $Id: CutSphere.cpp,v 1.26 2003-11-14 21:20:55 geuzaine Exp $
Christophe Geuzaine's avatar
Christophe Geuzaine committed
//
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
// Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
Christophe Geuzaine's avatar
Christophe Geuzaine committed
//
// 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".
Christophe Geuzaine's avatar
Christophe Geuzaine committed

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

StringXNumber CutSphereOptions_Number[] = {
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  {GMSH_FULLRC, "Xc", NULL, 0.},
  {GMSH_FULLRC, "Yc", NULL, 0.},
  {GMSH_FULLRC, "Zc", NULL, 0.},
  {GMSH_FULLRC, "R", NULL, 0.25},
  {GMSH_FULLRC, "iView", NULL, -1.}
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  GMSH_Plugin *GMSH_RegisterCutSpherePlugin()
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
    return new GMSH_CutSpherePlugin();
GMSH_CutSpherePlugin::GMSH_CutSpherePlugin()
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  ;
}

void GMSH_CutSpherePlugin::getName(char *name) const
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  strcpy(name, "Cut sphere");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
void GMSH_CutSpherePlugin::getInfos(char *author, char *copyright,
                                    char *help_text) const
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  strcpy(author, "J.-F. Remacle (remacle@scorec.rpi.edu)");
  strcpy(copyright, "DGR (www.multiphysics.com)");
  strcpy(help_text,
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
         "Plugin(CutSphere) cuts the simplectic 3D scalar\n"
	 "view 'iView' with the sphere (X-'Xc')^2 + (Y-'Yc')^2 +\n"
	 "(Z-'Zc')^2 = 'R'^2. If 'iView' < 0, the plugin is\n"
	 "run on the current view.\n");
}

int GMSH_CutSpherePlugin::getNbOptions() const
{
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  return sizeof(CutSphereOptions_Number) / sizeof(StringXNumber);
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
StringXNumber *GMSH_CutSpherePlugin::GetOption(int iopt)
  return &CutSphereOptions_Number[iopt];
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
void GMSH_CutSpherePlugin::CatchErrorMessage(char *errorMessage) const
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  strcpy(errorMessage, "CutSphere failed...");
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
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;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  return (x - a) * (x - a) + (y - b) * (y - b) + (z - c) * (z - c) - r * r;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
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;
  _orientation = ORIENT_SPHERE;
  _ref[0] = CutSphereOptions_Number[0].def;
  _ref[1] = CutSphereOptions_Number[1].def;
  _ref[2] = CutSphereOptions_Number[2].def;
Christophe Geuzaine's avatar
Christophe Geuzaine committed
  if(v && iView < 0)
    vv = v;
Christophe Geuzaine's avatar
 
Christophe Geuzaine committed
  else {
    if(!v && iView < 0)
      iView = 0;
    if(!(vv = (Post_View *) List_Pointer_Test(CTX.post.list, iView))) {
      Msg(WARNING, "View[%d] does not exist", iView);
Christophe Geuzaine's avatar
Christophe Geuzaine committed

  return GMSH_LevelsetPlugin::execute(vv);
}