In a VTK pipeline, a vtkActor consumes data from a vtkMapper, and produces data for a vtkRenderer. In this case, we can provide Dataflow support for a vtkActor as both a producer Port and a consumer Port:

namespace boost { namespace dataflow { namespace vtk {

struct vtk_renderer_consumer;

struct vtk_actor_producer
    : public complemented_port_traits<ports::producer,
        dataflow::port_adapter<vtkRenderer, vtk_renderer_consumer, tag>, tag>
{};

struct vtk_mapper_producer;

struct vtk_actor_consumer
    : public complemented_port_traits<ports::consumer,
        port_adapter<vtkMapper, vtk_mapper_producer, tag>, tag>
{};

struct vtk_actor_component_traits
    : public dataflow::fusion_component_traits<
        fusion::vector<
            dataflow::port_adapter<vtkActor, vtk_actor_producer, tag>,
            dataflow::port_adapter<vtkActor, vtk_actor_consumer, tag> >,
        detail::default_map,
        tag>
{
    template<typename Component>
    static typename vtk_actor_component_traits::fusion_ports get_ports(Component &c)
    {
        return typename vtk_actor_component_traits::fusion_ports(c, c);
    }
};

} } } // namespace boost::dataflow::vtk

DATAFLOW_TRAITS_ENABLE_IF(
    T,
    boost::is_base_of<vtkActor BOOST_PP_COMMA() T>,
    vtk::vtk_actor_component_traits)

Next

Setting up a KeyedPort