Debug variables have been moved to a common struct: Karana::Core::DebugManager. See here for details.
The handling of frozen subhinges has been moved from CoordData to the ConstraintKinematicsSolver class. In addition, it is individual elements of CoordBase objects that are frozen, rather than the entire object itself. This provides more granular control over which coordinates are frozen. See Karana::Dynamics::ConstraintKinematicsSolver for details: link.
TimedEvents have been refactored so the reschedule_fn uses std::nullopt rather than 0 to signal that a TimedEvent is done being scheduled. See Karana::Dynamics::TimedEvent::reschedule_fn for details: link.
SubGraph::getLoopConstraint has been renamed to getEnabledLoopConstraint, and Multibody::getLoopConstraint has been added. See the mentioned methods in the Karana::Dynamics namespace for details: link.
New Features
The ability to disable UsageTrackingMap::erase errors has been added. See here for details.
A variable to control the verbosity of allDestroyed output has been added to Karana::Core::DebugManager called all_destroyed_verbosity. See here for details.
The ability to add/remove plots from DashApp has been added. See addPlot and removePlothere for details.
A DataPlotter model has been added to GeneralKModels that updates plots as the simulation moves forward in time. See here for details.
Accumulate versions of gravity setters have been added to PhysicalBody and SubTree. This allows adding on to the gravity already present on the PhysicalBody/SubTree rather than overriding it. PhysicalBody::accumGravAccel, PysicalBody::accumGravityGradient, and SubTree::accumUniformGravAccel under the Karana::Dynamics namespace for details: link.
The CoordData::coordAt() method has been added to return the CoordBase and offset for a given index. See Karana::Dynamics::CoordData for details: link.
An aabb method has been added for all geometry types, and can be used to obtain the bounding box for a geometry. See the aabb methods of the Karana::Scene geometry types for details: example link.
An AABB class has been added to the Math module that supports working with axis-aligned bounding boxes. See here for details.
Aliases and uninitialized methods for Eigen::Arrays have been added to the Math module. See Karana::Math::Array and Karana::Math::ArrayVec for details: link.
Enhancements
SubGraph has been updated to only mark the _ck member as stale, and not reset it, when constraints change.
The SuhingeBase::subhingeType() method has been added to return the subhinge type. See Karana::Dynamics::SubhingeBase::subhingeType for details: link.
The ProxyScene::showAxes(Frame, size) method has been added to show the axes for a frame. See Karana::Scene::ProxyScene::showAxes for details: link.
PointMassGravity has been updated to accumulate rather than set the gravity. See here for details.
The SubTree is now required to be current before resetData() is called.
The Multibody is now required to be current before createStickParts is called.
pybind11_chrono_numpy has been added to the pybind11KModel, so anyone using it does not have to remember to include it. See here for details.
Frame::dumpFrameTree() output now includes the typeString() for each frame (except for truly plane Frame instances). See Karana::Frame::Frame::dumpFrameTree for details: link.
TimedEvents have been refactored so that operator> includes an ID comparison if time and priority are the same. This makes the sorting order more predictable, as it is now based on the event’s ID, which reflects creation order. See Karana::Dynamics::TimedEvent::operator> for details: link.
Bug Fixes
Python-side discard methods have been fixed to clean up variables properly when the variable being deleted is on self or a class, e.g., discard(self.d) or discard(my_class_inst.value). See the sharedPtrDiscard method under pybind11Utils.h for details: link.
Models in GeneralKModels missing not keywords in if statements in isInitialized have been fixed. See SubhingeSpringDamper on GeneralKModels for an example: link.