Developer Documentation

Tetmesh.hpp
1 /*
2 * Tetmesh.hpp
3 *
4 * Created on: Mar 20, 2012
5 * Author: kremer
6 */
7
8 #include <boost/spirit/include/qi.hpp>
9
10 #include <boost/bind.hpp>
11
12 #include "../MeshGenerator.hpp"
13
14 #include <iostream>
15
16 #ifndef TETMESH_HPP_
17 #define TETMESH_HPP_
18
19 namespace qi = boost::spirit::qi;
20 namespace spirit = boost::spirit;
21
22 template <typename Iterator>
23 class tetmesh_grammar : public qi::grammar<Iterator, qi::space_type> {
24 public:
25 explicit tetmesh_grammar(MeshGenerator& _generator) :
26 tetmesh_grammar::base_type(content),
27 generator_(_generator) {
28
29 content = node_section_header >> *node >> element_section_header >> *element;
30
31 node_section_header = spirit::lit("Vertices") >> qi::int_;
32
33 node = qi::double_[boost::bind(&MeshGenerator::add_vertex_component, &generator_, ::_1)] >>
34 qi::double_[boost::bind(&MeshGenerator::add_vertex_component, &generator_, ::_1)] >>
35 qi::double_[boost::bind(&MeshGenerator::add_vertex_component, &generator_, ::_1)] >>
36 qi::double_;
37
38 element_section_header = spirit::lit("Tetrahedra") >>
39 qi::int_[boost::bind(&MeshGenerator::set_num_cells, &generator_, ::_1)];
40
41 element = qi::int_[boost::bind(&MeshGenerator::add_cell_vertex, &generator_, ::_1)] >>
42 qi::int_[boost::bind(&MeshGenerator::add_cell_vertex, &generator_, ::_1)] >>
43 qi::int_[boost::bind(&MeshGenerator::add_cell_vertex, &generator_, ::_1)] >>
44 qi::int_[boost::bind(&MeshGenerator::add_cell_vertex, &generator_, ::_1)];
45 }
46
47 private:
48
49 qi::rule<Iterator, qi::space_type> node_section_header, element_section_header, node, element, content;
50
51 MeshGenerator& generator_;
52 };
53
54 #endif /* TETMESH_HPP_ */
OpenMesh::Kernel_OSG::bind
bool bind(osg::GeometryPtr &_geo, Mesh &_mesh)
Definition: bindT.hh:101
tetmesh_grammar
Definition: Tetmesh.hpp:23
MeshGenerator
Definition: MeshGenerator.hpp:24