ChannelHandler
ChannelInterface
Availability LightWave 6.0 | Component Layout, Modeler | Header lwchannel.h
A channel is a value that can vary continuously with time. Channels are everywhere in LightWave. Any animation parameter that can be enveloped is associated with an underlying channel. Channel handlers dip into the stream of a parameter and alter its value.
Handler Activation Function
XCALL_( int ) MyChannel( long version, GlobalFunc *global, LWChannelHandler *local, void *serverData );
The local
argument to a channel handler's activation function is an
LWChannelHandler.
typedef struct st_LWChannelHandler { LWInstanceFuncs *inst; LWItemFuncs *item; void (*evaluate) (LWInstance, const LWChannelAccess *); unsigned int (*flags) (LWInstance); } LWChannelHandler;
The first two members of this structure are standard instance handler
functions. The context
argument to the create
function is the
LWChannelID of the associated channel. When the plug-in is activated by Modeler, the item
member of the LWChannelHandler will be NULL. Check for this before assigning the item
callbacks.
A channel handler also provides an evaluation function and a flags function.
evaluate( instance, access )
- The channel value is examined and modified at each time step using functions in the channel access structure, described below.
f = flags( instance )
- Returns an integer containing bit flags combined using bitwise-or. No flags are currently defined for channel handlers, so this should return 0.
Interface Activation Function
XCALL_( int ) MyInterface( long version, GlobalFunc *global, LWInterface *local, void *serverData );
This is the standard interface activation for handlers. Channel handlers are selected on the graph editor panel, and their non-modal interfaces will be drawn there.
Channel Access
This is the structure passed to the handler's evaluation function.
typedef struct st_LWChannelAccess { LWChannelID chan; LWFrame frame; LWTime time; double value; void (*getChannel) (LWChannelID chan, LWTime t, double *value); void (*setChannel) (LWChannelID chan, const double value); const char * (*channelName) (LWChannelID chan); } LWChannelAccess;
chan
- The channel ID.
frame
- The frame number of the evaluation.
time
- The time of the evaluation, in seconds.
value
- The current value of the channel at the given time.
getChannel( channel, time, value )
- Retrieves a value from a channel.
setChannel( channel, value )
- Sets the value of the channel.
name = channelName( channel )
- Returns the name associated with the channel ID.
Example
Several of the SDK samples are channel handlers. NoisyChan uses the texture system's noise function to modify a channel. A channel handler is one of four classes demonstrated in txchan, which also uses textures as channel modifiers. xpanchan is a channel handler that demonstrates four ways of displaying the same XPanels interface.