Below are lists of things we hope to accomplish in SMTK 3.1 and 4.0.
This post is a wiki entry: anyone logged in can (and should) edit it to add new items. You can also post comments below to discuss items in the list.
SMTK 3.1
-
Geometry library. Split
smtk::model::Tessellation
out of smtkCore and put it into a library dependent on VTK-m or VTK. This would let us avoid overhead when processing large models. -
PV Widgets. Improved ParaView widget integration
- bounding boxes provided by sets of model entities and/or entire model resources
- better ties between attributes and widgets so that attribute item initialization can be geometry-aware (note that this is related to the Extended attribute modeling item as that would be one way to accomplish this coupling.
-
Extended attribute modeling. Provide methods to express constraints between attributes and their items. Examples include:
- Suppose we have an integer item named dimension and a group item named coordinate. We might want the coordinate’s
numberOfGroups()
to be constrained to match the value held in dimension. - Suppose we have a modeling operation whose parameter is an attribute. The attribute accepts a clipping plane as a base point and normal that we wish to expose via a ParaView widget. The widget should have its bounds initialized to the bounding box of all the model entities associated to the operation’s attribute.
- Suppose we have an integer item named dimension and a group item named coordinate. We might want the coordinate’s
- Contract tests. SMTK should test its ParaView extensions with contract tests using modelbuilder. We need a way to test the UI components (both ParaView and Qt) as SMTK changes, not just when we advance SMTK inside CMB. This should also help us package and build modelbuilder.
- Asynchronous operations. Preliminary support had to be pulled because of Qt interactions but we should fix this.
- OpenCascade (part 1). Preliminary support for displaying CAD models, perhaps with a few operations.
- Discrete session. Functionality from the discrete session should migrate into the mesh and/or vtk sessions.
- Workflow (part 1). Prototype architecture for modelbuilder to load and select from 1 or more workflows that control (a) which plugins are loaded (b) what operations and other UI elements are available based on the state of resource and operation managers and the application selection.
- Operation UI cleanup and editing UIs. The current operation panel is clunky. At a minimum it should be split into a separate plugin so that when Workflow (part 1) lands it can be omitted. Additionally, we should explore how to allow applications or workflows perform operations in response to direct manipulation rather than indirect operation-panel edits. For example, double-clicking on model entities in the render view might provide a transform widget for placement or might provide handles for changing its shape based on the particular workflow or application.
-
Serialization.
- Current usage of try catch block should be simplified since now nlohmann json provides is_null(), is_array(), and etc API. Though in order to catch json::type_error and json::out_of_range exceptions, try catch block should remain untouched.
- Replace std::exception with nlohman::exception.
- Use smtk logger to report errors or warnings instead of io stream.
- Documentation. Finalize the documentation style.
- Resource Portability. Make it possible to move resource files from one directory to another, and also from one machine to another.
-
Save Model Resource Without Copying Native Model (This might be “back to the future”.) Neil at LANL asked if we can save our .smtk file without making a copy of the model file that was imported when the resource was created, or writing the h5m file in the case of mesh sessions. This will be important when users start scaling to “big” meshes.
- Internally, loading a resource of this type might be the equivalent of re-importing the native file while using the uuids and other meta data in the .smtk file.
- If we can support it, I would also want to store a checksum in the .smtk file, to optionally verify that the native file had not changed.
- It would also be nice to have an option to specify the native filename (path), overriding the path stored in the .smtk file.
- Initialize pqAttributePanel without marking resource as modified. When loading an attribute resource (.smtk file) into modelbuilder, the resource gets marked as modified because each time a qtItem is initialized, it emits a signal because it’s value changed, which ends up setting the resource’s modified flag. Our qt extension needs to be updated to distinguish between changes due to a qtItem being initialized versus edits made by users.
SMTK 4.0
- Split smtkCore. Instead of having one core library, we should have smtkCommon, smtkResource, smtkAttribute, smtkModel, etc.
- Cumulus integration. On top of Asynchronous operations, we should provide a cumulus launcher that can host simulations on HPC and/or cloud resources, including a way to browse long-running, externally-managed operations across restarts of the UI or python interpreter.
- Web integration. Explore ways to tie SMTK’s JSON resources to vtk.js, simput, Jupyter, etc.
- OpenCascade (part 2). More fully featured geometric modeling and meshing of OpenCascade geometry.
- Workflow (part 2). Complete workflows for at least 3 different applications.
- PV Client/Server. Handle ParaView when the server is remote from the client.
- Modes. Add support for modal interaction to paraview and then modelbuilder, starting with selection. Provide (1) the modes themselves which have no explicit UI representation; (2) a toolbar item showing the current mode; and possibly (3) a more involved UI that allows users and/or workflows to switch modes by pushing/popping them onto or out of a stack.
- Sessions. Resurrect rgg session. Also resurrect polygon session (custom operation views for editing polygons required).
-
Cursor classes. Rework
smtk::model::EntityRef
(andsmtk::mesh::Component
and possibly addsmtk::attribute::Cursor
). The idea is to separate the classes that contain state and the classes that query and modify the state. Separating the data and method classes makes serialization/deserialization easier. Having a separate class that performs modifications is desirable as it helps delineate what code modifies resources and will make adding undo/redo easier later. Currently, EntityRef and all its subclasses only hold a weak-pointer to a model resource and a UUID. We can change them to hold a weak-pointer to a model Entity and split them into read-only (e.g.,QueryFace
) and read-write (e.g.,MutableFace
) classes.