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