1 /********************************************************************** 2 * 3 * MilkShape 3D Model Import/Export API (for version 1.8.4 and up). 4 * 5 * Apr 11 2008, Mete Ciragan, chUmbaLum sOft 6 * 7 **********************************************************************/ 8 9 #ifndef __MSLIB_H__ 10 #define __MSLIB_H__ 11 12 13 14 #ifdef MSLIB_EXPORTS 15 #define MSLIB_API __declspec(dllexport) 16 #else 17 #define MSLIB_API __declspec(dllimport) 18 #endif /* MSLIB_EXPORTS */ 19 20 21 22 #ifdef WIN32 23 #include <pshpack1.h> 24 #endif /* WIN32 */ 25 26 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif /* __cplusplus */ 31 32 33 34 /********************************************************************** 35 * 36 * Constants 37 * 38 **********************************************************************/ 39 40 #define MS_MAX_NAME 32 41 #define MS_MAX_PATH 256 42 43 #define MAX_VERTICES 65534 44 #define MAX_TRIANGLES 65534 45 #define MAX_GROUPS 255 46 #define MAX_MATERIALS 128 47 #define MAX_JOINTS 128 48 49 50 51 /********************************************************************** 52 * 53 * Types 54 * 55 **********************************************************************/ 56 57 #ifndef byte 58 typedef unsigned char byte; 59 #endif /* byte */ 60 61 #ifndef word 62 typedef unsigned short word; 63 #endif /* word */ 64 65 typedef float msVec4[4]; 66 typedef float msVec3[3]; 67 typedef float msVec2[2]; 68 69 /* msFlag */ 70 typedef enum { 71 eSelected = 1, eSelected2 = 2, eHidden = 4, eDirty = 8, eAveraged = 16, eKeepVertex = 32, eSphereMap = 0x80, eHasAlpha = 0x40, eCombineAlpha = 0x20, eIgnoreAlpha = 0x10 72 } msFlag; 73 74 75 76 /* 77 !!! 78 !!! Do not use direct structs access like vertex->nFlags. Use msVertex_GetFlags(vertex) instead. This makes sure, 79 !!! that your plugin stays compatible with future versions of MilkShape 3D. 80 !!! 81 */ 82 83 84 85 /* msVertex: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 86 typedef struct msVertex 87 { 88 byte nFlags; 89 msVec3 Vertex; 90 float u, v; 91 char nBoneIndex; 92 } msVertex; 93 94 /* msVertexEx: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 95 typedef struct msVertexEx 96 { 97 char nBoneIndices[3]; 98 byte nBoneWeights[3]; 99 unsigned int nExtra; 100 } msVertexEx; 101 102 /* msTriangle: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 103 typedef struct msTriangle 104 { 105 word nFlags; 106 word nVertexIndices[3]; 107 word nNormalIndices[3]; 108 msVec3 Normal; 109 byte nSmoothingGroup; 110 } msTriangle; 111 112 /* msTriangleEx: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 113 typedef struct msTriangleEx 114 { 115 msVec3 Normals[3]; 116 msVec2 TexCoords[3]; 117 } msTriangleEx; 118 119 /* msMesh: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 120 typedef struct msMesh 121 { 122 byte nFlags; 123 char szName[MS_MAX_NAME]; 124 char nMaterialIndex; 125 126 word nNumVertices; 127 word nNumAllocedVertices; 128 msVertex* pVertices; 129 130 word nNumNormals; 131 word nNumAllocedNormals; 132 msVec3* pNormals; 133 134 word nNumTriangles; 135 word nNumAllocedTriangles; 136 msTriangle* pTriangles; 137 138 char* pszComment; 139 msVertexEx *pVertexExs; 140 msTriangleEx *pTriangleExs; 141 } msMesh; 142 143 /* msMaterial: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 144 typedef struct msMaterial 145 { 146 int nFlags; 147 char szName[MS_MAX_NAME]; 148 msVec4 Ambient; 149 msVec4 Diffuse; 150 msVec4 Specular; 151 msVec4 Emissive; 152 float fShininess; 153 float fTransparency; 154 char szDiffuseTexture[MS_MAX_PATH]; 155 char szAlphaTexture[MS_MAX_PATH]; 156 int nName; 157 int nWidth; 158 int nHeight; 159 char* pszComment; 160 } msMaterial; 161 162 /* msPositionKey */ 163 typedef struct msPositionKey 164 { 165 float fTime; 166 msVec3 Position; 167 } msPositionKey; 168 169 /* msRotationKey */ 170 typedef struct msRotationKey 171 { 172 float fTime; 173 msVec3 Rotation; 174 } msRotationKey; 175 176 /* msBone: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 177 typedef struct msBone 178 { 179 int nFlags; 180 char szName[MS_MAX_NAME]; 181 char szParentName[MS_MAX_NAME]; 182 msVec3 Position; 183 msVec3 Rotation; 184 185 int nNumPositionKeys; 186 int nNumAllocedPositionKeys; 187 msPositionKey* pPositionKeys; 188 189 int nNumRotationKeys; 190 int nNumAllocedRotationKeys; 191 msRotationKey* pRotationKeys; 192 char* pszComment; 193 } msBone; 194 195 /* msModel: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 196 typedef struct msModel 197 { 198 int nNumMeshes; 199 int nNumAllocedMeshes; 200 msMesh* pMeshes; 201 202 int nNumMaterials; 203 int nNumAllocedMaterials; 204 msMaterial* pMaterials; 205 206 int nNumBones; 207 int nNumAllocedBones; 208 msBone* pBones; 209 210 int nFrame; 211 int nTotalFrames; 212 213 msVec3 Position; 214 msVec3 Rotation; 215 216 msVec3 CameraPosition; 217 msVec2 CameraRotationXY; 218 219 char* pszComment; 220 char* pszFileName; 221 } msModel; 222 223 224 225 /********************************************************************** 226 * 227 * MilkShape 3D Interface 228 * 229 **********************************************************************/ 230 231 /********************************************************************** 232 * msModel 233 **********************************************************************/ 234 235 MSLIB_API void msModel_Destroy (msModel *pModel); 236 237 MSLIB_API int msModel_GetMeshCount (msModel *pModel); 238 MSLIB_API int msModel_AddMesh (msModel *pModel); 239 MSLIB_API msMesh* msModel_GetMeshAt (msModel *pModel, int nIndex); 240 MSLIB_API int msModel_FindMeshByName (msModel *pModel, const char *szName); 241 242 MSLIB_API int msModel_GetMaterialCount (msModel *pModel); 243 MSLIB_API int msModel_AddMaterial (msModel *pModel); 244 MSLIB_API msMaterial* msModel_GetMaterialAt (msModel *pModel, int nIndex); 245 MSLIB_API int msModel_FindMaterialByName (msModel *pModel, const char *szName); 246 247 MSLIB_API int msModel_GetBoneCount (msModel *pModel); 248 MSLIB_API int msModel_AddBone (msModel *pModel); 249 MSLIB_API msBone* msModel_GetBoneAt (msModel *pModel, int nIndex); 250 MSLIB_API int msModel_FindBoneByName (msModel *pModel, const char *szName); 251 252 MSLIB_API int msModel_SetFrame (msModel *pModel, int nFrame); 253 MSLIB_API int msModel_GetFrame (msModel *pModel); 254 MSLIB_API int msModel_SetTotalFrames (msModel *pModel, int nTotalFrames); 255 MSLIB_API int msModel_GetTotalFrames (msModel *pModel); 256 MSLIB_API void msModel_SetPosition (msModel *pModel, msVec3 Position); 257 MSLIB_API void msModel_GetPosition (msModel *pModel, msVec3 Position); 258 MSLIB_API void msModel_SetRotation (msModel *pModel, msVec3 Rotation); 259 MSLIB_API void msModel_GetRotation (msModel *pModel, msVec3 Rotation); 260 MSLIB_API void msModel_SetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY); 261 MSLIB_API void msModel_GetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY); 262 MSLIB_API void msModel_SetComment (msModel *pModel, const char *pszComment); 263 MSLIB_API int msModel_GetComment (msModel *pModel, char *pszComment, int nMaxCommentLength); 264 MSLIB_API void msModel_SetFileName (msModel *pModel, const char *pszFileName); 265 MSLIB_API int msModel_GetFileName (msModel *pModel, char *pszFileName, int nMaxFileNameLength); 266 267 /********************************************************************** 268 * msMesh 269 **********************************************************************/ 270 271 MSLIB_API void msMesh_Destroy (msMesh *pMesh); 272 MSLIB_API void msMesh_SetFlags (msMesh *pMesh, byte nFlags); 273 MSLIB_API byte msMesh_GetFlags (msMesh *pMesh); 274 MSLIB_API void msMesh_SetName (msMesh *pMesh, const char *szName); 275 MSLIB_API void msMesh_GetName (msMesh *pMesh, char *szName, int nMaxLength); 276 MSLIB_API void msMesh_SetMaterialIndex (msMesh *pMesh, int nIndex); 277 MSLIB_API int msMesh_GetMaterialIndex (msMesh *pMesh); 278 279 MSLIB_API int msMesh_GetVertexCount (msMesh *pMesh); 280 MSLIB_API int msMesh_AddVertex (msMesh *pMesh); 281 MSLIB_API msVertex* msMesh_GetVertexAt (msMesh *pMesh, int nIndex); 282 MSLIB_API msVertexEx* msMesh_GetVertexExAt (msMesh *pMesh, int nIndex); 283 MSLIB_API msVertex* msMesh_GetInterpolatedVertexAt (msMesh *pMesh, int nIndex); // NOT YET IMPLEMENTED 284 285 MSLIB_API int msMesh_GetTriangleCount (msMesh *pMesh); 286 MSLIB_API int msMesh_AddTriangle (msMesh *pMesh); 287 MSLIB_API msTriangle* msMesh_GetTriangleAt (msMesh *pMesh, int nIndex); 288 MSLIB_API msTriangleEx* msMesh_GetTriangleExAt (msMesh *pMesh, int nIndex); 289 290 MSLIB_API int msMesh_GetVertexNormalCount (msMesh *pMesh); 291 MSLIB_API int msMesh_AddVertexNormal (msMesh *pMesh); 292 MSLIB_API void msMesh_SetVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); 293 MSLIB_API void msMesh_GetVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); 294 MSLIB_API void msMesh_GetInterpolatedVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); // NOT YET IMPLEMENTED 295 MSLIB_API void msMesh_SetComment (msMesh *pMesh, const char *pszComment); 296 MSLIB_API int msMesh_GetComment (msMesh *pMesh, char *pszComment, int nMaxCommentLength); 297 298 /********************************************************************** 299 * msTriangle 300 **********************************************************************/ 301 302 MSLIB_API void msTriangle_SetFlags (msTriangle* pTriangle, word nFlags); 303 MSLIB_API word msTriangle_GetFlags (msTriangle* pTriangle); 304 MSLIB_API void msTriangle_SetVertexIndices (msTriangle *pTriangle, word nIndices[]); 305 MSLIB_API void msTriangle_GetVertexIndices (msTriangle *pTriangle, word nIndices[]); 306 MSLIB_API void msTriangle_SetNormalIndices (msTriangle *pTriangle, word nNormalIndices[]); 307 MSLIB_API void msTriangle_GetNormalIndices (msTriangle *pTriangle, word nNormalIndices[]); 308 MSLIB_API void msTriangle_SetSmoothingGroup (msTriangle *pTriangle, byte nSmoothingGroup); 309 MSLIB_API byte msTriangle_GetSmoothingGroup (msTriangle *pTriangle); 310 311 /********************************************************************** 312 * msTriangleEx 313 **********************************************************************/ 314 MSLIB_API void msTriangleEx_SetNormal (msTriangleEx *pTriangle, int nIndex, msVec3 Normal); 315 MSLIB_API void msTriangleEx_GetNormal (msTriangleEx *pTriangle, int nIndex, msVec3 Normal); 316 MSLIB_API void msTriangleEx_SetTexCoord (msTriangleEx *pTriangle, int nIndex, msVec2 TexCoord); 317 MSLIB_API void msTriangleEx_GetTexCoord (msTriangleEx *pTriangle, int nIndex, msVec2 TexCoord); 318 319 /********************************************************************** 320 * msVertex 321 **********************************************************************/ 322 323 MSLIB_API void msVertex_SetFlags (msVertex* pVertex, byte nFlags); 324 MSLIB_API byte msVertex_GetFlags (msVertex* pVertex); 325 MSLIB_API void msVertex_SetVertex (msVertex* pVertex, msVec3 Vertex); 326 MSLIB_API void msVertex_GetVertex (msVertex* pVertex, msVec3 Vertex); 327 MSLIB_API void msVertex_SetTexCoords (msVertex* pVertex, msVec2 st); 328 MSLIB_API void msVertex_GetTexCoords (msVertex* pVertex, msVec2 st); 329 MSLIB_API int msVertex_SetBoneIndex (msVertex* pVertex, int nBoneIndex); 330 MSLIB_API int msVertex_GetBoneIndex (msVertex* pVertex); 331 332 /********************************************************************** 333 * msVertexEx 334 **********************************************************************/ 335 336 MSLIB_API int msVertexEx_SetBoneIndices (msVertexEx* pVertex, int nIndex, int nBoneIndex); 337 MSLIB_API int msVertexEx_GetBoneIndices (msVertexEx* pVertex, int nIndex); 338 MSLIB_API int msVertexEx_SetBoneWeights (msVertexEx* pVertex, int nIndex, int nWeight); 339 MSLIB_API int msVertexEx_GetBoneWeights (msVertexEx* pVertex, int nIndex); 340 MSLIB_API unsigned int msVertexEx_SetExtra (msVertexEx* pVertex, int nIndex, unsigned int nExtra); 341 MSLIB_API unsigned int msVertexEx_GetExtra (msVertexEx* pVertex, int nIndex); 342 343 /********************************************************************** 344 * msMaterial 345 **********************************************************************/ 346 347 MSLIB_API void msMaterial_Destroy (msMaterial *pMaterial); 348 MSLIB_API void msMaterial_SetFlags (msMaterial *pMaterial, int nFlags); 349 MSLIB_API int msMaterial_GetFlags (msMaterial *pMaterial); 350 MSLIB_API void msMaterial_SetName (msMaterial *pMaterial, const char *szName); 351 MSLIB_API void msMaterial_GetName (msMaterial *pMaterial, char *szName, int nMaxLength); 352 MSLIB_API void msMaterial_SetAmbient (msMaterial *pMaterial, msVec4 Ambient); 353 MSLIB_API void msMaterial_GetAmbient (msMaterial *pMaterial, msVec4 Ambient); 354 MSLIB_API void msMaterial_SetDiffuse (msMaterial *pMaterial, msVec4 Diffuse); 355 MSLIB_API void msMaterial_GetDiffuse (msMaterial *pMaterial, msVec4 Diffuse); 356 MSLIB_API void msMaterial_SetSpecular (msMaterial *pMaterial, msVec4 Specular); 357 MSLIB_API void msMaterial_GetSpecular (msMaterial *pMaterial, msVec4 Specular); 358 MSLIB_API void msMaterial_SetEmissive (msMaterial *pMaterial, msVec4 Emissive); 359 MSLIB_API void msMaterial_GetEmissive (msMaterial *pMaterial, msVec4 Emissive); 360 MSLIB_API void msMaterial_SetShininess (msMaterial *pMaterial, float fShininess); 361 MSLIB_API float msMaterial_GetShininess (msMaterial *pMaterial); 362 MSLIB_API void msMaterial_SetTransparency (msMaterial *pMaterial, float fTransparency); 363 MSLIB_API float msMaterial_GetTransparency (msMaterial *pMaterial); 364 MSLIB_API void msMaterial_SetDiffuseTexture (msMaterial *pMaterial, const char *szDiffuseTexture); 365 MSLIB_API void msMaterial_GetDiffuseTexture (msMaterial *pMaterial, char *szDiffuseTexture, int nMaxLength); 366 MSLIB_API void msMaterial_SetDiffuseTextureWidth (msMaterial *pMaterial, int nWidth); 367 MSLIB_API int msMaterial_GetDiffuseTextureWidth (msMaterial *pMaterial); 368 MSLIB_API void msMaterial_SetDiffuseTextureHeight (msMaterial *pMaterial, int nHeight); 369 MSLIB_API int msMaterial_GetDiffuseTextureHeight (msMaterial *pMaterial); 370 MSLIB_API void msMaterial_SetAlphaTexture (msMaterial *pMaterial, const char *szAlphaTexture); 371 MSLIB_API void msMaterial_GetAlphaTexture (msMaterial *pMaterial, char *szAlphaTexture, int nMaxLength); 372 MSLIB_API void msMaterial_SetComment (msMaterial *pMaterial, const char *pszComment); 373 MSLIB_API int msMaterial_GetComment (msMaterial *pMaterial, char *pszComment, int nMaxCommentLength); 374 375 /********************************************************************** 376 * msBone 377 **********************************************************************/ 378 379 MSLIB_API void msBone_Destroy (msBone *pBone); 380 MSLIB_API void msBone_SetFlags (msBone *pBone, int nFlags); 381 MSLIB_API int msBone_GetFlags (msBone *pBone); 382 MSLIB_API void msBone_SetName (msBone *pBone, const char *szName); 383 MSLIB_API void msBone_GetName (msBone *pBone, char *szName, int nMaxLength); 384 MSLIB_API void msBone_SetParentName (msBone *pBone, const char *szParentName); 385 MSLIB_API void msBone_GetParentName (msBone *pBone, char *szParentName, int nMaxLength); 386 MSLIB_API void msBone_SetPosition (msBone *pBone, msVec3 Position); 387 MSLIB_API void msBone_GetPosition (msBone *pBone, msVec3 Position); 388 MSLIB_API void msBone_GetInterpolatedPosition (msBone *pBone, msVec3 Position); // NOT YET IMPLEMENTED 389 MSLIB_API void msBone_SetRotation (msBone *pBone, msVec3 Rotation); 390 MSLIB_API void msBone_GetRotation (msBone *pBone, msVec3 Rotation); 391 MSLIB_API void msBone_GetInterpolatedRotation (msBone *pBone, msVec3 Rotation); // NOT YET IMPLEMENTED 392 393 MSLIB_API int msBone_GetPositionKeyCount (msBone *pBone); 394 MSLIB_API int msBone_AddPositionKey (msBone *pBone, float fTime, msVec3 Position); 395 MSLIB_API msPositionKey* msBone_GetPositionKeyAt (msBone *pBone, int nIndex); 396 MSLIB_API void msBone_RemovePositionKeyAt (msBone *pBone, int nIndex); 397 398 MSLIB_API int msBone_GetRotationKeyCount (msBone *pBone); 399 MSLIB_API int msBone_AddRotationKey (msBone *pBone, float fTime, msVec3 Rotation); 400 MSLIB_API msRotationKey* msBone_GetRotationKeyAt (msBone *pBone, int nIndex); 401 MSLIB_API void msBone_RemoveRotationKeyAt (msBone *pBone, int nIndex); 402 MSLIB_API void msBone_SetComment (msBone *pBone, const char *pszComment); 403 MSLIB_API int msBone_GetComment (msBone *pBone, char *pszComment, int nMaxCommentLength); 404 405 406 407 #ifdef __cplusplus 408 } 409 #endif /* __cplusplus */ 410 411 412 413 #ifdef WIN32 414 #include <poppack.h> 415 #endif /* WIN32 */ 416 417 418 419 #endif /* __MSLIB_H__ */