8 #ifndef OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
9 #define OPENFPM_IO_SRC_VTKWRITER_POINT_SET_HPP_
11 #include <boost/mpl/pair.hpp>
12 #include "VTKWriter_grids_util.hpp"
19 template <
typename Vps>
24 typedef Vps value_type;
30 ele_vps(
const Vps & g,
size_t mark)
41 template <
typename Vpp>
46 typedef Vpp value_type;
52 ele_vpp(
const Vpp & vpp,
size_t mark)
70 template<
typename ele_v,
typename St>
77 const openfpm::vector_std< ele_v > & vv;
84 prop_out_v(std::string & v_out,
const openfpm::vector_std< ele_v > & vv)
92 typedef typename boost::mpl::at<typename ele_v::value_type::value_type::type,boost::mpl::int_<T::value>>::type ptype;
100 v_out +=
"SCALARS domain float\n";
103 v_out +=
"LOOKUP_TABLE default\n";
106 for (
size_t k = 0 ; k < vv.size() ; k++)
109 auto it = vv.get(k).g.getIterator();
114 if (it.get() < vv.get(k).mark)
136 template <
typename pair>
140 openfpm::vector< ele_vps<typename pair::first >>
vps;
141 openfpm::vector< ele_vpp<typename pair::second>> vpp;
153 for (
size_t i = 0 ; i < vps.size() ; i++)
155 tot += vps.get(i).g.size();
174 v_out +=
"VERTICES " + std::to_string(get_total()) +
" " + std::to_string(get_total() * 2) +
"\n";
194 v_out +=
"POINTS " + std::to_string(get_total()) +
" float" +
"\n";
206 std::stringstream v_out;
210 for (
size_t i = 0 ; i < vps.size() ; i++)
213 auto it = vps.get(i).g.getIterator();
218 Point<pair::first::value_type::dims,typename pair::first::value_type::coord_type> p;
219 p = vps.get(i).g.get(it.get());
221 if (pair::first::value_type::dims == 2)
222 v_out << p.toString() <<
" 0.0" <<
"\n";
224 v_out << p.toString() <<
"\n";
245 for (
size_t i = 0 ; i < vps.size() ; i++)
248 auto it = vps.get(i).g.getIterator();
252 v_out +=
"1 " + std::to_string(k) +
"\n";
272 v_out +=
"POINT_DATA " + std::to_string(get_total()) +
"\n";
295 void add(
const typename pair::first & vps,
const typename pair::second & vpp,
size_t mark)
314 template<
int prp = -1>
bool write(std::string file, std::string f_name =
"grids" , file_type ft = file_type::ASCII)
317 std::string vtk_header;
319 std::string point_list;
321 std::string vertex_list;
323 std::string vtk_binary_or_ascii;
325 std::string point_prop_header;
327 std::string vertex_prop_header;
329 std::string point_data_header;
331 std::string point_data;
334 vtk_header =
"# vtk DataFile Version 3.0\n"
338 if (ft == file_type::ASCII)
339 {vtk_header +=
"ASCII\n";}
341 {vtk_header +=
"BINARY\n";}
344 vtk_header +=
"DATASET POLYDATA\n";
347 point_prop_header = get_point_properties_list();
350 point_list = get_point_list();
353 vertex_prop_header = get_vertex_properties_list();
356 vertex_list = get_vertex_list();
359 point_data_header = get_point_data_header();
366 boost::mpl::for_each< boost::mpl::range_c<int,0, pair::second::value_type::max_prop> >(pp);
368 boost::mpl::for_each< boost::mpl::range_c<int,prp, prp> >(pp);
375 std::ofstream ofs(file);
378 if (ofs.is_open() ==
false)
379 {std::cerr <<
"Error cannot create the VTK file: " + file +
"\n";}
381 ofs << vtk_header << point_prop_header << point_list <<
382 vertex_prop_header << vertex_list << point_data_header << point_data;
std::string get_point_properties_list()
It get the vertex properties list.
openfpm::vector< ele_vps< typename pair::first > > vps
Vector of couple, position and properties.
void operator()(T &t) const
It produce an output for each property.
prop_out_v(std::string &v_out, const openfpm::vector_std< ele_v > &vv)
constructor
Store the couple of vector position and properties.
bool write(std::string file, std::string f_name="grids", file_type ft=file_type::ASCII)
It write a VTK file from a vector of points.
this class is a functor for "for_each" algorithm
std::string get_vertex_properties_list()
It get the vertex properties list.
std::string get_point_data_header()
Get the point data header.
std::string get_point_list()
Create the VTK point definition.
Store the couple of vector position and properties.
std::string get_vertex_list()
Create the VTK vertex definition.
size_t get_total()
Get the total number of points.
void add(const typename pair::first &vps, const typename pair::second &vpp, size_t mark)
Add a vector dataset.