Subversion Repositories gelsvn

Rev

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();
  }


}