First post here. I am about to develop a huge application to visualize 3D datasets from different technologies, and I am wondering if I could get some advice to make sure that VTK is the right choice for what I want to do.
Most of the features that need to be developped involves processing and visualizing 3D point clouds and 3D meshes.
Edit: I removed a question for which I found an answer. Any CAD import and export (iges, step) must be done eslewhere. VTK can display them once they are converted to a mesh.
Challenge 2: huge datasets
While most of my datasets are 100 to 200 mb meshes and point clouds, I already have requests to import 100gig datasets. Only a small portion of that data is required at a specific time, but it would be nice to be able to make this data visible in the viewer only when zooming or by using a feature that will make it possible to navigate through the object without deleting useful data, like a smart subsampling. Is that possible with VTK?
What is considered huge today? How far were you able to go with one of today’s good workstations?
Challenge 3: code in Python
My plan is to develop the application in Python because I need to be quick on this project. Is there a big performance limitation of using VTK with Python wrappers compared to do it in C++? All my other algorithms are covered by other compiled Python mathematic modules, so I am thinking that it should be OK since all the intensive tasks will be processed by compiled language. Am I overlooking something?
If you plan to have a huge application then it is better not to start from scratch and not to work alone. It could easily take 10-15 years for a single developer to implement a reasonably good framework for a large application, but if you make a few unlucky design decisions or run out of money then you might never create anything useful. Instead, I would recommend to find an existing successful open-source software in the same domain and contribute to that. This allows you to spend time with working on problems specific to your application instead of wasting time with redeveloping and maintaining basic features. It is also much more fun and motivating to work as a member of a friendly developer community, and you can learn much more.
There are lots of tools in VTK to address such requirements. For example, you can have a look at adaptive mesh refinement (AMR) and level-of-detail (LOD) rendering techniques in VTK and MSVTK.
VTK performance is the same, no matter if you use it from C++ or Python. You can also access most part of VTK data sets as numpy arrays and process them using numpy or various other Python packages. If you need to modify algorithms in VTK or add new ones then you’ll do that in C++.
I think PyVista would be the perfect platform for you - its pure Python and designed for rapid prototyping. If you want to add contributions to PyVista, they are always welcome and if you want to use PyVista as the underlying framework for 3D viz in your new software, then we’d be happy to help you get up and running with PyVista.