8 #ifndef VTKWRITER_GRIDS_HPP_
9 #define VTKWRITER_GRIDS_HPP_
11 #include <boost/mpl/pair.hpp>
12 #include "VTKWriter_grids_util.hpp"
20 template <
typename Gr
id,
typename St>
25 typedef Grid value_type;
27 ele_g(
const Grid &
g,
const Point<Grid::dims,St> &
offset,
const Point<Grid::dims,St> & spacing,
const Box<Grid::dims,St> & dom)
28 :
g(g),
offset(offset),spacing(spacing),dom(dom)
38 Point<Grid::dims,St> spacing;
40 Box<Grid::dims,size_t> dom;
56 template<
typename ele_g,
typename St>
63 const openfpm::vector_std< ele_g > & vg;
70 prop_out_g(std::string & v_out,
const openfpm::vector_std< ele_g > & vg)
78 typedef typename boost::mpl::at<typename ele_g::value_type::value_type::type,boost::mpl::int_<T::value>>::type ptype;
86 v_out +=
"SCALARS domain float\n";
89 v_out +=
"LOOKUP_TABLE default\n";
92 for (
size_t k = 0 ; k < vg.size() ; k++)
95 auto it = vg.get(k).g.getIterator();
100 if (vg.get(k).dom.isInside(it.get().toPoint()) ==
true)
121 template <
typename pair>
125 openfpm::vector< ele_g<typename pair::first,typename pair::second> >
vg;
137 for (
size_t i = 0 ; i < vg.size() ; i++)
139 tot += vg.get(i).g.size();
158 v_out +=
"VERTICES " + std::to_string(get_total()) +
" " + std::to_string(get_total() * 2) +
"\n";
178 v_out +=
"POINTS " + std::to_string(get_total()) +
" float" +
"\n";
190 std::stringstream v_out;
194 for (
size_t i = 0 ; i < vg.size() ; i++)
197 auto it = vg.get(i).g.getIterator();
200 Box<pair::first::dims,typename pair::second> dom;
205 Point<pair::first::dims,typename pair::second> p;
206 p = it.get().toPoint();
207 p = p * vg.get(i).spacing + vg.get(i).offset;
209 if (pair::first::dims == 2)
210 v_out << p.toString() <<
" 0.0" <<
"\n";
212 v_out << p.toString() <<
"\n";
233 for (
size_t i = 0 ; i < vg.size() ; i++)
236 auto it = vg.get(i).g.getIterator();
240 v_out +=
"1 " + std::to_string(k) +
"\n";
260 v_out +=
"POINT_DATA " + std::to_string(get_total()) +
"\n";
283 void add(
const typename pair::first & g,
const Point<pair::first::dims,typename pair::second> & offset,
const Point<pair::first::dims,typename pair::second> & spacing,
const Box<pair::first::dims,typename pair::second> & dom)
300 template<
int prp = -1>
bool write(std::string file, std::string f_name =
"grids" , file_type ft = file_type::ASCII)
303 std::string vtk_header;
305 std::string point_list;
307 std::string vertex_list;
309 std::string vtk_binary_or_ascii;
311 std::string point_prop_header;
313 std::string vertex_prop_header;
315 std::string point_data_header;
317 std::string point_data;
320 vtk_header =
"# vtk DataFile Version 3.0\n"
324 if (ft == file_type::ASCII)
325 {vtk_header +=
"ASCII\n";}
327 {vtk_header +=
"BINARY\n";}
330 vtk_header +=
"DATASET POLYDATA\n";
333 point_prop_header = get_point_properties_list();
336 point_list = get_point_list();
339 vertex_prop_header = get_vertex_properties_list();
342 vertex_list = get_vertex_list();
345 point_data_header = get_point_data_header();
352 boost::mpl::for_each< boost::mpl::range_c<int,0, pair::first::value_type::max_prop> >(pp);
354 boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);
361 std::ofstream ofs(file);
364 if (ofs.is_open() ==
false)
365 {std::cerr <<
"Error cannot create the VTK file: " + file +
"\n";}
367 ofs << vtk_header << point_prop_header << point_list <<
368 vertex_prop_header << vertex_list << point_data_header << point_data;
bool write(std::string file, std::string f_name="grids", file_type ft=file_type::ASCII)
It write a VTK file from a graph.
openfpm::vector< ele_g< typename pair::first, typename pair::second > > vg
Vector of grids.
void operator()(T &t) const
It produce an output for each property.
std::string get_point_data_header()
Get the point data header.
std::string get_point_list()
Create the VTK point definition.
std::string dataset
Dataset name.
std::string get_point_properties_list()
It get the vertex properties list.
void add(const typename pair::first &g, const Point< pair::first::dims, typename pair::second > &offset, const Point< pair::first::dims, typename pair::second > &spacing, const Box< pair::first::dims, typename pair::second > &dom)
Add grid dataset.
Point< Grid::dims, St > offset
offset where it start
size_t get_total()
Get the total number of points.
std::string get_vertex_list()
Create the VTK vertex definition.
this class is a functor for "for_each" algorithm
prop_out_g(std::string &v_out, const openfpm::vector_std< ele_g > &vg)
constructor
std::string get_vertex_properties_list()
It get the vertex properties list.