/*
======================================================================
plugin.c

The LightWave Modeler plug-in glue for the SPD library.

Ernie Wright  01 Jun 05
====================================================================== */

#include <lwserver.h>
#include <lwcmdseq.h>
#include <lwxpanel.h>
#include "lwmod.h"
#include "lib.h"
#include "def.h"


/*
======================================================================
Activate()

Our activation function.
====================================================================== */

XCALL_( int )
Activate( long version, GlobalFunc *global, LWModCommand *local,
   void *serverData )
{
   static int spd = 0, sf = 2, teslvl = 2, merge = 1;
   static char filename[ 260 ];
   LWXPanelFuncs *xpanf;
   int ok = 0, savescene = 0;

   if ( version != LWMODCOMMAND_VERSION )
      return AFUNC_BADVERSION;

   if ( local->argument[ 0 ] ) {
      ok = parse_cmdline( local->argument, &spd, &sf, &teslvl, &merge,
         &savescene, filename );
      if ( !ok ) return AFUNC_BADLOCAL;
   }
   else {
      xpanf = global( LWXPANELFUNCS_GLOBAL, GFUSE_TRANSIENT );
      if ( !xpanf ) return AFUNC_BADGLOBAL;
      ok = get_user( xpanf, &spd, &sf, &teslvl, &merge, &savescene,
         filename );
   }

   if ( ok ) {
      lwInit( global, local, teslvl );

      switch ( spd ) {
         case SPD_GEARS:    spdGears( sf );     break;
         case SPD_JACKS:    spdJacks( sf );     break;
         case SPD_LATTICE:  spdLattice( sf );   break;
         case SPD_MOUNT:    spdMountain( sf );  break;
         case SPD_RINGS:    spdRings( sf );     break;
         case SPD_GENERIC:  spdSample( sf );    break;
         case SPD_SHELLS:   spdShells( sf );    break;
         case SPD_SOMBRERO: spdSombrero( sf );  break;
         case SPD_BALLS:    spdBalls( sf );     break;
         case SPD_TEAPOT:   spdTeapot( sf );    break;
         case SPD_TETRA:    spdTetra( sf );     break;
         case SPD_TREE:     spdTree( sf );      break;
         default:
            break;
      }

      if ( merge )
         lwMergePoints( 0 );
      if ( savescene )
         lwWriteScene( filename );
      lwDone();
   }

   return AFUNC_OK;
}


ServerRecord ServerDesc[] = {
   { LWMODCOMMAND_CLASS, "SPD", Activate },
   { NULL }
};
