Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

An extension must inherit from one of the types, implement 3 methods for the interface, and implement the specific methods of the extension type (it depends in every type). Also, it has to implement a couple of methods to properly register and start the extension in maxwell.

Example of a basic extension implementing generic methods.

Code Block
languagecpp
firstline1
linenumberstrue
class CubeExampleExtension : public CgeometryLoaderExtension
{
  
 // Macro for bureaucracy. Parameters: extension name, main class in the extension, and the version number
 DECLARE_EXTENSION_METHODS( "CubeExample", CubeExampleExtension, 1 )
public:
//declare internal variables for calculation, they can be public or private, and should include at least 
//variables for storing extensionData values 
 double cubeSize;
 
 CubeExampleExtension()
 {
   // create here the editable values of the extensions, they can be modified when used, 
   // getExtensionData returns the internal MxParamList to create new fields
   // check MxParamList for all possibilities of types creation

    //create parameter with name, default value, minimum value and maximum value
    getExtensionData()->createDouble( "Cube size", 1.0, 0, 1000 );
 }
 
 ~CubeExampleExtension() 
 {
  //not needed to implement since we don't reserve memory. 
 }
 
 bool initialize()
initializeForRendering( Cmaxwell* pMaxwell )
{
   //We must at least copy the extensionData values to internal variables, this will be called usually just one time,
   //before maxwell needs it, and never during render time. All the heavy work must be done here.
   getExtensionData()->getDouble( "Cube size", cubeSize );//Get the parameter value and store it before using it
   return true;
 }
 
 bool loadMesh( Cmaxwell::Cobject &cube )
 {
   ...
   // CgeometryLoaderExtension method, will be explained in the corresponding chapter 
  ...
 } 
 
 bool getBoundingBox( Cvector &bmin, Cvector& bmax)
 { 
   ...
   // CgeometryLoaderExtension method, will be explained in the corresponding chapter 
   ... 
 }
}

extern "C" ALWAYSEXPORT int getSdkVersion()
{
    return MAXWELL_SDK_VERSION;
}

extern "C" ALWAYSEXPORT int StartExtension( CextensionManager& extensionManager )
{
    int i = 0;
    if( extensionManager.registerGeometryLoaderExtension( new CubeExampleExtension ) ) i++;
    return i;
}