kdFlex 1.0.2 release

kdFlex 1.0.2 Code Changes Summary

API Changes

  • Updated the arguments for creating a ProxyScenePart, WebScenePart, or CoalScenePart. The arguments have been reordered so that the Scene container for the part comes before the geometry.
  • Broke out ModelManager class from StatePropagator, and the latter is now derived from the former. doc
  • Added documentation area organized by beginner, intermediate, expert level users link
  • Added program skeletons documentation section link
  • Tightened up class/method names to comply with conventions.
  • The StatePropagatorDS.toStatePropagator has been refactored to take a SubTree instance reather than a MulitibodyDS. This allows the method to work with direct SubTrees, and makes it simpler to use. Any values previously looked up using the MultibodyDS now use the refactored IdMixin global lookup instead. See the StatePropagatorDS.toStatePropagator for moer deTAILS.
  • The before_hop argument in the TimedEvent constructor has been renamed to pre_hop to match other locations in the code base. In addition, dumpString methods have been refactored to use pre-hop and post-hop rather than before hop and after hop. See TimedEvent for more details.
  • DashApp was refactored so that the data plotting functions can be defined in C++. In addition, the Dash server and associated websocket are now handled ina completely different Python process so they don’t get bottlenecked by the GIL. See the DataPlotter recipe for more details.
  • Renamed KLOG_LEVEL to KARANA_LOG_LEVEL. See the logging section for details.
  • Renamed current/stale to healthy/not healthy and finalized/initialized to ready. See LockingBase for details.

New Features

  • Added findShareDir, which is used to find the path where the /share/Karana directory was installed. This checks platform specific standard locations as well as the KARANA_SHARE_DIR environment variable, if set.
  • Added WebUI.HttpWsServer. This is an application-agnostic HTTP and websocket server with APIs in both C++ and Python. This is a common baseline for various web frontends in kdFlex.
  • Added a convex hull visualization helper. This creates a sphere-swept convex hull containing a given list of points, which can then be visualized. Building on this, there is also a routine to create a convex hull for a body’s nodes
  • Added a node force visualization helper. This draws an arrow from the Node to continually visualize the external force at the node as the simulation evolves.
  • Added the StatePropagator::euilibrateSciPy() method
  • UniformGravity and PointMassGravity have been refactored into one, simpler Gravity KModel. This KModel takes a GravityInterface, which can be used to switch what type of gravity is being computed. In addition, this GravityInterface can be passed to other KModels or Prefabs as needed to retrieve the current gravity value. See the 2-link pendlum example for an example.

Enhancements

  • Added WebScene.server, which can be called to get a handle to the web server being used by a WebScene instance.
  • Added ProxyScene.clientScenes, which lists all the scenes that have been registered with ProxyScene.registerClientScene.
  • The cmake files for kdFlex now include a find_dependency call for sundials, assimp and zlib so user scripts don’t need to include this.
  • Now SubTree::enableAlgorithmicUse() calls allFinalized() to verify that all parameters have been initialized.

Bug Fixes

  • Improve error checking upon creating a SubGraph with no parent.
  • Fixed bug with NoopIntegrator preventing it from being used with StatePropagator. Now, this can be used with StatePropagator as expected.