SMTK 21.10 Release Notes

See also SMTK 21.09 Release Notes for previous changes.

SMTK Common Changes

Observers and debugging

Now smtk::common::Observers takes a second template parameter: a boolean indicating whether to print debug messages or not. This does away with the previous macro (which printed messages for all observers – resource, operation, etc.) in favor of messages that can be enabled for a single specialization. See the Debugging tips and tricks section of the user’s manual for more information.

Attribute Resource Changes

Expanding Attribute Resource’s Query Grammar

Attribute Resource’s queryOperation now uses a Pegtl-based approach which now provides the following benefits:

  • In addition to querying on Attribute Type, you can now also query based on Property and Property Value

  • Type Query can now include Regular Expressions.

See the `attribute filter documentation`_ for more details and examples.

Qt UI Changes

New qtComponentAttributeView Replacing qtModelEntityAttributeView

This new class expands the capabilities of the old class by now supporting Components of any Resources not just Model Resources.

Also there is no longer a need to specifier the filter type. The View will look at the association rule associated with the Attribute Definition specified in the view configuration. If more than one Definition is specified, then the first one is chosen.

As a result the new constraints to using this View are: * The Attribute Definition(s) in the configuration must contain the association rule to be used to determine which Resource Components need to be attributed * If more than one Attribute Definition is listed, then the first one’s association rule will be used.

In addition the following improvements have been made:

  • Selection of the Type of Attribute via the ComboBox no longer requires any button press after the selection has been made

  • Also addressed a bug related to the View being updated when selecting a different attribute to be assigned to the SMTK component. The symptom was that instead of accepting the requested type, the View would instead display “Please Select” indicating that the component had no attribute associated with it. The reason was due to the fact that the View was being updated via the call to removeAttribute prior to the new attribute being created. The fix was to postpone calling that method until after the new attribute was in place.

How to refer to qtComponentAttributeViews in a ViewConfiguration

Setting the “Type” to ComponentAttributeView will cause the creation of a qtComponentAttributeView. Note The “ModelEntity” Type will still be supported and will result in the creation of a qtComponentAttributeView.

  <View Type="ComponentAttribute" Title="Surface Properties">
      <Att Type="SurfaceProperty" />

Improving qtAssociation2ColumnWidget’s Operation Handler

The original code would cause a large number of refreshes due to the fact it merely would see if the were any resource changes. The new logic is a bit more intelligent and will only cause a refresh if any of the following conditions happen:

  • A modified component is either the widget’s attribute or can be associated with the widget’s attribute

  • A deleted component could have been associated with the widget’s attribute

  • A created component could be associated with the widget’s attribute

The result should be a more responsive UI.

SMTK’s New String Token Support

String token classes

SMTK now provides a smtk::string::Token class for working with tokenized strings. See the user’s guide section on string tokens for more information.

SMTK Software Process Changes

Dynamic initialization in plugins

The CMake macro SMTK provides to create plugins now uses a new feature in ParaView to ensure that plugins are initialized properly in both Qt-based GUI applications and python interpreters.

This should not require any changes to your code; it simply changes the code generated by the smtk_add_plugin() macro. Instead of generating a ParaView plugin with an automatically-generated pqAutoStartInterface class, it generates a ParaView plugin with a vtkPVDynamicInitializerPluginInterface class which calls a free function to initialize the plugin’s registrars.