POP/POP_RadialBirth.h

/*
 * Copyright (c) 2013
 *      Side Effects Software Inc.  All rights reserved.
 *
 * Redistribution and use of Houdini Development Kit samples in source and
 * binary forms, with or without modification, are permitted provided that the
 * following conditions are met:
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. The name of Side Effects Software may not be used to endorse or
 *    promote products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE `AS IS' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
 * NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *----------------------------------------------------------------------------
 */

#ifndef __POP_RadialBirth_h__
#define __POP_RadialBirth_h__

#include <POP/POP_Node.h>

namespace HDK_Sample {

enum POP_RadialBirthIndex
{
    IRB_ACTIVATE,
    IRB_CENTER,
    IRB_DISTANCE,
    IRB_SPEED,
    IRB_BIRTHRATE,
    IRB_GROUP,
    IRB_LIFE,
    IRB_LIFEVAR,
    IRB_ORIGININDEX
};

class POP_RadialBirth : public POP_Node
{
public:

    static OP_Node*     myConstructor   (OP_Network* net, const char* name, 
                                         OP_Operator* entry);

    static PRM_Template myTemplateList[];

protected:
             POP_RadialBirth (OP_Network* net, const char* name, 
                              OP_Operator* entry);
    virtual ~POP_RadialBirth (void);

    virtual unsigned    disableParms    (void);
    virtual OP_ERROR    cookPop         (OP_Context &context);
    virtual void        addAttrib       (void* userdata);

private:

    float  ACTIVATE    (float t) { FLOAT_PARM("activate", IRB_ACTIVATE, 0, t) };
    float  CENTERX     (float t) { FLOAT_PARM("center", IRB_CENTER, 0, t) };
    float  CENTERY     (float t) { FLOAT_PARM("center", IRB_CENTER, 1, t) };
    float  CENTERZ     (float t) { FLOAT_PARM("center", IRB_CENTER, 2, t) };
    float  DISTANCEMIN (float t) { FLOAT_PARM("distance", IRB_DISTANCE, 0, t) };
    float  DISTANCEMAX (float t) { FLOAT_PARM("distance", IRB_DISTANCE, 1, t) };
    float  SPEEDMIN    (float t) { FLOAT_PARM("speed", IRB_SPEED, 0, t) };
    float  SPEEDMAX    (float t) { FLOAT_PARM("speed", IRB_SPEED, 1, t) };
    int    BIRTHRATE   (float t) { INT_PARM("birthrate", IRB_BIRTHRATE, 0, t) };
    void   GROUP       (UT_String &s) { STR_PARM("group", IRB_GROUP, 0, 0) };
    float  LIFE        (float t) { FLOAT_PARM("life", IRB_LIFE, 0, t) };
    float  LIFEVAR     (float t) { FLOAT_PARM("lifevar", IRB_LIFEVAR, 0, t) };
    int    ORIGININDEX (void)    
                        { INT_PARM("originindex", IRB_ORIGININDEX, 0, 0) };

    static int* myIndirect;

    float       getLifetime    (POP_ContextData* data);
    int         getOriginIndex (POP_ContextData* data);

    void        setAttrib (POP_ContextData* data, GEO_Point* ppt,
                           UT_Vector3* vel, void* userdata);

    float       myLife;
    float       myLifeVar;
    int         myOriginIndex;
    UT_Vector3  myCenter;
    float       mySpeedMin;
    float       mySpeedMax;
};

}       // End HDK_Sample namespace

#endif

Generated on Mon Jan 28 00:26:19 2013 for HDK by  doxygen 1.5.9