diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /sp/src/utils/smdlexp/smedefs.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/utils/smdlexp/smedefs.h')
| -rw-r--r-- | sp/src/utils/smdlexp/smedefs.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/sp/src/utils/smdlexp/smedefs.h b/sp/src/utils/smdlexp/smedefs.h new file mode 100644 index 00000000..7211e1e1 --- /dev/null +++ b/sp/src/utils/smdlexp/smedefs.h @@ -0,0 +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 );
+};
+
|