Merge branch 'master' of github.com:assimp/assimp
This commit is contained in:
@@ -58,6 +58,9 @@ void ExportSceneCollada(const char* pFile,IOSystem* pIOSystem, const aiScene* pS
|
||||
|
||||
// we're still here - export successfully completed. Write result to the given IOSYstem
|
||||
boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
|
||||
if(outfile == NULL) {
|
||||
throw DeadlyExportError("could not open output .dae file: " + std::string(pFile));
|
||||
}
|
||||
|
||||
// XXX maybe use a small wrapper around IOStream that behaves like std::stringstream in order to avoid the extra copy.
|
||||
outfile->Write( iDoTheExportThing.mOutput.str().c_str(), static_cast<size_t>(iDoTheExportThing.mOutput.tellp()),1);
|
||||
|
||||
@@ -192,29 +192,44 @@ void IFCImporter::InternReadFile( const std::string& pFile,
|
||||
}
|
||||
|
||||
// search file (same name as the IFCZIP except for the file extension) and place file pointer there
|
||||
if ( unzLocateFile( zip, fileName.c_str(), 0 ) == UNZ_OK )
|
||||
{
|
||||
// get file size, etc.
|
||||
unz_file_info fileInfo;
|
||||
unzGetCurrentFileInfo( zip , &fileInfo, 0, 0, 0, 0, 0, 0 );
|
||||
|
||||
if(UNZ_OK == unzGoToFirstFile(zip)) {
|
||||
do {
|
||||
//
|
||||
|
||||
uint8_t* buff = new uint8_t[fileInfo.uncompressed_size];
|
||||
// get file size, etc.
|
||||
unz_file_info fileInfo;
|
||||
char filename[256];
|
||||
unzGetCurrentFileInfo( zip , &fileInfo, filename, sizeof(filename), 0, 0, 0, 0 );
|
||||
|
||||
if (GetExtension(filename) != "ifc") {
|
||||
continue;
|
||||
}
|
||||
|
||||
LogInfo("Decompressing IFCZIP file");
|
||||
uint8_t* buff = new uint8_t[fileInfo.uncompressed_size];
|
||||
|
||||
unzOpenCurrentFile( zip );
|
||||
const int ret = unzReadCurrentFile( zip, buff, fileInfo.uncompressed_size);
|
||||
size_t filesize = fileInfo.uncompressed_size;
|
||||
if ( ret < 0 || size_t(ret) != filesize )
|
||||
{
|
||||
delete[] buff;
|
||||
ThrowException("Failed to decompress IFC ZIP file");
|
||||
}
|
||||
unzCloseCurrentFile( zip );
|
||||
stream.reset(new MemoryIOStream(buff,fileInfo.uncompressed_size,true));
|
||||
LogInfo("Decompressing IFCZIP file");
|
||||
|
||||
unzOpenCurrentFile( zip );
|
||||
const int ret = unzReadCurrentFile( zip, buff, fileInfo.uncompressed_size);
|
||||
size_t filesize = fileInfo.uncompressed_size;
|
||||
if ( ret < 0 || size_t(ret) != filesize )
|
||||
{
|
||||
delete[] buff;
|
||||
ThrowException("Failed to decompress IFC ZIP file");
|
||||
}
|
||||
unzCloseCurrentFile( zip );
|
||||
stream.reset(new MemoryIOStream(buff,fileInfo.uncompressed_size,true));
|
||||
break;
|
||||
|
||||
if (unzGoToNextFile(zip) == UNZ_END_OF_LIST_OF_FILE) {
|
||||
ThrowException("Found no IFC file member in IFCZIP file (1)");
|
||||
}
|
||||
|
||||
} while(true);
|
||||
}
|
||||
else {
|
||||
ThrowException("Found no IFC file member in IFCZIP file");
|
||||
ThrowException("Found no IFC file member in IFCZIP file (2)");
|
||||
}
|
||||
|
||||
unzClose(zip);
|
||||
|
||||
@@ -59,10 +59,16 @@ void ExportSceneObj(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene
|
||||
// we're still here - export successfully completed. Write both the main OBJ file and the material script
|
||||
{
|
||||
boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
|
||||
if(outfile == NULL) {
|
||||
throw DeadlyExportError("could not open output .obj file: " + std::string(pFile));
|
||||
}
|
||||
outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
|
||||
}
|
||||
{
|
||||
boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(exporter.GetMaterialLibFileName(),"wt"));
|
||||
if(outfile == NULL) {
|
||||
throw DeadlyExportError("could not open output .mtl file: " + std::string(exporter.GetMaterialLibFileName()));
|
||||
}
|
||||
outfile->Write( exporter.mOutputMat.str().c_str(), static_cast<size_t>(exporter.mOutputMat.tellp()),1);
|
||||
}
|
||||
}
|
||||
|
||||
1
code/ObjFileData.h
Normal file → Executable file
1
code/ObjFileData.h
Normal file → Executable file
@@ -283,6 +283,7 @@ struct Model
|
||||
m_pCurrent(NULL),
|
||||
m_pCurrentMaterial(NULL),
|
||||
m_pDefaultMaterial(NULL),
|
||||
m_pGroupFaceIDs(NULL),
|
||||
m_strActiveGroup(""),
|
||||
m_pCurrentMesh(NULL)
|
||||
{
|
||||
|
||||
@@ -528,18 +528,12 @@ int ObjFileParser::getMaterialIndex( const std::string &strMaterialName )
|
||||
// Getter for a group name.
|
||||
void ObjFileParser::getGroupName()
|
||||
{
|
||||
// Get next word from data buffer
|
||||
m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
|
||||
m_DataIt = getNextWord<DataArrayIt>(m_DataIt, m_DataItEnd);
|
||||
std::string strGroupName;
|
||||
|
||||
m_DataIt = getName<DataArrayIt>(m_DataIt, m_DataItEnd, strGroupName);
|
||||
if ( isEndOfBuffer( m_DataIt, m_DataItEnd ) )
|
||||
return;
|
||||
|
||||
// Store the group name in the group library
|
||||
char *pStart = &(*m_DataIt);
|
||||
while ( m_DataIt != m_DataItEnd && !isSeparator(*m_DataIt) )
|
||||
m_DataIt++;
|
||||
std::string strGroupName( pStart, &(*m_DataIt) );
|
||||
|
||||
// Change active group, if necessary
|
||||
if ( m_pModel->m_strActiveGroup != strGroupName )
|
||||
{
|
||||
|
||||
@@ -57,6 +57,10 @@ void ExportScenePly(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene
|
||||
|
||||
// we're still here - export successfully completed. Write the file.
|
||||
boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
|
||||
if(outfile == NULL) {
|
||||
throw DeadlyExportError("could not open output .ply file: " + std::string(pFile));
|
||||
}
|
||||
|
||||
outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,10 @@ void ExportSceneSTL(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene
|
||||
|
||||
// we're still here - export successfully completed. Write the file.
|
||||
boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
|
||||
if(outfile == NULL) {
|
||||
throw DeadlyExportError("could not open output .stl file: " + std::string(pFile));
|
||||
}
|
||||
|
||||
outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user