### 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 Query `object` 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 named `surfname`, 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. The `channel` 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` and `SURF_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) or `LWVMAP_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;
          }
       }