iMSTK issueshttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues2022-12-15T09:20:02-05:00https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/488Update build instructions for CSharp wrappers2022-12-15T09:20:02-05:00Shreeraj JadhavUpdate build instructions for CSharp wrappersBuilding with CSharp Wrappers enabled may not be trivial for new developers. Update build instructions to include instructions to install swig, installation of .NET framework and SDK.
Additionally, it appears that the build specifically...Building with CSharp Wrappers enabled may not be trivial for new developers. Update build instructions to include instructions to install swig, installation of .NET framework and SDK.
Additionally, it appears that the build specifically requires .NET framework 4.6.1 which is out of support now. Is this something that is governed by Unity or can we bump the required framework to the latest one or at least one that is under support. See this page for support info from Microsoft:\
https://dotnet.microsoft.com/en-us/download/visual-studio-sdkshttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues/487Redundant classes / files between Examples2022-12-05T16:31:27-05:00Shreeraj JadhavRedundant classes / files between ExamplesThere are certain classes and files that are duplicates of each other in the Examples (particularly related to Needles).
For e.g.:
1. NeedleInteraction.cpp
1. NeedleInteraction.h
1. NeedlePbdCH.h
1. NeedleRigidBodyCH.cpp
1. NeedleRigidBo...There are certain classes and files that are duplicates of each other in the Examples (particularly related to Needles).
For e.g.:
1. NeedleInteraction.cpp
1. NeedleInteraction.h
1. NeedlePbdCH.h
1. NeedleRigidBodyCH.cpp
1. NeedleRigidBodyCH.h
There maybe small differences between them. These files/classes should be refactored to remove duplication.
![image](/uploads/b34c9ed0a48caf1f14144b6141ece38f/image.png)https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/475Componentize ScreenCaptureUtility2022-10-13T09:12:55-04:00Andrew WilsonComponentize ScreenCaptureUtilityScreenCaptureUtility could move to a Behaviour. It is currently integrated into VTKViewer itself. Can help debloat VTKViewer and the VTKRenderer a bit more.ScreenCaptureUtility could move to a Behaviour. It is currently integrated into VTKViewer itself. Can help debloat VTKViewer and the VTKRenderer a bit more.https://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/410Shared Libraries2022-05-12T22:24:02-04:00Andrew WilsonShared LibrariesA number of attempts over the years have been made to produce shared libraries for iMSTK. I'm adding this issue here moreso to document its difficulty from experience of trying it, not so much to suggest it should be done. If one wanted ...A number of attempts over the years have been made to produce shared libraries for iMSTK. I'm adding this issue here moreso to document its difficulty from experience of trying it, not so much to suggest it should be done. If one wanted to it would require huge changes.
1.) iMSTK exposes a significant amount of members from dependent libraries. Namely template ones such as the STL & Eigen. These libraries do not export classes as they are template libraries. You cannot export a class you do not even know the size of. So anywhere something like std::vector<int> appears in a public or protected interface we have a problem. Solutions:
- Export a specialization of the template class, ie: export std::vector<int>. This then locks in the ABI/binary interface (and things like size). Also presents dangers if you took it to another system whose ABI was different, for instance int was not the same size.
- Hide members that you can. By using pimpl where possible or make private and hide warning.
- Wrap the member class & export wrapped interface.
- Provide alternative method for passing if it just appears in a function (for ex: double* instead of a Vec2d).
2.) Singletons & statics. iMSTK has Logger as singleton & a few statics for ids. The concept of these get tricky when you think about a library that can be loaded at runtime, particular on windows for which the library can literally be shared. When should we create a second instance of the logger? When should we use the existing one?
- Conversely we have an issue if you try to link iMSTK (statically built) into two separate dll's. Then use both those dll's. You may experience issues regarding its singleton and statics.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/408Move Examples To Unit Tests2022-06-02T15:33:56-04:00Andrew WilsonMove Examples To Unit TestsA number of examples we have don't serve well as examples. As we gain more medically relevant examples, these are become less useful to have here. In particular, none of these are interactive.
- [x] RCM
- [x] FastMarch
- [ ] Geometry...A number of examples we have don't serve well as examples. As we gain more medically relevant examples, these are become less useful to have here. In particular, none of these are interactive.
- [x] RCM
- [x] FastMarch
- [ ] GeometryTransforms
- [ ] GeometryProcessing
- [ ] ObjectControllerDummyClient
- [ ] Audio
- [ ] ConvertVTKToVega
- [x] TaskGraph
- [ ] TaskGraphTiming
- [ ] TaskGraphConfigure
- [ ] CreateEnclosingMesh
- [ ] OctreeIntersection
- [x] PbdClothCollision
Additionally examples take the longest amount of time in the imstk build so cutting down on them is nice (note tests tend to share binaries resulting in slightly faster builds). It's also nice to provide a set of concise & convincing examples.Andinet enquobahrieAndinet enquobahriehttps://gitlab.kitware.com/iMSTK/iMSTK/-/issues/390PbdTissueSurfaceNeedleExample Needs Custom Tangents or Split Faces2022-06-01T16:25:04-04:00Andrew WilsonPbdTissueSurfaceNeedleExample Needs Custom Tangents or Split FacesThe sharp edges & natural typical approach to computing tangents leads to bad tangents on the edges of the tissue block we use in these examples which causes the texture to lighten on the sides. Solution would be to just split the mesh u...The sharp edges & natural typical approach to computing tangents leads to bad tangents on the edges of the tissue block we use in these examples which causes the texture to lighten on the sides. Solution would be to just split the mesh up on those sharp edges.
![image](/uploads/9c3d29b220cb5bd28764c761a0ef4d90/image.png)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/377Consolidate CMake2022-04-10T20:01:27-04:00Andrew WilsonConsolidate CMake - [x] Consolidate usage of GLOB or no GLOB
- [ ] Consolidate tabs or 2 spaces
- [ ] Consolidate all uppercase options or not
- [ ] Consolidate usage of ${PROJECT_NAME} or not
There's mixed usage of these things in iMSTKs cmake which... - [x] Consolidate usage of GLOB or no GLOB
- [ ] Consolidate tabs or 2 spaces
- [ ] Consolidate all uppercase options or not
- [ ] Consolidate usage of ${PROJECT_NAME} or not
There's mixed usage of these things in iMSTKs cmake which makes it confusing to work with.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/376Move CreateEnclosingMesh To an imstkGeometryAlgorithm/filter2021-11-19T22:58:45-05:00Andrew WilsonMove CreateEnclosingMesh To an imstkGeometryAlgorithm/filterAs the title states, this somewhat large operation is sitting in a static function in GeometryUtilities. It's actually a set of functions in an attempt to make parts of it more re-useable. It would be nice if this could be moved to a Geo...As the title states, this somewhat large operation is sitting in a static function in GeometryUtilities. It's actually a set of functions in an attempt to make parts of it more re-useable. It would be nice if this could be moved to a GeometryAlgorithm to avoid its large size (also you can optionally link to Filtering in imstk so it slightly decreases library size in many examples as well).https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/371iMSTKData in Innerbuild2022-04-20T09:47:40-04:00Andrew WilsoniMSTKData in InnerbuildiMSTKData is now in the outer build requiring users to rebuild imstk superbuild to update data which can be a lengthy process. It also requires any MRs with new data to use "do: test --clean" instead. Luckily you don't have to update dat...iMSTKData is now in the outer build requiring users to rebuild imstk superbuild to update data which can be a lengthy process. It also requires any MRs with new data to use "do: test --clean" instead. Luckily you don't have to update data often. But moving it to the innerbuild would be preferred.https://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/367Rename SurfaceMesh::flipNormals to SurfaceMesh::reverse, or SurfaceMesh::reve...2022-06-01T16:27:38-04:00Andrew WilsonRename SurfaceMesh::flipNormals to SurfaceMesh::reverse, or SurfaceMesh::reverseWindingSimple change, reminder for later. The issue with flip normals is that it doesn't actually flip normals. It reverses windings.
In fact if you have per vertex normals defined and call flipNormals, expecting the normals to flip. It does n...Simple change, reminder for later. The issue with flip normals is that it doesn't actually flip normals. It reverses windings.
In fact if you have per vertex normals defined and call flipNormals, expecting the normals to flip. It does nothing. Because again, it doesn't flip normals, it reverses windings. Two very different things.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/360Light Runtime Addition/Removal2022-06-01T16:27:05-04:00Andrew WilsonLight Runtime Addition/RemovalLights currently can't be added/removed during runtime.
Workaround: Just add all the lights you need beforehand. Toggle them off if they aren't in use.Lights currently can't be added/removed during runtime.
Workaround: Just add all the lights you need beforehand. Toggle them off if they aren't in use.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/308Keyboard Controls with VR2021-05-02T00:38:30-04:00Andrew WilsonKeyboard Controls with VRNot sure if this constitutes as a bug. A not implemented feature that many would assume would be there. As the title says you do not have keyboard controls when using VR, mostly due to how VTK deals with devices/interactor styles. I beli...Not sure if this constitutes as a bug. A not implemented feature that many would assume would be there. As the title says you do not have keyboard controls when using VR, mostly due to how VTK deals with devices/interactor styles. I believe there is a workaround though.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/307SceneManager has to be running to reset2021-04-30T16:36:56-04:00Andrew WilsonSceneManager has to be running to resetThe SceneManager implements a flag for reset. You call reset, it sets the flag to indicate that it should reset. Then on the next iteration of the scene, if the reset flag is on, it resets.
I assume this is done so other threads can ask...The SceneManager implements a flag for reset. You call reset, it sets the flag to indicate that it should reset. Then on the next iteration of the scene, if the reset flag is on, it resets.
I assume this is done so other threads can ask it to reset.
The issue is, if reset is called while the scene is not running, the flag will never be hit and reset won't happen until you resume.
We need to check if the scene is paused, if so, it is safe to directly reset without the flag.https://gitlab.kitware.com/iMSTK/iMSTK/-/issues/290Camera `setFocalPoint` issue when view direction colinear to up2022-06-01T18:09:30-04:00Harald ScheirichCamera `setFocalPoint` issue when view direction colinear to upset focal point fails without warning when view direction is equal to the implicit up, we can either warn the user when this happens or select a different up directionset focal point fails without warning when view direction is equal to the implicit up, we can either warn the user when this happens or select a different up directionhttps://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.