6.5 Changes 7.0 Changes Table of Contents

6.5B Changes

May 8, 2001

This is a list of the changes in the LightWave® 6.5B patch that affect the SDK. As with previous changes, these in most cases won't require you to rewrite or recompile your existing code.

Structures associated with the CustomObjHandler class and the Particle Services, Object Info and Interface Info globals were changed, but the custom object version number and the global name strings weren't incremented. This was discovered too close to the release of 6.5B to be remedied. In all cases, the changes involve members added to the ends of structures, so they have no effect on existing plug-ins. New plug-ins that need to distinguish between the old and new structures can use the program build numbers returned by the Product Info global.

lwcustobj.h

  • A text function was added to LWCustomObjAccess (Custom Objects).
  • Added LWVIEW_SCHEMA to the codes for the view field of the LWCustomObjAccess structure.
  • Added LWCOF_SCHEMA_OK to the flags that can be returned from the LWCustomObjHandler flags callback

lwhost.h

lwmaster.h

  • Added LWEVNT_TIME to the event codes that can be passed to the Master class event callback. This event notice is sent whenever the frame slider is moved, which includes playing the scene, but not playing back a preview.

lwmath.h

  • Bracketed MIN, MAX and ABS macros within preprocessor conditionals so that they won't conflict with versions of the macros that might be defined elsewhere.

lwmeshes.h

  • Incremented LWOBJECTFUNCS_GLOBAL (Scene Objects) to "Scene Objects 3"
  • Added userName and refName functions to the LWObjectFuncs structure. These return, respectively, the name of the object as seen by the user, and an unambiguous internal name for the object that can be used to refer to it in commands.

lwpanel.h

  • Added LWValPointer to the data types in the LWValue union used by Panels. Besides being more type-friendly, this change is in anticipation of 64-bit operating systems on which ints and pointers may not be the same size.
  • LWValPointer used in the definitions of the CON_PAN, CON_PANFUN and CON_SETEVENT macros.

lwprtcl.h

  • The LWPSB_ENB buffer (Particle Services) now encodes three states (LWPST_DEAD, LWPST_ALIVE, LWPST_LIMBO) instead of two (on/off).
  • Added LWPSB_CAGE (collision age) buffer containing the time since the last collision.
  • Added remParticle function to LWPSysFuncs.

lwrender.h

  • Incremented LWSCENEINFO_GLOBAL (Scene Info) to "LW Scene Info 3".
  • Added numThreads to LWSceneInfo.
  • Added LWROPT_PARTICLEBLUR option for the LWSceneInfo renderOpts function.
  • Added patchLevel and metaballRes functions to LWObjectInfo (Object Info).
  • Added LWLFL_NO_OPENGL to the flags for LWLightInfo (Light Info).
  • Incremented LWCAMERAINFO_GLOBAL (Camera Info) to "LW Camera Info 2".
  • Added flags, resolution, pixelAspect, separation, regionLimits, maskLimits and maskColor functions to LWCameraInfo.
  • Added LWCAMF_STEREO, LWCAMF_LIMITED_REGION and LWCAMF_MASK camera info flags.
  • Added itemVis function and displayFlags and generalFlags fields to the LWInterfaceInfo (Interface Info) structure.

lwserver.h

  • Added LANGID_KOREAN definition.

lwtxtr.h

lwxpanel.h

  • Added XPTAG_NULL define, which replaces NULL in the Xp macros for XPanels.

Commands: Layout

  • The arguments to the new AddPosition, AddRotation and AddScale are relative rather than absolute. These are useful for multiple selections and should also improve the reusability of scripts generated by macro recorders.
  • An EditServer command has been added which opens a plug-in's interface. The syntax is the same as the RemoveServer command, with class name and index arguments. If the index isn't specified, the last plug-in in the list is used, making it easy for a script to add a plug-in and immediately open its interface without having to know its index.
  • The AutoConfirm command now recognizes an argument value of -1, which will automatically respond negatively to all Yes/No or OK/Cancel dialogs.
  • The AddEnvelope and RemoveEnvelope commands now operate on all three parts of a color envelope as a unit (".R", ".G", and ".B" suffixes are ignored).
  • Other new commands:
    ShadowExclusion        GradientBackdrop      ParentInPlace
    NoiseReduction         ZenithColor           FractionalFrames
    RadiosityIntensity     SkyColor              PolygonEdgeFlags
    CausticIntensity       GroundColor           BoneFalloffType
    VolumetricRadiosity    NadirColor            ShadowMapSize
    DynamicUpdate

Commands: Modeler

  • The new meshedit command allows plug-ins to execute MeshDataEdit class plug-ins.

Commands: Common

  • The Surf_SetSurf command was using the display name rather than the filename to identify objects. This has been corrected.

Miscellaneous

  • The mesh info pntBasePos and pntOtherPos functions obtained from the Object Info global now provide better information for frozen meshes. The revised pntBasePos returns the same point positions that Layout uses for object coordinate texture mapping. These are completely undeformed positions in the case of regular polygons and subpatches, and positions at freezing time for metaballs and partigons. pntOtherPos now returns the actual world coordinates used by Layout. The new behavior of these functions should remove the need to use "helper" displacement plug-ins to gather vertex positions.
  • An Alert Level popup has been added to the General Options panel. At the Intermediate and Advanced levels, messages displayed using the message global's info, warn and error functions may appear in the status line rather than in separate dialog windows.
  • The changeID handler callback is now called when all lights or all cameras are cleared at once.
  • The illuminate raytracing function was returning 0 if the position was partially shadowed, which can happen when the light is a linear or area light. The return value is now 1.0 in such cases, and the partial shadowing is accounted for in the returned color.
  • The source member of the LWVolumeAccess structure is now set to the camera ID for directly viewed volumetrics, to the light ID for shadow rays, and to LWITEM_NULL for other types of rays.
  • The Z buffer given to image filters no longer has unfilled holes when unenhanced antialiasing is used with adaptive sampling and without motion blur or depth of field.
  • Previously, if an object replacement plug-in tried to replace an object that had been cloned with an object of the same filename, the change was ignored, since two objects with the same name weren't allowed to have different geometry. This has been fixed by freeing and replacing all instances of the object in such cases, just as manual object replacement does.
  • Objects loaded by object import plug-ins no longer cause a crash when the scene is later saved.
  • Custom object plug-ins were unable to draw points unless one of the other drawing functions had been called first. This has been fixed.
  • Custom objects using the LWCSYS_ICON mode are no longer affected by object scaling.
  • When the Item Info param function was called during a custom object plug-in's evaluate function, and FSPE was turned on, the interactive (non-keyframed) position of the item being queried could be forgotten. This has been fixed (but it's generally more efficient for plug-ins to call param during their newTime functions).
  • When an object is cloned, the clones are now named earlier in the copying process so that custom object and displacement plug-ins can look up the names from inside their create functions.
  • The viewports are now updated whenever a custom object, displacement or item motion plug-in is added, edited, or removed.
  • Keyframe shifting and scaling now work by looping through all members of the envelope group of each affected item, including envelopes added by plug-ins.
  • Manual operation of the envelope (E) button for color settings is now properly recorded in the command history.
  • Item selections made by clicking in the viewports or the Scene Editor or by using the current item popups are now recorded in the command history so that master plug-ins are notified when these selection changes occur.
  • Master plug-ins whose flags functions return LWMAST_LAYOUT are no longer cleared with the scene.
  • The MeshEditOp pntVMap function no longer crashes when passed polygons created during the same mesh edit.
  • The MeshEditOp polygon creation functions no longer crash when passed null vertex pointers. They instead return an error.