enum IO_Type { INPUT = 0, OUTPUT = 1, BOTH = 2 }
void init (triangulateio &t)
void destroy (triangulateio &t, IO_Type)
void copy_tri_to_mesh (const triangulateio &triangle_data_input, UnstructuredMesh &mesh_output, const ElemType type)
A special namespace for wrapping the standard Triangle API, as well as some helper functions for initializing/destroying the structs triangle uses to communicate.
Enumerator:
Definition at line 54 of file mesh_triangle_support.h.
{
INPUT = 0,
OUTPUT = 1,
BOTH = 2};
Definition at line 222 of file mesh_triangle_support.C.
References MeshBase::add_elem(), MeshBase::add_point(), MeshBase::clear(), MeshBase::node_ptr(), MeshBase::prepare_for_use(), MeshBase::set_mesh_dimension(), Elem::set_node(), libMeshEnums::TRI3, and libMeshEnums::TRI6.
Referenced by TriangleInterface::triangulate().
{
// Transfer the information into the LibMesh mesh.
mesh_output.clear();
// Make sure the new Mesh will be 2D
mesh_output.set_mesh_dimension(2);
// Node information
for (int i=0, c=0; c<triangle_data_input.numberofpoints; i+=2, ++c)
{
mesh_output.add_point( Point(triangle_data_input.pointlist[i],
triangle_data_input.pointlist[i+1]) );
}
// Element information
for (int i=0; i<triangle_data_input.numberoftriangles; ++i)
{
switch (type)
{
case TRI3:
{
Elem* elem = mesh_output.add_elem (new Tri3);
for (unsigned int n=0; n<3; ++n)
elem->set_node(n) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*3 + n]);
break;
}
case TRI6:
{
Elem* elem = mesh_output.add_elem (new Tri6);
// Triangle number TRI6 nodes in a different way to libMesh
elem->set_node(0) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 0]);
elem->set_node(1) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 1]);
elem->set_node(2) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 2]);
elem->set_node(3) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 5]);
elem->set_node(4) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 3]);
elem->set_node(5) = mesh_output.node_ptr(triangle_data_input.trianglelist[i*6 + 4]);
break;
}
default:
{
std::cerr << 'ERROR: Unrecognized triangular element type.' << std::endl;
libmesh_error();
}
}
}
// Prepare mesh for usage.
mesh_output.prepare_for_use();
}
However, triangle *does* shallow-copy (for example) the holelist pointer from the input to output struct **without** performing a deep copy of the holelist itself. Therefore, double-free will occur without additional care!
Referenced by TriangleInterface::triangulate().
Generated automatically by Doxygen for libMesh from the source code.