StaticMesh::StaticMesh(const StaticMesh &o)
{
	if( m_faceNormals != 0 )
	  {
	    delete[] m_faceNormals;
	  }

	m_faceNormals = new float[3 * o.m_numVertices];
	m_vertices    = floatArr( new float[3 * o.m_numVertices] );
	m_colors      = ucharArr( new unsigned char[3 * o.m_numVertices] );
	m_faces     = uintArr(  new unsigned int[3 * o.m_numFaces] );

	for ( size_t i(0); i < 3 * o.m_numVertices; i++ )
	{
		m_faceNormals[i] = o.m_faceNormals[i];
		m_vertices[i]    = o.m_vertices[i];
		m_colors[i]      = o.m_colors[i];
	}

	for( size_t i = 0; i < 3 * o.m_numFaces; ++i )
	{
		m_faces[i] = o.m_faces[i];
	}

	m_boundingBox = o.m_boundingBox;
	m_model = o.m_model;

}
void MeshBuffer::setVertexColorArray(std::vector<uint8_t>& array)
{
	m_vertexColors = ucharArr(new uchar[array.size()]);
	for (int i(0); i < array.size(); i++)
	{
		m_vertexColors[i] = array[i];
	}
	m_numVertexColors = array.size() / 3;
}
void StaticMesh::init( MeshBufferPtr mesh )
{
	size_t n_colors;
	size_t n_normals;
	m_lineWidth = 2.0;
	if(mesh)
	{
		m_faceNormals = 0;

		m_normals 			= mesh->getVertexNormalArray(n_normals);
		m_colors        	= mesh->getVertexColorArray(n_colors);
		m_vertices      	= mesh->getVertexArray(m_numVertices);
		m_faces       		= mesh->getFaceArray(m_numFaces);
		m_blackColors		= new unsigned char[ 3 * m_numVertices ];

		for ( size_t i = 0; i < 3 * m_numVertices; i++ ) 
		{
			m_blackColors[i] = 0;
		}

		m_finalized			= true;
		m_visible			= true;
		m_active			= true;

		m_renderMode = 0;
		m_renderMode    |= RenderSurfaces;
		m_renderMode    |= RenderTriangles;

		m_boundingBox = new BoundingBox<Vertex<float> >;

		if(!m_faceNormals)
		{
			interpolateNormals();
		} else
		{
			// cout << "Face normals: " << m_faceNormals << endl;
		}

		if(!m_colors)
		{
			setDefaultColors();
		}

		if(n_colors == 0)
		{
			m_colors = ucharArr( new unsigned char[3 * m_numVertices] );
			for( int i = 0; i < m_numVertices; ++i )
			{
				m_colors[3 * i] = 0;
				m_colors[3 * i + 1] = 255;
				m_colors[3 * i + 2] = 0;
			}
		}

	}
}
void StaticMesh::setDefaultColors()
{
    m_colors = ucharArr( new unsigned char[3 * m_numVertices] );
    for(size_t i = 0; i < m_numVertices; i++)
    {
        m_colors[i]		= 0;
        m_colors[i + 1] = 255;
        m_colors[i + 2] = 0;
    }
}
void MeshBuffer::setFaceColorArray( std::vector<uchar> &array )
{

    m_faceColors = ucharArr( new uchar[array.size()] );

    for ( int i(0); i < array.size(); i++ ) 
    {
        m_faceColors[i] = array[i];
    }
    m_numFaceColors = array.size() / 3;
}