Merge branch 'master' into issue_1533
commit
5922200ec3
|
@ -383,7 +383,7 @@ void ObjExporter::AddMesh(const aiString& name, const aiMesh* m, const aiMatrix4
|
||||||
mMeshes.push_back(MeshInstance());
|
mMeshes.push_back(MeshInstance());
|
||||||
MeshInstance& mesh = mMeshes.back();
|
MeshInstance& mesh = mMeshes.back();
|
||||||
|
|
||||||
mesh.name = std::string(name.data,name.length) + (m->mName.length ? "_" + std::string(m->mName.data,m->mName.length) : "");
|
mesh.name = std::string( name.data, name.length );
|
||||||
mesh.matname = GetMaterialName(m->mMaterialIndex);
|
mesh.matname = GetMaterialName(m->mMaterialIndex);
|
||||||
|
|
||||||
mesh.faces.resize(m->mNumFaces);
|
mesh.faces.resize(m->mNumFaces);
|
||||||
|
|
|
@ -477,6 +477,9 @@ void ObjFileParser::getFace( aiPrimitiveType type ) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//On error, std::atoi will return 0 which is not a valid value
|
//On error, std::atoi will return 0 which is not a valid value
|
||||||
|
delete face;
|
||||||
|
delete m_pModel;
|
||||||
|
m_pModel = nullptr;
|
||||||
throw DeadlyImportError("OBJ: Invalid face indice");
|
throw DeadlyImportError("OBJ: Invalid face indice");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -431,7 +431,7 @@ void OpenGEXImporter::handleNodes( DDLNode *node, aiScene *pScene ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == node || nullptr == m_ctx ) {
|
if( nullptr == node || nullptr == m_ctx ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -467,7 +467,7 @@ void OpenGEXImporter::handleMetricNode( DDLNode *node, aiScene */*pScene*/ ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleNameNode( DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == m_currentNode ) {
|
if( nullptr == m_currentNode ) {
|
||||||
throw DeadlyImportError( "No current node for name." );
|
throw DeadlyImportError( "No current node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -512,7 +512,7 @@ static void getRefNames( DDLNode *node, std::vector<std::string> &names ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == m_currentNode ) {
|
if( nullptr == m_currentNode ) {
|
||||||
throw DeadlyImportError( "No parent node for name." );
|
throw DeadlyImportError( "No parent node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -536,7 +536,7 @@ void OpenGEXImporter::handleObjectRefNode( DDLNode *node, aiScene */*pScene*/ )
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleMaterialRefNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == m_currentNode ) {
|
if( nullptr == m_currentNode ) {
|
||||||
throw DeadlyImportError( "No parent node for name." );
|
throw DeadlyImportError( "No parent node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -674,7 +674,7 @@ static void setMatrix( aiNode *node, DataArrayList *transformData ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleTransformNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == m_currentNode ) {
|
if( nullptr == m_currentNode ) {
|
||||||
throw DeadlyImportError( "No parent node for name." );
|
throw DeadlyImportError( "No parent node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -819,7 +819,7 @@ static void copyColor4DArray( size_t numItems, DataArrayList *vaList, aiColor4D
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == node ) {
|
if( nullptr == node ) {
|
||||||
throw DeadlyImportError( "No parent node for name." );
|
throw DeadlyImportError( "No parent node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -862,7 +862,7 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == node ) {
|
if( nullptr == node ) {
|
||||||
throw DeadlyImportError( "No parent node for name." );
|
throw DeadlyImportError( "No parent node for name." );
|
||||||
return;
|
return;
|
||||||
|
@ -1001,7 +1001,7 @@ void OpenGEXImporter::handleMaterialNode( ODDLParser::DDLNode *node, aiScene *pS
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == node ) {
|
if( nullptr == node ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1040,7 +1040,7 @@ void OpenGEXImporter::handleColorNode( ODDLParser::DDLNode *node, aiScene */*pSc
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if( nullptr == node ) {
|
if( nullptr == node ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1074,7 +1074,7 @@ void OpenGEXImporter::handleTextureNode( ODDLParser::DDLNode *node, aiScene */*p
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleParamNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleParamNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if ( nullptr == node ) {
|
if ( nullptr == node ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1103,7 +1103,7 @@ void OpenGEXImporter::handleParamNode( ODDLParser::DDLNode *node, aiScene */*pSc
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
void OpenGEXImporter::handleAttenNode( ODDLParser::DDLNode *node, aiScene */*pScene*/ ) {
|
void OpenGEXImporter::handleAttenNode( ODDLParser::DDLNode *node, aiScene * /*pScene*/ ) {
|
||||||
if ( nullptr == node ) {
|
if ( nullptr == node ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,11 @@ struct Property;
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline
|
inline
|
||||||
bool isEmbeddedCommentOpenTag( T *in, T */*end*/ ) {
|
bool isEmbeddedCommentOpenTag( T *in, T *end ) {
|
||||||
|
if ( in == end ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ( in == '/' && in+1 == '*' ) {
|
if ( in == '/' && in+1 == '*' ) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,6 +129,7 @@ SET( TEST_SRCS
|
||||||
unit/utVersion.cpp
|
unit/utVersion.cpp
|
||||||
unit/utVector3.cpp
|
unit/utVector3.cpp
|
||||||
unit/utXImporterExporter.cpp
|
unit/utXImporterExporter.cpp
|
||||||
|
unit/utX3DImportExport.cpp
|
||||||
unit/utD3MFImportExport.cpp
|
unit/utD3MFImportExport.cpp
|
||||||
unit/utQ3DImportExport.cpp
|
unit/utQ3DImportExport.cpp
|
||||||
unit/utProfiler.cpp
|
unit/utProfiler.cpp
|
||||||
|
|
|
@ -306,3 +306,38 @@ TEST_F(utObjImportExport, relative_indices_Test) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(utObjImportExport, homogeneous_coordinates_Test) {
|
||||||
|
static const std::string ObjModel =
|
||||||
|
"v -0.500000 0.000000 0.400000 0.50000\n"
|
||||||
|
"v -0.500000 0.000000 -0.800000 1.00000\n"
|
||||||
|
"v 0.500000 1.000000 -0.800000 0.5000\n"
|
||||||
|
"f 1 2 3\nB";
|
||||||
|
|
||||||
|
Assimp::Importer myimporter;
|
||||||
|
const aiScene *scene = myimporter.ReadFileFromMemory(ObjModel.c_str(), ObjModel.size(), aiProcess_ValidateDataStructure);
|
||||||
|
EXPECT_NE(nullptr, scene);
|
||||||
|
|
||||||
|
EXPECT_EQ(scene->mNumMeshes, 1);
|
||||||
|
const aiMesh *mesh = scene->mMeshes[0];
|
||||||
|
EXPECT_EQ(mesh->mNumVertices, 3);
|
||||||
|
EXPECT_EQ(mesh->mNumFaces, 1);
|
||||||
|
const aiFace face = mesh->mFaces[0];
|
||||||
|
EXPECT_EQ(face.mNumIndices, 3);
|
||||||
|
const aiVector3D vertice = mesh->mVertices[0];
|
||||||
|
EXPECT_EQ(vertice.x, -1.0f);
|
||||||
|
EXPECT_EQ(vertice.y, 0.0f);
|
||||||
|
EXPECT_EQ(vertice.z, 0.8f);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(utObjImportExport, 0based_array_Test) {
|
||||||
|
static const std::string ObjModel =
|
||||||
|
"v -0.500000 0.000000 0.400000\n"
|
||||||
|
"v -0.500000 0.000000 -0.800000\n"
|
||||||
|
"v -0.500000 1.000000 -0.800000\n"
|
||||||
|
"f 0 1 2\nB";
|
||||||
|
|
||||||
|
Assimp::Importer myimporter;
|
||||||
|
const aiScene *scene = myimporter.ReadFileFromMemory(ObjModel.c_str(), ObjModel.size(), 0);
|
||||||
|
EXPECT_EQ(nullptr, scene);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2017, 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.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "UnitTestPCH.h"
|
||||||
|
#include "SceneDiffer.h"
|
||||||
|
#include "AbstractImportExportBase.h"
|
||||||
|
|
||||||
|
#include <assimp/Importer.hpp>
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
|
||||||
|
class utX3DImportExport : public AbstractImportExportBase {
|
||||||
|
public:
|
||||||
|
virtual bool importerTest() {
|
||||||
|
Assimp::Importer importer;
|
||||||
|
const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/X3D/ComputerKeyboard.x3d", 0 );
|
||||||
|
return nullptr != scene;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F( utX3DImportExport, importX3DFromFileTest ) {
|
||||||
|
EXPECT_TRUE( importerTest() );
|
||||||
|
}
|
Loading…
Reference in New Issue