KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Attributes | List of all members
kjb::Triangular_mesh Class Reference

Triangular_mesh: a polygonal mesh of which each face is a triangle. More...

#include <gr_triangular_mesh.h>

Inheritance diagram for kjb::Triangular_mesh:
kjb::Polymesh kjb::Abstract_renderable kjb::Rigid_object kjb::Readable kjb::Writeable kjb::Renderable kjb::Solid_renderable kjb::Wire_renderable kjb::Wire_occlude_renderable kjb::Transformable kjb::Cloneable

Public Member Functions

 Triangular_mesh ()
 Constructs a triangular mesh. More...
 
 Triangular_mesh (const char *fname) throw (kjb::Illegal_argument, kjb::IO_error)
 Reads a triangular mesh from an input file. More...
 
 Triangular_mesh (std::istream &in) throw (kjb::Illegal_argument, kjb::IO_error)
 Reads a triangular mesh from an input file. More...
 
 Triangular_mesh (const Triangular_mesh &t)
 Copy constructor. More...
 
virtual Triangular_meshoperator= (const Triangular_mesh &t)
 Copies a triangular mesh into this one. More...
 
virtual ~Triangular_mesh ()
 Destructor of a triangular mesh. More...
 
virtual unsigned int adjacent_face (uint32_t i, uint32_t p) const throw (Index_out_of_bounds)
 Returns the face adjacent to another on a shared edge. More...
 
void read (std::istream &in) throw (kjb::IO_error,kjb::Illegal_argument)
 Reads this triangular mesh from an input stream. More...
 
void write (std::ostream &ost) const throw (kjb::IO_error)
 Writes this mesh to an output stream. More...
 
void write (const char *filename) const throw (IO_error)
 Writes this mesh to an output stream. More...
 
virtual Triangular_meshclone () const
 Clones this mesh. More...
 
void create_adjacency_matrix () throw (KJB_error)
 Finds the adjacency relationships between faces. More...
 
void set_adjacency_matrix (const char *fname) throw (KJB_error)
 Gets the adjacency matrix from a file and saves it in the class parameter. More...
 
virtual void add_face (const Polygon &face) throw (kjb::Illegal_argument)
 
- Public Member Functions inherited from kjb::Polymesh
 Polymesh ()
 Constructs a triangular mesh. More...
 
 Polymesh (unsigned int n)
 
 Polymesh (const char *fname) throw (kjb::Illegal_argument, kjb::IO_error)
 Reads a triangular mesh from an input file. More...
 
 Polymesh (std::istream &in) throw (kjb::Illegal_argument, kjb::IO_error)
 Reads a triangular mesh from an input file. More...
 
 Polymesh (const Polymesh &t)
 Copy constructor. More...
 
virtual Polymeshoperator= (const Polymesh &t)
 Copies a triangular mesh into this one. More...
 
virtual ~Polymesh ()
 Deletes this Polymesh. More...
 
unsigned int num_faces () const
 Returns the number of faces in this mesh. More...
 
const std::vector< kjb::Polygon > & get_faces () const
 Returns the faces of this mesh. More...
 
const kjb::Polygonget_face (unsigned int i) const throw (kjb::Index_out_of_bounds)
 Returns an indexed face. More...
 
kjb::Polygonget_face_ref (unsigned int i) throw (kjb::Index_out_of_bounds)
 Returns an indexed face. More...
 
virtual void transform (const kjb::Matrix &) throw (kjb::Illegal_argument)
 Applies a linear transformation to this parallelepiped. More...
 
virtual void translate (double x, double y, double z)
 Translates this rigid object. More...
 
virtual void rotate (double phi, double x, double y, double z)
 
virtual void rotate (double dpitch, double dyaw, double droll)
 rotate this object around its x-axis by dpitch, the y-axis by dyaw, and its z-axis by droll (in this order, starting from the object's current position) More...
 
virtual void scale (double scale_x, double scale_y, double scale_z)
 
virtual unsigned int adjacent_face (unsigned int f, unsigned int e) const throw (Index_out_of_bounds,KJB_error)
 returns the index of the face adjacent to face f along edge e This is a very inefficient implementation, class derived from this one should implement their own version, possibly storing the adjacency information and not computing it every time. Not thoroughly tested More...
 
void get_faces (std::vector< const Polygon * > &ifaces) const
 
virtual void wire_render () const
 Renders this mesh as a wire frame. More...
 
unsigned int wire_render_with_sequential_ids (unsigned int start_id=1) const
 Render each edge of this polymesh with a different color. The first edge will be rendered using the input id as a color, the following edges will be rendered with an id sequentially increasing. Returns the id (color) used to render the last edge of the polygon. More...
 
unsigned int solid_render_with_sequential_ids (unsigned int start_id=1) const
 Render each polygon of this polymesh with a different color. The first polygon will be rendered using the input id as a color, the following ones will be rendered with an id sequentially increasing. Returns the id (color) used to render the last polygon. More...
 
virtual void wire_occlude_render () const
 Renders this mesh as a wire frame into the depth buffer. Use wire_render after this to render this mesh as a wire frame by not drawing occluded edges. More...
 
virtual void solid_render () const
 Renders this object with GL as a wire-frame. More...
 
virtual void silhouette_render (const kjb::Base_gl_interface &camera, double iwidth=1.0) const
 
virtual void project ()
 
double compute_surface_area () const
 Returns the surface area of the mesh. More...
 
void get_all_vertices (std::vector< Vector > &vertices) const
 Stores the vertices of the mesh in a vector. More...
 
void get_all_edges (std::vector< std::vector< Vector > > &edges) const
 Stores all of the unique pairs of points that make up the edges of the polymesh in a vector. More...
 
void get_lines (std::vector< Line3d > &lines)
 
void find_bounds ()
 
kjb::Vector get_center ()
 
double get_largest_z_bound ()
 
kjb::Vector get_largest_bounds () const
 
kjb::Vector get_smallest_bounds () const
 
- Public Member Functions inherited from kjb::Abstract_renderable
virtual ~Abstract_renderable ()
 Deletes this Solid_renderable. More...
 
virtual void render () const
 Renders this object with GL. More...
 
virtual void render_occluded_wireframe () const
 Renders this object with GL as an occluded wire-frame into the depth buffer, to hide unseen lines. More...
 
- Public Member Functions inherited from kjb::Renderable
virtual ~Renderable ()
 Deletes this Renderable. More...
 
- Public Member Functions inherited from kjb::Solid_renderable
virtual ~Solid_renderable ()
 Deletes this Wire_renderable. More...
 
- Public Member Functions inherited from kjb::Wire_renderable
virtual ~Wire_renderable ()
 Deletes this Wire_renderable. More...
 
- Public Member Functions inherited from kjb::Wire_occlude_renderable
virtual ~Wire_occlude_renderable ()
 Deletes this Wire_occlude_renderable. More...
 
- Public Member Functions inherited from kjb::Rigid_object
 Rigid_object ()
 
 Rigid_object (const Rigid_object &ro)
 
virtual Rigid_objectoperator= (const Rigid_object &src)
 
virtual ~Rigid_object ()
 
virtual void swap (Self &other)
 
virtual void compute_new_euler_angles_on_rotations (double dpitch, double dyaw, double droll, kjb::Vector &angles) const
 computes the new values for the object's euler angles, after a rotation of dpitch around the object's x-axis, a rotation of dyaw around the object's y axis, and a rotation of droll around the object's z axis (in this order, starting from the object's current position). The state of this rigid object is not changed More...
 
virtual void set_rotations (double pitch, double yaw, double roll)
 rotate this object so that its pitch, yaw and roll match the input values More...
 
virtual void set_rotations_and_translate (double pitch, double yaw, double roll, double dx, double dy, double dz)
 rotate this object so that its pitch, yaw and roll match the input values, and translates it More...
 
const Matrixget_rotations () const
 Returns the current transformation matrix, that is used to store the rotation to be applied to the object. More...
 
const Vectorget_euler_angles () const
 returns vector [pitch, yaw, roll] More...
 
void set_rotation_mode (kjb::Quaternion::Euler_mode imode)
 
const kjb::Quaternionget_orientation () const
 returns the quaternion defining this object's orientation More...
 
void set_orientation (const Quaternion &orientation)
 sets the orientation of this object from an input quaternion More...
 
- Public Member Functions inherited from kjb::Transformable
virtual ~Transformable ()
 Deletes this Transformable. More...
 
virtual ~Transformable ()
 Deletes this Transformable_d. More...
 
- Public Member Functions inherited from kjb::Cloneable
virtual ~Cloneable ()
 Deletes this Cloneable. More...
 
- Public Member Functions inherited from kjb::Readable
virtual ~Readable ()
 Deletes this Readable. More...
 
virtual void read (const char *fname)
 Reads this Readable from a file. More...
 
- Public Member Functions inherited from kjb::Writeable
virtual ~Writeable ()
 Deletes this Writeable. More...
 

Protected Attributes

kjb::Int_matrix _adjacency
 Face adjacency matrix. More...
 
bool _is_adjacency_consistent
 
- Protected Attributes inherited from kjb::Polymesh
std::vector< kjb::Polygon_faces
 Polygons defining the mesh. More...
 
Vector smallest_bounds
 
Vector largest_bounds
 

Additional Inherited Members

- Static Public Member Functions inherited from kjb::Abstract_renderable
static double get_rendering_framework ()
 returns the rendering framework used to render. The only one implemented up to now is OpenGL More...
 
static void set_rendering_framework (unsigned int irf)
 sets the rendering framework used to render. The only one implemented up to now is OpenGL More...
 
- Static Public Member Functions inherited from kjb::Readable
static const char * read_field_value (std::istream &in, const char *field_name, char *field_buf, size_t buf_len, char separator=':')
 Reads a line off in into a buffer and returns a pointer to the field value in the buffer. More...
 
static const char * read_field_value (std::istream &in, const char *field_name, char separator=':')
 Reads a line off in into an internal buffer and returns a pointer to the field value in the buffer. More...
 
- Protected Types inherited from kjb::Abstract_renderable
enum  Rendering_frameworks { RI_OPENGL }
 
- Protected Member Functions inherited from kjb::Polymesh
bool is_same_vertex (const kjb::Vector &p1, const kjb::Vector &p2) const
 Compares two points. More...
 
bool is_shared_edge (const Polygon &f1, unsigned int e1, const Polygon &f2, unsigned int e2) const throw (Index_out_of_bounds)
 Checks whether edge e1 on face f1 is the same as edge e2 on face f2. More...
 
bool edge_index_in_polygon (const Polygon &f1, unsigned int e, const Polygon &f2, unsigned int &index) throw (Index_out_of_bounds)
 
- Static Protected Attributes inherited from kjb::Abstract_renderable
static unsigned int _rendering_framework = kjb::Abstract_renderable::RI_OPENGL
 

Detailed Description

Triangular_mesh: a polygonal mesh of which each face is a triangle.

Constructor & Destructor Documentation

kjb::Triangular_mesh::Triangular_mesh ( )
inline

Constructs a triangular mesh.

Triangular_mesh::Triangular_mesh ( const char *  fname)
throw (kjb::Illegal_argument,
kjb::IO_error
)

Reads a triangular mesh from an input file.

The file format is big-endian binary.

Parameters
fnameInput file to read this mesh from.
Exceptions
kjb::IO_errorCould not read from in.
kjb::Illegal_argumentInvalid arguments in file to read from.
Triangular_mesh::Triangular_mesh ( std::istream &  in)
throw (kjb::Illegal_argument,
kjb::IO_error
)

Reads a triangular mesh from an input file.

The file format is big-endian binary.

Parameters
inInput stream to read this mesh from.
Exceptions
kjb::IO_errorCould not read from in.
kjb::Illegal_argumentInvalid arguments in file to read from.
Triangular_mesh::Triangular_mesh ( const Triangular_mesh t)

Copy constructor.

Parameters
tMesh to copy into this one.
virtual kjb::Triangular_mesh::~Triangular_mesh ( )
inlinevirtual

Destructor of a triangular mesh.

Member Function Documentation

void Triangular_mesh::add_face ( const Polygon face)
throw (kjb::Illegal_argument
)
virtual
Parameters
faceThe face to be added.
iThe index of the face
faceThe face to be added. The index to the face will be set to the index of the last face + 1

Reimplemented from kjb::Polymesh.

uint32_t Triangular_mesh::adjacent_face ( uint32_t  i,
uint32_t  p 
) const
throw (Index_out_of_bounds
)
virtual

Returns the face adjacent to another on a shared edge.

The face point index must be in the range [0,num_faces]. To specify the edge formed by the 0th and nth point, set p = n.

Parameters
iFace index to get the adjacent face of.
pFirst point index in face of the shared edge. If set to num_faces, the other point forming the edge will be 0.
Exceptions
kjb::Illegal_argumentIf i or p are not valid indices.
Triangular_mesh * Triangular_mesh::clone ( ) const
virtual

Clones this mesh.

Returns
A new copy of this parallelepiped.

Reimplemented from kjb::Polymesh.

void Triangular_mesh::create_adjacency_matrix ( )
throw (KJB_error
)

Finds the adjacency relationships between faces.

It creates the adjacency matrix for this triangular mesh

Triangular_mesh & Triangular_mesh::operator= ( const Triangular_mesh t)
virtual

Copies a triangular mesh into this one.

Performs a deep copy of the faces in the parallelepiped.

Parameters
tTriangular mesh to copy into this one.
Returns
A reference to this mesh
void Triangular_mesh::read ( std::istream &  in)
throw (kjb::IO_error,
kjb::Illegal_argument
)
virtual

Reads this triangular mesh from an input stream.

Parameters
inInput stream to read the members of this parallelepiped from.
Exceptions
kjb::IO_errorCould not read from in.
kjb::Illegal_argumentInvalid argument to read from file.

Reimplemented from kjb::Polymesh.

void Triangular_mesh::set_adjacency_matrix ( const char *  fname)
throw (KJB_error
)

Gets the adjacency matrix from a file and saves it in the class parameter.

Creates the adjacency matrix for this triangular mesh if it has not been created yet, otherwise reads adjacency matrix from a file.

void Triangular_mesh::write ( std::ostream &  out) const
throw (kjb::IO_error
)
virtual

Writes this mesh to an output stream.

The file format is big-endian binary.

Parameters
outOutput stream to write the members of this parallelepiped to.
Exceptions
kjb::IO_errorCould not write to out.

Reimplemented from kjb::Polymesh.

void Triangular_mesh::write ( const char *  filename) const
throw (IO_error
)
virtual

Writes this mesh to an output stream.

The file format is big-endian binary.

Parameters
outOutput stream to write the members of this parallelepiped to.
Exceptions
kjb::IO_errorCould not write to out.

Reimplemented from kjb::Polymesh.

Member Data Documentation

kjb::Int_matrix kjb::Triangular_mesh::_adjacency
protected

Face adjacency matrix.

Major index is the face, minor is the index of the first point (in increasing order) on the face forming the adjacency edge.

bool kjb::Triangular_mesh::_is_adjacency_consistent
protected

This determines whether the adjacency matrix is up to date or not


The documentation for this class was generated from the following files: