Surface Functions
Availability LightWave 6.0 | Component Layout, Modeler | Header lwsurf.h
This global allows you to get information about surfaces and surface parameters.
Global Call
LWSurfaceFuncs *surff; surff = global( LWSURFACEFUNCS_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWSurfaceFuncs.
typedef struct st_LWSurfaceFuncs { LWSurfaceID (*create) (const char *objName, const char *surfName); LWSurfaceID (*first) (void); LWSurfaceID (*next) (LWSurfaceID); LWSurfaceID * (*byName) (const char *name, const char *obj); LWSurfaceID * (*byObject) (const char *name); const char * (*name) (LWSurfaceID); const char * (*sceneObject) (LWSurfaceID); int (*getInt) (LWSurfaceID, const char *channel); double * (*getFlt) (LWSurfaceID, const char *channel); LWEnvelopeID (*getEnv) (LWSurfaceID, const char *channel); LWTextureID (*getTex) (LWSurfaceID, const char *channel); LWImageID (*getImg) (LWSurfaceID, const char *channel); LWChanGroupID (*chanGrp) (LWSurfaceID); const char * (*getColorVMap)(LWSurfaceID surf); void (*setColorVMap)(LWSurfaceID surf, const char *vmapName, int type); } LWSurfaceFuncs;
surf = create( objname, surfname )
- Create a new surface. The object name is the filename, which you can get from the Object Info
filename
function and Modeler's State Queryobject
function, given the object's item ID. surf = first()
- Returns the ID of the first surface in the surfaces list.
surf = next( surf )
- Returns the ID of the next surface in the surfaces list (the one following the argument).
surfarray = byName( surfname, objname )
- Returns the IDs of the (possibly many) surfaces with a given name. Different objects can
have surfaces of the same name. If
objname
is NULL, the array will contain every surface ID namedsurfname
, regardless of which object it belongs to. The array of surface IDs is terminated by an ID of NULL. surfarray = byObject( objname )
- Returns the surfaces belonging to the object. The object name is the filename.
surfname = name( surf )
- Returns the name of a surface.
scenename = sceneObject( surf )
- Returns the filename of the object to which the surface belongs.
val = getInt( surf, channel )
- Returns the value of the surface parameter (evaluates the channel) at the current time.
Use this function for integer parameters and
getFlt
for floating-point parameters. Thechannel
is one of the channel names listed in lwsurf.h. valarray = getFlt( surf, channel )
- Returns the value of the surface parameter. The return value in most cases points to one double, but for colors, it points to three.
envelope = getEnv( surf, channel )
- Returns the envelope ID for the surface parameter. This can be used with the Animation Envelopes global.
texture = getTex( surf, channel )
- Returns a texture ID for the surface parameter that can be used with the Texture Functions global.
image = getImg( surf, channel )
- Returns the image associated with the surface parameter. This function is limited to use
with surface channels that refer directly to images, e.g.
SURF_RIMG
andSURF_TIMG
(reflection and refraction maps). Images that are part of textures have to be obtained through the Texture Functions global. group = chanGrp( surf )
- Returns the channel group for the surface. This is the parent group for envelopes associated with the surface's parameters. It can be used with the Channel Info global. Note: because of a bug, this field may be NULL in some builds of LightWave 6.
name = getColorVMap( surf )
- Returns the name of the vertex color map for the surface.
setColorVMap( surf, vmapname, type )
- Set the surface's vertex color map. The type can be
LWVMAP_RGB
(the vmap has a dimension of 3 and contains red, green and blue levels) orLWVMAP_RGBA
(dimension of 4, with RGB and alpha levels).
Example
The scenscan SDK sample includes a getObjectSurfs
function that collects surface information for all of an object's surfaces.
For some parameters, you'll want to consult the object
file format specification, since the form of the data returned by the get
functions is in some cases the same as its binary image in the object file. This code
fragment reads and interprets the reflection options.
#include <lwserver.h> #include <lwsurf.h> LWSurfaceFuncs *surff; LWSurfaceID surfid; LWImageID rimg; double refl, rsan, *dval; int rfop; ... assume surff and surfid have been initialized ... dval = surff->getFlt( surfid, SURF_REFL ); // reflectivity refl = *dval; if ( refl > 0.0f ) { rfop = surff->getInt( surfid, SURF_RFOP ); // options switch ( rfop ) { case 0: /* backdrop only */ ... break; case 1: /* raytrace + backdrop */ ... break; case 2: /* spherical map */ ... break; case 3: /* raytrace + map */ ... break; } if ( rfop == 2 || rfop == 3 ) { rimg = surff->getImg( surfid, SURF_RIMG ); // image map dval = surff->getFlt( surfid, SURF_RSAN ); // seam angle rsan = *dval; } }