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.