.. _release-notes-21.05: ======================== SMTK 21.05 Release Notes ======================== See also `SMTK 21.04 Release Notes`_ for previous changes. .. _`SMTK 21.04 Release Notes`: smtk-21.04.md Changes to Project Subsystem ============================= A major revision was undertaken to the ``smtk::project`` namespace that is not backward compatible. The previous Project class was hard-coded to a use single attribute resource and one or two model resources. The new Project class is an SMTK resource that can support any number of resources including custom ones, with assigned roles. The new Project class can optionally be scoped to a list of available operations and resource types. New Project instances store and retrieve their contents as atomic operations with the file system. Projects can now be described entirely using Python, making it easier to implement custom project types for different solvers. More information is available in the SMTK user guide and there is also a new `create_a_project tutorial `_. ParaView Related Changes ======================== ParaView-extension pipeline-creation changes -------------------------------------------- We have moved responsibility for creating pqSMTKResource proxies (which are ParaView pqPipelineSource subclasses) from consumers like the VisibilityBadge and operation panel to pqSMTKRenderResourceBehavior. This changes some initialization since proxies will not have an SMTK resource assigned to them at the time many signals are emitted. However, it simplifies things for consumers and fixes an issue where duplicate resources were being created. This adds storage to pqSMTKBehavior to avoid :math:`O(n^2)` computational complexity when many resource-proxies are added to a paraview/modelbuilder client. Note that we use :cxx:`QTimer::singleShot()` to delay creation of the pipeline until outside of the resource-manager observer (to avoid deadlocks but also to avoid duplicate pipelines created by other SMTK-PV behaviors that make empty pipelines (with no SMTK resource until after the resource has been added to the manager). This happens, for example, with ParaView's Fileā†’Open. Finally, because resource proxies may be re-assigned a (different) SMTK resource, we monitor each proxy and update the lookup map as needed. External-facing changes ~~~~~~~~~~~~~~~~~~~~~~~ If you have code external to SMTK that invokes :cxx:`pqSMTKRenderResourceBehavior::instance()->createPipelineSource()`, you should eliminate it, but be aware that you cannot rely on the pipeline source being present or initialized at the time many observers are invoked. Graph Resource Changes ====================== Graph-resource ArcMap --------------------- The graph resource now provides a custom subclass of TypeMap named smtk::graph::ArcMap. This subclass deletes the copy and assignment constructors to prevent modifications to accidental copies of arcs rather than to the resource's arc container. External changes ~~~~~~~~~~~~~~~~ smtk::graph::ResourceBase::ArcSet type-alias was removed and the ArcMap class can now be used directly. If you maintain external code that depends on smtk::graph::Resource, you will need to replace the ResourceBase::ArcSet type-alias with ArcMap (which lives in smtk::graph not smtk::graph::ResourceBase). Software Process Changes ======================== CMake package directory ----------------------- The CMake package directory for SMTK is now in a location that CMake searches by default. This removes the need to do ``-Dsmtk_DIR`` and instead the install prefix can be given in the ``CMAKE_PREFIX_PATH`` variable.