int main() { std::ifstream geometry_file; geometry_file.open("../data/half-trigate.geo"); CSGeometry * geom = ParseCSG( geometry_file ); geom->FindIdenticSurfaces(1e-8 * geom->MaxSize()); Mesh * netgen_mesh = new Mesh(); netgen::MeshingParameters mparams; geom->GenerateMesh(netgen_mesh, mparams, 1, 5); { typedef viennagrid::tetrahedral_3d_mesh MeshType; typedef viennagrid::tetrahedral_3d_segmentation SegmentationType; MeshType mesh; SegmentationType segmentation(mesh); typedef viennagrid::result_of::point<MeshType>::type PointType; typedef viennagrid::result_of::vertex_handle<MeshType>::type VertexHandleType; typedef SegmentationType::segment_handle_type SegmentType; int num_points = netgen_mesh->GetNP(); int num_tets = netgen_mesh->GetNE(); std::cout << "Num Points: " << num_points << std::endl; std::cout << "Num Tets: " << num_tets << std::endl; std::vector<VertexHandleType> vertex_handles( num_points ); for (int i = 1; i <= num_points; ++i) { PointType vgrid_point(netgen_mesh->Point(i)[0], netgen_mesh->Point(i)[1], netgen_mesh->Point(i)[2]); vertex_handles[i-1] = viennagrid::make_vertex( mesh, vgrid_point ); } for (int i = 0; i < num_tets; ++i) { ElementIndex ei = i; SegmentType segment = segmentation.get_make_segment( (*netgen_mesh)[ei].GetIndex() ); viennagrid::make_tetrahedron( segment, vertex_handles[(*netgen_mesh)[ei][0]-1], vertex_handles[(*netgen_mesh)[ei][1]-1], vertex_handles[(*netgen_mesh)[ei][2]-1], vertex_handles[(*netgen_mesh)[ei][3]-1]); } viennagrid::io::vtk_writer<MeshType, SegmentationType> writer; writer(mesh, segmentation, "out"); } }