/****************************************/ /*** Generic Face Compilation Storage ***/ /****************************************/ #ifndef __FACESTORE_HEADER__ #define __FACESTORE_HEADER__ #include #include #include #include #include "..\..\..\tools\data\include\dStructs.h" using namespace std; //*************************************************************************** struct sFaceTexList { GString Name; int TexGrabId; }; //*************************************************************************** class CFace { public: CFace() { vtx.resize(3); pts.resize(3); idx.resize(3); uvs.resize(3); vis.resize(3); } int Mat; vector vtx; vector pts; vector idx; vector uvs; vector vis; Vector3 Normal; bool Avail; int ID; GString TexName; }; //*************************************************************************** #ifndef sTriFace struct sTriFace { int Mat; Vector3 vtx[3]; int pts[3]; sUV uvs[3]; }; #endif //*************************************************************************** class CFaceStore { public: CFaceStore() {MaxStrip = 3;TexGrab=&FaceStoreTexGrab;} CFaceStore(int Max) {MaxStrip=Max;TexGrab=&FaceStoreTexGrab;} ~CFaceStore(){}; CFace &AddFace(vector const &P, const sGinTri &T, const sUVTri &uv,GString const &Tex,int ID=0); CFace &AddFace(CFace &F); void AddFaces(vector&Faces); void AddFaces(CFaceStore &Faces); CFace &AddFace(sTriFace &Face,int ID=0); void SetTexGrab(CTexGrab &NewGrab) {TexGrab=&NewGrab;} int AddTex(GString const &TexName); void SetTexBasePath(GString &Path); void SetTexOut(GString &Name,int TPBase,int TPW,int TPH); void SetTexInclude(GString &Name) {TexGrab->SetIncFile(Name);} void SetTexDebug(bool f) {TexGrab->SetDebug(f);} void SetTexDebugOut(GString &Name); void SetTexShrinkToFit(bool f) {TexGrab->ShrinkToFit(f);} void SetTexNoSort() {TexGrab->NoSort();} void SetTexAnimatedHeadersOnly(bool f) {TexGrab->AnimatedHeadersOnly(f);} void SetTexDontOutputBoxes(bool f) {TexGrab->DontOutputBoxes(f);} void SetTexAllowRotate(bool f) {TexGrab->AllowRotate(f);} CTexGrab &GetTexGrab() {return(FaceStoreTexGrab);} vector &GetTexInfo() {return(TexGrab->GetTexInfo());} void ProcessTextures(); void Process(); int WriteTriList(FILE *File); int WriteQuadList(FILE *File); int WriteVtxList(FILE *File,sVtx *Mul=0); vector const &GetFaceList() {return(FaceList);} int GetFaceCount() {return(FaceList.size());} vector const &GetTriFaceList() {return(TriFaceList);} int GetTriFaceCount() {return(TriFaceList.size());} vector const &GetQuadFaceList() {return(QuadFaceList);} int GetQuadFaceCount() {return(QuadFaceList.size());} vector const &GetVtxList() {return(OutVtxList);} int GetVtxCount() {return(OutVtxList.size());} int AddVtx(Vector3 &Vtx); void setMaxStripLength(int v) {MaxStrip = v;} CFace& operator []( int nIndex ) {return(FaceList[nIndex]);} private: void Quad(); void SetupUV(CFace const &In, sTri &Out); void SetupUV(CFace const &In, sQuad &Out); void BuildOutTriLists(); void BuildOutQuadList(); // int QuadGetAttached(int FaceNo); // void QuadGetPnts(CFace &F,int *Join0,int *Join1,int *Pnt); // void QuadGetUVs(CFace &F,int *Join0,int *Join1,int *Pnt); // void OrderPnts( CFace &F ,int unc); // bool CanConnect( int f0, int f1 ); // int CountFacesAttached ( int f ); // void FollowFace( int id, CFace &F ); // int GetUnconnectedPoint( int f0, int f1, int &f0p0, int &f0p1 ); // bool GetFace( CFace & F ); int MaxStrip; vector FaceList; vector TexList; CTexGrab FaceStoreTexGrab,*TexGrab; GString TexBasePath; vector TriFaceList; vector QuadFaceList; vector OutTriList; vector OutQuadList; vector OutVtxList; }; #endif