- More work on the current draft of the export interface. Again, please comment.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@886 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/1/head
aramis_acg 2011-01-05 22:07:51 +00:00
parent ae23c03bd9
commit e5f7fe0c3a
5 changed files with 338 additions and 9 deletions

122
code/Exporter.cpp 100644
View File

@ -0,0 +1,122 @@
/*
---------------------------------------------------------------------------
Open Asset Import Library (ASSIMP)
---------------------------------------------------------------------------
Copyright (c) 2006-2010, ASSIMP Development 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 Development 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.
---------------------------------------------------------------------------
*/
#include "AssimpPCH.h"
#if 0
// ------------------------------------------------------------------------------------------------
// Exporters
// ------------------------------------------------------------------------------------------------
#ifndef ASSIMP_BUILD_NO_COLLADA_EXPORTER
//# include "ColladaExporter.h"
void ExportSceneCollada (aiExportDataBlob*, const aiScene*);
#endif
#ifndef ASSIMP_BUILD_NO_3DS_EXPORTER
void ExportScene3DS(aiExportDataBlob*, const aiScene*);
#endif
// ------------------------------------------------------------------------------------------------
// Table of export format descriptors along with the corresponding exporter functions
// ------------------------------------------------------------------------------------------------
namespace Assimp {
typedef void (*fpExportFunc) (aiExportDataBlob*, const aiScene*) /* throw DeadlyExportError */;
//
aiExportFormatDesc g_aExportInfo[] = {
{
"collada"
, "COLLADA Open Standard for Painful Asset Interchange"
, "dae"
},
{
"3ds"
, "Autodesk(tm) 3DS file format"
, "3ds"
}
};
fpExportFunc g_aExportFunctions[] = {
ExportSceneCollada,
ExportScene3DS
};
}
// ------------------------------------------------------------------------------------------------
ASSIMP_API size_t aiGetExportFormatCount(void)
{
return 0;
}
// ------------------------------------------------------------------------------------------------
ASSIMP_API const C_STRUCT aiExportFormatDesc* aiGetExportFormatDescription( size_t pIndex)
{
return NULL;
}
// ------------------------------------------------------------------------------------------------
ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportScene( const aiScene* pScene, const char* pFormatId )
{
return NULL;
}
// ------------------------------------------------------------------------------------------------
ASSIMP_API C_STRUCT aiReturn aiWriteBlobToFile( const C_STRUCT aiExportDataBlob* pBlob, const char* pPath, const aiFileIO* pIOSystem )
{
return AI_FAILURE;
}
// ------------------------------------------------------------------------------------------------
ASSIMP_API C_STRUCT void aiReleaseExportData( const aiExportDataBlob* pData )
{
delete pData;
}
#endif

View File

@ -58,6 +58,7 @@ namespace Assimp {
// ======================================================================= // =======================================================================
// Public interface to Assimp // Public interface to Assimp
class Importer; class Importer;
class Exporter; // export.hpp
class IOStream; class IOStream;
class IOSystem; class IOSystem;
class ProgressHandler; class ProgressHandler;

View File

@ -44,6 +44,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef AI_EXPORT_H_INC #ifndef AI_EXPORT_H_INC
#define AI_EXPORT_H_INC #define AI_EXPORT_H_INC
#ifndef ASSIMP_BUILD_NO_EXPORT
#include "aiTypes.h" #include "aiTypes.h"
#ifdef __cplusplus #ifdef __cplusplus
@ -67,13 +70,8 @@ struct aiExportFormatDesc
/// to allow the user to select an export format. /// to allow the user to select an export format.
const char* description; const char* description;
/// Recommended file extension for the exported file /// Recommended file extension for the exported file in lower case.
const char* fileExtension; const char* fileExtension;
#ifdef __cplusplus
/// Default constructor
aiExportFormatDesc() { id = description = fileExtension = NULL; }
#endif // __cplusplus
}; };
/** Returns the number of export file formats available in the current Assimp build. /** Returns the number of export file formats available in the current Assimp build.
@ -112,6 +110,8 @@ struct aiExportDataBlob
#endif // __cplusplus #endif // __cplusplus
}; };
// --------------------------------------------------------------------------------
/** Exports the given scene to a chosen file format. Returns the exported data as a binary blob which /** Exports the given scene to a chosen file format. Returns the exported data as a binary blob which
* you can write into a file or something. When you're done with the data, use aiReleaseExportedData() * you can write into a file or something. When you're done with the data, use aiReleaseExportedData()
* to free the resources associated with the export. * to free the resources associated with the export.
@ -120,16 +120,31 @@ struct aiExportDataBlob
* aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available. * aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available.
* @return the exported data or NULL in case of error * @return the exported data or NULL in case of error
*/ */
ASSIMP_API C_STRUCT aiExportDataBlob* aiExportScene( const aiScene* pScene, const char* pFormatId); ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportScene( const C_STRUCT aiScene* pScene, const char* pFormatId );
// --------------------------------------------------------------------------------
/** Convenience function to write a blob to a file. The file is written using standard C
* file IO functionality or via a user-supplied IOSystem implementation.
* @param pBlob A data blob obtained from a previous call to #aiExportScene. Must not be NULL.
* @param pPath Full target file name. Target must be accessible.
* @param pIOSystem Custom IO implementation to be used for writing. Pass NULL to
* use the default implementation, which uses the standard C file IO functionality.
* @return AI_SUCCESS if everything was fine. */
ASSIMP_API aiReturn aiWriteBlobToFile( const C_STRUCT aiExportDataBlob* pBlob, const char* pPath, const C_STRUCT aiFileIO* pIOSystem );
// --------------------------------------------------------------------------------
/** Releases the memory associated with the given exported data. Use this function to free a data blob /** Releases the memory associated with the given exported data. Use this function to free a data blob
* returned by aiExportScene(). * returned by aiExportScene().
* @param pData the data blob returned by aiExportScene * @param pData the data blob returned by aiExportScene
*/ */
ASSIMP_API C_STRUCT void aiReleaseExportData( aiExportDataBlob* pData); ASSIMP_API C_STRUCT void aiReleaseExportData( const C_STRUCT aiExportDataBlob* pData );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // ASSIMP_BUILD_NO_EXPORT
#endif // AI_EXPORT_H_INC #endif // AI_EXPORT_H_INC

183
include/export.hpp 100644
View File

@ -0,0 +1,183 @@
/*
---------------------------------------------------------------------------
Open Asset Import Library (ASSIMP)
---------------------------------------------------------------------------
Copyright (c) 2006-2011, ASSIMP Development 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 Development 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 export.hpp
* @brief Defines the CPP-API for the Assimp export interface
*/
#ifndef AI_EXPORT_HPP_INC
#define AI_EXPORT_HPP_INC
#ifndef ASSIMP_BUILD_NO_EXPORT
#include "export.h"
namespace Assimp {
class ASSIMP_API Exporter
#ifdef __cplusplus
: public boost::noncopyable
#endif // __cplusplus
{
public:
Exporter() : blob() {
}
~Exporter() {
if (blob) {
::aiReleaseExportData(blob);
}
}
public:
// -------------------------------------------------------------------
/** Exports the given scene to a chosen file format. Returns the exported
* data as a binary blob which you can write into a file or something.
* When you're done with the data, simply let the #Exporter instance go
* out of scope to have it released automatically.
* @param pScene The scene to export. Stays in possession of the caller,
* is not changed by the function.
* @param pFormatId ID string to specify to which format you want to
* export to. Use
* #GetExportFormatCount / #GetExportFormatDescription to learn which
* export formats are available.
* @return the exported data or NULL in case of error.
* @note If the Exporter instance did already hold a blob from
* a previous call to #ExportToBlob, it will be disposed. */
const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId ) {
if (blob) {
::aiReleaseExportData(blob);
}
return blob = ::aiExportScene(pScene,pFormatId);
}
// -------------------------------------------------------------------
/** Convenience function to export directly to a file.
* @param pBlob A data blob obtained from a previous call to #aiExportScene. Must not be NULL.
* @param pPath Full target file name. Target must be accessible.
* @return AI_SUCCESS if everything was fine. */
aiReturn ExportToFile( const aiScene* pScene, const char* pFormatId, const char* pPath ) {
if(!ExportToBlob(pScene,pFormatId)) {
return AI_FAILURE;
}
return WriteBlobToFile(pPath);
}
// -------------------------------------------------------------------
/** Convenience function to write a blob to a file.
* @param pBlob A data blob obtained from a previous call to #aiExportScene. Must not be NULL.
* @param pPath Full target file name. Target must be accessible.
* @return AI_SUCCESS if everything was fine. */
aiReturn WriteBlobToFile( const char* pPath ) const {
if (!blob) {
return AI_FAILURE;
}
// TODO
return AI_FAILURE; // ::aiWriteBlobToFile(blob,pPath,mIOSystem);
}
// -------------------------------------------------------------------
aiReturn WriteBlobToFile( const std::string& pPath ) const {
return WriteBlobToFile(pPath.c_str());
}
// -------------------------------------------------------------------
/** Return the blob obtained from the last call to #ExportToBlob */
const aiExportDataBlob* GetBlob() const {
return blob;
}
// -------------------------------------------------------------------
/** Orphan the blob from the last call to #ExportToBlob. That means
* the caller takes ownership and is thus responsible for calling
* #aiReleaseExportData to free the data again. */
const aiExportDataBlob* GetOrphanedBlob() const {
const aiExportDataBlob* tmp = blob;
blob = NULL;
return tmp;
}
// -------------------------------------------------------------------
/** Returns the number of export file formats available in the current
* Assimp build. Use #Exporter::GetExportFormatDescription to
* retrieve infos of a specific export format */
size_t aiGetExportFormatCount() const {
return ::aiGetExportFormatCount();
}
// -------------------------------------------------------------------
/** Returns a description of the nth export file format. Use #
* #Exporter::GetExportFormatCount to learn how many export
* formats are supported.
* @param pIndex Index of the export format to retrieve information
* for. Valid range is 0 to #Exporter::GetExportFormatCount
* @return A description of that specific export format.
* NULL if pIndex is out of range. */
const aiExportFormatDesc* aiGetExportFormatDescription( size_t pIndex ) const {
return ::aiGetExportFormatDescription(pIndex);
}
private:
const aiExportDataBlob* blob;
Assimp::IOSystem* mIOSystem;
};
} // namespace Assimp
#endif // ASSIMP_BUILD_NO_EXPORT
#endif // AI_EXPORT_HPP_INC

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="9,00" Version="9.00"
Name="assimp" Name="assimp"
ProjectGUID="{5691E159-2D9B-407F-971F-EA5C592DC524}" ProjectGUID="{5691E159-2D9B-407F-971F-EA5C592DC524}"
RootNamespace="assimp" RootNamespace="assimp"
@ -1130,6 +1130,10 @@
RelativePath="..\..\include\DefaultLogger.h" RelativePath="..\..\include\DefaultLogger.h"
> >
</File> </File>
<File
RelativePath="..\..\include\export.hpp"
>
</File>
<File <File
RelativePath="..\..\include\IOStream.h" RelativePath="..\..\include\IOStream.h"
> >
@ -2326,6 +2330,10 @@
RelativePath="..\..\code\Exceptional.h" RelativePath="..\..\code\Exceptional.h"
> >
</File> </File>
<File
RelativePath="..\..\code\Exporter.cpp"
>
</File>
<File <File
RelativePath="..\..\code\fast_atof.h" RelativePath="..\..\code\fast_atof.h"
> >