#include "BinaryWriter.h" using namespace CCS; void BinaryWriter::write(Mesh *mesh, char *filename) { fout.open(filename, ios::out | ios::binary | ios::trunc); if(!fout.good()) { __ERROR__("BinaryWriter::write() : could not open filename=["<< filename <<"] for writing"); return; } this->mesh = mesh; this->vert2id.clear(); __LOG__("sizeof(int)=["<< sizeof(int) <<"]"); __LOG__("sizeof(TXS_REAL)=["<< sizeof(TXS_REAL) <<"]"); // first write num verts int numVerts = mesh->verts.size(); out(numVerts); __STAT__("numVerts=["<< numVerts <<"]"); // write out all verts, keeping track of their position/ID // so the first vert will have ID = 0 int vertId = 0; list::iterator v_iter; for(v_iter = mesh->verts.begin(); v_iter != mesh->verts.end(); ++v_iter) { Vertex* v = *v_iter; // write the components out((TXS_REAL)v->p(0)); out((TXS_REAL)v->p(1)); out((TXS_REAL)v->p(2)); // remember the position/ID this->vert2id[v] = vertId; // inc ID ++vertId; } // now faces! // first, number of faces int numFaces = mesh->faces.size(); out(numFaces); __STAT__("numFaces=["<< numFaces <<"]"); list::iterator f_iter; for(f_iter = mesh->faces.begin(); f_iter != mesh->faces.end(); ++f_iter) { Face* f = *f_iter; if(f->edgeUses.size() != 4) { __ERROR__("a face in the CCS::Mesh was not 4! it was f->edgeUses.size()=["<< f->edgeUses.size() <<"]"); return; } // iterate through the verts, writing out the id for it Face::VertexIterator v_iter; for(v_iter.start(f); !v_iter.done(); v_iter.advance()) { Vertex* v = v_iter.get_vertex(); // get the id to spit vertId = getVertexID(v); out(vertId); } } __STAT__("DONE writing binary. expected size of file is " << sizeof(TXS_REAL)*3*numVerts + sizeof(int)*4*numFaces + sizeof(int)*2 << " bytes"); }