1 /********************************************************************** 2 * 3 * MilkShape 3D Model Import/Export API 4 * 5 * Jan 27 2007, 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 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 char* pszComment; 158 } msMaterial; 159 160 /* msPositionKey */ 161 typedef struct msPositionKey 162 { 163 float fTime; 164 msVec3 Position; 165 } msPositionKey; 166 167 /* msRotationKey */ 168 typedef struct msRotationKey 169 { 170 float fTime; 171 msVec3 Rotation; 172 } msRotationKey; 173 174 /* msBone: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 175 typedef struct msBone 176 { 177 int nFlags; 178 char szName[MS_MAX_NAME]; 179 char szParentName[MS_MAX_NAME]; 180 msVec3 Position; 181 msVec3 Rotation; 182 183 int nNumPositionKeys; 184 int nNumAllocedPositionKeys; 185 msPositionKey* pPositionKeys; 186 187 int nNumRotationKeys; 188 int nNumAllocedRotationKeys; 189 msRotationKey* pRotationKeys; 190 char* pszComment; 191 } msBone; 192 193 /* msModel: used internally only, DO NOT USE DIRECTLY, USE API INSTEAD */ 194 typedef struct msModel 195 { 196 int nNumMeshes; 197 int nNumAllocedMeshes; 198 msMesh* pMeshes; 199 200 int nNumMaterials; 201 int nNumAllocedMaterials; 202 msMaterial* pMaterials; 203 204 int nNumBones; 205 int nNumAllocedBones; 206 msBone* pBones; 207 208 int nFrame; 209 int nTotalFrames; 210 211 msVec3 Position; 212 msVec3 Rotation; 213 214 msVec3 CameraPosition; 215 msVec2 CameraRotationXY; 216 217 char* pszComment; 218 } msModel; 219 220 221 222 /********************************************************************** 223 * 224 * MilkShape 3D Interface 225 * 226 **********************************************************************/ 227 228 /********************************************************************** 229 * msModel 230 **********************************************************************/ 231 232 MSLIB_API void msModel_Destroy (msModel *pModel); 233 234 MSLIB_API int msModel_GetMeshCount (msModel *pModel); 235 MSLIB_API int msModel_AddMesh (msModel *pModel); 236 MSLIB_API msMesh* msModel_GetMeshAt (msModel *pModel, int nIndex); 237 MSLIB_API int msModel_FindMeshByName (msModel *pModel, const char *szName); 238 239 MSLIB_API int msModel_GetMaterialCount (msModel *pModel); 240 MSLIB_API int msModel_AddMaterial (msModel *pModel); 241 MSLIB_API msMaterial* msModel_GetMaterialAt (msModel *pModel, int nIndex); 242 MSLIB_API int msModel_FindMaterialByName (msModel *pModel, const char *szName); 243 244 MSLIB_API int msModel_GetBoneCount (msModel *pModel); 245 MSLIB_API int msModel_AddBone (msModel *pModel); 246 MSLIB_API msBone* msModel_GetBoneAt (msModel *pModel, int nIndex); 247 MSLIB_API int msModel_FindBoneByName (msModel *pModel, const char *szName); 248 249 MSLIB_API int msModel_SetFrame (msModel *pModel, int nFrame); 250 MSLIB_API int msModel_GetFrame (msModel *pModel); 251 MSLIB_API int msModel_SetTotalFrames (msModel *pModel, int nTotalFrames); 252 MSLIB_API int msModel_GetTotalFrames (msModel *pModel); 253 MSLIB_API void msModel_SetPosition (msModel *pModel, msVec3 Position); 254 MSLIB_API void msModel_GetPosition (msModel *pModel, msVec3 Position); 255 MSLIB_API void msModel_SetRotation (msModel *pModel, msVec3 Rotation); 256 MSLIB_API void msModel_GetRotation (msModel *pModel, msVec3 Rotation); 257 MSLIB_API void msModel_SetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY); 258 MSLIB_API void msModel_GetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY); 259 MSLIB_API void msModel_SetComment (msModel *pModel, const char *pszComment); 260 MSLIB_API int msModel_GetComment (msModel *pModel, char *pszComment, int nMaxCommentLength); 261 262 /********************************************************************** 263 * msMesh 264 **********************************************************************/ 265 266 MSLIB_API void msMesh_Destroy (msMesh *pMesh); 267 MSLIB_API void msMesh_SetFlags (msMesh *pMesh, byte nFlags); 268 MSLIB_API byte msMesh_GetFlags (msMesh *pMesh); 269 MSLIB_API void msMesh_SetName (msMesh *pMesh, const char *szName); 270 MSLIB_API void msMesh_GetName (msMesh *pMesh, char *szName, int nMaxLength); 271 MSLIB_API void msMesh_SetMaterialIndex (msMesh *pMesh, int nIndex); 272 MSLIB_API int msMesh_GetMaterialIndex (msMesh *pMesh); 273 274 MSLIB_API int msMesh_GetVertexCount (msMesh *pMesh); 275 MSLIB_API int msMesh_AddVertex (msMesh *pMesh); 276 MSLIB_API msVertex* msMesh_GetVertexAt (msMesh *pMesh, int nIndex); 277 MSLIB_API msVertexEx* msMesh_GetVertexExAt (msMesh *pMesh, int nIndex); 278 MSLIB_API msVertex* msMesh_GetInterpolatedVertexAt (msMesh *pMesh, int nIndex); // NOT YET IMPLEMENTED 279 280 MSLIB_API int msMesh_GetTriangleCount (msMesh *pMesh); 281 MSLIB_API int msMesh_AddTriangle (msMesh *pMesh); 282 MSLIB_API msTriangle* msMesh_GetTriangleAt (msMesh *pMesh, int nIndex); 283 MSLIB_API msTriangleEx* msMesh_GetTriangleExAt (msMesh *pMesh, int nIndex); 284 285 MSLIB_API int msMesh_GetVertexNormalCount (msMesh *pMesh); 286 MSLIB_API int msMesh_AddVertexNormal (msMesh *pMesh); 287 MSLIB_API void msMesh_SetVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); 288 MSLIB_API void msMesh_GetVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); 289 MSLIB_API void msMesh_GetInterpolatedVertexNormalAt (msMesh *pMesh, int nIndex, msVec3 Normal); // NOT YET IMPLEMENTED 290 MSLIB_API void msMesh_SetComment (msMesh *pMesh, const char *pszComment); 291 MSLIB_API int msMesh_GetComment (msMesh *pMesh, char *pszComment, int nMaxCommentLength); 292 293 /********************************************************************** 294 * msTriangle 295 **********************************************************************/ 296 297 MSLIB_API void msTriangle_SetFlags (msTriangle* pTriangle, word nFlags); 298 MSLIB_API word msTriangle_GetFlags (msTriangle* pTriangle); 299 MSLIB_API void msTriangle_SetVertexIndices (msTriangle *pTriangle, word nIndices[]); 300 MSLIB_API void msTriangle_GetVertexIndices (msTriangle *pTriangle, word nIndices[]); 301 MSLIB_API void msTriangle_SetNormalIndices (msTriangle *pTriangle, word nNormalIndices[]); 302 MSLIB_API void msTriangle_GetNormalIndices (msTriangle *pTriangle, word nNormalIndices[]); 303 MSLIB_API void msTriangle_SetSmoothingGroup (msTriangle *pTriangle, byte nSmoothingGroup); 304 MSLIB_API byte msTriangle_GetSmoothingGroup (msTriangle *pTriangle); 305 306 /********************************************************************** 307 * msTriangleEx 308 **********************************************************************/ 309 MSLIB_API void msTriangleEx_SetNormal (msTriangleEx *pTriangle, int nIndex, msVec3 Normal); 310 MSLIB_API void msTriangleEx_GetNormal (msTriangleEx *pTriangle, int nIndex, msVec3 Normal); 311 MSLIB_API void msTriangleEx_SetTexCoord (msTriangleEx *pTriangle, int nIndex, msVec2 TexCoord); 312 MSLIB_API void msTriangleEx_GetTexCoord (msTriangleEx *pTriangle, int nIndex, msVec2 TexCoord); 313 314 /********************************************************************** 315 * msVertex 316 **********************************************************************/ 317 318 MSLIB_API void msVertex_SetFlags (msVertex* pVertex, byte nFlags); 319 MSLIB_API byte msVertex_GetFlags (msVertex* pVertex); 320 MSLIB_API void msVertex_SetVertex (msVertex* pVertex, msVec3 Vertex); 321 MSLIB_API void msVertex_GetVertex (msVertex* pVertex, msVec3 Vertex); 322 MSLIB_API void msVertex_SetTexCoords (msVertex* pVertex, msVec2 st); 323 MSLIB_API void msVertex_GetTexCoords (msVertex* pVertex, msVec2 st); 324 MSLIB_API int msVertex_SetBoneIndex (msVertex* pVertex, int nBoneIndex); 325 MSLIB_API int msVertex_GetBoneIndex (msVertex* pVertex); 326 327 /********************************************************************** 328 * msVertexEx 329 **********************************************************************/ 330 331 MSLIB_API int msVertexEx_SetBoneIndices (msVertexEx* pVertex, int nIndex, int nBoneIndex); 332 MSLIB_API int msVertexEx_GetBoneIndices (msVertexEx* pVertex, int nIndex); 333 MSLIB_API int msVertexEx_SetBoneWeights (msVertexEx* pVertex, int nIndex, int nWeight); 334 MSLIB_API int msVertexEx_GetBoneWeights (msVertexEx* pVertex, int nIndex); 335 MSLIB_API unsigned int msVertexEx_SetExtra (msVertexEx* pVertex, int nIndex, unsigned int nExtra); 336 MSLIB_API unsigned int msVertexEx_GetExtra (msVertexEx* pVertex, int nIndex); 337 338 /********************************************************************** 339 * msMaterial 340 **********************************************************************/ 341 342 MSLIB_API void msMaterial_SetFlags (msMaterial *pMaterial, int nFlags); 343 MSLIB_API int msMaterial_GetFlags (msMaterial *pMaterial); 344 MSLIB_API void msMaterial_SetName (msMaterial *pMaterial, const char *szName); 345 MSLIB_API void msMaterial_GetName (msMaterial *pMaterial, char *szName, int nMaxLength); 346 MSLIB_API void msMaterial_SetAmbient (msMaterial *pMaterial, msVec4 Ambient); 347 MSLIB_API void msMaterial_GetAmbient (msMaterial *pMaterial, msVec4 Ambient); 348 MSLIB_API void msMaterial_SetDiffuse (msMaterial *pMaterial, msVec4 Diffuse); 349 MSLIB_API void msMaterial_GetDiffuse (msMaterial *pMaterial, msVec4 Diffuse); 350 MSLIB_API void msMaterial_SetSpecular (msMaterial *pMaterial, msVec4 Specular); 351 MSLIB_API void msMaterial_GetSpecular (msMaterial *pMaterial, msVec4 Specular); 352 MSLIB_API void msMaterial_SetEmissive (msMaterial *pMaterial, msVec4 Emissive); 353 MSLIB_API void msMaterial_GetEmissive (msMaterial *pMaterial, msVec4 Emissive); 354 MSLIB_API void msMaterial_SetShininess (msMaterial *pMaterial, float fShininess); 355 MSLIB_API float msMaterial_GetShininess (msMaterial *pMaterial); 356 MSLIB_API void msMaterial_SetTransparency (msMaterial *pMaterial, float fTransparency); 357 MSLIB_API float msMaterial_GetTransparency (msMaterial *pMaterial); 358 MSLIB_API void msMaterial_SetDiffuseTexture (msMaterial *pMaterial, const char *szDiffuseTexture); 359 MSLIB_API void msMaterial_GetDiffuseTexture (msMaterial *pMaterial, char *szDiffuseTexture, int nMaxLength); 360 MSLIB_API void msMaterial_SetAlphaTexture (msMaterial *pMaterial, const char *szAlphaTexture); 361 MSLIB_API void msMaterial_GetAlphaTexture (msMaterial *pMaterial, char *szAlphaTexture, int nMaxLength); 362 MSLIB_API void msMaterial_SetComment (msMaterial *pMaterial, const char *pszComment); 363 MSLIB_API int msMaterial_GetComment (msMaterial *pMaterial, char *pszComment, int nMaxCommentLength); 364 365 /********************************************************************** 366 * msBone 367 **********************************************************************/ 368 369 MSLIB_API void msBone_Destroy (msBone *pBone); 370 MSLIB_API void msBone_SetFlags (msBone *pBone, int nFlags); 371 MSLIB_API int msBone_GetFlags (msBone *pBone); 372 MSLIB_API void msBone_SetName (msBone *pBone, const char *szName); 373 MSLIB_API void msBone_GetName (msBone *pBone, char *szName, int nMaxLength); 374 MSLIB_API void msBone_SetParentName (msBone *pBone, const char *szParentName); 375 MSLIB_API void msBone_GetParentName (msBone *pBone, char *szParentName, int nMaxLength); 376 MSLIB_API void msBone_SetPosition (msBone *pBone, msVec3 Position); 377 MSLIB_API void msBone_GetPosition (msBone *pBone, msVec3 Position); 378 MSLIB_API void msBone_GetInterpolatedPosition (msBone *pBone, msVec3 Position); // NOT YET IMPLEMENTED 379 MSLIB_API void msBone_SetRotation (msBone *pBone, msVec3 Rotation); 380 MSLIB_API void msBone_GetRotation (msBone *pBone, msVec3 Rotation); 381 MSLIB_API void msBone_GetInterpolatedRotation (msBone *pBone, msVec3 Rotation); // NOT YET IMPLEMENTED 382 383 MSLIB_API int msBone_GetPositionKeyCount (msBone *pBone); 384 MSLIB_API int msBone_AddPositionKey (msBone *pBone, float fTime, msVec3 Position); 385 MSLIB_API msPositionKey* msBone_GetPositionKeyAt (msBone *pBone, int nIndex); 386 387 MSLIB_API int msBone_GetRotationKeyCount (msBone *pBone); 388 MSLIB_API int msBone_AddRotationKey (msBone *pBone, float fTime, msVec3 Rotation); 389 MSLIB_API msRotationKey* msBone_GetRotationKeyAt (msBone *pBone, int nIndex); 390 MSLIB_API void msBone_SetComment (msBone *pBone, const char *pszComment); 391 MSLIB_API int msBone_GetComment (msBone *pBone, char *pszComment, int nMaxCommentLength); 392 393 394 395 #ifdef __cplusplus 396 } 397 #endif /* __cplusplus */ 398 399 400 401 #ifdef WIN32 402 #include <poppack.h> 403 #endif /* WIN32 */ 404 405 406 407 #endif /* __MSLIB_H__ */