Blame | Last modification | View Log | RSS feed
#include "TriMesh.h"
using namespace CGLA;
using namespace std;
namespace IMesh
{
TriMeshData::TriMeshData():
FA_NORM(-1),
FA_COL(-1),
VA_POS(-1),
VA_NORM(-1),
VA_COL(-1),
VA_TEX(-1),
faces_size(0),
face_sets(0),
face_attr(0),
face_set_mapping(0),
vert_attr(0) {}
/** Copy constructor. This is called from the TriMesh constructor when
the TriMeshBuilder creates a new TriMesh. */
TriMeshData::TriMeshData(const TriMeshData& tmd):
FA_NORM(tmd.FA_NORM),
FA_COL(tmd.FA_COL),
VA_POS(tmd.VA_POS),
VA_NORM(tmd.VA_NORM),
VA_COL(tmd.VA_COL),
VA_TEX(tmd.VA_TEX),
faces_size(tmd.faces_size),
face_sets(tmd.face_sets),
face_attr(tmd.face_attr),
face_set_mapping(tmd.face_set_mapping),
vert_attr(tmd.vert_attr) {}
void TriMeshData::clear()
{
FA_NORM.idx = -1;
FA_COL.idx = -1;
VA_POS.idx = -1;
VA_NORM.idx = -1;
VA_COL.idx = -1;
VA_TEX.idx = -1;
faces_size = 0;
face_sets.clear();
face_attr.clear();
face_set_mapping.clear();
vert_attr.clear();
}
void TriMeshData::clean_up()
{
// Delete all attribute vectors.
int i; // Declared here to placate a specific brain dead compiler
for(i=0;i<face_sets.size(); ++i)
delete face_sets[i];
for(i=0;i<face_attr.size(); ++i)
delete face_attr[i];
for(i=0;i<vert_attr.size(); ++i)
delete vert_attr[i];
}
void TriMesh::get_bbox(CGLA::Vec3f& p0, CGLA::Vec3f& p7) const
{
int i;
p0 = vpos(0);
p7 = vpos(0);
for(i=1;i<no_vertices();i++)
{
p0 = v_min(vpos(i), p0);
p7 = v_max(vpos(i), p7);
}
}
void TriMesh::get_bsphere(CGLA::Vec3f& c, float& r) const
{
Vec3f p0,p7;
get_bbox(p0, p7);
Vec3f rad = (p7 - p0)/2.0;
c = p0 + rad;
r = rad.length();
}
}