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)