OxMath Classes 2.1
Feb 16, 2010
OxMath Classes is a modular 2D & 3D math library with common classes like vectors and quaternions, plus more advanced features such as vector-arrays and bounding volume/intersection classes. Time-slice function classes are also included to help create finite or cyclical procedural animations.Requirements:· REALbasic 2006r4+InstallationThis library is modular, with a required set of common classes plus several add-ons. To use the OxMath Classes in your REALbasic project simply drag the "OxMath" folder included in the download archive into the IDE's Project tab. To use the add-on classes, open the "OxMath Extras" folder included in the download archive and drag the appropriate folder(s) into the IDE's Project tab. Alternatively, drag the entire "OxMath Extras" folder into the Project tab to utilize all the add-ons. Important!This library is designed for speed over safety, and as such many methods disable REALbasic's built-in error checking mechanisms in release builds, and use pointers at a level where REALbasic's error checking wouldn't catch problems in the first place. This means release builds can and will crash outright if a fatal error is encountered. No need to fret however! Debug builds always have safety nets in place to help you catch and correct errors before compiling release builds. You can also set the OxMath.kReleaseBuildErrorChecking constant to True to enable these checks in release builds (with some added overhead of course).What's New in This Release:· API Change: Removed OxMath.Initialize and OxMath.Deinitialize. Everything "just works" now.· API Change: The OxMath module's 3D vector pseudo-constants are now fully qualified read-only properties (but they're still mutable). The "k" prefix has been removed.· API Change: All of the OxMath module's "random" methods and properties have been replaced with a singleton-style OxMath.RandomGenerator As Random property. This is safer and faster but some convenience methods (like RandomBoolean) have been removed.· API Change: OxMVector2.Origin and OxMVector3.Origin methods have been removed. These would always set the vector to zero rather than respecting the OxMath.Vector3Origin value which could lead to confusion. Use vec = 0 for the same functionality.· API Change: The vector array classes no longer expose an Address As Ptr property.
They now auto-convert to Ptr when needed.· API Change: In an attempt to standardize class naming conventions the several time-slice functions have been renamed.· API Change: All vector and vector-array Add, Subtract, Multiply, and Divide overloads that store the result of two other vectors or scalars have been renamed to SetToSum, SetToDifference, SetToProduct, and SetToQuotient respectively.· Note: The class folder structure has been separated into a core (required) OxMath folder and optional OxMath Extras folders.· Vector classes now auto-convert from scalars (e.g. vec = 4.0 sets all members to 4.0).· Vector CloseEnough and (rounded) Equals extensions have been promoted to full class methods.· Vector Ceil extensions actually Ceil now (previously they would Round).· Vector Ceil extensions and (rounded) Equals methods now work properly with negative components.· The vector-array classes contain workarounds for Ptr related crashes on x86 targets due to a REALbasic bug (vqeosdsi) marked fixed in 2008r2. These classes may perform less efficiently on x86 targets when built with REALbasic versions less than 2008r2 due to these workarounds.· New vector-array SetToSum, SetToProduct, and SetToDifference scalar operations that store the result given a second array and scalar.· Vector and index array classes now properly handle cases where the requested Count is less than one.· OxMBounds2DPoint and OxMBounds3DPoint now return correct validity flags during debug checks (they now actually work in debug builds).· OxMBounds classes now have default constructors that create valid "normalized" volumes.· OxMathExtensions: New vector SetToDirectionFromPointToPoint and DirectionFromSelfToPoint extensions.· OxMathExtensions: New vector Round and Floor extensions with arbitrary decimal precision.· OxMathExtensions: New (overloaded) scalar Round, Floor, and Ceil methods with arbitrary decimal precision.· OxMathExtensions: New scalar CloseEnough and (rounded) Equals extensions.· Corrected spelling of OxMath.kReleaseBuildErrorChecking constant.· New intersection example project.· Full and proper documentation.