2025.07.29 Weekly Meeting

Meeting Notes

DICOMBrowser Integration

vtk-sdk-python-distributions

  • Plan to review and integrate:
    PR #2

Refactoring to Support Improvements to Segment Editor Effects

To eliminate the need to interact with the Qt layer directly, @Thibault_Pelletier proposed enhancing vtkMRMLAbstractViewNode with new properties and mechanisms:

  • New weak pointers:

    • DisplayableManagerGroup
    • RenderWindow
    • Logic (for accessing slice/view logic)
  • New events:

    • ScheduleRender
    • ForceRender

These additions will allow accessing the RenderWindow, DisplayableManager, and associated logic purely through the MRML view node, minimizing dependency on the GUI layer.

Current code example requiring layout manager access:

qMRMLSliceWidget* sliceWidget = layoutManager->sliceWidget(sliceViewName);
if (!d->segmentationDisplayableInView(sliceWidget->mrmlSliceNode()))

// ...

qMRMLSliceWidget* sliceWidget = qobject_cast<qMRMLSliceWidget*>(viewWidget);
if (sliceWidget)
{
  auto* crosshairDisplayableManager =
    vtkMRMLCrosshairDisplayableManager::SafeDownCast(
      sliceWidget->sliceView()->displayableManagerByClassName(
        "vtkMRMLCrosshairDisplayableManager"));
}

SlicerSOFA

Qt6 Styling Discussion

  • @benzwick (in context of Talk2View project) discussed matching the QtQuickControls style to the operating system. See: Qt Docs
  • Post-Qt6 migration, consider experimenting with modern styles like qlementine
  • StyleTester module in the Sandbox extension can be used to test styles interactively.

Support for Boolean Functions in Implicit Functions

  • VTK-related discussion on enabling support for combining implicit functions via boolean logic.
  • See: VTK Discourse post

Proposed API: vtkMRMLScene::GetNodesByClass

@Thibault_Pelletier suggested adding a utility method to retrieve all nodes of a given type with proper type casting:

template <class T>
std::vector<T*> GetNodesByClass(const char* className)
{
  std::vector<vtkMRMLNode*> nodes;
  GetNodesByClass(className, nodes);

  std::vector<T*> typedNodes;
  for (const auto& node : nodes)
  {
    auto castNode = T::SafeDownCast(node);
    if (castNode)
    {
      typedNodes.emplace_back(castNode);
    }
  }
  return typedNodes;
}

Next Step:

  • Create a pull request demonstrating usage of this helper by updating select call sites.