Program Listing for File vtkMRMLLayerDMPipelineCreateHelper.h

Return to documentation for file (MRMLDM/vtkMRMLLayerDMPipelineCreateHelper.h)

#pragma once

// Layer DM includes
#include "vtkMRMLLayerDMPipelineI.h"

// VTK includes
#include <vtkSmartPointer.h>

namespace layer_dm
{
template <typename TExpView, typename TExpNode, typename TPipeline, typename... Rest>
vtkSmartPointer<vtkMRMLLayerDMPipelineI> TryCreateForView(vtkMRMLAbstractViewNode* viewNode, vtkMRMLNode* node)
{
  if (TExpView::SafeDownCast(viewNode) && TExpNode::SafeDownCast(node))
  {
    auto pipeline = vtkSmartPointer<TPipeline>::New();
    pipeline->SetViewNode(viewNode);
    pipeline->SetDisplayNode(node);
    return pipeline;
  }
  if constexpr (sizeof...(Rest) > 0)
  {
    return TryCreateForView<TExpView, Rest...>(viewNode, node);
  }
  return nullptr;
}

template <typename TExpView, typename TExpNode, typename TPipeline, typename... Rest>
vtkSmartPointer<vtkMRMLLayerDMPipelineI> TryCreate(vtkMRMLAbstractViewNode* viewNode, vtkMRMLNode* node)
{
  if (auto pipeline = TryCreateForView<TExpView, TExpNode, TPipeline>(viewNode, node))
  {
    return pipeline;
  }
  if constexpr (sizeof...(Rest) > 0)
  {
    return TryCreate<Rest...>(viewNode, node);
  }
  return nullptr;
}
}; // namespace layer_dm