Simbody v3.6 Release Notes
Release Date: 2018-02-21 // about 6 years ago-
- ๐ฎ Forced GCC to be at least 4.9.0, so that new C++11 features like regular expressions can be used (PR #485).
- โก๏ธ Minimum Ubuntu version supported 14.04 LTS (Trusty), with a manual update of GCC.
- Recommended minimum Ubuntu version : 15.04 (Vivid), that is shipped with GCC 4.9.2.
- โ Added mixin classes
ResetOnCopy<T>
andReinitOnCopy<T>
to force default construction or reinitialization of data members on copy construction or copy assignment, without requiring a user written copy constructor and copy assignment operator just to get those reinitializations done. - โ Added clone() method to
SimTK::Function_
base class and implemented it for Simbody-defined concrete Function classes. Made concrete Function members non-const to permit assignment, and modified Function_::Step to allow changing its parameters after construction. - Added C++11 features to the
SimTK::Array_
container includingstd::initializer_list
construction, move construction, move assignment, andemplace
methods. - Prevented copy construction of
Array_<T>
fromArray_<T2>
unless T2 is implicitly convertible to T. Previously this was allowed if there was any conversion possible even if it was explicit. Array_ was being too relaxed about this, causing hidden copies to occur. - โ Added CloneOnWritePtr smart pointer (acts like ClonePtr but with deferred cloning).
- โก๏ธ Updated ClonePtr and ReferencePtr APIs to follow C++11 standard smart pointer terminology. This required deprecating some existing methods and operators, so you can expect to get annoying warnings until you switch to the new API.
- ๐ฏ Possible BREAKING CHANGE: ClonePtr's operator==() previously delegated to the managed object; now it just operates on the managed pointer as is done in other smart pointers. Consequently now only a clone() method is required for a type to be contained in a ClonePtr; previously it had to support comparison also.
- ๐ Make doxygen run silently so errors will be easier to see.
- โ Added new methods to
Pathname
class for interpreting pathnames against a specified working directory instead ๐ of the current working directory (thanks to Carmichael Ong). See Issue #264 and PR #307. - โ Added the ability to parallelize forces, robustness/performance improvements ๐ to ParallelExecutor, mutex state lock. PR #414.
- โ Added move constructor and move assignment to State (very fast).
- โ Added "stage version" counters for time, q, u, and z that are incremented whenever one of these changes.
- Separated time-independent position and kinematics calculations so that
they are not invalidated by a time change. These can also be initiated
explicitly with new methods
realizePositionKinematics()
andrealizeVelocityKinematics()
. They are invalidated by a change to q or to u, respectively. - Modified floating point-to-String conversions to use lossless number of digits by default. An attempt to use the default type-to-String conversion when no stream insertion operator is available is now a runtime rather than compile time error. PR #459.
- โฌ๏ธ Upgraded
SimTK::Xml
from class to namespace; local classes likeXml::Element
were promoted to namespace level within Xml. This was necessary to untangle Array_ and Xml classes which can be mutually dependent. This change is backwards compatible for those following the recommended use of the previously-availableXml::Document
typedef instead of Xml directly. Otherwise you will have to change uses ofSimTK::Xml
toSimTK::Xml::Document
. Also anyusing SimTK::Xml;
must be removed or replaced withusing namespace SimTK::Xml
orusing SimTK::Xml::Document
depending on the intent. PR #460 - ๐ Improved
NiceTypeName<T>::namestr()
to produce a canonicalized name that is the same on all platforms (with a few exceptions). Addedxmlstr()
method to make an XML-friendly modification ofnamestr()
that replaces angle brackets with curly braces. Added a new regression test to verify that the names come out right. PR #461 - โ Added helper class IteratorRange to use range-based for loops with a pair of iterators. PR#467
- โ Added the method
State::isConsistent()
to compare two states PR #469. - Started using RPATH on OSX so that users need not set
DYLD_LIBRARY_PATH
to runsimbody-visualizer
or the example executables, regardless of where you install Simbody. - ๐ Improved the ability to find the simbody-visualizer executable when Simbody is installed in non-standard locations or if the Simbody installation is relocated (even to different computers). This enhancement is only for non-Windows operating systems.
- ๐ Fixed a bug when compiling on macOS (OSX) with SDK MacOSX10.12.sdk, related
to the POSIX function
clock_gettime()
. Issue #523, PR #524 - ๐ Replaced usages of pthreads with C++11 classes. Removed the following classes:
- ThreadLocal
- AtomicInteger
- ๐ Deprecated some badly-named methods in MobilizedBody::Translation Issue #604
- โ Removed support for
long double
. PR #597 - ๐ Fixed a bug in
MultibodyGraphMaker
where massless bodies were handled incorrectly. PR #592 and PR #594. - ๐ Moved Ipopt into the namespace
SimTKIpopt
to avoid duplicate symbols when combining Simbody with an independent Ipopt. - ๐ Fixed a bug where RowVectors could not be constructed with 0 elements.
- CMake: Downstream projects no longer need to use
include_directories()
. - CMAES: You can now specify a different initial step size (standard deviation) for each variable. PR #540
- SimbodyMatterSubsystem now provides a function for the error in acceleration-level constraint equations. PR #517
- ๐ The visualizer now supports lazily loading mesh geometry from a file. PR #475
- ๐ Simbody can now be built with MinGW on Windows. PR #441