SceneConverter
Availability LightWave 6.0 | Component Layout | Header lwscenecv.h
Scene converters load scene files written in formats other than LightWave's native format.
When the user selects a scene file to load, Layout first tries to load it directly as a
LightWave format file. If it can't, it passes the filename to each installed scene
converter until one of them claims to recognize the file. The scene converter reads the
file and rewrites it as a LightWave scene file,
passing the name of this temporary file back to Layout. After loading this file, Layout
calls the scene converter's deleteTmp
function to remove it.
Activation Function
XCALL_( int ) MySceneConvert( long version, GlobalFunc *global, LWSceneConverter *local, void *serverData );
The local
argument to a scene converter's activation function is an
LWSceneConverter.
typedef struct st_LWSceneConverter { const char *filename; LWError readFailure; const char *tmpScene; void (*deleteTmp) (const char *tmpScene); } LWSceneConverter;
filename
- The name of the non-native scene file. This is the file to be converted.
readFailure
- A one-line error message. Set this if you recognize the file format but can't read the
file for some reason. If you don't recognize the format, leave this and the
tmpScene
anddeleteTmp
fields NULL. This tells Layout to submit the file to the next installed converter. tmpScene
- The filename of the temporary LightWave-format scene file created by the scene
converter. If you successfully create this temporary file, you should also provide a valid
deleteTmp
callback. If an error occurs during the conversion, you should remove the partially written temporary file, settmpScene
to NULL, and set thereadFailure
field to an error message. Since this tells Layout to stop trying to load the file, you should be careful to distinguish between files you don't recognize and those you do but which contain errors. If you're not sure, leave thereadFailure
field NULL so that other converters have a chance to try to load the file. deleteTmp( filename )
- A function you provide for removing the
tmpScene
file you create. Layout calls this after reading thetmpScene
file.
Example
Most scene converters will follow the pattern shown in this pseudocode. Note that
rather than write our own deleteTmp
function for removing the temporary LightWave
scene file, we just pass back the C runtime remove
function.
#include <lwserver.h> #include <lwscenecv.h> #include <stdio.h> #include <stdlib.h> XCALL_( int ) MySceneConvert( long version, GlobalFunc *global, LWSceneConverter *local, void *serverData ) { static char tempfile[ 260 ]; FILE *ifp, *ofp; ifp = fopen( local->filename, "rb" ); if ( !ifp ) return AFUNC_BADLOCAL; ... read some of the file ... if ( not our format ) return AFUNC_OK; ofp = fopen( tempfile, "w" ); if ( !ofp ) { fclose( ifp ); local->readFailure = "Couldn't create temp scene file."; return AFUNC_OK; } ... convert the scene ... if ( error while converting ) { fclose( ifp ); fclose( ofp ); local->readFailure = "Error while converting."; return AFUNC_OK; } /* successful */ local->tmpScene = tempfile; local->deleteTemp = remove; return AFUNC_OK; } ServerRecord ServerDesc[] = { { LWSCENECONVERTER_CLASS, "MySceneConverter", MySceneConvert }, { NULL } };