SMTK 21.07 Release Notes¶
See also SMTK 21.05 Release Notes for previous changes.
Tracking of registrations between registrars and managers should now only be
done through a held
Registry instance as returned by the
Registrar::addToManagers method. In the future, direct access to
Registrar::unregisterFrom will be disabled
Registry RAII object will be the only way to manage registrations.
This ensures that registrations are accurately tracked.
SMTK Resource and Component Changes¶
Expanding Default Property Types on SMTK Resources/Components¶
The default set of Properties now include int, bool, std::vector<int> and std::vector<bool>.
Attribute Resource Changes¶
Preserve State Information¶
SMTK will now preserve state information that pertains to Attribute Resource views. The information persists even after the resource has been closed, assuming the resource was saved before it was closed.
The active advance level.
The active attributes in attribute views.
The active tab in a group views.
Fix isValid Check w/r to an Attribute’s Associations¶
If an attribute had the following conditions:
Its association item set to have its NumberOfRequiredValues > 0
Its Resource had active categories
All of its items where validity set with the exception of its association item
Then its isValid() would mistakenly return true, due to the fact that its association item (which does not have categories set), would be excluded from the check.
Now the association item is forced to be by turning off category checking for that item. By doing this, we are saying that if the attribute itself passes its category checks, then so does its association item.
Added the ability to ignore an item¶
There are times when a workflow may consider an item no longer relevant based on choices the user has made. In order model this behavior two methods have been added to Item:
void setIsIgnored(bool val);
bool isIgnored() const;
If setIsIgnored is passed true, then the item’s isRelevant() method will return false, regardless of any other facts. This value is persistent and is supported in both JSON and XML formats.
Changes to Attribute and Item isRelevant Methods¶
Both Attribute::isRelevant and Item::isRelevant have been modified to optional do advance level checking.
bool isRelevant(bool includeCategoryChecks = true, bool includeReadAccess = false,
int readAccessLevel = 0) const;
If includeCategoryChecks is set to true, then the Attribute or Item must pass their category checks based on the resource’s Active Category Settings.
If includeReadAccess is set to true then an Attribute is relevant iff at least one of it’s children has a read access level <= readAccessLevel.
In the case of an Item, if includeReadAccess is true then it must have it’s read access level <= readAccessLevel
Note that this modification does not require any code change in order to preserve previous functionality.
Added hasRelevantChildren method to GroupItem¶
GroupItem now has a method to test if at least on of its children items passes their category checks and read access checks passed on the caller’s requirements.
bool hasRelevantChildren(bool includeCategoryChecks = true, bool includeReadAccess = false,
int readAccessLevel = 0) const;
Changing ReferenceItem::AppendValue to Support Append Non-Unique¶
Added a nonUnique parameter that defaults to false
This avoids unnecessarily having to scan the entire item when duplicates are allowed
Item now also tracks the location of the first unset value in order to speed up the append process
Model Resource Changes¶
Model resource transcription¶
SMTK now provides a way to avoid an O(n^2) performance
issue when embedding many cells into a model;
previously, each insertion would perform a linear search
of pre-existing relationships. However, many operations
(especially those in the importer group) will not attempt
to re-insert existing relationships. The
methods now accept a boolean indicating whether to bypass
the linear-time check.
The VTK session provides a static method,
Session::setEnableTranscriptionChecks(), for operations
to enable/disable this behavior during transcription.
SMTK Project Changes¶
Changes to smtk::project::ResourceContainer API¶
Changes to the
smtk::project::ResourceContainer API to allow for non-unique roles
to be assigned to Resources in a project.
Deprecated version >= 21.6¶
smtk::project::ResourceContainer::getByRole -> smtk::resource::ResourcePtr
smtk::project::ResourceContainer::findByRole -> std::set<smtk::resource::ResourcePtr>
Other SMTK Core Changes¶
SMTK now provides an enumeration,
smtk::common::Visit, that visitor lambdas
may return to indicate whether visitation should continue (
or stop (
This enum is much easier to use than simply returning a
bool as developers
frequently have trouble remembering which value (true or false) corresponds to
which iteration behaviour.
This is currently only used by
smtk::task::Task::visit(), but will be
used more widely in the future.
SMTK now provides a task subsystem for representing user-actionable tasks in a workflow. See the task-system documentation for more information about how to use this subsystem.
Qt UI Changes¶
Removing Empty Frames in qtGroupItem¶
Using GroupItem’s hasRelevantChildren method, qtGroupItem will now hide it’s frame if there are no children to be displayed.
Filter Advance Attribute Definitions¶
Attribute views will now hide any attribute definitions that have an advance level that is higher than the user’s active advance level. This enables the Attribute View to hide itself if all its definitions should be hidden from the user.
Hide disabled attribute resources¶
The Attribute Editor panel will now first check to see if an Attribute Resource is enabled before attempting to display it. Telling the Attribute Editor panel to display a disabled Attribute Resource will be the equivalent to telling the panel to display a nullptr. The panel will be reset if it was currently display any widgets.
Improving UI handling of Signal Operations¶
Originally the qtAttributeView class would ignore the Signal Operation since typically it would be the only Qt UI element that would be creating, removing, and changing the Attributes it is displaying. However, this prevented the UI designer from having AttributeViews that displayed the same information from being used in Selector Views or have different AttributeViews overlap their contents (for example one View could be displaying Fluid Boundary Conditions, while another was displaying all Boundary Conditions)
This change now encodes the address of the View that initiated the change so that we can avoid a View from being updated via a Signal Operation that it itself initiated.
qtAttributeView has now been updated to only ignore Signal Operations that it triggered.
Supporting smtk.extensions.attribute_view.name_read_only in qtAttributeViews¶
You can now indicate that an Attribute’s name should not be modified by creating a bool Property on the Attribute called: smtk.extensions.attribute_view.name_read_only and setting its value to true.
qtAttributeView will now properly examine modified attributes to see if they have smtk.extensions.attribute_view.name_read_only property or if their names had been changed.
Changes to Polygon Session¶
ImportPPG operation has been added to the polygon session
for creating model resources from a simple text file input.
The “ppg” (Planar PolyGon) file format is a simple data format
that specifies 2-D geometry as a list of vertex coordinates and
polygon face definitions, with vertices connected implicitly by
straight-line model edges. Documentation is in the “Session: Polygon”
section of the SMTK user guide.
ImportPPG operation is provided as a convenience for exploring
CMB’s many capabilities as well as for testing, debug, and demonstration.
To use this feature from modelbuilder, the “File -> New Resource” menu
item now includes an option “Polygon -> Planar Polygon Model from PPG
Removed Previously Deprecated API¶
The following deprecated methods have been removed:
Categories::Set::mode has been replaced with Categories::Set::inclusionMode
Categories::Set::setMode has been replaced with Categories::Set::setInclusionMode
Categories::Set::categoryNames has been replaced with Categories::Set::includedCategoryNames
Categories::Set::set has been replaced with Categories::Set::setInclusions
Categories::Set::insert has been replaced with Categories::Set::insertInclusion
Categories::Set::erase has been replaced with Categories::Set::eraseInclusion
Categories::Set::size has been replaced with Categories::Set::inclusionSize
ReferenceItem::objectValue has been replaced with ReferenceItem::value
ReferenceItem::setObjectValue has been replaced with ReferenceItem::setValue
ReferenceItem::appendObjectValue has been replaced with ReferenceItem::appendValue
ReferenceItem::setObjectValues has been replaced with ReferenceItem::setValues
ReferenceItem::appendObjectValues has been replaced with ReferenceItem::appendValues
PhraseModel::addSource now accepts const smtk::common::TypeContainer&
PhraseModel::removeSource now accepts const smtk::common::TypeContainer&
Software Process Changes¶
Because of CMake policy CMP0115 (source file extensions must be explicit),
when passing test names to the
smtk_add_test macro, be sure to include
the filename extension (such as
Deprecate Python 2.x support¶
Python 2.x reached its end of life in January 2020. SMTK has deprecated its Python 2 support and will remove it in a future release.