KJB

Abstract class of connected polygons (faces) forming a mesh. We assume that each edge is shared between exactly two faces, that is to say the mesh has to be fully connected. More...
#include <gr_polymesh.h>
Public Member Functions  
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 Polymesh &  operator= (const Polymesh &t) 
Copies a triangular mesh into this one. More...  
virtual Polymesh *  clone () const 
Clones this mesh. 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::Polygon &  get_face (unsigned int i) const throw (kjb::Index_out_of_bounds) 
Returns an indexed face. More...  
kjb::Polygon &  get_face_ref (unsigned int i) throw (kjb::Index_out_of_bounds) 
Returns an indexed face. More...  
virtual void  add_face (const Polygon &face) throw (kjb::Illegal_argument) 
virtual void  read (std::istream &in) throw (kjb::IO_error,kjb::Illegal_argument) 
Reads this polymesh from an input stream. More...  
virtual void  write (std::ostream &ost) const throw (kjb::IO_error) 
Writes this mesh to an output stream. More...  
virtual void  write (const char *filename) const throw (IO_error) 
Writes this mesh to an output stream. 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 xaxis by dpitch, the yaxis by dyaw, and its zaxis 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 wireframe. 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 wireframe 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_object &  operator= (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 xaxis, 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 Matrix &  get_rotations () const 
Returns the current transformation matrix, that is used to store the rotation to be applied to the object. More...  
const Vector &  get_euler_angles () const 
returns vector [pitch, yaw, roll] More...  
void  set_rotation_mode (kjb::Quaternion::Euler_mode imode) 
const kjb::Quaternion &  get_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 Member Functions  
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) 
Protected Attributes  
std::vector< kjb::Polygon >  _faces 
Polygons defining the mesh. More...  
Vector  smallest_bounds 
Vector  largest_bounds 
Friends  
class  GL_Polymesh_Renderer 
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 } 
Static Protected Attributes inherited from kjb::Abstract_renderable  
static unsigned int  _rendering_framework = kjb::Abstract_renderable::RI_OPENGL 
Abstract class of connected polygons (faces) forming a mesh. We assume that each edge is shared between exactly two faces, that is to say the mesh has to be fully connected.

inline 
Constructs a triangular mesh.
Polymesh::Polymesh  (  unsigned int  n  ) 
Constructs a polymesh with n empty polygons
n  the number of polygons This creates a polymesh containing n polygons 
Polymesh::Polymesh  (  const char *  fname  )  
throw  (  kjb::Illegal_argument,  
kjb::IO_error  
) 
Reads a triangular mesh from an input file.
The file format is bigendian binary.
fname  Input file to read this mesh from. 
kjb::IO_error  Could not read from in. 
kjb::Illegal_argument  Invalid arguments in file to read from. 
Polymesh::Polymesh  (  std::istream &  in  )  
throw  (  kjb::Illegal_argument,  
kjb::IO_error  
) 
Reads a triangular mesh from an input file.
The file format is bigendian binary.
in  Input stream to read this mesh from. 
kjb::IO_error  Could not read from in. 
kjb::Illegal_argument  Invalid arguments in file to read from. 
Polymesh::Polymesh  (  const Polymesh &  src  ) 
Copy constructor.
t  Mesh to copy into this one. 

virtual 
Deletes this Polymesh.
Frees all space allocated by this mesh.

virtual 
face  The face to be added. 
i  The index of the face 
face  The face to be added. The index to the face will be set to the index of the last face + 1 
Reimplemented in kjb::Parapiped, kjb::Frustum, and kjb::Triangular_mesh.

virtual 
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
returns the index of the face adjacent to face f along edge e
This functions finds the index of the face adjacent to face f along edge e. 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.
f  Face index to get the adjacent face of. 
e  First point index in face of the shared edge. If set to num_faces, the other point forming the edge will be 0. 
kjb::Illegal_argument  If i or p are not valid indices. 
Reimplemented in kjb::Parapiped, and kjb::Frustum.

virtual 
Clones this mesh.
Implements kjb::Rigid_object.
Reimplemented in kjb::Triangular_mesh, kjb::Parapiped, and kjb::Frustum.
double Polymesh::compute_surface_area  (  )  const 
Returns the surface area of the mesh.
Computes the surface area of the mesh by adding together the areas of each polygon in the mesh.

protected 
void Polymesh::find_bounds  (  ) 
Finds the smallest and largest x, y, and z values and stores them in the class members smallest_bounds and largest_bounds.
void Polymesh::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.
edges a vector of pairs of Vectors to store the vertices of the edges of the mesh in (points represented as Vectors).
void Polymesh::get_all_vertices  (  std::vector< Vector > &  vertices  )  const 
Stores the vertices of the mesh in a vector.
vertices a vector of Vectors to store the vertices of the mesh in (points represented as Vectors).
const Polygon & Polymesh::get_face  (  unsigned int  i  )  const 
throw  (  kjb::Index_out_of_bounds  
) 
Returns an indexed face.
i  Index of the face to get; ranges 0 to N1. 
kjb::Illegal_argument  Invalid face index. 
i  Index of the face to get. 
kjb::Illegal_argument  Invalid face index. 
Polygon & Polymesh::get_face_ref  (  unsigned int  i  )  
throw  (  kjb::Index_out_of_bounds  
) 
Returns an indexed face.
i  Index of the face to get; ranges 0 to N1. 
kjb::Illegal_argument  Invalid face index. 
i  Index of the face to get. 
kjb::Illegal_argument  Invalid face index. 
const std::vector< kjb::Polygon > & Polymesh::get_faces  (  )  const 
Returns the faces of this mesh.
void Polymesh::get_faces  (  std::vector< const Polygon * > &  ifaces  )  const 
Vector Polymesh::get_largest_bounds  (  )  const 
double Polymesh::get_largest_z_bound  (  ) 
void Polymesh::get_lines  (  std::vector< Line3d > &  lines  ) 
Vector Polymesh::get_smallest_bounds  (  )  const 

inlineprotected 
Compares two points.

protected 
Checks whether edge e1 on face f1 is the same as edge e2 on face f2.
unsigned int Polymesh::num_faces  (  )  const 
Returns the number of faces in this mesh.
Copies a triangular mesh into this one.
Performs a deep copy of the faces in the parallelepiped.
t  Triangular mesh to copy into this one. 

virtual 
Projects this polymesh onto the image plane using the current graphics transformation

virtual 
Reads this polymesh from an input stream.
in  Input stream to read the members of this parallelepiped from. 
kjb::IO_error  Could not read from in. 
kjb::Illegal_argument  Invalid argument to read from file. 
Implements kjb::Readable.
Reimplemented in kjb::Parapiped, kjb::Frustum, and kjb::Triangular_mesh.

virtual 

inlinevirtual 
rotate this object around its xaxis by dpitch, the yaxis by dyaw, and its zaxis by droll (in this order, starting from the object's current position)
Rotates this object around its xaxis by the input angle dpitch, around its yaxis by the input angle dyaw, around its zaxis by the input angle droll. The rotations will add to the current state of the object, ie if the inputs are dpitch = 0.1, dyaw =0.0 and, droll = 0.2, the object will be rotated around the object's xaxis by dpitch, and then around the object's z axis (that moved after the first rotation by dpitch) by 0.2
dpitch  the amount of rotation around the object's xaxis 
dyaw  the amount of rotation around the object's yaxis 
droll  the amount of rotation around the object's zaxis 
Reimplemented from kjb::Rigid_object.

virtual 

virtual 
@ brief Renders the silhouette of this mesh
Renders the silhouette (contour) of this mesh. The current implementation works for convex meshes, and produces reasonable results for concave ones
camera  The camera used for rendering this mesh 
iwidht  The width (in pixel) to use when drawing the silhouette 
Reimplemented from kjb::Abstract_renderable.

virtual 
Renders this object with GL as a wireframe.
Implements kjb::Solid_renderable.
unsigned int Polymesh::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.

virtual 
Applies a linear transformation to this parallelepiped.
Set the indexes of the faces using their order in the faces vector
M  Homogeneous transformation matrix to transform this parallelepiped by. 
kjb::Illegal_argument  The matrix is not in 4x4 homogeneous coordinates. 
Implements kjb::Rigid_object.
Reimplemented in kjb::Parapiped, and kjb::Frustum.

virtual 
Translates this rigid object.
Translates this rigid object
dx  The amount of translation along the world's x axis 
dy  The amount of translation along the world's y axis 
dz  The amount of translation along the world's z axis 
Reimplemented from kjb::Rigid_object.

virtual 
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.
Implements kjb::Wire_occlude_renderable.

virtual 
unsigned int Polymesh::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.
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
p  The polymesh to render 
start_id  The color for the first edge of the polymesh 

virtual 
Writes this mesh to an output stream.
The file format is bigendian binary.
out  Output stream to write the members of this parallelepiped to. 
kjb::IO_error  Could not write to out. 
Implements kjb::Writeable.
Reimplemented in kjb::Parapiped, kjb::Frustum, and kjb::Triangular_mesh.

virtual 
Writes this mesh to an output stream.
The file format is bigendian binary.
out  Output stream to write the members of this parallelepiped to. 
kjb::IO_error  Could not write to out. 
Reimplemented from kjb::Writeable.
Reimplemented in kjb::Triangular_mesh.

friend 

protected 
Polygons defining the mesh.

protected 

protected 