#define ERROR_MSG_MAX_LEN 128 #define MAX_MOD_COMMAND_LEN 512 #define MAX_NAME_OBJ 40 class WorkFile { private: FILE *stream; char m_ShortfName[MAX_FILE_NAME]; char m_fileName[MAX_FILE_NAME]; public: WorkFile(const TCHAR *filename,const TCHAR *mode) { stream = NULL; Open(filename, mode); }; ~WorkFile() { Close(); }; FILE * Stream() { return stream; }; int Close() { int result=0; if(stream) result=fclose(stream); stream = NULL; return result; } void Open(const TCHAR *filename,const TCHAR *mode) { Close(); stream = _tfopen(filename,mode); strcpy(m_fileName, filename); } void OutLine(char* _txtLine); char* GetFileName(){return m_fileName;}; char* GetShortfName(){return m_ShortfName;}; void SetShortfName(char* _SFName){ strcpy(m_ShortfName, _SFName);}; }; class CModExport : public SceneExport { public: CModExport(); ~CModExport(); int ExtCount(); // Number of extensions supported const TCHAR * Ext(int n); // Extension #n (i.e. "3DS") const TCHAR * LongDesc(); // Long ASCII description (i.e. "Autodesk 3D Studio File") const TCHAR * ShortDesc(); // Short ASCII description (i.e. "3D Studio") const TCHAR * AuthorName(); // ASCII Author name const TCHAR * CopyrightMessage(); // ASCII Copyright message const TCHAR * OtherMessage1(); // Other message #1 const TCHAR * OtherMessage2(); // Other message #2 unsigned int Version(); // Version number * 100 (i.e. v3.01 = 301) void ShowAbout(HWND hWnd); // Show DLL's "About..." box int DoExport(const TCHAR *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts, DWORD options); // Export file BOOL m_exportSelected; BOOL m_showPrompts; Interface* m_Gi; ExpInterface* m_ei; //void Append(INode *_node); private: int GetExportOptions(DWORD options, BOOL suppressPrompts); int ExportFile(const TCHAR *filename); int DumpHeader(WorkFile &modFile, BOOL _isSpo = 0); int DumpData(WorkFile &modFile,WorkFile &_spoFile); }; class CModExpClassDesc:public ClassDesc { public: inline int IsPublic(); inline void * Create(BOOL loading = FALSE); inline const TCHAR * ClassName(); inline SClass_ID SuperClassID(); inline Class_ID ClassID(); inline const TCHAR* Category(); }; class CSuperObject { CSuperObject* m_Parent; char m_name[MAX_NAME_OBJ]; std::list m_childs; char* m_GeomLink; void GetLocalMatrix(Matrix3 &NodMat, TimeValue _time); public: INode* m_maxNode; CSuperObject(INode *_node); ~CSuperObject(); void DumpSpo(WorkFile &_spoFile, TimeValue _time); CSuperObject* findSpo(INode *_node); void AddNode(CSuperObject *_node); void SetGeomLink(char*); char* GetGeomLink(); }; class SceneEnumProc : public ITreeEnumProc { private: std::list m_GeomList; std::list m_MatList; void Append(INode *_node); void AppendMat(Mtl *_mtl); TimeValue m_time; void DumpOneGeom(WorkFile &modFile, CSuperObject *_node); void DumpOneMtl(WorkFile &modFile, Mtl *_mtl); CSuperObject* m_root; public: SceneEnumProc(TimeValue time); ~SceneEnumProc(); int Count(){ return m_count; }; int callback( INode *node ); int m_count; void DumpGeoms(WorkFile &modFile); void DumpMtls(WorkFile &modFile); void DumpRoot(WorkFile &_spoFile); };