diff options
Diffstat (limited to 'mp/src/utils/smdlexp/smedefs.h')
| -rw-r--r-- | mp/src/utils/smdlexp/smedefs.h | 356 |
1 files changed, 178 insertions, 178 deletions
diff --git a/mp/src/utils/smdlexp/smedefs.h b/mp/src/utils/smdlexp/smedefs.h index 7211e1e1..4b09d5dc 100644 --- a/mp/src/utils/smdlexp/smedefs.h +++ b/mp/src/utils/smdlexp/smedefs.h @@ -1,178 +1,178 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//
-//=============================================================================//
-
-//===================================================================
-// Useful macros
-//
-#define CONSTRUCTOR
-#define DESTRUCTOR
-
-#define EXPORT_THIS __declspec(dllexport)
-
-#define DEFAULT_EXT _T("smd")
-
-#define FStrEq(sz1, sz2) (strcmp((sz1), (sz2)) == 0)
-
-
-//===================================================================
-// Class that implements the scene-export.
-//
-class SmdExportClass : public SceneExport
-{
- friend BOOL CALLBACK ExportOptionsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
- friend class DumpModelTEP;
- friend class DumpDeformsTEP;
-
-public:
- CONSTRUCTOR SmdExportClass (void);
- DESTRUCTOR ~SmdExportClass (void);
-
- // Required by classes derived from SceneExport
- virtual int ExtCount (void) { return 1; }
- virtual const TCHAR* Ext (int i) { return DEFAULT_EXT; }
- virtual const TCHAR* LongDesc (void) { return _T("Valve Skeletal Model Exporter for 3D Studio Max"); }
- virtual const TCHAR* ShortDesc (void) { return _T("Valve SMD"); }
- virtual const TCHAR* AuthorName (void) { return _T("Valve, LLC"); }
- virtual const TCHAR* CopyrightMessage(void) { return _T("Copyright (c) 1998, Valve LLC"); }
- virtual const TCHAR* OtherMessage1 (void) { return _T(""); }
- virtual const TCHAR* OtherMessage2 (void) { return _T(""); }
- virtual unsigned int Version (void) { return 201; }
- virtual void ShowAbout (HWND hWnd) { return; }
- // virtual int DoExport (const TCHAR *name, ExpInterface *ei, Interface *i);
- virtual int DoExport(const TCHAR *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts=FALSE,DWORD options=0); // Export file
-
- // Integer constants for this class
- enum
- {
- MAX_NAME_CHARS = 70,
- UNDESIRABLE_NODE_MARKER = -7777
- };
-
- // For keeping info about each (non-ignored) 3dsMax node in the tree
- typedef struct
- {
- char szNodeName[MAX_NAME_CHARS]; // usefull for lookups
- Matrix3 mat3NodeTM; // node's transformation matrix (at time zero)
- Matrix3 mat3ObjectTM; // object-offset transformation matrix (at time zero)
- int imaxnodeParent; // cached index of parent node
- float xRotFirstFrame; // 1st frame's X rotation
- float yRotFirstFrame; // 1st frame's Y rotation
- float zRotFirstFrame; // 1st frame's Z rotation
- bool isMirrored;
- } MaxNode;
- MaxNode *m_rgmaxnode; // array of nodes
- long m_imaxnodeMac; // # of nodes
-
- // Animation metrics (gleaned from 3dsMax and cached for convenience)
- Interval m_intervalOfAnimation;
- TimeValue m_tvStart;
- TimeValue m_tvEnd;
- int m_tpf; // ticks-per-frame
-
-private:
- BOOL CollectNodes (ExpInterface *expiface);
- BOOL DumpBones (FILE *pFile, ExpInterface *pexpiface);
- BOOL DumpRotations (FILE *pFile, ExpInterface *pexpiface);
- BOOL DumpModel (FILE *pFile, ExpInterface *pexpiface);
- BOOL DumpDeforms (FILE *pFile, ExpInterface *pexpiface);
-
- // Is this MAX file just the reference frame, or an animation?
- // If TRUE, the "bones" and "mesh" files will be created.
- // If FALSE, the "rots" file will be created.
- BOOL m_fReferenceFrame;
-};
-
-
-//===================================================================
-// Basically just a ClassFactory for communicating with 3DSMAX.
-//
-class SmdExportClassDesc : public ClassDesc
-{
-public:
- int IsPublic (void) { return TRUE; }
- void * Create (BOOL loading=FALSE) { return new SmdExportClass; }
- const TCHAR * ClassName (void) { return _T("SmdExport"); }
- SClass_ID SuperClassID (void) { return SCENE_EXPORT_CLASS_ID; }
- Class_ID ClassID (void) { return Class_ID(0x774a43fd, 0x794d2210); }
- const TCHAR * Category (void) { return _T(""); }
-};
-
-
-//===================================================================
-// Tree Enumeration Callback
-// Just counts the nodes in the node tree
-//
-class CountNodesTEP : public ITreeEnumProc
-{
-public:
- virtual int callback(INode *node);
- int m_cNodes; // running count of nodes
-};
-
-
-//===================================================================
-// Tree Enumeration Callback
-// Collects the nodes in the tree into the global array
-//
-class CollectNodesTEP : public ITreeEnumProc
-{
-public:
- virtual int callback(INode *node);
- SmdExportClass *m_phec;
-};
-
-
-//===================================================================
-// Tree Enumeration Callback
-// Dumps the bone offsets to a file.
-//
-class DumpNodesTEP : public ITreeEnumProc
-{
-public:
- virtual int callback(INode *node);
- FILE *m_pfile; // write to this file
- SmdExportClass *m_phec;
-};
-
-
-//===================================================================
-// Tree Enumeration Callback
-// Dumps the per-frame bone rotations to a file.
-//
-class DumpFrameRotationsTEP : public ITreeEnumProc
-{
-public:
- virtual int callback(INode *node);
- void cleanup(void);
- FILE *m_pfile; // write to this file
- TimeValue m_tvToDump; // dump snapshot at this frame time
- SmdExportClass *m_phec;
-};
-
-//===================================================================
-// Tree Enumeration Callback
-// Dumps the triangle meshes to a file.
-//
-class DumpModelTEP : public ITreeEnumProc
-{
-public:
- virtual int callback(INode *node);
- void cleanup(void);
- FILE *m_pfile; // write to this file
- TimeValue m_tvToDump; // dump snapshot at this frame time
- SmdExportClass *m_phec;
- IPhyContextExport *m_mcExport;
- IPhysiqueExport *m_phyExport;
- Modifier *m_phyMod;
- Modifier *m_bonesProMod;
- BonesPro_WeightArray *m_wa;
-private:
- Point3 Pt3GetRVertexNormal(RVertex *prvertex, DWORD smGroupFace);
- void DumpWeights( int iVertex );
-};
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +//=================================================================== +// Useful macros +// +#define CONSTRUCTOR +#define DESTRUCTOR + +#define EXPORT_THIS __declspec(dllexport) + +#define DEFAULT_EXT _T("smd") + +#define FStrEq(sz1, sz2) (strcmp((sz1), (sz2)) == 0) + + +//=================================================================== +// Class that implements the scene-export. +// +class SmdExportClass : public SceneExport +{ + friend BOOL CALLBACK ExportOptionsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + friend class DumpModelTEP; + friend class DumpDeformsTEP; + +public: + CONSTRUCTOR SmdExportClass (void); + DESTRUCTOR ~SmdExportClass (void); + + // Required by classes derived from SceneExport + virtual int ExtCount (void) { return 1; } + virtual const TCHAR* Ext (int i) { return DEFAULT_EXT; } + virtual const TCHAR* LongDesc (void) { return _T("Valve Skeletal Model Exporter for 3D Studio Max"); } + virtual const TCHAR* ShortDesc (void) { return _T("Valve SMD"); } + virtual const TCHAR* AuthorName (void) { return _T("Valve, LLC"); } + virtual const TCHAR* CopyrightMessage(void) { return _T("Copyright (c) 1998, Valve LLC"); } + virtual const TCHAR* OtherMessage1 (void) { return _T(""); } + virtual const TCHAR* OtherMessage2 (void) { return _T(""); } + virtual unsigned int Version (void) { return 201; } + virtual void ShowAbout (HWND hWnd) { return; } + // virtual int DoExport (const TCHAR *name, ExpInterface *ei, Interface *i); + virtual int DoExport(const TCHAR *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts=FALSE,DWORD options=0); // Export file + + // Integer constants for this class + enum + { + MAX_NAME_CHARS = 70, + UNDESIRABLE_NODE_MARKER = -7777 + }; + + // For keeping info about each (non-ignored) 3dsMax node in the tree + typedef struct + { + char szNodeName[MAX_NAME_CHARS]; // usefull for lookups + Matrix3 mat3NodeTM; // node's transformation matrix (at time zero) + Matrix3 mat3ObjectTM; // object-offset transformation matrix (at time zero) + int imaxnodeParent; // cached index of parent node + float xRotFirstFrame; // 1st frame's X rotation + float yRotFirstFrame; // 1st frame's Y rotation + float zRotFirstFrame; // 1st frame's Z rotation + bool isMirrored; + } MaxNode; + MaxNode *m_rgmaxnode; // array of nodes + long m_imaxnodeMac; // # of nodes + + // Animation metrics (gleaned from 3dsMax and cached for convenience) + Interval m_intervalOfAnimation; + TimeValue m_tvStart; + TimeValue m_tvEnd; + int m_tpf; // ticks-per-frame + +private: + BOOL CollectNodes (ExpInterface *expiface); + BOOL DumpBones (FILE *pFile, ExpInterface *pexpiface); + BOOL DumpRotations (FILE *pFile, ExpInterface *pexpiface); + BOOL DumpModel (FILE *pFile, ExpInterface *pexpiface); + BOOL DumpDeforms (FILE *pFile, ExpInterface *pexpiface); + + // Is this MAX file just the reference frame, or an animation? + // If TRUE, the "bones" and "mesh" files will be created. + // If FALSE, the "rots" file will be created. + BOOL m_fReferenceFrame; +}; + + +//=================================================================== +// Basically just a ClassFactory for communicating with 3DSMAX. +// +class SmdExportClassDesc : public ClassDesc +{ +public: + int IsPublic (void) { return TRUE; } + void * Create (BOOL loading=FALSE) { return new SmdExportClass; } + const TCHAR * ClassName (void) { return _T("SmdExport"); } + SClass_ID SuperClassID (void) { return SCENE_EXPORT_CLASS_ID; } + Class_ID ClassID (void) { return Class_ID(0x774a43fd, 0x794d2210); } + const TCHAR * Category (void) { return _T(""); } +}; + + +//=================================================================== +// Tree Enumeration Callback +// Just counts the nodes in the node tree +// +class CountNodesTEP : public ITreeEnumProc +{ +public: + virtual int callback(INode *node); + int m_cNodes; // running count of nodes +}; + + +//=================================================================== +// Tree Enumeration Callback +// Collects the nodes in the tree into the global array +// +class CollectNodesTEP : public ITreeEnumProc +{ +public: + virtual int callback(INode *node); + SmdExportClass *m_phec; +}; + + +//=================================================================== +// Tree Enumeration Callback +// Dumps the bone offsets to a file. +// +class DumpNodesTEP : public ITreeEnumProc +{ +public: + virtual int callback(INode *node); + FILE *m_pfile; // write to this file + SmdExportClass *m_phec; +}; + + +//=================================================================== +// Tree Enumeration Callback +// Dumps the per-frame bone rotations to a file. +// +class DumpFrameRotationsTEP : public ITreeEnumProc +{ +public: + virtual int callback(INode *node); + void cleanup(void); + FILE *m_pfile; // write to this file + TimeValue m_tvToDump; // dump snapshot at this frame time + SmdExportClass *m_phec; +}; + +//=================================================================== +// Tree Enumeration Callback +// Dumps the triangle meshes to a file. +// +class DumpModelTEP : public ITreeEnumProc +{ +public: + virtual int callback(INode *node); + void cleanup(void); + FILE *m_pfile; // write to this file + TimeValue m_tvToDump; // dump snapshot at this frame time + SmdExportClass *m_phec; + IPhyContextExport *m_mcExport; + IPhysiqueExport *m_phyExport; + Modifier *m_phyMod; + Modifier *m_bonesProMod; + BonesPro_WeightArray *m_wa; +private: + Point3 Pt3GetRVertexNormal(RVertex *prvertex, DWORD smGroupFace); + void DumpWeights( int iVertex ); +}; + |