Skip to content

======== Releases ========

Announcement: iMSTK 7.0.0

On behalf of the iMSTK community, we are pleased to announce the release of iMSTK version 7.0. The Interactive Medical Simulation Toolkit (iMSTK) is an open-source toolkit that allows faster prototyping of surgical simulators and skill trainers. iMSTK features advanced high-performance libraries for physics simulation, haptics, advanced rendering/visualization, user hardware interfacing, geometric processing, collision detection, contact modeling, and numerical solvers.

Here is a comprehensive list of changes made for this release.

Aaron Bray (4):

Andrew Wilson (199):

  • (289177b3e) BUG: Adjust epsilon for PointwiseMap
  • (679f38203) REFAC: Remove unused constraint names
  • (ddb0037e7) ENH: Add vertex label render delegate and model
  • (039895ebc) BUG: Fix gravity in RbdModel
  • (879c580e7) BUG: Fix dt not being passed to PbdSolver, add public solve function
  • (8eeebcb4e) REFAC: Use toTetGrid function in haptic grasping example
  • (ad60d5061) REFAC: PbdInjectionExample updates
  • (e9d8043b9) REFAC: PbdThinTissueCut name fixes
  • (ff3281f9b) DOC: Improve comments
  • (c2064ade1) TEST: Add test case to fix
  • (9204c106d) DOC: Fix comment
  • (8e75f8f05) REFAC: LevelSetModel extend AbstractDynamicalModel instead
  • (5ec78ecbf) DOC: RigidBodyModel references
  • (d320f5284) REFAC: Default constructor for SphState
  • (c00a251d1) REFAC: Remove LevelSetState
  • (895ff69cd) REFAC: PointwiseMap getter
  • (cf87bd7bc) REFAC: Unused forward declare
  • (0a1e73d84) REFAC: Lambda instead of bind
  • (3a3d8a28d) REFAC: Ignore PbdConstraintContainer in wrapper
  • (32ac09e2e) BUG: Fix missing include
  • (4c43ca7f5) REFAC: Avoid constructor usage on DeviceControl, templated DeviceControl for concrete DeviceClient access, DeviceControls stem off SceneObject
  • (87111ab62) REFAC: Remove old forward declares
  • (07e0ae1ef) REFAC: Cleanup HapticDeviceClient
  • (141daae09) REFAC: Remove unused forward declare
  • (8ec712bd5) REFAC: Remove unused tracker out of date flag
  • (ae57a318c) REFAC: Missing include
  • (cad3ab5b0) REFAC: Default name for colliding object
  • (0aa5ade27) REFAC: Apply forces right after available
  • (4937c41b6) REFAC: Add LineMesh compute vertex neighbors & rename SurfaceMesh::computeVertexNeighbors
  • (c31ea2b5e) DOC: Improve some comments
  • (6fc719379) ENH: Add cell mesh
  • (4dc70115a) REFAC: Prefer getCells and getNumCells
  • (758e73646) BUG: Fix mesh writing functions
  • (1b3628ef0) REFAC: Wrapper updates for CellMesh
  • (9fcc2cc73) REFAC: AbstractCellMesh in own file
  • (89a36bfe6) BUG: Fix HexahedralMesh extra indices
  • (64cf0f98d) REFAC: Const ref in NeedlePbdCH
  • (89952fda4) REFAC: Update getIndices to getAbstractCells
  • (93c08d02e) REFAC: Update use of AbstractCellMesh
  • (c3cefc035) ENH: Ability to forward parameters to the functor for constant density
  • (cb838f539) BUG: DeviceClient should be updated in its own thread only
  • (48e09bf08) BUG: HapticDeviceClient update fix
  • (fa7ce9053) Add option to disable screen text, for tests, on by default, fixes typo
  • (6bc1001f4) BUG: Fix Line dimensions
  • (d2ec0cb1d) ENH: Add option to turn off remainder divide for completely fixed substepping
  • (497ef9288) TEST: Add PbdLineMeshToLineMeshCCD visual test
  • (c6f9f40e1) DOC: Fix comment
  • (742622371) REFAC: Update csharp examples for control changes
  • (84b1bff57) ENH: Multi body Pbd and Rigid Body Pbd
  • (0572102b9) REFAC: Example update for multi body and rigid body pbd
  • (370fb1a80) ENH: Refactor cutting filters and add LineMeshCut
  • (a5e87ce74) BUG: Add missing primitive case
  • (ed0debefb) BUG: Fix reset for external force and torque
  • (395bab47a) REFAC: Use cwisemax in PbdFemTetConstraint
  • (957540e70) ENH: Persistent virtual particle buffer and orientation update rotation limits
  • (9213f48a8) ENH: Correct friction for pbd rbd
  • (38268c317) ENH: Improvements to PbdBodyDistanceConstraint
  • (f14d883b7) ENH: Updates to pbd rbd example
  • (5d381080f) REFAC: Remove SurfaceMeshToCapsuleTest
  • (ebf5768d3) REFAC: Remame SurfaceMeshToCapsuleVisualTest to SurfaceMeshToCapsuleTest
  • (4fb7c042c) BUG: Fix FemTetConstraint
  • (46638dcd6) REFAC: PbdConstraint improvements
  • (fc3746991) DOC: Improve comments
  • (478abdd00) REFAC: Rename to cloth to tissue
  • (8696a8f6f) REFAC: Rename collision cases, PbdCollisionHandling improvements
  • (15dda0c4e) REFAC: PbdCollisionHandling Improvements, remove unused from NeedlePbdCH in dynamic suture
  • (dd70d9265) REFAC: Move resitution calc with friction
  • (af0ae117d) REFAC: Example fix
  • (51e8faba5) BUG: Avoid setting dynamical model twice
  • (ae920e5f8) REFAC: Update license headers
  • (361922ef3) REFAC: Remove unused PbdContactType
  • (970b37a51) BUG: gcc fixes
  • (4477c72ba) BUG: Revert FemTet Change
  • (ca5f98cbe) DOC: Improve comments
  • (8dfe06272) REFAC: Various fixes for pbd rbd
  • (d614da684) REFAC: Replace epslions
  • (1857ca4dd) BUG: Fix PbdBenchmark
  • (6439947c9) REFAC: Inline generalized inv mass function
  • (42ab4e2d8) REFAC: Revert cloth example
  • (1b7f8a80c) BUG: Fix generalized inverse mass
  • (66174f5ec) DOC: Improve comments
  • (bb3369357) Improve Comments
  • (722e054b6) BUG: Fix relative velocity in friction
  • (b24f17ad6) ENH: Getter for handler constraints
  • (4356477aa) BUG: Text should be displayed by default, text update fixed
  • (5c777c529) ENH: Update PbdTissueContactExample to use a two-way proper compliance interaction with new xpbd simualted rigid bodies
  • (408dc01df) DOC: Update license text
  • (10ec196b1) ENH: Get torque for contact constraints
  • (8dd1ea6e1) REFAC: Don't reset externl force and torque until end of update
  • (348ff2fdc) ENH: Update PbdTissueVolumeNeedleContact to only use pbd, other minor improvements
  • (3c1ade8fe) DOC: Fix doxy comment HapticDeviceManager
  • (468b15f4e) ENH: Haply integration
  • (dfa9a371a) ENH: Haply examples test
  • (1923e56dc) ENH: Haply Hardware API support
  • (41654eb41) REFAC: Remove BoneShavingExample
  • (f5fb827c0) REFAC: HapticDeviceManager tuned to meters, Add DeviceManagerFactory, rescale examples, use shared_ptr
  • (19bd8c267) REFAC: Unused includes in CDObjectFactory
  • (989727d60) REFAC: Remove HaplyTestExample
  • (f362e3d00) DOC: Add build instructions for Haply support
  • (79ead0ff6) REFAC: Update data
  • (cf9780f26) REFAC: Use relative data directory path
  • (032f5bb11) PbdRbd Grasping Fixes, Fix PbdBodyToBodyDistanceConstraint, Other Cleanups
  • (00b8da4b6) ENH: Fix wrapper for HaplyDevice
  • (1a3201e2e) DOC: Fix comment
  • (e10c3598e) REFAC: Remove extra include
  • (5a8eab9ab) REFAC: Rename HapticDeviceManager/Client -> OpenHapticDeviceManager/Client
  • (91845fbf7) BUG: Fix VTKTextRenderDelegate issue
  • (3328a6dae) REFAC: Pbd Test Fixes
  • (5ccf98bc5) ENH: Cloning for Geometry
  • (48042e7c3) ENH: Change enter/exit criteria in pbd volume needle contact
  • (c372d00a1) ENH: Update paths for laptool, add laptool body in RbdLapToolCollision example
  • (ddbacd6a4) DOC: Fix comments and other small bits
  • (e2767fd36) REFAC: Remove some includes
  • (ceed901ea) ENH: Add base component model
  • (f7df3844e) tmp commit
  • (d1e07b61b) REFAC: Improve entity addition/removal, Rework the controls as components
  • (80b4334cf) ENH: Rework initialization for dependent components
  • (0177bab7c) ENH: Update ECS, remove TextStatusManager, introduce FpsTxtCounter
  • (92bb3f5ad) ENH: PerformanceGraph component
  • (40d12e9ea) ENH: AxesRenderDelegate and AxesModel components
  • (39f2c2ab5) ENH: Needle and Puncturable component
  • (cbdc8bf69) REFAC: Move to Components directory
  • (0ba6e0c37) ENH: Add setter for epsilon in cutting
  • (73a18a436) REFAC: Add controllers as components to objects they control
  • (edb82d29a) ENH: ControllerForceText component
  • (c4240f41b) BUG: Fix multiple needles puncturing same tissue
  • (1b6f3d30b) REFAC: DebugGeometryObject renamed to DebugGeoemtryModel, turned into a component
  • (c21298439) REFAC: Remove some creation methods
  • (780338570) ENH: ComponentModel csharp wrappings
  • (19731d0cf) DOC: Improve comments
  • (6b28d5357) REFAC: Check nullptr Component in Entity
  • (a5b5636ad) REFAC: Reuse addComponent call in Entity
  • (730fb80f5) REFAC: Rename createDefaultSceneControl
  • (f8922b336) REFAC: Add weak_ptr
  • (d8a8cc95c) REFAC: Rename Entity count member
  • (51201d37e) BUG: Fix recursive component initialization
  • (d034a61eb) REFAC: Compentize RenderingDebugExample
  • (13cbebcaa) REFAC: Move SceneControlText to its own file
  • (c46690ca3) REFAC: parentId updates
  • (5b175e50a) REFAC: Remove macro call in PbdObjectCutting
  • (9306a07ea) REFAC: More checks in PerformanceGraph
  • (2c978b986) REFAC: Improve Component documentation, add tests, add SceneBehaviour
  • (69858bb9b) REFAC: Rebase updates with PbdVolumeNeedleContact
  • (f92770d94) REFAC: Remove unused function
  • (d16e28567) REFAC: Add some null checks
  • (914366000) BUG: Fix issue with scene switching under new initialization
  • (d66937c3d) REFAC: Separate Needle into separate files and Needle module
  • (5c42f2878) BUG: Add missing includes
  • (4725421af) BUG: Fix issue with data paths on linux
  • (c43c2c7c7) BUG: Add ids and assertion bounds
  • (1167ac01b) ENH: Combine the collision and internal solve
  • (f485764c2) REFAC: Remove unused include, flip correct velocity statement, code format
  • (aa5756a75) ENH: Adds port hole interaction and body on body contact
  • (d6d10916f) ENH: Adds SphereToCapsuleCD and UnidirectionalPlaneToCapsuleCD
  • (fb094f0cc) DOC: Update comment and CD table
  • (1b9d9161b) TEST: Add constraint tests
  • (78b569355) BUG: Fix pbd test issue
  • (a18904aaf) ENH: Add haptic offset to exert forces off the center of mass, add parent id to cell picker
  • (babe02583) REFAC: Fix sticky lap tools and improve some comments
  • (0c5c8a42b) REFAC: Tighten up the thread in the tissue in suturing example
  • (cef608671) REFAC: Better warning message for PbdConstraintFunctors
  • (4a9055122) ENH: Add pbd rigid grasping and relevant examples
  • (2301d1a3c) BUG: Fix issue introduce in CellPicker when fixing cell ids
  • (fe011c8e5) REFAC: Mouse controls and rename for rigid in deformable grasping example
  • (fc633b3bb) REFAC: Move example to pbd group, include remove
  • (0f77be8db) TEST: Add grasping tests
  • (3825e3686) REFAC: Improve comments and renames
  • (24be036df) TEST: Add CellPicker tests
  • (64ab7ab3e) REFAC: Fix HingeConstraint rename
  • (dffa44a0a) BUG: Fix some linux warnings
  • (fade41a3c) BUG: Ensure order of cells by CellPicker
  • (63381b517) REFAC: Fix FemurCut bug, remove unused virtuals, offset in IsometricMap
  • (f34bcbd58) ENH: Add TaskBehaviour for task graph based components
  • (759601a77) REFAC: PortHoleInteraction use TaskBehaviour
  • (3f6d49ba1) ENH: Update Haply to 0.0.5 and add handle support
  • (e9307e129) REFAC: TaskBehaviour from Behaviour, add test
  • (2995fe5c3) REFAC: Update doc and rename to local offset
  • (a30d71b17) BUG: Fix issue with map setup when using differing visual and physics maps, add test
  • (352904b45) BUG: Update wrapper for ECS changes
  • (e3209fdc7) BUG: Add check for msvc version when using Haply 0.0.5
  • (00a9e1d67) BUG: Fix VR controls so multi buttons can be pressed at once, update camera movement, fix release on grasping, and move FPS counting down to imstkViewer base
  • (cd32e3c03) REFAC: TaskBehaviour in Behaviour
  • (00884e977) REFAC: Remove imstkNew from LevelSetExample
  • (b408005e3) REFAC: Add default construction for LevelSetModels config
  • (9424dedf9) REFAC: Add initialization for image bounds
  • (7ef326ca8) BUG: Fix issue with parallelization in SurfaceMeshDistanceTransform
  • (fde117e89) REFAC: VRCameraControl comments, remove test code
  • (76aae16cd) DOC: Add Behaviour documentation
  • (70dda2e31) BUG: Fix port hole conflict from merge
  • (a1a9b3a3d) BUG: Fix port holes in haptic examples
  • (498512db9) REFAC: Enable VRPN in dashboard
  • (3e37b9631) BUG: Fix an issue with observers in the EventObject
  • (e096c99c3) REFAC: Fix some warnings
  • (b4eaf5a07) BUG: Update EventObject to deal with deconstruction
  • (06ad3d2c7) REFAC: Fix connect calls to use shared_from_this
  • (66e8e77c7) TEST: Add small test for the viewer
  • (a93cb3bbf) TEST: Add some tests for adding/removing scene objects to viewer+renderer
  • (27afd6bf8) REFAC: Better collision stiffness and compliance defaults
  • (a6e575e68) DOC: Update documentation

Ben Boeckel (8):

  • (c2706971c) imstkGraph: include <cstdlib> for size_t
  • (b2e28f782) VegaFEM: update to fix missing includes
  • (e553ec077) tbb: update to 2021.5.0
  • (12a1141ec) tbb: disable -Werror
  • (fba361c9f) gtest, vtk: force install into lib
  • (533314e92) ci: add Dockerfile for Fedora 36 testing
  • (1706f422f) gitlab-ci: add basic Linux job
  • (4d4d78605) gitlab-ci: use arch-specific tags for OS selection

Connor Bowley (1):

  • (533efe701) BUG: Fix X Error during shutdown on Linux

Harald Scheirich (64):

  • (32f367e3e) DOC: Update Openhaptics links
  • (38722a164) ENH: Add at() function to vectors
  • (dbef83915) ENH: Add polymorphic clone()
  • (5819273cb) DOC: Change license header
  • (016268cfb) REFAC: Fixup MR
  • (8891fc2c8) BUG: Fixes issues with wrapped classes in the device hierarchy
  • (62bcc6dc5) COMP: Remove unused configuration file
  • (d7d8f8b7f) COMP: Renaming external project broke CI
  • (51e409518) COMP: Force C# project to be configured more aggressively
  • (575839e7d) ENH: add accessors for rigid body position and orientation
  • (e4aa1ab9c) ENH: Wrap PbdObjectController
  • (a74545ac0) ENH: Enable a fractional density for the connective tissue generation
  • (2b86a9de6) ENH: Remove constraint if it already exists in enableConstraint()
  • (f567db13b) BUG: Uncrustify
  • (6f5c7748b) ENH: Improve distribution of the endpoints
  • (00b6c760f) COMP: Remove extraneous include
  • (9270931a1) BUG: Fix parameters for copy operation
  • (210cfe24c) BUG: fix a range error
  • (60a866f99) ENH: Expose CD Factory
  • (de1ccd3da) ENH: Add constructor with fewer type restrictions
  • (ca22d78c8) COMP: Fix linux build
  • (dae8e5ef3) BUG: swap members if necessary
  • (bd4191a27) ENH: Show average physics frame times in stats
  • (5df176876) ENH: Add unit test for closest point on segment
  • (cf5708e08) BUG: Add test and fix calculation bug
  • (e886951b7) ENH: expose distance constraint
  • (71db5f439) ENH: Expose ConstraintContainer and support
  • (557bcb6c7) FIX: Order agnostic constructor was not working correctly removing it
  • (f2aae63d4) BUG: Fix Fluids example
  • (cac1e7ca9) PERF: Reuse Collision Constraints
  • (68a63b31e) BUG: Fix Tetrhedral volume calculation
  • (ff58c5174) BUG: Fix deletion of cached constraints
  • (1b49b274c) BUG: Invert the rendered forces to match the controllers inversion parameters
  • (9b8ec3c01) ENH: Expose task timings in swig
  • (909e2508c) ENH: Add accessor for single body in model
  • (6e61d167e) PERF: Remove extraneous geometry updates in grasping
  • (5d7073d17) ENH: Allow configuring the strain model via cell attributes
  • (b53cc30f5) ENH: Allow writing of obj files
  • (59197bb69) BUG: fix issue with strain parameter setter
  • (80722b7f9) ENH: Add accessor for cells of a vertex
  • (9e159e152) DOC: Fix comment
  • (2f166de9b) COMP: Fix test build (was missing include)
  • (d7d03000a) BUG: C# CastTo was causing an exception when passed a nullptr
  • (2018d1c90) REFAC: Remove RigidObject2 in favor of Pbd
  • (a19410bdd) WIP: Move puncture detection into separate function
  • (43303168f) REFAC: Move stiching support into needle library
  • (ecbbed67b) ENH: Add Suturing support to C# Wrapping
  • (4eb93c520) WIP: Move Needle To Thread maintainance into Collision handler
  • (42ac66f14) REFAC: move Needle interaction into imstk namespace
  • (f1088c337) BUG: Fix Needle detection on exit
  • (3ac552584) BUG: fix wrapping for puncture data
  • (fbbc59b12) BUG: Prevent the constraints on the thread from being flipped
  • (6930746db) Uncrustify
  • (15783dc1c) ENH: Prevent Haptics manager from posting events
  • (a269bf023) ENH: Add test example for two devices
  • (cdf076724) ENH: Refactor OH Device client and manager
  • (c04abfa08) BUG: Generate strain data on get
  • (3148d32dc) BUG: Fix new devicemanager shutdown
  • (fa8b73c08) BUG: Fix Strain Test
  • (f6c8fc357) COMP: Remove unused audio example
  • (6557fa592) COMP: Disable PBDInjection example
  • (041399126) COMP: Fix compilation warnings
  • (edcd9c90d) DOC: Stub page for ReadTheDocs
  • (c15c6530a) DOC: Improve Clarity and spelling

Jacob Moore (40):

  • (77f34f283) ENH: Handling for Tet Inversion
  • (3a27f906d) ENH: Adding screen control info
  • (e26a4a16a) ENH: Adding missing cases for capsule to surface mesh CD.
  • (9c135d819) ENH: Adding default options for generating collisions
  • (479d70b16) Update header imstkCDObjectFactoryTest.cpp
  • (6fe43172e) ENH: Improving stability of collision constraints near a boundary condition.
  • (06acc9ba2) BUG: Updating analytic geometry data in initializer
  • (288893e65) ENH: Adding LineMeshToSphereCD and LineMeshToCapsuleCD
  • (c7b895a53) DOC: Improve documentation for EdgeEdgeCCDState class
  • (66f1af16a) Feature/apply to data mesh normals
  • (7a2e6963f) BUG: Velocity compute and scale fix
  • (25140a27a) Feature/fix append mesh
  • (6596cbdb7) ENH: Strain energy models
  • (15463685f) Feature/ProximitySurfaceSelector
  • (da1d4073e) Feature/barycentric coordinates surf mesh
  • (80461db26) ENH: Connective tissue generator
  • (b16c7e995) ENH: Connective tissue constraint generator
  • (071014bd0) Update Maintainance.md to include SWIG wrapping
  • (f2147107e) ENH: pbd object cell removal
  • (629f99343) ENH: Adding Tearable component.
  • (69a9e0e77) Feature/burning dissection
  • (7f35a1dd2) BUG: Debugging collision
  • (016639d9c) ENH: Fixing ct wall constraints
  • (c62269188) BIG: Fix collision order
  • (05c9e1f6d) Feature/adding closed surface capsule collision
  • (8f13fddb4) ENH: Adding 2 way interaction WIP
  • (7641c9530) BUG: Fixing thread penetration WIP
  • (7b832dc69) ENH: Adding setters and getters for stiffnesses
  • (c5343a7f7) ENH: Fixing repeatablility issues. Fixed issue where needle could puncture on side, multiple clean ups
  • (62106e7e6) ENH: Exposing threshold
  • (bfd43ec9d) ENH: Adding 2 way constraints for needle to thread
  • (358b39b3c) ENH: Adding stride to suturing for performance
  • (5d2b6a26a) ENH: Adding ability to stitch multiple times with relesing the thread
  • (131b187d5) ENH: Adding getters for puncture data
  • (5b99e1a06) ENH: Adding wrapping, and allowing BC constraints on setup
  • (655b0ccc2) ENH: Adding function to get world coordinates from cellID and barycentric point
  • (2333a994b) BUG: Adding debugging and fix crash
  • (9e7848948) EXAMPLE: Tweaking 2 device example WIP
  • (9fc285531) EXAMPLE: Adding stomach to 2 device example
  • (50bf2cecc) EXAMPLE: Updating 2 devices

JustinMWoo (1):

  • (03652c3b4) Added getter for ModifiedChunks

Stephen Crowell (4):

Tom Birdsong (2):

  • (857e658b6) DOC: Add steps to reproduce Linux CI build in local container
  • (846e8a88f) Fixup for !917

Contributors: Aaron Bray, Andrew Wilson, Ben Boeckel, Connor Bowley, Harald Scheirich, Jacob Moore, Stephen Crowell, Tom Birdsong, Shreeraj Jadhav (unintegrated ECS Branch)

Release 6.0.0

Announcement: iMSTK 6.0.0

On behalf of the iMSTK community, we are pleased to announce the release of iMSTK version 6.0. The Interactive Medical Simulation Toolkit (iMSTK) is an open-source toolkit that allows faster prototyping of surgical simulators and skill trainers. iMSTK features advanced high-performance libraries for physics simulation, haptics, advanced rendering/visualization, user hardware interfacing, geometric processing, collision detection, contact modeling, and numerical solvers.

Here is a comprehensive list of changes made for this release.

Andrew Wilson

Enhancements

  • (2e7c3b1b) REFAC: Connect & actions implemented in SWIG
  • (0f5a0f44) ENH: Ghost tool for static suturing example
  • (70b922fb) REFAC: Default to adaptive stepping in SimulationManager
  • (d5995889) ENH: Mouse controls for FemurCut example
  • (75d41d96) REFAC: PbdFunctors now created in the config with polymorphic interface
  • (2ab250d1) ENH: Cylinder mesh generation
  • (8f710ace) ENH: Cloth grab example
  • (8790bb94) REFAC: TrackingDeviceController Rotational Inversions
  • (0ae58230) ENH: Assimp reader can now read LineMesh
  • (d22d38f5) ENH: Interactions now SceneObjects, CollisionGraph Removed
  • (8361c0ad) REFAC: begin and end pick can be called from the interaction, getter for the node
  • (4b043ff7) REFAC: Change PbdPicking to occur after internal solve
  • (7deab9a9) ENH: Adds vsync toggle
  • (e89f1d3d) ENH: Upgrade to VTK 9.1
  • (e491885d) ENH: Adds clearcoat model to iMSTK & colon fly through example rendered with clearcoat
  • (7c890690) ENH: OpenVR support for thumbsticks, triggers, & grips
  • (e964e167) REFAC: VR camera fixes, scene camera now pre multiplied to allow VR camera controls
  • (bb947658) ENH: VR movement controls implemented
  • (2848b07f) REFAC: Texture wrap type enum & border coloring
  • (ff2aedcf) ENH: Upgrade to TBB 2021.1.1
  • (5c6b0c68) REFAC: Split libraries off creating Materials, RenderingCore, RenderingVTK, ViewerCore, and ViewerVTK
  • (ad7e52cc) ENH: Adds mouse controls for static suture example
  • (0a3e5e83) ENH: Adds critical damping to RigidObjectController
  • (a2dbaf81) REFAC: Adds dynamic flag in RenderMaterial avoiding GPU vertex buffer upload & CPU normal recomputation for rigid & static meshes
  • (8dcf84b8) REFAC: Remove PhysX
  • (a99c1d9b) ENH: Introduced delegate hints & RenderDelegateFactory
  • (f769b590) ENH: Adds ghost tool for virtual coupling example
  • (9c78db5c) REFAC: Remove parallel runtime for task graph
  • (865a629d) REFAC: Add task node global ids
  • (b5ae8f71) REFAC: Add default SceneObject name, unnamed
  • (47b66ea7) ENH: Refactor PbdPicking to remove collision handler & add element picking
  • (3f3e6110) ENH: Generalized picking introduced
  • (6bb0ee1e) ENH: Update point picker for tetrahedral grasping
  • (4e4136f0) REFAC: Make laprascopic angle movement relative to time
  • (ec64d6dc) ENH: Ray cast point picker can sample first hit or N points
  • (ddceb571) ENH: Support vertex data in cell grasper, such as with PointSetToSphereCD
  • (c70539d0) ENH: OneToOneMap support for PbdObjectGrasping
  • (1d1dba48) ENH: Add PbdObjectStitching
  • (aff4c089) REFAC: GeometryMapper to GeometryAlgorithm refactor
  • (f0c655a1) ENH: SurfaceToTetraMap added
  • (e6d8ebd2) ENH: Stitching support for thin tissues
  • (7dd6e8d6) PERF: TriangleToTetMap now in O(n+m) instead of O(n*m)
  • (4bc001ae) REFAC: Fix dependencies. libusb, libnifalcon, & ftdxx not required when not building with VRPN
  • (c6634178) REFAC: Remove globs from all imstk libraries
  • (2f14dd4b) REFAC: Remove libnifalcon & ftd2xx
  • (e37e47c2) ENH: Adds build option to build without rendering
  • (1a27dfc4) REFAC: Introduce VisualTesting base & reorganize test library linkage
  • (874395a4) REFAC: Add line, triangle, & tet grid geometry generation functions
  • (f1374ec5) REFAC: Default no friction for pbd collision
  • (41219474) ENH: SceneObject names optional, function to produce unique name
  • (9f998fdd) ENH: Adds .vtk file writing for SurfaceMesh & LineMesh
  • (2fcd924e) ENH: Adds binary .msh reader, refactor ascii .msh reader
  • (3c59594b) ENH: Capsule To Capsule Collision Detection and example
  • (dbd47504) ENH: Default to 0 angle bend constraints, provide parameter in enableBendConstraints
  • (3e3551bf) ENH: Add haptic device support to PbdSutureExample

Testing

  • (97c44f84) TEST: Add test for initial camera looking down z
  • (46735548) TEST: RenderDelegateMock test
  • (dbd8779b) TEST: Add point picker tests
  • (657c28a6) TEST: Max distance boundary value test for PointPicker
  • (e03fa0b0) TEST: Barycentric and ray function tests
  • (ad96cf48) TEST: Integration testing for collision & pbd collisions
  • (39a01c2e) TEST: Add all the other collision test cases for Pbd
  • (99294cfa) TEST: Add crevice test, tweak other PbdObjectCollisionTests
  • (478de476) TEST: addSceneObject tests
  • (4fb96509) TEST: Add hexahedral mesh .msh IO test, tests validate contents
  • (481120f5) TEST: Add PointSetToCylinderCD visual test
  • (8dd88704) TEST: RigidObjectCollisionTest visual testing

Bugs

  • (f2e7eb6a) BUG: Fix capsule sdf & bounding box func
  • (97b1d3ac) BUG: Basis in capsule getFunctionValue should use tranpose/inverse of rotation
  • (4ff061fd) BUG: Fix task graph cyclic issue, bad ordering in task graph PbdObjectCollision
  • (ddaaad0e) BUG: Fix PbdObjectGrasping task ordering
  • (d2ef1f8e) BUG: Divide by zero case & empty else removed in constraints
  • (06ee4e5e) BUG: Remove restriction on 0 capsule length
  • (dd981c74) BUG: Fix textures when used with non PBR shading / flat, gourand, or phong
  • (4f772d35) BUG: Fix segment bc coords
  • (dd1aa416) BUG: Fix edge-edge closest point computation

Documentation

  • (0aae6ec6) DOC: Include dashboard link in readme, update PbdModel code example
  • (2cafd83b) DOC: Add CD support matrix
  • (4804f952) DOC: Update SimulationManager documentation
  • (a37ef5e7) DOC: Update README, Contributing, & Maitnance docs
  • (6fd68759) DOC: Improve PbdModel documentation
  • (6a2d3355) DOC: Add documentation for CapsuleToCapsuleCD
  • (6508c824) DOC: Add thread gif & description in PbdModel

Ben Boeckel

Enhancements

  • (1e262b0b) ENH: Add gitlab runner support and basic configuration for Windows

Harald Scheirich

Enhancements

  • (d9085dd2) ENH: Update Eigen to 3.4
  • (d2419bff) ENH: Update VRPN to latest version
  • (2c89fa1e) ENH: Add adding of multiple nodes and edges to taskgraph
  • (a543c7d6) ENH: Update C++ to 14
  • (3c8e7957) REFAC: Consistently use delegate hint for render delegate creation
  • (91bf9003) ENH: Add Analog getter in DeviceClient
  • (bc047b8d) ENH: Split rendertests into separate CMAKE variable
  • (f2491052) ENH: Introduce TYPE_NAME macro
  • (b961cbcd) ENH: Common Factory infrastructure
  • (805894b1) ENH: Add simple example to use for onboarding work
  • (62a03fde) ENH: Add const begin/end to data array
  • (cb0ecef5) ENH: Add second logger to enable unity to catch issue thrown by failed CHECK or FATAL messages
  • (9ac5d1a5) ENH: Enable C# and Unity to catch exceptions posted by C++ code
  • (1f721fa8) ENH: Unity loggers log to file as well
  • (8b1cd2a3) ENH: Avoid extra DataArray allocations on assignment
  • (101bc8ee) ENH: Additional tests for testPlaneToSphere
  • (65705e50) ENH: Create Confiuration file for C#
  • (c1b00ec8) ENH: Add Dependent options with regards to Unity build

Testing

  • (dc9f3bf8) TEST: Add taskgraph unit tests
  • (115f9a28) TEST: Add tests for OneToOneMap

Bugs

  • (b2da6894) BUG: Fix treatment of unsafe functions when PINNED_ARRAY is on
  • (91aeb8d9) BUG: Correct handling of size and mapped ptrs in new copy
  • (fdb51195) BUG: fix spurious failure when closing a window in visual tests on linux

Documentation

  • (d5f54e4b) DOC: Add language to coding guidelines addressing published work
  • (bfee2fba) DOC: Update Coding guide to bring in better in line with current iMSTK practices
  • (47c368d1) DOC: improve documentation for factories
  • (f5a1b2f8) DOC: Add documentation for coverage calc
  • (f397bccd) DOC: Update README

Hong Li

Enhancements

  • (ff9f2cb8) ENH: Add support for texture coordinates runtime modification for SurfaceMesh
  • (98f4ddc2) ENH: Add PointSet to Cylinder Collision Detection

Bugs

  • (2ace82a9) BUG: Fix Plane to Sphere collision test bug

Jacob Moore

Enhancements

  • (a8676f24) ENH: Pbd vs Rigid Body Haptic Grapsing
  • (28b32fad) ENH: Adding suture constraints for penetration
  • (ac24fd7d) ENH: Adding suture needle interaction
  • (16fb452b) ENH: Adding suture needle object

Testing

  • (235ef0a9) TEST: Testing for Capsule class
  • (a171879d) TEST: Testing for SurfaceMeshToCapsuleCD and Capsule class
  • (e693456e) TEST: Simplified volume test for capsule
  • (57d80e09) TEST: Adding benchmarking to PBD method
  • (c998964f) TEST: Added more benchmark cases with contact and modifed based off feedback

Jean-Christophe Fillion-Robin

Enhancements

  • (e9cc8117) COMP: Update build-system to be consistent and require VTK dependency
  • (051abb5d) COMP: Update imstk_find_header to keep ${package}_INCLUDE_DIR in the cache
  • (086e9b05) COMP: Simpler config against project in given dir setting default for _LIB_DIR
  • (ebfde657) COMP: Support for custom include subdirectory associated with imstk_find_header
  • (35940011) ENH: Update imstkSolveDependencies module based on commontk/Artichoke@4176c39f9
  • (885c7cdf) COMP: Update imstkAddExternalProject to support specifying custom install dir
  • (fe4db2e1) COMP: Add relevant vars to iMSTKConfig to streamline config against a build-tree
  • (01373ce8) COMP: Update Libusb external project to support Linux
  • (5e3a7f46) COMP: Support setting custom SOURCE_DIR and BINARY_DIR vars
  • (a30d9fa8) COMP: Update imstk_add_external_project to keep track of the project var
  • (a9203409) COMP: Streamline client project integration updating TBB from 2019_U2 to 2019_U9
  • (abadb943) COMP: Update external project supporting setting a custom git repository
  • (17d0c63d) COMP: Update imstkSolveDependencies module based on commontk/Artichoke@edfc828)
  • (663b4daf) COMP: Ensure inner build is always re-configured
  • (f8a1edb0) COMP: Simplify and fix handling of PHYSX_CONFIGURATION option
  • (b21384c2) COMP: Simplify and fix handling of iMSTK_USE_OpenHaptics option
  • (ff4d8c3d) COMP: Update inner build external project to use CMAKE_CACHE_ARGS
  • (4600b6c9) COMP: Simplify and fix passing of options to inner build using mark_as_superbuild
  • (c55b3ed1) COMP: Remove obsolete inner build external project patch step for VTK 8.2
  • (48004598) COMP: Update Assimp to simplify packaging in client projects

Shreeraj Jadhav

Enhancements

  • (c30e56e5) ENH: Create a CCD Algorithm class
  • (406c734f) ENH: Add CCD algorithm for LineMeshtoLineMesh collision
  • (0a69049d) ENH: Add new contraint for CCD Edge-Edge collision
  • (f5de4123) ENH: Collision handling for Edge-Edge CCD
  • (78d0dc32) ENH: Add example for LineMesh self CCD

Testing

  • (d01f18cc) TEST: Add testing for LineMesh CCD

Documentation

  • (f1c1dced) DOC: Add description for LineMeshToLineMeshCCD

Api Changes

  • PbdModel::getParametersPbdModel::getConfig
  • PbdModelConfig::enableConstraint now takes PbdModelConfig::ConstraintGenType uncoupling constraint generation schemes from constraint types.
    • ex: enableConstraint(PbdConstraint::Type::Distance, 1.0e2); -> enableConstraint(PbdModelConfig::ConstraintGenType::Distance, 1.0e2);
  • SimulationManager library split into SimulationManager, ViewerCore, & ViewerVTK. Linkage to ViewerVTK may be required in dependent projects should you require that library.
  • Rendering library split into RenderingCore & RenderingVTK.
  • GeometryMaps, now extend GeometryAlgorithm
    • OneToOneMapPointwiseMap
    • TetraToTriangleMapTetraToPointSetMap
    • OneToOneMap::getIdxOneToOneMap::getParentId
    • GeometryMap::applyGeometryMap::update
    • Geometry constructor inputs → GeometryMap::setParentGeometry & GeometryMap::setChildGeometry
    • GeometryMap::Type enum removed.
  • Many acronym’d names now Upper case first letter only. ie: PBDPbd. FEMFem. Previously had mixed usage.
  • PbdPickingCH removed/refactored into PbdObjectGrasping.
  • All barycentric functions moved to imstkMath.h
  • DataLogger removed
  • MeshToMeshBruteForceCD renamed to ClosedSurfaceMeshToMeshCD
  • All VTKOpenVR classes now VTKVR. ex: VTKOpenVRViewerVTKVRViewer. Backend is unspecified in name. OpenXR by default.
  • IdentityMap removed.
  • Collision detection algorithm factory refactored. Get collision detection class by name with CDObjectFactory::makeCollisionDetection("SurfaceMeshToCapsuleCD");
  • VisualModel constructor input removed. Use VisualModel::setGeometry instead.
  • CollisionPairs & CollisionGraph removed. Use SceneObject’s added to the scene with Scene::addInteraction
  • A few occurrences of getTranslation & getRotation changed to getPosition & getOrientation when referring to a pose, not a transformation.
  • PhysX deprecated backend removed completely.
  • Only utilized VTK libraries are linked to, not every built VTK library. Any user facing VTK code may need to link to required libraries.
  • Update to C++14
  • Update to VTK 9.1
  • Update to TBB 2021.1.1
  • Update Eigen to 3.4
  • Update VRPN

Contributors: Andrew Wilson, Harald Scheirich, Shreeraj Jadhav, Jacob Moore, Jean-Christophe Fillion-Robin, Hong Li, Ben Boeckel

Release 5.0.0

Announcement: iMSTK 5.0.0

This release features major improvements to the collision detection and response capabilities, rendering, and hardware interface modules. Numerous refactors and bug fixes were made across the board to improve extensibility. The testing infrastructure and coverage was improved substantially. Numerous medically relevant examples were added. Most notably, v5.0 comes with a beta version of the C and C# wrappers for iMSTK along with documentation and examples.

Here is a comprehensive list of changes made for this release.

Andrew Wilson

Enhancements

  • Extended PBD model to allow needle-tissue interactions (07819c60 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/07819c608d14e9fbd01b60b37ab77bf99ee9f592>_)

  • PBDTissueSurfaceNeedleContact: Simple approach to needle insertion of deformable 2d triangle mesh tissue with rigid body haptics.

  • RbdSDFNeedle: Simple approach to needle insertion of static tissue for which a rigid body needle may rotate/pivot before being fully inserted.
  • PBDTissueVolumeNeedleContact: More involved approach to needle insertion of deformable tetrahedral mesh tissues with rigid body haptics. Uses two-way embedded coupling.
  • PBDStaticSuture: Suture thread and needle vs static geometry. Uses custom arc to point constraint. Suture thread non functional yet. Only surface constrained.

  • The collision detection architecture was comprehensively refactored and updated (ed212e8f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/ed212e8fcc66d9cbb34e6022569cce679fab8b2c>_)

  • PbdObject vs CollidingObject possible: PbdObject vs Rigid, SPH, FEM, any CollidingObject are now possible.

  • Pbd vs Primitives Collision: PbdCollisionConstraint’s and PbdCollisionHandler now use pointers and values instead of DataArray's allowing collision between something that doesn’t have a vertex buffer.
  • PbdPointToEdgeConstraint: Allows mesh to curved surface collision when used together with point-to-point and point-to-triangle.
  • MeshToMeshBruteForceCD New Implementation: Able to resolve deep contacts in manifold shapes. Stable and accurate method, not performant for large meshes.
  • Virtual constraint addition for Pbd and Rbd models: Allows redefinition of contact response models. Used for needles, drills, thread holes, cutting, etc.
  • PbdRigidCollision interaction: Two-way collision between RigidObject2 and PbdObject. Gives response between both objects. (useful for haptics, no reaction force on the RigidObject2 is felt without it). See PBDTissueContactExample.
  • CollisionDebugObject: Can be added to the scene to display CollisionData as faces, edges, points, or directions/arrows.
  • SurfaceMeshToSphereCD: Triangle mesh to sphere collision. Demonstrated in PbdClothCollisionExample & RbdSurfaceMeshToSphereCDExample.
  • Restitution and friction added to PbdModel

  • Light properties can be changed at runtime, attenuation exposed (2d9a78c1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/2d9a78c1458d36cf6e2f291ca488e1ccd81dd014>_)

  • Textures can now be setup via ImageData instead of filenames, swapped at runtime, & pixels modified at runtime (6e79fb81 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/6e79fb81eafc24f667c859ed02eadbe712474c1d>_)
  • VisualModels can be added/remove from the scene at runtime. (f1e55106 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/f1e551066c6f3356197ab980803a9b43f3df5b7c>_)
  • Camera now provides projection matrix and eye rays (bdbffbb8 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/bdbffbb8d704b923fa42a2ee8381dc691a143936>_)
  • Added OrientedBox to geometry (replaces Cube) (845dd6c5 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/845dd6c5c691d942b555bb31f380699d53aa9299>_)
  • PbdConstraintFunctor was added that allows customization of constraints generated for a PbdModel. (e3a9753f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/e3a9753f18673192defb37c9f66246f94463c673>_)
  • Added strides to PBD bending model. Bend constraints can now be generated for differing strides allowing stiffer threads/strings at lower iterations. (350adc5f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/350adc5fd574e7beaa67193512b5a207092ebe1a>_)
  • Added RenderMaterial::ShadingModel::None allowing shading to be turned off where necessary (e7811080 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/e7811080094426f032ecf942d5be5c1a778f20df>_)
  • Added RenderMaterial::DisplayMode::Normals that displays normal directions using arrows (614e296e <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/614e296eac148c8a096e2a9199bf223bdcb0783c>_)
  • Added Texture Projection filter that projects attributes (eg: uv coords) via closest point projection (17fb7679 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/17fb767916171cc5d3ac0329d33517d7252ab600>_)
  • Cell attributes were added to LineMesh (08b08212 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/08b082120d29f84a7d6bf925398e2eb40deadec6>_)
  • LineMeshes can be read in via VTK file type (6e20e88b <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/6e20e88bf08554417ddcaf7c29002c50bf810114>_)
  • SceneObject::visualUpdate virtual function is now called before every render for every SceneObject in the scene (fa95ff5f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/fa95ff5f9523a519c4b4f1e506ff55d39f1e16c7>_)
  • Added disposable syringe, orthopedic drill, c6 needle 3d models to the imstk data
  • Performance improvements to SPH (6a2bb089 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/6a2bb0893a3651f398c35c1e858418bf1fc7e525>_)
  • Performance improvements to Dense LSM (d2a2b88f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/d2a2b88f75366cc7bbba1dcf8a46efc48bf497d1>_)
  • Remove nonfunctional Pulse (3b41b3e1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/3b41b3e10718192778b86bec0a98fdae586f51cd>_)
  • Remove nonfunctional Vulkan (5e7eddbc <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/5e7eddbc97fa141eba78cb5921d94c6f258cb316>_)

Documentation Updates

  • PbdModel documentation updated (6eb4a04a <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/6eb4a04a78118b9e501e5b48d336697e522271cb>_)
  • CollisionDetection documentation updated (2d9a78c1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/2d9a78c1458d36cf6e2f291ca488e1ccd81dd014>_)

Testing

  • PbdBendConstraintFunctor testing (dc431620 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/dc431620c972ec165964dc513956754a7a7edca6>_)
  • CollisionDetection testing (07819c60 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/07819c608d14e9fbd01b60b37ab77bf99ee9f592>), 3b19c782 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/3b19c782b4b33349f84cdebd58f0c176e20a2f30>, 91d09f63 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/91d09f6308b994af8dd3731f1ce28ec8244bf8a1>_)
  • PbdCollisionConstraint testing (ed212e8f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/ed212e8fcc66d9cbb34e6022569cce679fab8b2c>_)
  • PGSSolver testing (567f126e <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/567f126e61ecbd44946f96aa10eef5505e8be8ad>_)

Harald Scheirich

Enhancements

  • VRPN Analog, Button and Tracker devices. No limit to VRPN in iMSTK anymore (co-authored by Khalil Oumimoun) (0f02a666 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/0f02a666a2879cc8ac81be6737fb30b6a94e533e>_)
  • Improved testing capabilities. Reduced overhead in testing infrastructure removing auto generated classes. (3059ffbe <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/3059ffbe1cf91300650732b76461a0135efa3a54>_)
  • Added Git LFS-based external data management for data required by tests and examples. (7eb3d176 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/7eb3d17684368fcf59496bb288a57288401b568f>_)
  • Update gtest (a4d30ec5 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/a4d30ec53b828396a1c744bef4345e9130041736>_)

Documentation Updates

  • Improve C# Wrapper Documentation (28050bd3 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/28050bd3b9d92d7accd914c6be95594da27d64b4>_)
  • Added documentation for external Data and dependency update process (a4051249 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/a40512497e61e1bb79ccb442cb3f3c23b5911e6d>_)
  • Added coding style guidelines (1f450dcf <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/1f450dcf07cb3a02a97d0f1e90984888fcb3bb4e>_)

Testing

  • DataArray testing (99f18c24 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/99f18c2452441f58742879c9e7a6a42b03819651>, 8b08c873 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/8b08c87378f5297e10a1360d43156c1476ce2aba>)
  • Device & Control testing (1b76fed9 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/1b76fed9eb8e3aadc6a28872969badf50e32fb4a>_)
  • EventObject testing (538915c8 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/538915c8aaa3a52ce5772d12a87eceb5ead53cd8>_)
  • GeometryAlgorithm testing (d061764a <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/d061764a4e22dfab69ea041fbb9fe122bc2e9e80>_)
  • SurfaceMesh tests (e7dfcb23 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/e7dfcb23c4c75b47a5cde5987b84e3c82872b854>_)
  • Render testing (57725ee0 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/57725ee0f06aabf7046a9c376affa8c16e3f8471>_)

Sreekanth Arikatla

Enhancements

  • Remove plotter utils (5508d197 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/5508d197b171651c4da24e011d770bc703afb71e>_)
  • Remove APIUtils (554cde05 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/554cde055ef21dba9fb2941341146414062b658a>_)
  • Cleanup Vulkan references and remove related external dependencies imgui, glm (d6cea42b <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/d6cea42bc4bff9e7f549d12bf161c2769019039a>_)
  • Scene bounding box computation (458fa955 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/458fa955f82a7f81d4f96c5b333045ecb64369a0>_)

Testing

  • PbdConstraintFunctor testing (a55301f1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/a55301f123dda66bc9e01e452e3e82f420427c75>_)
  • Geometry testing (613402e1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/613402e183d7f9d842cdc8e1c3216c7d528a79e1>, 84caab04 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/84caab046b3b95964d2e1ee1ada6222c8ef00a24>)
  • CollisionDetection testing (07819c60 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/07819c608d14e9fbd01b60b37ab77bf99ee9f592>, 3a135f83 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/3a135f8397571e21553a358a7f82b78bcbe58b60>, 6b5a3685 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/6b5a3685eb7314ae165cbdb7406087b829091785>, 2e6ad2aa <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/2e6ad2aaa4c7362e6a4aaea51544d017e5047c0b>, 266ea1b3 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/266ea1b3084b8d2ad49a588d52b4d395d474a145>, 64363cd1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/64363cd1d52867d3dd263cb75af82c9c52f81a54>, 2f9e385f <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/2f9e385ff6ae03947c3e16761ba13af6f94dc292>, 666467bd <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/666467bdced2455f76829963189f6322150b115d>)
  • Scene testing (cfdbe9e3 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/cfdbe9e3361b4103e84000c5b7b697bd70ab6919>_)

Infrastructure

  • Enabled nightly readTheDocs build.

Jianfeng Yen

Enhancements

  • SWIG-based generation of C and C# wrappers along with C# examples and tests (See Source/Wrappers/csharp) (c11d712c <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/c11d712c3098f0be56ca38f739784c326c445edb>_)
  • Performance Improvements to FEM (c9f002ec <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/c9f002ecfe402e78677ee43146c23d5875aad160>_)

Ye Han

Enhancements

  • Triangular mesh cutting via local remeshing (e7c01ead <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/e7c01eadc4b73a0fa43c1ed2f6d98f5c48844d72>_)
  • Added SurfaceMeshToCapsuleCD static collision method (42a321fb <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/42a321fb9285fc07eb24ece219b131015b2f2ba9>_)

Khalil Oumimoun

Enhancements

  • VRPN Analog, Button and Tracker devices (0f02a666 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/0f02a666a2879cc8ac81be6737fb30b6a94e533e>_)

Aron Bray

Testing

  • Integration tests for rendering and geometry modules (96f084a1 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/96f084a1ed0445c3c9cfc6d26438ceb0f2344fb7>_)

Hong Li

Enhancements

  • Extension of PBD Constraints to inflate tissue (3bf08161 <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/3bf0816139102ad4fb901695263f0d2b4a51a458>_)

Furkan Dinc

Enhancements

  • Screen space ambient occlusion support (ab38797d <https://gitlab.kitware.com/iMSTK/iMSTK/-/commit/ab38797d496bbb449763b5fa56da41276bd27c4a>_)

Ben Boeckel

Infrastructure

  • Added Linux to the merge request builds
  • Fixed issue on the MSVC 2017 merge request build

Api Changes

  • PbdPointDirectionConstraint replaced with PbdPointToPointConstraint.
  • PbdCollisionConstraint::initConstraint now use VertexMassPair structs for initialization.

::

PbdPointPointConstraint constraint; constraint.initConstraint( { vertexA, invMassA, vertexVelocityA }, { vertexB, invMassB, vertexVelocityB }, stiffnessA, stiffnessB);

  • PbdCollisionConstraint::projectConstraint updated, accepts no parameters anymore as it uses pointer values provided during PbdCollisionConstraint::initConstraint.
  • PbdCollisionSolver::addConstraint now only accepts a constraint, no buffers.

::

std::vector* constraints; // ...Fill out constraints... myPbdCollisionSolver->addCollisionConstraints(constraints);

  • CollisionDetection replaced with CollisionDetectionAlgorithm. Now subclasses GeometryAlgorithm with inputs given via GeometryAlgorithm::setInput.

::

// Either order is ok (mesh, sphere) or (sphere, mesh) imstkNew collisionDetect; collisionDetect->setInput(mySurfMesh, 0); collisionDetect->setInput(mySphere, 1); collisionDetect->update();

// Output order dependent on input order collisionDetect->getCollisionData()->elementsA; // CD elements for the mesh collisionDetect->getCollisionData()->elementsB; // CD elements for the sphere

  • Collision interactions renamed, more consistent naming, removal of "Pair".
  • PbdObjectCollisionPair renamed to PbdObjectCollision.
  • SphObjectCollisionPair renamed to SphObjectCollision.
  • RigidObjectLevelSetCollisionPair renamed to RigidObjectLevelSetCollision.
  • RigidObjectCollisionPair renamed to RigidObjectCollision.
  • PbdObjectCollision can now be constructed with both PbdObject+PbdObject or PbdObject+CollidingObject

::

imstkNew interaction1(myPbdObjectA, myPbdObjectB); imstkNew interaction(myPbdObjectA, myCollidingObjectB);

  • RigidObjectCollision can now be constructed with both RigidObject2+RigidObject2 or RigidObject2+CollidingObject

::

imstkNew interaction1(myRbdObjectA, myRbdObjectB); imstkNew interaction(myRbdObjectA, myCollidingObjectB);

  • OrientedBox should be used in place of Cube.

::

Vec3d center = Vec3d(0.0, 0.0, 0.0); Vec3d extents = Vec3d(0.5, 0.5, 0.5); // Does not have to be a cube imstkNew box(center, extents);

  • RenderMaterial now uses doubles, not floats.
  • Removed Octree collision in SurfaceMeshToSurfaceMeshCD. The octree is still present but pending touch ups.
  • RigidBodyModel2 and corresponding classes moved from expiremental to main imstk namespace.
  • DebugRenderGeometry replaced with DebugGeometryObject. Usage as follows:

::

imstkNew debugGeometryObj; scene->addSceneObject(debugGeometryObj);

// Can be called anytime, normally during runtime debugTriangles->appendVertex(Vec3d(0.0, 1.0, 5.0), Color::Red); debugTriangles->appendLine(p1, p2, Color::Green); debugTriangles->appendArrow(p1, p2, Color::Orange); debugTriangles->appendTriangle(p1, p2, p3, Color::Blue);

  • DebugRenderDelegate's replaced with the already existing RenderDelegate's.
  • Removed Vulkan, Pulse, apiUtilities, imgui
  • NarrowPhaseCD namespace functions moved and refactored into more general static intersection functions in CollisionUtils.
  • Name was removed from the light class, light names are managed by the Scene

::

imstkNew light; light1->setFocalPoint(Vec3d(-1.0, -1.0, -1.0)); light1->setIntensity(1.0); scene->addLight("light", light);

  • Removed Real's, use double's instead.
  • RigidBodyModel now optionally built, being deprecated in place of RigidBodyModel2 as it's more extensible.
  • PBDModelConfig::m_defaultDt removed, use PBDModelConfig::m_dt instead.
  • PBDModelConfig::m_collisionIterations removed. Iterations can be set per collision solver, given per interaction.

::

auto pbdHandler = std::dynamic_pointer_cast(interaction->getHandlerA()); pbdHandler->getCollisionSolver().setCollisionIterations(5);

  • PbdModelConfig::enableBendConstraint should be preferred when using bend constraints with varying strides. If PbdModelConfig::enableConstraint(PbdConstraint::Type::Bend) is used, stride will always be 1.
  • PbdModel::initializeConstraints functions removed. Replaced with extensible PbdConstraintFunctor.
  • Texture may also be constructed with an ImageData

::

std::shared_ptr diffuseImage = MeshIO::read(iMSTK_DATA_ROOT "/textures/fleshDiffuse.jpg"); material->addTexture(std::make_shared(diffuseImage, Texture::Type::Diffuse));

  • Enums removed in places were extensibility desired.
  • Geometry::Type removed. Use Geometry::getTypeName() instead.
  • CollisionDetection::Type removed. Use CollisionDetectionAlgorithm::getTypeName() instead.
  • CollisionHandling::Type removed. Use CollisionHandling::getTypeName() instead.

Contributors

Andrew Wilson Harald Scheirich Sreekanth Arikatla Jianfeng Yen Ye Han Khalil Oumimoun Aron Bray Hong Li Furkan Dinc Ben Boeckel Andinet Enquobahrie

Release 4.0.0

Announcement: iMSTK 4.0.0

This release features major improvements to the simulation execution pipeline, geometry module, virtual reality support, and haptics. Extensive refactoring and numerous bug fixes were also made across the codebase to allow extensibility of certain classes, improve clarity, separate roles for different iMSTK libraries, and enforce consistent design and conventions across the toolkit.

Here is a comprehensive list of changes made for this release.

New Features

  • Addition of Implicit Geometry

  • SignedDistanceField

  • CompositeImplicitGeometry
  • All existing analytical geometries

  • Addition of LevelSetModel (regular grids only)

  • Addition of ImplicitGeometryCD & ImplicitGeometryCCD
  • Addition of RigidBodyModel2
  • Addition of Event system (addition of EventObject)
  • Addition Imstk Data Arrays. DataArray+VecDataArray. Replacement throughout code.
  • Addition of per cell and vertex mesh attributes. DynamicalModels use them.
  • Addition of PBDPickingCH, for picking PBD vertices.
  • New Geometry Filters. Including LocalMarchingCubes.
  • Offscreen rendering support through VTK OSMesa
  • New substepping and sequential execution mode for SimulationManager

Improvements or Refactoring

  • SimulationManager and Module Refactor
  • Refactor VTKRenderDelegates
  • Topology changes supported
  • New examples. Many fixed haptics and OpenVR examples.

  • FemurCut

  • PBDPicking
  • SDFHaptics
  • FastMarch
  • RigidBodyDynamics2
  • PBDCloth-Remap
  • SPH-Obj-SDFInteraction
  • Vessel

  • imstkNew

  • Refactor geometry base class transforms
  • OpenVR, Keyboard, and Mouse Device Refactoring
  • Control refactoring
  • virtual update and visualUpdate functions for SceneObject
  • virtual init and advance functions for Scene
  • VRPN build toggle
  • Geometry enums replaced with getTypeName polymorphic function
  • DynamicalModel enums replaced with getTypeName polymorphic function
  • Module unit tests
  • VecDataArray + DataArray unit tests
  • NRRD, MHD, & NII image file support through VTK
  • Debug camera initializes to bounding box of initial scene
  • Bounding box computation of many primitives added
  • Laprascopic Tool Controller fixed + improved
  • VisualObjectImporter can now read and flatten scene hierarchies.
  • PBD performance improvements
  • HapticDeviceClient accepts no name for default device
  • ColorFunctions added to RenderMaterial for mapping scalars
  • imstkCamera refactor, view matrix can now be set independently of focal point and position.
  • VTKViewer split into VTKViewer and VTKOpenVRViewer, common base VTKAbstractViewer added.
  • Mute, log, or display VTK logger options added to VTKAbstractViewer
  • Shared RenderMaterials

Bug Fixes

  • Capsule CD fixes
  • OpenVR fixes
  • Missing bounding box functions for some analytical shapes added
  • Rigid body reset fixes
  • Many virtual destructors added

API Changes

  • OpenVR, Keyboard, and Mouse device refactoring: Mouse and Keyboard now provided under the same DeviceClient API as our haptic devices. You may acquire these from the viewer. They emit events, you can also just ask them about their state.

::

std::shared_ptr keyboardDevice = viewer->getKeyboardDevice(); std::shared_ptr mouseDevice = viewer->getMouseDevice();

std::shared_ptr leftVRController = vrViewer->getVRDevice

  • Controls: Our controls are now abstracted. Any control simply implements a device. You may subclass KeyboardControl or MouseControl. We also provide our own default controls:

::

// Add mouse and keyboard controls to the viewer imstkNew mouseControl(viewer->getMouseDevice()); mouseControl->setSceneManager(sceneManager); viewer->addControl(mouseControl);

imstkNew keyControl(viewer->getKeyboardDevice()); keyControl->setSceneManager(sceneManager); keyControl->setModuleDriver(driver); viewer->addControl(keyControl);

  • Event System: Key, mouse, haptic, and openvr device event callback can be done like this now.

  • You may alternatively use queueConnect as long as you consume it somewhere (sceneManager consumes all events given to it).

  • Your own custom events may be defined in iMSTK subclasses with the SIGNAL macro. See KeyboardDeviceClient as an example.

::

connect(viewer->getKeyboardDevice(), &KeyboardDeviceClient::keyPress, sceneManager, & { std::cout << e->m_key << " was pressed" << std::endl; });

  • Imstk Data Arrays: Data arrays and multi-component data arrays provided. They are still compatible with Eigen vector math.

::

VecDataArray myVertices(3); myVertices[0] = Vec3d(0.0, 1.0, 0.0); myVertices[1] = Vec3d(0.0, 1.0, 1.0); myVertices[2] = myVertices[0] + myVertices[1];

std::cout << myVertices[2] << std::endl;

  • SimulationManager may now be setup and launched as follows:

::

// Setup a Viewer to render the scene imstkNew viewer("Viewer"); viewer->setActiveScene(scene);

// Setup a SceneManager to advance the scene imstkNew sceneManager("Scene Manager"); sceneManager->setActiveScene(scene); sceneManager->pause(); // Start simulation paused

imstkNew driver; driver->addModule(viewer); driver->addModule(sceneManager); driver->start();

  • VisualObject typedef removed. Just use SceneObject.
  • HDAPIDeviceServer renamed to HapticDeviceManager
  • HDAPIDeviceClient renamed to HapticDeviceClient

Contributors

Andrew Wilson, Venkata Sreekanth Arikatla, Ye Han, Harald Scheirich, Bradley Feiger, Jianfeng Yan, Johan Andruejol, Sankhesh Jhaveri

Release 3.0.0

Announcement: iMSTK 3.0.0

This release features major improvements to the computational workflow, physics, and rendering aspects of the toolkit. Major refactoring and bug fixes were made across the board to allow easy extension of classes, improve clarity and separation of roles of different imstk libraries and enforce consistency of design across the toolkit.

Here is a comprehensive list of changes made for this release.

New Features

  • Introduction of configurable task-graph and task-based parallelism.
  • Major upgrade to the rendering module (VTK backend)

  • Upgrade to VTK 9.0

  • Realistic fluid rendering using screen space fluids
  • Faster particular rendering of fluids
  • Addition of physically based rendering

  • Addition of 3D image support and volume rendering

  • Improved physics models for particle based dynamics: Addition of extended position based dynamics (xPBD)
  • Addition of support for modeling 1D elastic structures with bending stiffness
  • Addition of faster reduced order deformation models (Linux only)
  • Addition of Reverse Cuthill–McKee algorithm (RCM) for mesh renumbering
  • Major refactoring simulation manager: Improved time stepping policies, multiple scene management and scene controls, addition of async simulation mode
  • Improved capabilities of the geometric utility module: addition of geometric processing filters, New tetrahedral mesh cover generation (based on ray-casting)

Improvements or Refactoring

  • Upgrade external dependency from Vega 2.0 to 4.0 (finite element library backend)
  • Clear majority of the warnings in imstk libraries
  • Refactored examples: consistent naming, factoring out object addition into separate functions, use heart dataset, remove redundant mapping, Removed line mesh example
  • New examples for scene management, volume rendering, task graph
  • Renamed files to be consistent with class names
  • Vulkan shader project removed for VTK backend
  • Remove imstkVolumetricMesh dependency on vega volumetric mesh
  • Easy configuration of finite element deformable object, viewer, renderer and simulation manager
  • Concrete dynamcal models now derive from AbstractDynamicalModel
  • Solvers are moved to models from scene
  • Added default solvers for models
  • SPHSolver is removed
  • SceneObject class now has update calls
  • DynamicalObject de-templatized
  • Fix render window default title to imstk
  • Replace external project download links with .zip versions
  • Uses CHECK() instead of LOF(FATAL)/LOG_IF(FATAL) for simplicity
  • imstkLogger is now a singleton
  • Allow exclusion of files while building library targets
  • Refactoring to use forward declarations where possible
  • Templated solvers with matrix type
  • Faster TetraToTriangle map
  • Interactions are now specified explicitly
  • PbdConstraints moved to Constraints library, PbdConstraints and PbdModel decoupled
  • PbdModel performance improvements
  • SPHModel performance improvements (using TaskGraph)

Bug Fixes

  • Fix PhysX backend build issues on Ubuntu
  • Fix imstkFind.cmake issues
  • Fix imstkConfig.cmake issues
  • PbdModel reset fix
  • All Scene, SceneObjects reset correctly now

API Changes

  • simulationManager::startSimulation() to simulationManager::start()
  • CollisionGraph::addInteraction(std::shared_ptr, std::shared_ptr, CollisionDetection::Type, CollisionHandling::Type, CollisionHandling::Type) to CollisionGraph::addInteraction(std::shared_ptr())
  • DynamicalModels now have default solvers

Contributors Venkata Sreekanth Arikatla, Andrew Wilson, Jianfeng Yan, Aaron Bray, Sankhesh Jhaveri, Johan Andruejol

Release 2.0.0

Announcement: iMSTK 2.0.0

This release adds major features for the physics and rendering modules. Parallel support is also added. Major improvements to the CMake build and install steps have been implemented. Many modules have been refactored for clarity and to reduce reducdency.

For more information, visit our website: http://www.imstk.org/

New Features

  • Rigid body dynamics with Physx backend
  • Debug rendering support
  • Octree-based collision detection
  • Multithreading support (using Intel TBB)
  • Smoothed Particle Dynamics for fluids
  • Customizable on-screen text
  • New simulation modes for simulation manager to allow flexibility
  • VR support for Vulkan backend
  • Particle systems for visual effects
  • Lens distortion for use in VR (Vulkan backend)
  • Vulkan renderer compressed texture support

Improvements or Refactoring

  • Improved CMake build and install
  • Enable compiler flags to report W4-level warnings
  • Remove cyclic dependencies between modules
  • Add color to stdout on windows
  • Refactored Position based dynamics classes
  • Refactor rendering specification using visual model
  • Modifications to the code formatting rules
  • Refactor geometry mapping classes
  • Remove unused files and classes
  • Disable building tests for external dependencies
  • Update the vrpn to the latest to fix linux build
  • Update VTK backend to 8.2.0
  • Remove ODE external library

Bug Fixes

  • Fix undefined behaviour of PBDModelConfig
  • Use vtkPolyData instead of vtkPolyLine for VTKdbgLinesRenderDelegate
  • Fix compilation with BUILD_EXAMPLES Off

Contributors for this release

Venkata Sreekanth Arikatla, Nghia Truong, Nicholas Boris Milef, Aaron Bray, Ruiliang Gao, Johan Andruejol

Release 1.0.0

Announcement: iMSTK 1.0.0

We are introducing Interactive Medical Simulation Toolkit (iMSTK)-a free & open source software toolkit written in C++ that aids rapid prototyping of interactive multi-modal surgical simulations.

For more information, visit our website: http://www.imstk.org/

Features

  • Cross-platform build
  • CMake automated superbuild
  • Test infrastructure (via google test)
  • Continuous Integration
  • Scene and simulation management
  • Vulkan and VTK rendering backends
  • Advanced rendering: Physically based rendering, Subsurface scattering, Decals, Shadows,
  • Graphical overlays (Vulkan backend only)
  • Standard user controls (pause, run, exit, pan-zoom-rotate)
  • SteamVR support including (Oculus, HTC Vive (VTK backend only)
  • Finite elements (linear, co-rotational, non-linear formulations)
  • Position based dynamics
  • Penalty and constraint-based collision handling
  • Linear solvers: Direct and Iterative matrix solvers
  • Non-linear Newton solver
  • Collision detection (CCD, Spatial hash based collision, narrow phase queries)
  • External device support (VRPN)
  • Support for standard mesh input formats (.obj, .dae, .fbx., .stl, .vtk, .vtu, etc.)
  • Asynchronous logging (using g3log)
  • Audio support
  • Haptic rendering (OpenHaptics)

Contributors for this release

Venkata Sreekanth Arikatla, Alexis Girault, Nicholas Boris Milef, Ricardo Ortiz, Thien Nguyen, Rachel Clipp, Mohit Tyagi, Samantha Horvath, Jean-Baptiste Vimort, Sean Radigan, David Thompson, Dženan Zukić, Mayeul Chassagnard, Tansel Halic, Hina Shah, Andinet Enquobahrie, Hong Li, Shusil Dangi