summaryrefslogtreecommitdiff
path: root/src/mesh/assimp-master/include/assimp/cimport.h
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2022-03-04 10:47:15 -0600
committersanine <sanine.not@pm.me>2022-03-04 10:47:15 -0600
commit058f98a63658dc1a2579826ba167fd61bed1e21f (patch)
treebcba07a1615a14d943f3af3f815a42f3be86b2f3 /src/mesh/assimp-master/include/assimp/cimport.h
parent2f8028ac9e0812cb6f3cbb08f0f419e4e717bd22 (diff)
add assimp submodule
Diffstat (limited to 'src/mesh/assimp-master/include/assimp/cimport.h')
-rw-r--r--src/mesh/assimp-master/include/assimp/cimport.h1235
1 files changed, 1235 insertions, 0 deletions
diff --git a/src/mesh/assimp-master/include/assimp/cimport.h b/src/mesh/assimp-master/include/assimp/cimport.h
new file mode 100644
index 0000000..935ed18
--- /dev/null
+++ b/src/mesh/assimp-master/include/assimp/cimport.h
@@ -0,0 +1,1235 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2022, assimp team
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+
+/** @file cimport.h
+ * @brief Defines the C-API to the Open Asset Import Library.
+ */
+#pragma once
+#ifndef AI_ASSIMP_H_INC
+#define AI_ASSIMP_H_INC
+
+#ifdef __GNUC__
+#pragma GCC system_header
+#endif
+
+#include <assimp/importerdesc.h>
+#include <assimp/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct aiScene;
+struct aiFileIO;
+
+typedef void (*aiLogStreamCallback)(const char * /* message */, char * /* user */);
+
+// --------------------------------------------------------------------------------
+/** C-API: Represents a log stream. A log stream receives all log messages and
+ * streams them _somewhere_.
+ * @see aiGetPredefinedLogStream
+ * @see aiAttachLogStream
+ * @see aiDetachLogStream */
+// --------------------------------------------------------------------------------
+struct aiLogStream {
+ /** callback to be called */
+ aiLogStreamCallback callback;
+
+ /** user data to be passed to the callback */
+ char *user;
+};
+
+// --------------------------------------------------------------------------------
+/** C-API: Represents an opaque set of settings to be used during importing.
+ * @see aiCreatePropertyStore
+ * @see aiReleasePropertyStore
+ * @see aiImportFileExWithProperties
+ * @see aiSetPropertyInteger
+ * @see aiSetPropertyFloat
+ * @see aiSetPropertyString
+ * @see aiSetPropertyMatrix
+ */
+// --------------------------------------------------------------------------------
+struct aiPropertyStore {
+ char sentinel;
+};
+
+/** Our own C boolean type */
+typedef int aiBool;
+
+#define AI_FALSE 0
+#define AI_TRUE 1
+
+// --------------------------------------------------------------------------------
+/** Reads the given file and returns its content.
+ *
+ * If the call succeeds, the imported data is returned in an aiScene structure.
+ * The data is intended to be read-only, it stays property of the ASSIMP
+ * library and will be stable until aiReleaseImport() is called. After you're
+ * done with it, call aiReleaseImport() to free the resources associated with
+ * this file. If the import fails, NULL is returned instead. Call
+ * aiGetErrorString() to retrieve a human-readable error text.
+ * @param pFile Path and filename of the file to be imported,
+ * expected to be a null-terminated c-string. NULL is not a valid value.
+ * @param pFlags Optional post processing steps to be executed after
+ * a successful import. Provide a bitwise combination of the
+ * #aiPostProcessSteps flags.
+ * @return Pointer to the imported data or NULL if the import failed.
+ */
+ASSIMP_API const C_STRUCT aiScene *aiImportFile(
+ const char *pFile,
+ unsigned int pFlags);
+
+// --------------------------------------------------------------------------------
+/** Reads the given file using user-defined I/O functions and returns
+ * its content.
+ *
+ * If the call succeeds, the imported data is returned in an aiScene structure.
+ * The data is intended to be read-only, it stays property of the ASSIMP
+ * library and will be stable until aiReleaseImport() is called. After you're
+ * done with it, call aiReleaseImport() to free the resources associated with
+ * this file. If the import fails, NULL is returned instead. Call
+ * aiGetErrorString() to retrieve a human-readable error text.
+ * @param pFile Path and filename of the file to be imported,
+ * expected to be a null-terminated c-string. NULL is not a valid value.
+ * @param pFlags Optional post processing steps to be executed after
+ * a successful import. Provide a bitwise combination of the
+ * #aiPostProcessSteps flags.
+ * @param pFS aiFileIO structure. Will be used to open the model file itself
+ * and any other files the loader needs to open. Pass NULL to use the default
+ * implementation.
+ * @return Pointer to the imported data or NULL if the import failed.
+ * @note Include <aiFileIO.h> for the definition of #aiFileIO.
+ */
+ASSIMP_API const C_STRUCT aiScene *aiImportFileEx(
+ const char *pFile,
+ unsigned int pFlags,
+ C_STRUCT aiFileIO *pFS);
+
+// --------------------------------------------------------------------------------
+/** Same as #aiImportFileEx, but adds an extra parameter containing importer settings.
+ *
+ * @param pFile Path and filename of the file to be imported,
+ * expected to be a null-terminated c-string. NULL is not a valid value.
+ * @param pFlags Optional post processing steps to be executed after
+ * a successful import. Provide a bitwise combination of the
+ * #aiPostProcessSteps flags.
+ * @param pFS aiFileIO structure. Will be used to open the model file itself
+ * and any other files the loader needs to open. Pass NULL to use the default
+ * implementation.
+ * @param pProps #aiPropertyStore instance containing import settings.
+ * @return Pointer to the imported data or NULL if the import failed.
+ * @note Include <aiFileIO.h> for the definition of #aiFileIO.
+ * @see aiImportFileEx
+ */
+ASSIMP_API const C_STRUCT aiScene *aiImportFileExWithProperties(
+ const char *pFile,
+ unsigned int pFlags,
+ C_STRUCT aiFileIO *pFS,
+ const C_STRUCT aiPropertyStore *pProps);
+
+// --------------------------------------------------------------------------------
+/** Reads the given file from a given memory buffer,
+ *
+ * If the call succeeds, the contents of the file are returned as a pointer to an
+ * aiScene object. The returned data is intended to be read-only, the importer keeps
+ * ownership of the data and will destroy it upon destruction. If the import fails,
+ * NULL is returned.
+ * A human-readable error description can be retrieved by calling aiGetErrorString().
+ * @param pBuffer Pointer to the file data
+ * @param pLength Length of pBuffer, in bytes
+ * @param pFlags Optional post processing steps to be executed after
+ * a successful import. Provide a bitwise combination of the
+ * #aiPostProcessSteps flags. If you wish to inspect the imported
+ * scene first in order to fine-tune your post-processing setup,
+ * consider to use #aiApplyPostProcessing().
+ * @param pHint An additional hint to the library. If this is a non empty string,
+ * the library looks for a loader to support the file extension specified by pHint
+ * and passes the file to the first matching loader. If this loader is unable to
+ * completely the request, the library continues and tries to determine the file
+ * format on its own, a task that may or may not be successful.
+ * Check the return value, and you'll know ...
+ * @return A pointer to the imported data, NULL if the import failed.
+ *
+ * @note This is a straightforward way to decode models from memory
+ * buffers, but it doesn't handle model formats that spread their
+ * data across multiple files or even directories. Examples include
+ * OBJ or MD3, which outsource parts of their material info into
+ * external scripts. If you need full functionality, provide
+ * a custom IOSystem to make Assimp find these files and use
+ * the regular aiImportFileEx()/aiImportFileExWithProperties() API.
+ */
+ASSIMP_API const C_STRUCT aiScene *aiImportFileFromMemory(
+ const char *pBuffer,
+ unsigned int pLength,
+ unsigned int pFlags,
+ const char *pHint);
+
+// --------------------------------------------------------------------------------
+/** Same as #aiImportFileFromMemory, but adds an extra parameter containing importer settings.
+ *
+ * @param pBuffer Pointer to the file data
+ * @param pLength Length of pBuffer, in bytes
+ * @param pFlags Optional post processing steps to be executed after
+ * a successful import. Provide a bitwise combination of the
+ * #aiPostProcessSteps flags. If you wish to inspect the imported
+ * scene first in order to fine-tune your post-processing setup,
+ * consider to use #aiApplyPostProcessing().
+ * @param pHint An additional hint to the library. If this is a non empty string,
+ * the library looks for a loader to support the file extension specified by pHint
+ * and passes the file to the first matching loader. If this loader is unable to
+ * completely the request, the library continues and tries to determine the file
+ * format on its own, a task that may or may not be successful.
+ * Check the return value, and you'll know ...
+ * @param pProps #aiPropertyStore instance containing import settings.
+ * @return A pointer to the imported data, NULL if the import failed.
+ *
+ * @note This is a straightforward way to decode models from memory
+ * buffers, but it doesn't handle model formats that spread their
+ * data across multiple files or even directories. Examples include
+ * OBJ or MD3, which outsource parts of their material info into
+ * external scripts. If you need full functionality, provide
+ * a custom IOSystem to make Assimp find these files and use
+ * the regular aiImportFileEx()/aiImportFileExWithProperties() API.
+ * @see aiImportFileFromMemory
+ */
+ASSIMP_API const C_STRUCT aiScene *aiImportFileFromMemoryWithProperties(
+ const char *pBuffer,
+ unsigned int pLength,
+ unsigned int pFlags,
+ const char *pHint,
+ const C_STRUCT aiPropertyStore *pProps);
+
+// --------------------------------------------------------------------------------
+/** Apply post-processing to an already-imported scene.
+ *
+ * This is strictly equivalent to calling #aiImportFile()/#aiImportFileEx with the
+ * same flags. However, you can use this separate function to inspect the imported
+ * scene first to fine-tune your post-processing setup.
+ * @param pScene Scene to work on.
+ * @param pFlags Provide a bitwise combination of the #aiPostProcessSteps flags.
+ * @return A pointer to the post-processed data. Post processing is done in-place,
+ * meaning this is still the same #aiScene which you passed for pScene. However,
+ * _if_ post-processing failed, the scene could now be NULL. That's quite a rare
+ * case, post processing steps are not really designed to 'fail'. To be exact,
+ * the #aiProcess_ValidateDataStructure flag is currently the only post processing step
+ * which can actually cause the scene to be reset to NULL.
+ */
+ASSIMP_API const C_STRUCT aiScene *aiApplyPostProcessing(
+ const C_STRUCT aiScene *pScene,
+ unsigned int pFlags);
+
+// --------------------------------------------------------------------------------
+/** Get one of the predefine log streams. This is the quick'n'easy solution to
+ * access Assimp's log system. Attaching a log stream can slightly reduce Assimp's
+ * overall import performance.
+ *
+ * Usage is rather simple (this will stream the log to a file, named log.txt, and
+ * the stdout stream of the process:
+ * @code
+ * struct aiLogStream c;
+ * c = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"log.txt");
+ * aiAttachLogStream(&c);
+ * c = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL);
+ * aiAttachLogStream(&c);
+ * @endcode
+ *
+ * @param pStreams One of the #aiDefaultLogStream enumerated values.
+ * @param file Solely for the #aiDefaultLogStream_FILE flag: specifies the file to write to.
+ * Pass NULL for all other flags.
+ * @return The log stream. callback is set to NULL if something went wrong.
+ */
+ASSIMP_API C_STRUCT aiLogStream aiGetPredefinedLogStream(
+ C_ENUM aiDefaultLogStream pStreams,
+ const char *file);
+
+// --------------------------------------------------------------------------------
+/** Attach a custom log stream to the libraries' logging system.
+ *
+ * Attaching a log stream can slightly reduce Assimp's overall import
+ * performance. Multiple log-streams can be attached.
+ * @param stream Describes the new log stream.
+ * @note To ensure proper destruction of the logging system, you need to manually
+ * call aiDetachLogStream() on every single log stream you attach.
+ * Alternatively (for the lazy folks) #aiDetachAllLogStreams is provided.
+ */
+ASSIMP_API void aiAttachLogStream(
+ const C_STRUCT aiLogStream *stream);
+
+// --------------------------------------------------------------------------------
+/** Enable verbose logging. Verbose logging includes debug-related stuff and
+ * detailed import statistics. This can have severe impact on import performance
+ * and memory consumption. However, it might be useful to find out why a file
+ * didn't read correctly.
+ * @param d AI_TRUE or AI_FALSE, your decision.
+ */
+ASSIMP_API void aiEnableVerboseLogging(aiBool d);
+
+// --------------------------------------------------------------------------------
+/** Detach a custom log stream from the libraries' logging system.
+ *
+ * This is the counterpart of #aiAttachLogStream. If you attached a stream,
+ * don't forget to detach it again.
+ * @param stream The log stream to be detached.
+ * @return AI_SUCCESS if the log stream has been detached successfully.
+ * @see aiDetachAllLogStreams
+ */
+ASSIMP_API C_ENUM aiReturn aiDetachLogStream(
+ const C_STRUCT aiLogStream *stream);
+
+// --------------------------------------------------------------------------------
+/** Detach all active log streams from the libraries' logging system.
+ * This ensures that the logging system is terminated properly and all
+ * resources allocated by it are actually freed. If you attached a stream,
+ * don't forget to detach it again.
+ * @see aiAttachLogStream
+ * @see aiDetachLogStream
+ */
+ASSIMP_API void aiDetachAllLogStreams(void);
+
+// --------------------------------------------------------------------------------
+/** Releases all resources associated with the given import process.
+ *
+ * Call this function after you're done with the imported data.
+ * @param pScene The imported data to release. NULL is a valid value.
+ */
+ASSIMP_API void aiReleaseImport(
+ const C_STRUCT aiScene *pScene);
+
+// --------------------------------------------------------------------------------
+/** Returns the error text of the last failed import process.
+ *
+ * @return A textual description of the error that occurred at the last
+ * import process. NULL if there was no error. There can't be an error if you
+ * got a non-NULL #aiScene from #aiImportFile/#aiImportFileEx/#aiApplyPostProcessing.
+ */
+ASSIMP_API const char *aiGetErrorString(void);
+
+// --------------------------------------------------------------------------------
+/** Returns whether a given file extension is supported by ASSIMP
+ *
+ * @param szExtension Extension for which the function queries support for.
+ * Must include a leading dot '.'. Example: ".3ds", ".md3"
+ * @return AI_TRUE if the file extension is supported.
+ */
+ASSIMP_API aiBool aiIsExtensionSupported(
+ const char *szExtension);
+
+// --------------------------------------------------------------------------------
+/** Get a list of all file extensions supported by ASSIMP.
+ *
+ * If a file extension is contained in the list this does, of course, not
+ * mean that ASSIMP is able to load all files with this extension.
+ * @param szOut String to receive the extension list.
+ * Format of the list: "*.3ds;*.obj;*.dae". NULL is not a valid parameter.
+ */
+ASSIMP_API void aiGetExtensionList(
+ C_STRUCT aiString *szOut);
+
+// --------------------------------------------------------------------------------
+/** Get the approximated storage required by an imported asset
+ * @param pIn Input asset.
+ * @param in Data structure to be filled.
+ */
+ASSIMP_API void aiGetMemoryRequirements(
+ const C_STRUCT aiScene *pIn,
+ C_STRUCT aiMemoryInfo *in);
+
+// --------------------------------------------------------------------------------
+/** Create an empty property store. Property stores are used to collect import
+ * settings.
+ * @return New property store. Property stores need to be manually destroyed using
+ * the #aiReleasePropertyStore API function.
+ */
+ASSIMP_API C_STRUCT aiPropertyStore *aiCreatePropertyStore(void);
+
+// --------------------------------------------------------------------------------
+/** Delete a property store.
+ * @param p Property store to be deleted.
+ */
+ASSIMP_API void aiReleasePropertyStore(C_STRUCT aiPropertyStore *p);
+
+// --------------------------------------------------------------------------------
+/** Set an integer property.
+ *
+ * This is the C-version of #Assimp::Importer::SetPropertyInteger(). In the C
+ * interface, properties are always shared by all imports. It is not possible to
+ * specify them per import.
+ *
+ * @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
+ * @param szName Name of the configuration property to be set. All supported
+ * public properties are defined in the config.h header file (AI_CONFIG_XXX).
+ * @param value New value for the property
+ */
+ASSIMP_API void aiSetImportPropertyInteger(
+ C_STRUCT aiPropertyStore *store,
+ const char *szName,
+ int value);
+
+// --------------------------------------------------------------------------------
+/** Set a floating-point property.
+ *
+ * This is the C-version of #Assimp::Importer::SetPropertyFloat(). In the C
+ * interface, properties are always shared by all imports. It is not possible to
+ * specify them per import.
+ *
+ * @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
+ * @param szName Name of the configuration property to be set. All supported
+ * public properties are defined in the config.h header file (AI_CONFIG_XXX).
+ * @param value New value for the property
+ */
+ASSIMP_API void aiSetImportPropertyFloat(
+ C_STRUCT aiPropertyStore *store,
+ const char *szName,
+ ai_real value);
+
+// --------------------------------------------------------------------------------
+/** Set a string property.
+ *
+ * This is the C-version of #Assimp::Importer::SetPropertyString(). In the C
+ * interface, properties are always shared by all imports. It is not possible to
+ * specify them per import.
+ *
+ * @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
+ * @param szName Name of the configuration property to be set. All supported
+ * public properties are defined in the config.h header file (AI_CONFIG_XXX).
+ * @param st New value for the property
+ */
+ASSIMP_API void aiSetImportPropertyString(
+ C_STRUCT aiPropertyStore *store,
+ const char *szName,
+ const C_STRUCT aiString *st);
+
+// --------------------------------------------------------------------------------
+/** Set a matrix property.
+ *
+ * This is the C-version of #Assimp::Importer::SetPropertyMatrix(). In the C
+ * interface, properties are always shared by all imports. It is not possible to
+ * specify them per import.
+ *
+ * @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
+ * @param szName Name of the configuration property to be set. All supported
+ * public properties are defined in the config.h header file (AI_CONFIG_XXX).
+ * @param mat New value for the property
+ */
+ASSIMP_API void aiSetImportPropertyMatrix(
+ C_STRUCT aiPropertyStore *store,
+ const char *szName,
+ const C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Construct a quaternion from a 3x3 rotation matrix.
+ * @param quat Receives the output quaternion.
+ * @param mat Matrix to 'quaternionize'.
+ * @see aiQuaternion(const aiMatrix3x3& pRotMatrix)
+ */
+ASSIMP_API void aiCreateQuaternionFromMatrix(
+ C_STRUCT aiQuaternion *quat,
+ const C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Decompose a transformation matrix into its rotational, translational and
+ * scaling components.
+ *
+ * @param mat Matrix to decompose
+ * @param scaling Receives the scaling component
+ * @param rotation Receives the rotational component
+ * @param position Receives the translational component.
+ * @see aiMatrix4x4::Decompose (aiVector3D&, aiQuaternion&, aiVector3D&) const;
+ */
+ASSIMP_API void aiDecomposeMatrix(
+ const C_STRUCT aiMatrix4x4 *mat,
+ C_STRUCT aiVector3D *scaling,
+ C_STRUCT aiQuaternion *rotation,
+ C_STRUCT aiVector3D *position);
+
+// --------------------------------------------------------------------------------
+/** Transpose a 4x4 matrix.
+ * @param mat Pointer to the matrix to be transposed
+ */
+ASSIMP_API void aiTransposeMatrix4(
+ C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Transpose a 3x3 matrix.
+ * @param mat Pointer to the matrix to be transposed
+ */
+ASSIMP_API void aiTransposeMatrix3(
+ C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Transform a vector by a 3x3 matrix
+ * @param vec Vector to be transformed.
+ * @param mat Matrix to transform the vector with.
+ */
+ASSIMP_API void aiTransformVecByMatrix3(
+ C_STRUCT aiVector3D *vec,
+ const C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Transform a vector by a 4x4 matrix
+ * @param vec Vector to be transformed.
+ * @param mat Matrix to transform the vector with.
+ */
+ASSIMP_API void aiTransformVecByMatrix4(
+ C_STRUCT aiVector3D *vec,
+ const C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Multiply two 4x4 matrices.
+ * @param dst First factor, receives result.
+ * @param src Matrix to be multiplied with 'dst'.
+ */
+ASSIMP_API void aiMultiplyMatrix4(
+ C_STRUCT aiMatrix4x4 *dst,
+ const C_STRUCT aiMatrix4x4 *src);
+
+// --------------------------------------------------------------------------------
+/** Multiply two 3x3 matrices.
+ * @param dst First factor, receives result.
+ * @param src Matrix to be multiplied with 'dst'.
+ */
+ASSIMP_API void aiMultiplyMatrix3(
+ C_STRUCT aiMatrix3x3 *dst,
+ const C_STRUCT aiMatrix3x3 *src);
+
+// --------------------------------------------------------------------------------
+/** Get a 3x3 identity matrix.
+ * @param mat Matrix to receive its personal identity
+ */
+ASSIMP_API void aiIdentityMatrix3(
+ C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 identity matrix.
+ * @param mat Matrix to receive its personal identity
+ */
+ASSIMP_API void aiIdentityMatrix4(
+ C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Returns the number of import file formats available in the current Assimp build.
+ * Use aiGetImportFormatDescription() to retrieve infos of a specific import format.
+ */
+ASSIMP_API size_t aiGetImportFormatCount(void);
+
+// --------------------------------------------------------------------------------
+/** Returns a description of the nth import file format. Use #aiGetImportFormatCount()
+ * to learn how many import formats are supported.
+ * @param pIndex Index of the import format to retrieve information for. Valid range is
+ * 0 to #aiGetImportFormatCount()
+ * @return A description of that specific import format. NULL if pIndex is out of range.
+ */
+ASSIMP_API const C_STRUCT aiImporterDesc *aiGetImportFormatDescription(size_t pIndex);
+
+// --------------------------------------------------------------------------------
+/** Check if 2D vectors are equal.
+ * @param a First vector to compare
+ * @param b Second vector to compare
+ * @return 1 if the vectors are equal
+ * @return 0 if the vectors are not equal
+ */
+ASSIMP_API int aiVector2AreEqual(
+ const C_STRUCT aiVector2D *a,
+ const C_STRUCT aiVector2D *b);
+
+// --------------------------------------------------------------------------------
+/** Check if 2D vectors are equal using epsilon.
+ * @param a First vector to compare
+ * @param b Second vector to compare
+ * @param epsilon Epsilon
+ * @return 1 if the vectors are equal
+ * @return 0 if the vectors are not equal
+ */
+ASSIMP_API int aiVector2AreEqualEpsilon(
+ const C_STRUCT aiVector2D *a,
+ const C_STRUCT aiVector2D *b,
+ const float epsilon);
+
+// --------------------------------------------------------------------------------
+/** Add 2D vectors.
+ * @param dst First addend, receives result.
+ * @param src Vector to be added to 'dst'.
+ */
+ASSIMP_API void aiVector2Add(
+ C_STRUCT aiVector2D *dst,
+ const C_STRUCT aiVector2D *src);
+
+// --------------------------------------------------------------------------------
+/** Subtract 2D vectors.
+ * @param dst Minuend, receives result.
+ * @param src Vector to be subtracted from 'dst'.
+ */
+ASSIMP_API void aiVector2Subtract(
+ C_STRUCT aiVector2D *dst,
+ const C_STRUCT aiVector2D *src);
+
+// --------------------------------------------------------------------------------
+/** Multiply a 2D vector by a scalar.
+ * @param dst Vector to be scaled by \p s
+ * @param s Scale factor
+ */
+ASSIMP_API void aiVector2Scale(
+ C_STRUCT aiVector2D *dst,
+ const float s);
+
+// --------------------------------------------------------------------------------
+/** Multiply each component of a 2D vector with
+ * the components of another vector.
+ * @param dst First vector, receives result
+ * @param other Second vector
+ */
+ASSIMP_API void aiVector2SymMul(
+ C_STRUCT aiVector2D *dst,
+ const C_STRUCT aiVector2D *other);
+
+// --------------------------------------------------------------------------------
+/** Divide a 2D vector by a scalar.
+ * @param dst Vector to be divided by \p s
+ * @param s Scalar divisor
+ */
+ASSIMP_API void aiVector2DivideByScalar(
+ C_STRUCT aiVector2D *dst,
+ const float s);
+
+// --------------------------------------------------------------------------------
+/** Divide each component of a 2D vector by
+ * the components of another vector.
+ * @param dst Vector as the dividend
+ * @param v Vector as the divisor
+ */
+ASSIMP_API void aiVector2DivideByVector(
+ C_STRUCT aiVector2D *dst,
+ C_STRUCT aiVector2D *v);
+
+// --------------------------------------------------------------------------------
+/** Get the length of a 2D vector.
+ * @return v Vector to evaluate
+ */
+ASSIMP_API float aiVector2Length(
+ const C_STRUCT aiVector2D *v);
+
+// --------------------------------------------------------------------------------
+/** Get the squared length of a 2D vector.
+ * @return v Vector to evaluate
+ */
+ASSIMP_API float aiVector2SquareLength(
+ const C_STRUCT aiVector2D *v);
+
+// --------------------------------------------------------------------------------
+/** Negate a 2D vector.
+ * @param dst Vector to be negated
+ */
+ASSIMP_API void aiVector2Negate(
+ C_STRUCT aiVector2D *dst);
+
+// --------------------------------------------------------------------------------
+/** Get the dot product of 2D vectors.
+ * @param a First vector
+ * @param b Second vector
+ * @return The dot product of vectors
+ */
+ASSIMP_API float aiVector2DotProduct(
+ const C_STRUCT aiVector2D *a,
+ const C_STRUCT aiVector2D *b);
+
+// --------------------------------------------------------------------------------
+/** Normalize a 2D vector.
+ * @param v Vector to normalize
+ */
+ASSIMP_API void aiVector2Normalize(
+ C_STRUCT aiVector2D *v);
+
+// --------------------------------------------------------------------------------
+/** Check if 3D vectors are equal.
+ * @param a First vector to compare
+ * @param b Second vector to compare
+ * @return 1 if the vectors are equal
+ * @return 0 if the vectors are not equal
+ */
+ASSIMP_API int aiVector3AreEqual(
+ const C_STRUCT aiVector3D *a,
+ const C_STRUCT aiVector3D *b);
+
+// --------------------------------------------------------------------------------
+/** Check if 3D vectors are equal using epsilon.
+ * @param a First vector to compare
+ * @param b Second vector to compare
+ * @param epsilon Epsilon
+ * @return 1 if the vectors are equal
+ * @return 0 if the vectors are not equal
+ */
+ASSIMP_API int aiVector3AreEqualEpsilon(
+ const C_STRUCT aiVector3D *a,
+ const C_STRUCT aiVector3D *b,
+ const float epsilon);
+
+// --------------------------------------------------------------------------------
+/** Check if vector \p a is less than vector \p b.
+ * @param a First vector to compare
+ * @param b Second vector to compare
+ * @param epsilon Epsilon
+ * @return 1 if \p a is less than \p b
+ * @return 0 if \p a is equal or greater than \p b
+ */
+ASSIMP_API int aiVector3LessThan(
+ const C_STRUCT aiVector3D *a,
+ const C_STRUCT aiVector3D *b);
+
+// --------------------------------------------------------------------------------
+/** Add 3D vectors.
+ * @param dst First addend, receives result.
+ * @param src Vector to be added to 'dst'.
+ */
+ASSIMP_API void aiVector3Add(
+ C_STRUCT aiVector3D *dst,
+ const C_STRUCT aiVector3D *src);
+
+// --------------------------------------------------------------------------------
+/** Subtract 3D vectors.
+ * @param dst Minuend, receives result.
+ * @param src Vector to be subtracted from 'dst'.
+ */
+ASSIMP_API void aiVector3Subtract(
+ C_STRUCT aiVector3D *dst,
+ const C_STRUCT aiVector3D *src);
+
+// --------------------------------------------------------------------------------
+/** Multiply a 3D vector by a scalar.
+ * @param dst Vector to be scaled by \p s
+ * @param s Scale factor
+ */
+ASSIMP_API void aiVector3Scale(
+ C_STRUCT aiVector3D *dst,
+ const float s);
+
+// --------------------------------------------------------------------------------
+/** Multiply each component of a 3D vector with
+ * the components of another vector.
+ * @param dst First vector, receives result
+ * @param other Second vector
+ */
+ASSIMP_API void aiVector3SymMul(
+ C_STRUCT aiVector3D *dst,
+ const C_STRUCT aiVector3D *other);
+
+// --------------------------------------------------------------------------------
+/** Divide a 3D vector by a scalar.
+ * @param dst Vector to be divided by \p s
+ * @param s Scalar divisor
+ */
+ASSIMP_API void aiVector3DivideByScalar(
+ C_STRUCT aiVector3D *dst,
+ const float s);
+
+// --------------------------------------------------------------------------------
+/** Divide each component of a 3D vector by
+ * the components of another vector.
+ * @param dst Vector as the dividend
+ * @param v Vector as the divisor
+ */
+ASSIMP_API void aiVector3DivideByVector(
+ C_STRUCT aiVector3D *dst,
+ C_STRUCT aiVector3D *v);
+
+// --------------------------------------------------------------------------------
+/** Get the length of a 3D vector.
+ * @return v Vector to evaluate
+ */
+ASSIMP_API float aiVector3Length(
+ const C_STRUCT aiVector3D *v);
+
+// --------------------------------------------------------------------------------
+/** Get the squared length of a 3D vector.
+ * @return v Vector to evaluate
+ */
+ASSIMP_API float aiVector3SquareLength(
+ const C_STRUCT aiVector3D *v);
+
+// --------------------------------------------------------------------------------
+/** Negate a 3D vector.
+ * @param dst Vector to be negated
+ */
+ASSIMP_API void aiVector3Negate(
+ C_STRUCT aiVector3D *dst);
+
+// --------------------------------------------------------------------------------
+/** Get the dot product of 3D vectors.
+ * @param a First vector
+ * @param b Second vector
+ * @return The dot product of vectors
+ */
+ASSIMP_API float aiVector3DotProduct(
+ const C_STRUCT aiVector3D *a,
+ const C_STRUCT aiVector3D *b);
+
+// --------------------------------------------------------------------------------
+/** Get cross product of 3D vectors.
+ * @param dst Vector to receive the result.
+ * @param a First vector
+ * @param b Second vector
+ * @return The dot product of vectors
+ */
+ASSIMP_API void aiVector3CrossProduct(
+ C_STRUCT aiVector3D *dst,
+ const C_STRUCT aiVector3D *a,
+ const C_STRUCT aiVector3D *b);
+
+// --------------------------------------------------------------------------------
+/** Normalize a 3D vector.
+ * @param v Vector to normalize
+ */
+ASSIMP_API void aiVector3Normalize(
+ C_STRUCT aiVector3D *v);
+
+// --------------------------------------------------------------------------------
+/** Check for division by zero and normalize a 3D vector.
+ * @param v Vector to normalize
+ */
+ASSIMP_API void aiVector3NormalizeSafe(
+ C_STRUCT aiVector3D *v);
+
+// --------------------------------------------------------------------------------
+/** Rotate a 3D vector by a quaternion.
+ * @param v The vector to rotate by \p q
+ * @param q Quaternion to use to rotate \p v
+ */
+ASSIMP_API void aiVector3RotateByQuaternion(
+ C_STRUCT aiVector3D *v,
+ const C_STRUCT aiQuaternion *q);
+
+// --------------------------------------------------------------------------------
+/** Construct a 3x3 matrix from a 4x4 matrix.
+ * @param dst Receives the output matrix
+ * @param mat The 4x4 matrix to use
+ */
+ASSIMP_API void aiMatrix3FromMatrix4(
+ C_STRUCT aiMatrix3x3 *dst,
+ const C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Construct a 3x3 matrix from a quaternion.
+ * @param mat Receives the output matrix
+ * @param q The quaternion matrix to use
+ */
+ASSIMP_API void aiMatrix3FromQuaternion(
+ C_STRUCT aiMatrix3x3 *mat,
+ const C_STRUCT aiQuaternion *q);
+
+// --------------------------------------------------------------------------------
+/** Check if 3x3 matrices are equal.
+ * @param a First matrix to compare
+ * @param b Second matrix to compare
+ * @return 1 if the matrices are equal
+ * @return 0 if the matrices are not equal
+ */
+ASSIMP_API int aiMatrix3AreEqual(
+ const C_STRUCT aiMatrix3x3 *a,
+ const C_STRUCT aiMatrix3x3 *b);
+
+// --------------------------------------------------------------------------------
+/** Check if 3x3 matrices are equal.
+ * @param a First matrix to compare
+ * @param b Second matrix to compare
+ * @param epsilon Epsilon
+ * @return 1 if the matrices are equal
+ * @return 0 if the matrices are not equal
+ */
+ASSIMP_API int aiMatrix3AreEqualEpsilon(
+ const C_STRUCT aiMatrix3x3 *a,
+ const C_STRUCT aiMatrix3x3 *b,
+ const float epsilon);
+
+// --------------------------------------------------------------------------------
+/** Invert a 3x3 matrix.
+ * @param mat Matrix to invert
+ */
+ASSIMP_API void aiMatrix3Inverse(
+ C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Get the determinant of a 3x3 matrix.
+ * @param mat Matrix to get the determinant from
+ */
+ASSIMP_API float aiMatrix3Determinant(
+ const C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Get a 3x3 rotation matrix around the Z axis.
+ * @param mat Receives the output matrix
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix3RotationZ(
+ C_STRUCT aiMatrix3x3 *mat,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Returns a 3x3 rotation matrix for a rotation around an arbitrary axis.
+ * @param mat Receives the output matrix
+ * @param axis Rotation axis, should be a normalized vector
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix3FromRotationAroundAxis(
+ C_STRUCT aiMatrix3x3 *mat,
+ const C_STRUCT aiVector3D *axis,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Get a 3x3 translation matrix.
+ * @param mat Receives the output matrix
+ * @param translation The translation vector
+ */
+ASSIMP_API void aiMatrix3Translation(
+ C_STRUCT aiMatrix3x3 *mat,
+ const C_STRUCT aiVector2D *translation);
+
+// --------------------------------------------------------------------------------
+/** Create a 3x3 matrix that rotates one vector to another vector.
+ * @param mat Receives the output matrix
+ * @param from Vector to rotate from
+ * @param to Vector to rotate to
+ */
+ASSIMP_API void aiMatrix3FromTo(
+ C_STRUCT aiMatrix3x3 *mat,
+ const C_STRUCT aiVector3D *from,
+ const C_STRUCT aiVector3D *to);
+
+// --------------------------------------------------------------------------------
+/** Construct a 4x4 matrix from a 3x3 matrix.
+ * @param dst Receives the output matrix
+ * @param mat The 3x3 matrix to use
+ */
+ASSIMP_API void aiMatrix4FromMatrix3(
+ C_STRUCT aiMatrix4x4 *dst,
+ const C_STRUCT aiMatrix3x3 *mat);
+
+// --------------------------------------------------------------------------------
+/** Construct a 4x4 matrix from scaling, rotation and position.
+ * @param mat Receives the output matrix.
+ * @param scaling The scaling for the x,y,z axes
+ * @param rotation The rotation as a hamilton quaternion
+ * @param position The position for the x,y,z axes
+ */
+ASSIMP_API void aiMatrix4FromScalingQuaternionPosition(
+ C_STRUCT aiMatrix4x4 *mat,
+ const C_STRUCT aiVector3D *scaling,
+ const C_STRUCT aiQuaternion *rotation,
+ const C_STRUCT aiVector3D *position);
+
+// --------------------------------------------------------------------------------
+/** Add 4x4 matrices.
+ * @param dst First addend, receives result.
+ * @param src Matrix to be added to 'dst'.
+ */
+ASSIMP_API void aiMatrix4Add(
+ C_STRUCT aiMatrix4x4 *dst,
+ const C_STRUCT aiMatrix4x4 *src);
+
+// --------------------------------------------------------------------------------
+/** Check if 4x4 matrices are equal.
+ * @param a First matrix to compare
+ * @param b Second matrix to compare
+ * @return 1 if the matrices are equal
+ * @return 0 if the matrices are not equal
+ */
+ASSIMP_API int aiMatrix4AreEqual(
+ const C_STRUCT aiMatrix4x4 *a,
+ const C_STRUCT aiMatrix4x4 *b);
+
+// --------------------------------------------------------------------------------
+/** Check if 4x4 matrices are equal.
+ * @param a First matrix to compare
+ * @param b Second matrix to compare
+ * @param epsilon Epsilon
+ * @return 1 if the matrices are equal
+ * @return 0 if the matrices are not equal
+ */
+ASSIMP_API int aiMatrix4AreEqualEpsilon(
+ const C_STRUCT aiMatrix4x4 *a,
+ const C_STRUCT aiMatrix4x4 *b,
+ const float epsilon);
+
+// --------------------------------------------------------------------------------
+/** Invert a 4x4 matrix.
+ * @param result Matrix to invert
+ */
+ASSIMP_API void aiMatrix4Inverse(
+ C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Get the determinant of a 4x4 matrix.
+ * @param mat Matrix to get the determinant from
+ * @return The determinant of the matrix
+ */
+ASSIMP_API float aiMatrix4Determinant(
+ const C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Returns true of the matrix is the identity matrix.
+ * @param mat Matrix to get the determinant from
+ * @return 1 if \p mat is an identity matrix.
+ * @return 0 if \p mat is not an identity matrix.
+ */
+ASSIMP_API int aiMatrix4IsIdentity(
+ const C_STRUCT aiMatrix4x4 *mat);
+
+// --------------------------------------------------------------------------------
+/** Decompose a transformation matrix into its scaling,
+ * rotational as euler angles, and translational components.
+ *
+ * @param mat Matrix to decompose
+ * @param scaling Receives the output scaling for the x,y,z axes
+ * @param rotation Receives the output rotation as a Euler angles
+ * @param position Receives the output position for the x,y,z axes
+ */
+ASSIMP_API void aiMatrix4DecomposeIntoScalingEulerAnglesPosition(
+ const C_STRUCT aiMatrix4x4 *mat,
+ C_STRUCT aiVector3D *scaling,
+ C_STRUCT aiVector3D *rotation,
+ C_STRUCT aiVector3D *position);
+
+// --------------------------------------------------------------------------------
+/** Decompose a transformation matrix into its scaling,
+ * rotational split into an axis and rotational angle,
+ * and it's translational components.
+ *
+ * @param mat Matrix to decompose
+ * @param rotation Receives the rotational component
+ * @param axis Receives the output rotation axis
+ * @param angle Receives the output rotation angle
+ * @param position Receives the output position for the x,y,z axes.
+ */
+ASSIMP_API void aiMatrix4DecomposeIntoScalingAxisAnglePosition(
+ const C_STRUCT aiMatrix4x4 *mat,
+ C_STRUCT aiVector3D *scaling,
+ C_STRUCT aiVector3D *axis,
+ ai_real *angle,
+ C_STRUCT aiVector3D *position);
+
+// --------------------------------------------------------------------------------
+/** Decompose a transformation matrix into its rotational and
+ * translational components.
+ *
+ * @param mat Matrix to decompose
+ * @param rotation Receives the rotational component
+ * @param position Receives the translational component.
+ */
+ASSIMP_API void aiMatrix4DecomposeNoScaling(
+ const C_STRUCT aiMatrix4x4 *mat,
+ C_STRUCT aiQuaternion *rotation,
+ C_STRUCT aiVector3D *position);
+
+// --------------------------------------------------------------------------------
+/** Creates a 4x4 matrix from a set of euler angles.
+ * @param mat Receives the output matrix
+ * @param x Rotation angle for the x-axis, in radians
+ * @param y Rotation angle for the y-axis, in radians
+ * @param z Rotation angle for the z-axis, in radians
+ */
+ASSIMP_API void aiMatrix4FromEulerAngles(
+ C_STRUCT aiMatrix4x4 *mat,
+ float x, float y, float z);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 rotation matrix around the X axis.
+ * @param mat Receives the output matrix
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix4RotationX(
+ C_STRUCT aiMatrix4x4 *mat,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 rotation matrix around the Y axis.
+ * @param mat Receives the output matrix
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix4RotationY(
+ C_STRUCT aiMatrix4x4 *mat,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 rotation matrix around the Z axis.
+ * @param mat Receives the output matrix
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix4RotationZ(
+ C_STRUCT aiMatrix4x4 *mat,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Returns a 4x4 rotation matrix for a rotation around an arbitrary axis.
+ * @param mat Receives the output matrix
+ * @param axis Rotation axis, should be a normalized vector
+ * @param angle Rotation angle, in radians
+ */
+ASSIMP_API void aiMatrix4FromRotationAroundAxis(
+ C_STRUCT aiMatrix4x4 *mat,
+ const C_STRUCT aiVector3D *axis,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 translation matrix.
+ * @param mat Receives the output matrix
+ * @param translation The translation vector
+ */
+ASSIMP_API void aiMatrix4Translation(
+ C_STRUCT aiMatrix4x4 *mat,
+ const C_STRUCT aiVector3D *translation);
+
+// --------------------------------------------------------------------------------
+/** Get a 4x4 scaling matrix.
+ * @param mat Receives the output matrix
+ * @param scaling The scaling vector
+ */
+ASSIMP_API void aiMatrix4Scaling(
+ C_STRUCT aiMatrix4x4 *mat,
+ const C_STRUCT aiVector3D *scaling);
+
+// --------------------------------------------------------------------------------
+/** Create a 4x4 matrix that rotates one vector to another vector.
+ * @param mat Receives the output matrix
+ * @param from Vector to rotate from
+ * @param to Vector to rotate to
+ */
+ASSIMP_API void aiMatrix4FromTo(
+ C_STRUCT aiMatrix4x4 *mat,
+ const C_STRUCT aiVector3D *from,
+ const C_STRUCT aiVector3D *to);
+
+// --------------------------------------------------------------------------------
+/** Create a Quaternion from euler angles.
+ * @param q Receives the output quaternion
+ * @param x Rotation angle for the x-axis, in radians
+ * @param y Rotation angle for the y-axis, in radians
+ * @param z Rotation angle for the z-axis, in radians
+ */
+ASSIMP_API void aiQuaternionFromEulerAngles(
+ C_STRUCT aiQuaternion *q,
+ float x, float y, float z);
+
+// --------------------------------------------------------------------------------
+/** Create a Quaternion from an axis angle pair.
+ * @param q Receives the output quaternion
+ * @param axis The orientation axis
+ * @param angle The rotation angle, in radians
+ */
+ASSIMP_API void aiQuaternionFromAxisAngle(
+ C_STRUCT aiQuaternion *q,
+ const C_STRUCT aiVector3D *axis,
+ const float angle);
+
+// --------------------------------------------------------------------------------
+/** Create a Quaternion from a normalized quaternion stored
+ * in a 3D vector.
+ * @param q Receives the output quaternion
+ * @param normalized The vector that stores the quaternion
+ */
+ASSIMP_API void aiQuaternionFromNormalizedQuaternion(
+ C_STRUCT aiQuaternion *q,
+ const C_STRUCT aiVector3D *normalized);
+
+// --------------------------------------------------------------------------------
+/** Check if quaternions are equal.
+ * @param a First quaternion to compare
+ * @param b Second quaternion to compare
+ * @return 1 if the quaternions are equal
+ * @return 0 if the quaternions are not equal
+ */
+ASSIMP_API int aiQuaternionAreEqual(
+ const C_STRUCT aiQuaternion *a,
+ const C_STRUCT aiQuaternion *b);
+
+// --------------------------------------------------------------------------------
+/** Check if quaternions are equal using epsilon.
+ * @param a First quaternion to compare
+ * @param b Second quaternion to compare
+ * @param epsilon Epsilon
+ * @return 1 if the quaternions are equal
+ * @return 0 if the quaternions are not equal
+ */
+ASSIMP_API int aiQuaternionAreEqualEpsilon(
+ const C_STRUCT aiQuaternion *a,
+ const C_STRUCT aiQuaternion *b,
+ const float epsilon);
+
+// --------------------------------------------------------------------------------
+/** Normalize a quaternion.
+ * @param q Quaternion to normalize
+ */
+ASSIMP_API void aiQuaternionNormalize(
+ C_STRUCT aiQuaternion *q);
+
+// --------------------------------------------------------------------------------
+/** Compute quaternion conjugate.
+ * @param q Quaternion to compute conjugate,
+ * receives the output quaternion
+ */
+ASSIMP_API void aiQuaternionConjugate(
+ C_STRUCT aiQuaternion *q);
+
+// --------------------------------------------------------------------------------
+/** Multiply quaternions.
+ * @param dst First quaternion, receives the output quaternion
+ * @param q Second quaternion
+ */
+ASSIMP_API void aiQuaternionMultiply(
+ C_STRUCT aiQuaternion *dst,
+ const C_STRUCT aiQuaternion *q);
+
+// --------------------------------------------------------------------------------
+/** Performs a spherical interpolation between two quaternions.
+ * @param dst Receives the quaternion resulting from the interpolation.
+ * @param start Quaternion when factor == 0
+ * @param end Quaternion when factor == 1
+ * @param factor Interpolation factor between 0 and 1
+ */
+ASSIMP_API void aiQuaternionInterpolate(
+ C_STRUCT aiQuaternion *dst,
+ const C_STRUCT aiQuaternion *start,
+ const C_STRUCT aiQuaternion *end,
+ const float factor);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // AI_ASSIMP_H_INC