ObjReplacementHandler
ObjReplacementInterface
Availability LightWave 6.0 | Component Layout | Header lwobjrep.h
Object replacement handlers are called at each time step to decide whether Layout should use a different object file to represent an object. An object's geometry might be replaced depending on its camera distance (level of detail replacement), or a time (object sequence loading), or some other criterion (previewing versus rendering, for example).
Object replacement can be used in combination with ObjectLoaders to perform procedural object animation. The replacement plug-in might write a brief description file for the parameters of a time step, which the object import server would then convert into a complete mesh during loading.
Handler Activation Function
XCALL_( int ) MyObjReplace( long version, GlobalFunc *global, LWObjReplacementHandler *local, void *serverData );
The local
argument to an object replacement's activation function is an
LWObjReplacementHandler.
typedef struct st_LWObjReplacementHandler { LWInstanceFuncs *inst; LWItemFuncs *item; void (*evaluate) (LWInstance, LWObjReplacementAccess *); } LWObjReplacementHandler;
The first two members of this structure are standard handler
functions. The context
argument to the inst->create
function is
the LWItemID of the item associated with this instance. An object replacement handler
provides an evaluation function in addition to the standard handler functions.
evaluate( instance, access )
- This is where the object replacement happens. The access structure passed to this function contains information about the currently loaded object and the evaluation time. You compare these and provide a new filename if a different object should be loaded. If the currently loaded geometry can be used for the new frame and time, set the new filename to NULL.
Interface Activation Function
XCALL_( int ) MyInterface( long version, GlobalFunc *global, LWInterface *local, void *serverData );
This is the standard interface activation for handlers.
Object Replacement Access
The access structure is the data passed to the handler's evaluation function. All of
the fields of this structure are read-only except for newFilename
.
typedef struct st_LWObjReplacementAccess { LWItemID objectID; LWFrame curFrame, newFrame; LWTime curTime, newTime; int curType, newType; const char *curFilename; const char *newFilename; } LWObjReplacementAccess;
objectID
- Item ID of the object.
curFrame, curTime
- The frame number and time at which the currently loaded object file was most recently evaluated.
newFrame, newTime
- The evaluation frame and time. If you provide a new filename, this is the time at which
that object file will be loaded. Because of network rendering, the new frame and time may
not follow the
curFrame
andcurTime
values sequentially. curType, newType
- These describe the current geometry and the type needed for the new time. An object
replacement handler might ignore the time values and only perform replacements when the
types differ. The type can be
LWOBJREP_NONE
- The current geometry for the object is a null object. This value only appears in
curType
. LWOBJREP_PREVIEW
- The object will be used during previewing and user interaction with the interface.
LWOBJREP_RENDER
- The object will be used during rendering.
curFilename
- The filename of the currently loaded object file. This will be NULL if the
curType
isLWOBJREP_NONE
. newFilename
- If you want to replace the currently loaded object file, set this to the name of a different file. Set this to NULL if the object file shouldn't be changed. The memory that holds this string must persist after the evaluation function returns.
Example
The objseq sample lets the user select a list of files from a file dialog. It sorts the selected filenames and then replaces the object at frame 1 with the first file, at frame 2 with the second file, and so on.