/**** * LWSDK Header File * Copyright 1999, NewTek, Inc. * * LWVPARM.H -- LightWave Time-Variant, Textured Parameters **** */ #ifndef LWSDK_VPARM_H #define LWSDK_VPARM_H #include #include #include #include #define LWVPARMFUNCS_GLOBAL "LWVParmFuncs 2" typedef void *LWVParmID; /* LWVParm envelope types */ #define LWVP_FLOAT 0x10 #define LWVP_PERCENT 0x20 #define LWVP_DIST 0x30 #define LWVP_ANGLE 0x40 #define LWVP_COLOR 0x51 #define LWVPF_VECTOR 0x01 /* Texture data types */ #define LWVPDT_NOTXTR -1 #define LWVPDT_VECTOR 0 #define LWVPDT_COLOR 1 #define LWVPDT_PERCENT 2 #define LWVPDT_SCALAR 3 #define LWVPDT_DISPLACEMENT 4 /* state flags */ #define LWVPSF_ENV (1<<0) // create (set) or has (get) envelope #define LWVPSF_TEX (1<<1) // create (set) or has (get) texture /**** * VParm Event Notification * Texture Event Codes: * TXTRACK - Generated as texture changes (eventData == NULL) * TXUPDATE - Generated after texture has changed (eventData == NULL) * TXAUTOSIZE - Request for texture autosize (eventData == bbox[3][2]) * Envelope Event Codes: * ENVTRACK - Generated as envelope changes (eventData == NULL) * ENVUPDATE - Generated after envelope has changed (eventData == NULL) * Envelope and Texture Instance Events: * ENVNEW - A texture has been created (eventData == NULL) * ENVOLD - The texture is being destroyed (eventData == NULL) * TEXNEW - An envelope has been created (eventData == NULL) * TEXOLD - The envelope is being destroyed (eventData == NULL) **** */ typedef enum en_LWVP_EVENTCODES { LWVPEC_TXTRACK = 0, LWVPEC_TXUPDATE, LWVPEC_TXAUTOSIZE, LWVPEC_ENVTRACK, LWVPEC_ENVUPDATE, LWVPEC_ENVNEW, LWVPEC_ENVOLD, LWVPEC_TEXNEW, LWVPEC_TEXOLD, } en_lwvpec; typedef int LWVP_EventFunc ( LWVParmID vp, void *userData, en_lwvpec eventCode, void *eventData ); /**** * Time-Variant parameters are double precision vectors (3 element arrays) * which may have a time-dependent nature - i.e., the value at time = 1.0 * is different at time = 2.0. Time-Variant parameters create and destroy * LightWave envelopes as needed based on user interaction, application * events, etc. **** * ATTENTION: When using LWVParms with an LWXPanel, the VParm is "get-only" * data. Never update the plugin's pointer during the XPanel * "set". The plugin should always use the LWVParmID returned * by the create method. **** * API Methods * ----------- * * create: Creates a time-variant parameter instance. * destroy: Releases resources used by instance. * setup: This MUST be called for each parameter created. The envelope * group ID is required. Any envelopes created for the * this parameter will belong to the specified group. A name * is also recommended for the parameter since this is what the * user may see when manipulating the envelope or texture. * load: Loads settings for a Time-Variant Parameter. * save: Saves settings for a Time-Variant Parameter. * getVal: Obtains the value of the parameter at a given time where * result is a 3 element array to be popuplated. * If a texture exists, the LWMicropolID should be non-NULL and * the return value is the texture's opacity. * If, however, the LWMicropolID is NULL, the texture's * contribution is ignored and only the parameter value * itself is returned. * setVal: Sets the value of the parameter where value is an array of * 3 doubles. If the paramter is enveloped, setting the value * has no effect. The method returns the number of elements * processed (0, 1, or 3). * getState: Returns a bitflag value containing LWVPSF_* state flags * to indicate true if the parameter has an envelope and/or * texture, and may contain other state information in the future. * setState: This is the counterpart to the getState and using the * bitflags 'state' value to create or destroy the * parameter's envelope and or texture. * A false bit state indicates any existing envelope/texture * should be destroyed so it is recommended to use a getState * to obtain the current state information, make the necessary * adjustments, and then call setState. * Bit states of true will create an envelope or texture * (if one does not already exist) using the information * provided to the setup method. * editEnv: If an envelope exists for the paramenter, this will open * the envelope editor. * editTex: If a texture exists for the paramenter, this will open * the texture editor. * initMP: Utility method to initialize an LWMicropolID instance to * default settings. * getEnv: Populates 'envlist' with envelope instance(s) for the LWVParmID * If no envelope exists, the array elements will be NULL. * getTex: Returns the current texture instance for the LWVParmID **** */ typedef struct st_LWVParmFuncs { LWVParmID (*create) ( int envType, int texType ); void (*destroy) ( LWVParmID parm ); void (*setup) ( LWVParmID parm, const char *channelName, LWChanGroupID group, LWTxtrContextID gc, LWVP_EventFunc *eventFunc, const char *pluginName, void *userData ); LWError (*copy) ( LWVParmID to, LWVParmID from ); LWError (*load) ( LWVParmID parm, const LWLoadState *load); LWError (*save) ( LWVParmID parm, const LWSaveState *save); double (*getVal) ( LWVParmID parm, LWTime t, LWMicropolID mp, double *result ); int (*setVal) ( LWVParmID parm, double *value ); int (*getState) ( LWVParmID parm ); void (*setState) ( LWVParmID parm, int state ); void (*editEnv) ( LWVParmID parm ); void (*editTex) ( LWVParmID parm ); void (*initMP) ( LWMicropolID mp ); void (*getEnv) ( LWVParmID parm, LWEnvelopeID envlist[3] ); LWTextureID (*getTex) ( LWVParmID parm ); } LWVParmFuncs; /* close LWSDK_VPARM_H header */ #endif