iMSTK issueshttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues2022-08-16T15:09:24-04:00https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/460Two-way Suture To Tissue Constraint2022-08-16T15:09:24-04:00Andrew WilsonTwo-way Suture To Tissue ConstraintCurrently we have a constraint that moves a a suture thread line into the tissue. The tissue does not deform with the thread.
Now that we have pbd multi bodies. We can make this two-way and move the tissue with the thread and thread wit...Currently we have a constraint that moves a a suture thread line into the tissue. The tissue does not deform with the thread.
Now that we have pbd multi bodies. We can make this two-way and move the tissue with the thread and thread with the tissue simultaneously.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/449Relative Velocity Virtual Coupling2022-08-29T16:03:02-04:00Andrew WilsonRelative Velocity Virtual CouplingThe virtual coupling in Otaduy's paper accounts for device velocity, relative velocity in damping. This doesn't make massively noticeable effects but would improve it.
Unfortunately many devices and APIs don't provide velocity for you m...The virtual coupling in Otaduy's paper accounts for device velocity, relative velocity in damping. This doesn't make massively noticeable effects but would improve it.
Unfortunately many devices and APIs don't provide velocity for you meaning you must compute the velocity yourself. What's more tricky is that it is dependent on dt and the device updates on a separate thread with differing update rates.Jacob MooreJacob Moorehttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues/431Multi Channel Texturing2022-06-02T01:39:01-04:00Andrew WilsonMulti Channel TexturingIt appears as though VTK **might** support multi channel texturing, given some googling history. Especially given this commented out line of code in our code: https://gitlab.kitware.com/iMSTK/iMSTK/-/blob/master/Source/RenderingVTK/Rende...It appears as though VTK **might** support multi channel texturing, given some googling history. Especially given this commented out line of code in our code: https://gitlab.kitware.com/iMSTK/iMSTK/-/blob/master/Source/RenderingVTK/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp#L571
Multi channel texturing is useful as it allows multiple sets of texture coordinates on an object with different textures that are then blended together. This is particular useful for cutting where cut faces almost always have another texture. But also other effects & general texture changes.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/430Shape Matching2022-06-02T01:22:31-04:00Andrew WilsonShape MatchingShape matching can be used globally, locally, or for plasticity.
Shape Matching and moreso Local Shape Matching (see [A Survey on Position Based Dynamics, 2017](http://mmacklin.com/2017-EG-CourseNotes.pdf))Shape matching can be used globally, locally, or for plasticity.
Shape Matching and moreso Local Shape Matching (see [A Survey on Position Based Dynamics, 2017](http://mmacklin.com/2017-EG-CourseNotes.pdf))https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/422Examples Website2022-06-01T15:58:24-04:00Andrew WilsonExamples WebsiteThis tends to be the first point of contact for many with VTK https://kitware.github.io/vtk-examples/site/Cxx/ . https://kitware.github.io/vtk-examples/site/Cxx/
It would not be too hard to add a script that adds a description + a pictu...This tends to be the first point of contact for many with VTK https://kitware.github.io/vtk-examples/site/Cxx/ . https://kitware.github.io/vtk-examples/site/Cxx/
It would not be too hard to add a script that adds a description + a picture + code to an html webpage for iMSTK.
See https://gitlab.kitware.com/iMSTK/iMSTK/-/blob/master/.gitlab-ci.yml . Simply call the script to generated html, then move it to the public/ directory and it will be hosted.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/391Assimp 5.1.4 Upgrade2022-06-01T17:28:30-04:00Andrew WilsonAssimp 5.1.4 UpgradeLooks like Assimp went through some bugfixes recently including support for the latest blender file type (big blend changes over 2.8-2.9) this could greatly improve workflow (at least for prototyping things quickly). Hopefully some other...Looks like Assimp went through some bugfixes recently including support for the latest blender file type (big blend changes over 2.8-2.9) this could greatly improve workflow (at least for prototyping things quickly). Hopefully some other things are ironed out now that v5.0 is more mature as there are many file type bugs. Especially when you get into the nitty gritty details of something like animation.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/387SurfaceMeshToMeshCD2022-06-01T16:15:39-04:00Andrew WilsonSurfaceMeshToMeshCDWe currently have ClosedSurfaceMeshToMeshCD. This only works for closed surfaces. It is good for deep contacts.
We do not have the more traditional SurrfaceMeshtoMeshCD, which only locally gives resolution. IE: It checks intersection be...We currently have ClosedSurfaceMeshToMeshCD. This only works for closed surfaces. It is good for deep contacts.
We do not have the more traditional SurrfaceMeshtoMeshCD, which only locally gives resolution. IE: It checks intersection between all the elements (triangles or lines). Then computes resolutions of those elements. The hope being that only small overlaps occur at small dts and if deep contacts happen they would eventually resolve (objects could get stuck). The pro of this method is that it is easily spatially partitioned whereas ClosedSurfaceMeshToMeshCD is not as it tries to find global resolution.
This is usually done with a clipping method. Such method can be found in Bullet or ODE.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/385Uncrustify Linux Support2022-06-02T19:35:42-04:00Andrew WilsonUncrustify Linux SupportI believe linux users currently have to manually run uncrustify with the list file rather than using the target.
`./install/bin/uncrustify
--replace --no-backup -c
../iMSTK/Utilities/Uncrustify/iMSTKUncrustify.cfg -F
Innerbuild/uncrusti...I believe linux users currently have to manually run uncrustify with the list file rather than using the target.
`./install/bin/uncrustify
--replace --no-backup -c
../iMSTK/Utilities/Uncrustify/iMSTKUncrustify.cfg -F
Innerbuild/uncrustify.list`
Note: Uncrustify has an issue where it reports the incorrect file as failing in some cases with list files. A bat file is used on windows to recursively do it individually.Andinet enquobahrieAndinet enquobahriehttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues/370CDDebugObject Queue instead of Clear Rates2022-06-01T16:20:58-04:00Andrew WilsonCDDebugObject Queue instead of Clear RatesThe CDDebugObject is an object that quickly adds/removes geometry to represent collision data (contacting faces, edges, etc). This is for debug purposes.
Unfortunately when you have a simulation running at 1000 updates a second its hard...The CDDebugObject is an object that quickly adds/removes geometry to represent collision data (contacting faces, edges, etc). This is for debug purposes.
Unfortunately when you have a simulation running at 1000 updates a second its hard to see whats going on. One might slow it down, advance by key, or one of the solutions currently provided is a "clear rate". Which clears the collision data visual representations every N frames. So you can see the last say, 50 frames.
A more intuitive implementation would be a queue. Such that you can store the last 50 collision data representations. Unfortunately this is a bit tricky to implement efficiently.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/343Inverse SDF Collision Detection2021-07-26T11:52:50-04:00Andrew WilsonInverse SDF Collision DetectionWhilst we have static SDF collision detection rigid SDF collision detection is also relatively easy. Supply the CD with a rigid transform and we can inverse transform back into the SDF for CD. This should be as simple as applying the cur...Whilst we have static SDF collision detection rigid SDF collision detection is also relatively easy. Supply the CD with a rigid transform and we can inverse transform back into the SDF for CD. This should be as simple as applying the currently set geometries transform inverse to every point before sampling in the SDF for ImplicitGeometryToPointSetCD.
We can also do it for tetrahedral meshes by inversing the deformation of the tetrahedron.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/342Voronoi Based Static Collision Detection2021-07-25T22:22:58-04:00Andrew WilsonVoronoi Based Static Collision DetectionVoronoi's can be computed for static geometry, inversely mapped for rigid, or inverse transformed via tetrahedron deformation.
These can quickly give closest features during collision detection.Voronoi's can be computed for static geometry, inversely mapped for rigid, or inverse transformed via tetrahedron deformation.
These can quickly give closest features during collision detection.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/341Add Primitive Static Collision Detections2022-09-29T13:09:44-04:00Andrew WilsonAdd Primitive Static Collision Detections - Some of the less useful ones are not listed.
- This only details primitive (cylinder, capsule, sphere, oriented box, plane) collisions.
SurfaceMesh (most useful and difficult):
- [x] SurfaceMeshToSphereCD
- [x] SurfaceMeshToCapsuleC... - Some of the less useful ones are not listed.
- This only details primitive (cylinder, capsule, sphere, oriented box, plane) collisions.
SurfaceMesh (most useful and difficult):
- [x] SurfaceMeshToSphereCD
- [x] SurfaceMeshToCapsuleCD
- Easiest of the surface mesh ones.
- [ ] SurfaceMeshToCylinderCD (involves both curved surface and sharp edges)
- [ ] SurfaceMeshToOrientedBoxCD
LineMesh:
- [x] LineMeshToSphereCD (easy) (do this before capsule)
- [x] LineMeshToCapsuleCD (easy) (useful)
- [ ] LineMeshToCylinderCD
- [ ] LineMeshToOrientedBoxCD
PointSet:
- [x] PointSetToCapsuleCD
- [x] PointSetToOrientedBoxCD
- [x] PointSetToPlaneCD
- [x] PointSetToSphereCD
- [x] PointSetToCylinderCD
- [x] ImplicitGeometryToPointSetCD
- [x] ImplicitGeometryToPointSetCCD
Primitive v Primitive (these tend to be less common in medical scenarios):
- [x] SphereToSphereCD
- [x] SphereToCylinderCD
- [x] BidirectionalPlaneToSphereCD
- [x] UnidirectionalPlaneToSphereCD
- [x] CapsuleToCapsuleCD
- [x] CapsuleToSphereCD (easy, closest point on capsule edge to sphere center)
- [x] CapsuleToPlaneCD (easy, closest point on capsule edge to plane)
- [ ] CylinderToPlaneCD
- [ ] CylinderToOrientedBoxCD
- [ ] CylinderToCylinderCD
... Other Permutations ...
... BidirectionalPlane Permutations ...
These can be added via unit tests (see existing CD unit tests). You don't need to implement them in some fancy simulation or verify against models, just check the CollisionData output. An accompanying example or interactive visual test for those complex ones might be useful. CollisionDataDebugObject may be used to draw contact, see BoxToBoxTest in Examples/CollisionDetection.
Do not add any spatial acceleration. That will be patterned out later for all CDs.
See CollisionUtils.h for a place to put all your collision/intersection functions. There are a number of existing basic ones provided: closest point on two lines. Closest point on triangle.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/339Add a light controller2021-11-23T17:05:01-05:00Sreekanth ArikatlaAdd a light controllerAdd a light controller similar to the scene object controller where the user can attach a device tracker to the light to update its poseAdd a light controller similar to the scene object controller where the user can attach a device tracker to the light to update its posehttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues/330Add shadows when vtk fix is ready2022-06-02T01:43:07-04:00Sreekanth ArikatlaAdd shadows when vtk fix is readyWhen vtk fixes its shadows feature, add back shadows in imstk.
The shadows appear to be broken but not for static/single renders.When vtk fixes its shadows feature, add back shadows in imstk.
The shadows appear to be broken but not for static/single renders.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/320Map Refactor (Ability to have N Geometry Maps)2021-11-23T17:05:05-05:00Andrew WilsonMap Refactor (Ability to have N Geometry Maps)Currently DynamicObjects have a physicsToVisualMap, physicsToCollidingMap, ...
It would be much better if we just generically had N maps under a SceneObject (maybe even move them if we later get to an entity component architecture).
Th...Currently DynamicObjects have a physicsToVisualMap, physicsToCollidingMap, ...
It would be much better if we just generically had N maps under a SceneObject (maybe even move them if we later get to an entity component architecture).
There is then also contextual information of the maps. ie: The physicsToCollidingMap must be updated before fetching the latest colliding geometry (which could be done at any point, or even multiple times are differing states). With N maps, if you have the collision geometry, you should be able to quickly deduce which map corresponds to it. ie: For all geometry maps { update map that produces said geometry }
Frequently I have a tool with multiple parts where I need N mappings. These then become useless. What I normally do is subclass and implement update of the object, or even place it elsewhere in the objects pipeline using the task graph.
```
update() override
{
for all maps
update maps
}
```
Or even for a simple isometric one:
```
update() override
{
// Transform A, B, and C along with D
geometryA->setTransform(geometryD->getTransform());
geometryB->setTransform(geometryD->getTransform());
geometryC->setTransform(geometryD->getTransform());
}
```
This works and is nice but then physicsToVisualMap, physicsToCollidingMap, etc start to really serve no purpose.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/282Functions to Test if VR device is present2022-01-07T01:08:35-05:00Andrew WilsonFunctions to Test if VR device is presentWe should be able to check and alert users of this when they run VR enabled examples. This is likely a function in VTK. If not through VTK, definitely OpenVR.We should be able to check and alert users of this when they run VR enabled examples. This is likely a function in VTK. If not through VTK, definitely OpenVR.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/246Expose Material Properties from veg into config2020-12-08T10:18:36-05:00Andrew WilsonExpose Material Properties from veg into configCurrently the material properties in FEM are specified at the bottom of the veg file. Recently a config struct was added to FEM to allow users to use FEM without a file to configure it. Users should be able to fully configure it with jus...Currently the material properties in FEM are specified at the bottom of the veg file. Recently a config struct was added to FEM to allow users to use FEM without a file to configure it. Users should be able to fully configure it with just the struct (no file needed).