- ### 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` Added preprocessor symbols for some of the file type strings used with the File Type and Directory Info globals. `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` Added `itemName` to LWTxtrParamDesc (Texture Functions) `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.