3mf: use correct material assignment in case of multi-materials.
parent
54ca88b466
commit
69742670dd
|
@ -74,6 +74,7 @@ namespace XmlTag {
|
||||||
|
|
||||||
// Material definitions
|
// Material definitions
|
||||||
static const std::string basematerials = "basematerials";
|
static const std::string basematerials = "basematerials";
|
||||||
|
static const std::string basematerials_id = "id";
|
||||||
static const std::string basematerials_base = "base";
|
static const std::string basematerials_base = "base";
|
||||||
static const std::string basematerials_name = "name";
|
static const std::string basematerials_name = "name";
|
||||||
static const std::string basematerials_displaycolor = "displaycolor";
|
static const std::string basematerials_displaycolor = "displaycolor";
|
||||||
|
|
|
@ -115,13 +115,12 @@ void BaseImporter::SetupProperties(const Importer* /*pImp*/)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void BaseImporter::GetExtensionList(std::set<std::string>& extensions)
|
void BaseImporter::GetExtensionList(std::set<std::string>& extensions) {
|
||||||
{
|
|
||||||
const aiImporterDesc* desc = GetInfo();
|
const aiImporterDesc* desc = GetInfo();
|
||||||
ai_assert(desc != NULL);
|
ai_assert(desc != nullptr);
|
||||||
|
|
||||||
const char* ext = desc->mFileExtensions;
|
const char* ext = desc->mFileExtensions;
|
||||||
ai_assert(ext != NULL);
|
ai_assert(ext != nullptr );
|
||||||
|
|
||||||
const char* last = ext;
|
const char* last = ext;
|
||||||
do {
|
do {
|
||||||
|
@ -145,12 +144,13 @@ void BaseImporter::GetExtensionList(std::set<std::string>& extensions)
|
||||||
unsigned int searchBytes /* = 200 */,
|
unsigned int searchBytes /* = 200 */,
|
||||||
bool tokensSol /* false */)
|
bool tokensSol /* false */)
|
||||||
{
|
{
|
||||||
ai_assert( NULL != tokens );
|
ai_assert( nullptr != tokens );
|
||||||
ai_assert( 0 != numTokens );
|
ai_assert( 0 != numTokens );
|
||||||
ai_assert( 0 != searchBytes);
|
ai_assert( 0 != searchBytes);
|
||||||
|
|
||||||
if (!pIOHandler)
|
if ( nullptr == pIOHandler ) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
std::unique_ptr<IOStream> pStream (pIOHandler->Open(pFile));
|
||||||
if (pStream.get() ) {
|
if (pStream.get() ) {
|
||||||
|
@ -181,7 +181,7 @@ void BaseImporter::GetExtensionList(std::set<std::string>& extensions)
|
||||||
std::string token;
|
std::string token;
|
||||||
for (unsigned int i = 0; i < numTokens; ++i ) {
|
for (unsigned int i = 0; i < numTokens; ++i ) {
|
||||||
ai_assert( nullptr != tokens[i] );
|
ai_assert( nullptr != tokens[i] );
|
||||||
size_t len( strlen( tokens[ i ] ) );
|
const size_t len( strlen( tokens[ i ] ) );
|
||||||
token.clear();
|
token.clear();
|
||||||
const char *ptr( tokens[ i ] );
|
const char *ptr( tokens[ i ] );
|
||||||
for ( size_t tokIdx = 0; tokIdx < len; ++tokIdx ) {
|
for ( size_t tokIdx = 0; tokIdx < len; ++tokIdx ) {
|
||||||
|
|
|
@ -126,7 +126,6 @@ bool D3MFExporter::exportArchive( const char *file ) {
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool D3MFExporter::exportContentTypes() {
|
bool D3MFExporter::exportContentTypes() {
|
||||||
mContentOutput.clear();
|
mContentOutput.clear();
|
||||||
|
|
||||||
|
@ -177,6 +176,8 @@ bool D3MFExporter::export3DModel() {
|
||||||
mModelOutput << "<" << XmlTag::resources << ">";
|
mModelOutput << "<" << XmlTag::resources << ">";
|
||||||
mModelOutput << std::endl;
|
mModelOutput << std::endl;
|
||||||
|
|
||||||
|
writeBaseMaterials();
|
||||||
|
|
||||||
writeObjects();
|
writeObjects();
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,6 +204,10 @@ void D3MFExporter::writeHeader() {
|
||||||
mModelOutput << std::endl;
|
mModelOutput << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void D3MFExporter::writeBaseMaterials() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void D3MFExporter::writeObjects() {
|
void D3MFExporter::writeObjects() {
|
||||||
if ( nullptr == mScene->mRootNode ) {
|
if ( nullptr == mScene->mRootNode ) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -76,6 +76,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void writeHeader();
|
void writeHeader();
|
||||||
|
void writeBaseMaterials();
|
||||||
void writeObjects();
|
void writeObjects();
|
||||||
void writeMesh( aiMesh *mesh );
|
void writeMesh( aiMesh *mesh );
|
||||||
void writeVertex( const aiVector3D &pos );
|
void writeVertex( const aiVector3D &pos );
|
||||||
|
|
|
@ -70,9 +70,14 @@ namespace D3MF {
|
||||||
|
|
||||||
class XmlSerializer {
|
class XmlSerializer {
|
||||||
public:
|
public:
|
||||||
|
using MatArray = std::vector<aiMaterial*>;
|
||||||
|
using MatId2MatArray = std::map<unsigned int, std::vector<unsigned int>>;
|
||||||
|
|
||||||
XmlSerializer(XmlReader* xmlReader)
|
XmlSerializer(XmlReader* xmlReader)
|
||||||
: mMeshes()
|
: mMeshes()
|
||||||
, mMaterials()
|
, mMatArray()
|
||||||
|
, mActiveMatGroup( 99999999 )
|
||||||
|
, mMatId2MatArray()
|
||||||
, xmlReader(xmlReader){
|
, xmlReader(xmlReader){
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
@ -109,10 +114,10 @@ public:
|
||||||
|
|
||||||
std::copy( mMeshes.begin(), mMeshes.end(), scene->mMeshes);
|
std::copy( mMeshes.begin(), mMeshes.end(), scene->mMeshes);
|
||||||
|
|
||||||
scene->mNumMaterials = mMaterials.size();
|
scene->mNumMaterials = mMatArray.size();
|
||||||
if ( 0 != scene->mNumMaterials ) {
|
if ( 0 != scene->mNumMaterials ) {
|
||||||
scene->mMaterials = new aiMaterial*[ scene->mNumMaterials ];
|
scene->mMaterials = new aiMaterial*[ scene->mNumMaterials ];
|
||||||
std::copy( mMaterials.begin(), mMaterials.end(), scene->mMaterials );
|
std::copy( mMatArray.begin(), mMatArray.end(), scene->mMaterials );
|
||||||
}
|
}
|
||||||
scene->mRootNode->mNumChildren = static_cast<unsigned int>(children.size());
|
scene->mRootNode->mNumChildren = static_cast<unsigned int>(children.size());
|
||||||
scene->mRootNode->mChildren = new aiNode*[scene->mRootNode->mNumChildren]();
|
scene->mRootNode->mChildren = new aiNode*[scene->mRootNode->mNumChildren]();
|
||||||
|
@ -177,7 +182,6 @@ private:
|
||||||
|
|
||||||
void ImportVertices(aiMesh* mesh) {
|
void ImportVertices(aiMesh* mesh) {
|
||||||
std::vector<aiVector3D> vertices;
|
std::vector<aiVector3D> vertices;
|
||||||
|
|
||||||
while(ReadToEndElement(D3MF::XmlTag::vertices)) {
|
while(ReadToEndElement(D3MF::XmlTag::vertices)) {
|
||||||
if(xmlReader->getNodeName() == D3MF::XmlTag::vertex) {
|
if(xmlReader->getNodeName() == D3MF::XmlTag::vertex) {
|
||||||
vertices.push_back(ReadVertex());
|
vertices.push_back(ReadVertex());
|
||||||
|
@ -234,8 +238,27 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadBaseMaterials() {
|
void ReadBaseMaterials() {
|
||||||
|
std::vector<unsigned int> MatIdArray;
|
||||||
|
const char *baseMaterialId( xmlReader->getAttributeValue( D3MF::XmlTag::basematerials_id.c_str() ) );
|
||||||
|
if ( nullptr != baseMaterialId ) {
|
||||||
|
unsigned int id = std::atoi( baseMaterialId );
|
||||||
|
const size_t newMatIdx( mMatArray.size() );
|
||||||
|
if ( id != mActiveMatGroup ) {
|
||||||
|
mActiveMatGroup = id;
|
||||||
|
MatId2MatArray::const_iterator it( mMatId2MatArray.find( id ) );
|
||||||
|
if ( mMatId2MatArray.end() == it ) {
|
||||||
|
MatIdArray.clear();
|
||||||
|
mMatId2MatArray[ id ] = MatIdArray;
|
||||||
|
} else {
|
||||||
|
MatIdArray = it->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MatIdArray.push_back( newMatIdx );
|
||||||
|
mMatId2MatArray[ mActiveMatGroup ] = MatIdArray;
|
||||||
|
}
|
||||||
|
|
||||||
while ( ReadToEndElement( D3MF::XmlTag::basematerials ) ) {
|
while ( ReadToEndElement( D3MF::XmlTag::basematerials ) ) {
|
||||||
mMaterials.push_back( readMaterialDef() );
|
mMatArray.push_back( readMaterialDef() );
|
||||||
xmlReader->read();
|
xmlReader->read();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,24 +308,37 @@ private:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
aiMaterial *readMaterialDef() {
|
void assignDiffuseColor( aiMaterial *mat ) {
|
||||||
aiMaterial *mat( nullptr );
|
const char *color = xmlReader->getAttributeValue( D3MF::XmlTag::basematerials_displaycolor.c_str() );
|
||||||
const char *name( nullptr );
|
|
||||||
const char *color( nullptr );
|
|
||||||
const std::string nodeName( xmlReader->getNodeName() );
|
|
||||||
if ( nodeName == D3MF::XmlTag::basematerials_base ) {
|
|
||||||
name = xmlReader->getAttributeValue( D3MF::XmlTag::basematerials_name.c_str() );
|
|
||||||
|
|
||||||
aiString matName;
|
|
||||||
matName.Set( name );
|
|
||||||
mat = new aiMaterial;
|
|
||||||
mat->AddProperty( &matName, AI_MATKEY_NAME );
|
|
||||||
|
|
||||||
color = xmlReader->getAttributeValue( D3MF::XmlTag::basematerials_displaycolor.c_str() );
|
|
||||||
aiColor4D diffuse;
|
aiColor4D diffuse;
|
||||||
if ( parseColor( color, diffuse ) ) {
|
if ( parseColor( color, diffuse ) ) {
|
||||||
mat->AddProperty<aiColor4D>( &diffuse, 1, AI_MATKEY_COLOR_DIFFUSE );
|
mat->AddProperty<aiColor4D>( &diffuse, 1, AI_MATKEY_COLOR_DIFFUSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
aiMaterial *readMaterialDef() {
|
||||||
|
aiMaterial *mat( nullptr );
|
||||||
|
const char *name( nullptr );
|
||||||
|
const std::string nodeName( xmlReader->getNodeName() );
|
||||||
|
if ( nodeName == D3MF::XmlTag::basematerials_base ) {
|
||||||
|
name = xmlReader->getAttributeValue( D3MF::XmlTag::basematerials_name.c_str() );
|
||||||
|
std::string stdMatName;
|
||||||
|
aiString matName;
|
||||||
|
std::string strId( to_string( mActiveMatGroup ) );
|
||||||
|
stdMatName += "id";
|
||||||
|
stdMatName += strId;
|
||||||
|
stdMatName += "_";
|
||||||
|
if ( nullptr != name ) {
|
||||||
|
stdMatName += std::string( name );
|
||||||
|
} else {
|
||||||
|
stdMatName += "basemat";
|
||||||
|
}
|
||||||
|
matName.Set( stdMatName );
|
||||||
|
|
||||||
|
mat = new aiMaterial;
|
||||||
|
mat->AddProperty( &matName, AI_MATKEY_NAME );
|
||||||
|
|
||||||
|
assignDiffuseColor( mat );
|
||||||
}
|
}
|
||||||
|
|
||||||
return mat;
|
return mat;
|
||||||
|
@ -339,7 +375,9 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<aiMesh*> mMeshes;
|
std::vector<aiMesh*> mMeshes;
|
||||||
std::vector<aiMaterial*> mMaterials;
|
MatArray mMatArray;
|
||||||
|
unsigned int mActiveMatGroup;
|
||||||
|
MatId2MatArray mMatId2MatArray;
|
||||||
XmlReader* xmlReader;
|
XmlReader* xmlReader;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -370,14 +408,16 @@ D3MFImporter::~D3MFImporter() {
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
bool D3MFImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const {
|
bool D3MFImporter::CanRead(const std::string &filename, IOSystem *pIOHandler, bool checkSig) const {
|
||||||
const std::string extension = GetExtension(pFile);
|
const std::string extension( GetExtension( filename ) );
|
||||||
if(extension == Extension ) {
|
if(extension == Extension ) {
|
||||||
return true;
|
return true;
|
||||||
} else if ( !extension.length() || checkSig ) {
|
} else if ( !extension.length() || checkSig ) {
|
||||||
if ( nullptr == pIOHandler ) {
|
if ( nullptr == pIOHandler ) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
D3MF::D3MFOpcPackage opcPackage( pIOHandler, filename );
|
||||||
|
return opcPackage.validate();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -247,13 +247,13 @@ private:
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Constructor.
|
// Constructor.
|
||||||
D3MFZipArchive::D3MFZipArchive(IOSystem* pIOHandler, const std::string& rFile)
|
D3MFZipArchive::D3MFZipArchive(IOSystem* pIOHandler, const std::string& rFile)
|
||||||
: m_ZipFileHandle(NULL)
|
: m_ZipFileHandle( nullptr )
|
||||||
, m_ArchiveMap() {
|
, m_ArchiveMap() {
|
||||||
if (! rFile.empty()) {
|
if (! rFile.empty()) {
|
||||||
zlib_filefunc_def mapping = IOSystem2Unzip::get(pIOHandler);
|
zlib_filefunc_def mapping = IOSystem2Unzip::get(pIOHandler);
|
||||||
|
|
||||||
m_ZipFileHandle = unzOpen2(rFile.c_str(), &mapping);
|
m_ZipFileHandle = unzOpen2(rFile.c_str(), &mapping);
|
||||||
if(m_ZipFileHandle != NULL) {
|
if(m_ZipFileHandle != nullptr ) {
|
||||||
mapArchive();
|
mapArchive();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -267,33 +267,33 @@ D3MFZipArchive::~D3MFZipArchive() {
|
||||||
}
|
}
|
||||||
m_ArchiveMap.clear();
|
m_ArchiveMap.clear();
|
||||||
|
|
||||||
if(m_ZipFileHandle != NULL) {
|
if(m_ZipFileHandle != nullptr) {
|
||||||
unzClose(m_ZipFileHandle);
|
unzClose(m_ZipFileHandle);
|
||||||
m_ZipFileHandle = NULL;
|
m_ZipFileHandle = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Returns true, if the archive is already open.
|
// Returns true, if the archive is already open.
|
||||||
bool D3MFZipArchive::isOpen() const {
|
bool D3MFZipArchive::isOpen() const {
|
||||||
return (m_ZipFileHandle != NULL);
|
return (m_ZipFileHandle != nullptr );
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Returns true, if the filename is part of the archive.
|
// Returns true, if the filename is part of the archive.
|
||||||
bool D3MFZipArchive::Exists(const char* pFile) const {
|
bool D3MFZipArchive::Exists(const char* pFile) const {
|
||||||
ai_assert(pFile != NULL);
|
ai_assert(pFile != nullptr );
|
||||||
|
|
||||||
bool exist = false;
|
if ( pFile == nullptr ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (pFile != NULL) {
|
|
||||||
std::string rFile(pFile);
|
std::string rFile(pFile);
|
||||||
std::map<std::string, ZipFile*>::const_iterator it = m_ArchiveMap.find(rFile);
|
std::map<std::string, ZipFile*>::const_iterator it = m_ArchiveMap.find(rFile);
|
||||||
|
bool exist( false );
|
||||||
if(it != m_ArchiveMap.end()) {
|
if(it != m_ArchiveMap.end()) {
|
||||||
exist = true;
|
exist = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return exist;
|
return exist;
|
||||||
}
|
}
|
||||||
|
@ -434,8 +434,8 @@ public:
|
||||||
|
|
||||||
std::vector<OpcPackageRelationshipPtr> m_relationShips;
|
std::vector<OpcPackageRelationshipPtr> m_relationShips;
|
||||||
};
|
};
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile)
|
D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile)
|
||||||
: mRootStream(nullptr)
|
: mRootStream(nullptr)
|
||||||
, mZipArchive() {
|
, mZipArchive() {
|
||||||
|
@ -460,7 +460,7 @@ D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile)
|
||||||
if ( rootFile.size() > 0 && rootFile[ 0 ] == '/' ) {
|
if ( rootFile.size() > 0 && rootFile[ 0 ] == '/' ) {
|
||||||
rootFile = rootFile.substr( 1 );
|
rootFile = rootFile.substr( 1 );
|
||||||
if ( rootFile[ 0 ] == '/' ) {
|
if ( rootFile[ 0 ] == '/' ) {
|
||||||
// deal with zipbug
|
// deal with zip-bug
|
||||||
rootFile = rootFile.substr( 1 );
|
rootFile = rootFile.substr( 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -470,18 +470,9 @@ D3MFOpcPackage::D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile)
|
||||||
mRootStream = mZipArchive->Open(rootFile.c_str());
|
mRootStream = mZipArchive->Open(rootFile.c_str());
|
||||||
ai_assert( mRootStream != nullptr );
|
ai_assert( mRootStream != nullptr );
|
||||||
if ( nullptr == mRootStream ) {
|
if ( nullptr == mRootStream ) {
|
||||||
throw DeadlyExportError( "Cannot open rootfile in archive : " + rootFile );
|
throw DeadlyExportError( "Cannot open root-file in archive : " + rootFile );
|
||||||
}
|
}
|
||||||
|
|
||||||
// const size_t size = zipArchive->FileSize();
|
|
||||||
// m_Data.resize( size );
|
|
||||||
|
|
||||||
// const size_t readSize = pMapFile->Read( &m_Data[0], sizeof( char ), size );
|
|
||||||
// if ( readSize != size )
|
|
||||||
// {
|
|
||||||
// m_Data.clear();
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
mZipArchive->Close( fileStream );
|
mZipArchive->Close( fileStream );
|
||||||
|
|
||||||
} else if( file == D3MF::XmlTag::CONTENT_TYPES_ARCHIVE) {
|
} else if( file == D3MF::XmlTag::CONTENT_TYPES_ARCHIVE) {
|
||||||
|
@ -498,6 +489,16 @@ IOStream* D3MFOpcPackage::RootStream() const {
|
||||||
return mRootStream;
|
return mRootStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const std::string ModelRef = "3D/3dmodel.model";
|
||||||
|
|
||||||
|
bool D3MFOpcPackage::validate() {
|
||||||
|
if ( nullptr == mRootStream || nullptr == mZipArchive ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mZipArchive->Exists( ModelRef.c_str() );
|
||||||
|
}
|
||||||
|
|
||||||
std::string D3MFOpcPackage::ReadPackageRootRelationship(IOStream* stream) {
|
std::string D3MFOpcPackage::ReadPackageRootRelationship(IOStream* stream) {
|
||||||
std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(stream));
|
std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(stream));
|
||||||
std::unique_ptr<XmlReader> xml(irr::io::createIrrXMLReader(xmlStream.get()));
|
std::unique_ptr<XmlReader> xml(irr::io::createIrrXMLReader(xmlStream.get()));
|
||||||
|
@ -508,14 +509,14 @@ std::string D3MFOpcPackage::ReadPackageRootRelationship(IOStream* stream) {
|
||||||
return rel->type == XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE;
|
return rel->type == XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE;
|
||||||
});
|
});
|
||||||
|
|
||||||
if(itr == reader.m_relationShips.end())
|
if ( itr == reader.m_relationShips.end() ) {
|
||||||
throw DeadlyImportError( "Cannot find " + XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE );
|
throw DeadlyImportError( "Cannot find " + XmlTag::PACKAGE_START_PART_RELATIONSHIP_TYPE );
|
||||||
|
}
|
||||||
|
|
||||||
return (*itr)->target;
|
return (*itr)->target;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Namespace D3MF
|
} // Namespace D3MF
|
||||||
|
|
||||||
} // Namespace Assimp
|
} // Namespace Assimp
|
||||||
|
|
||||||
#endif //ASSIMP_BUILD_NO_3MF_IMPORTER
|
#endif //ASSIMP_BUILD_NO_3MF_IMPORTER
|
||||||
|
|
|
@ -51,8 +51,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace D3MF {
|
namespace D3MF {
|
||||||
|
|
||||||
typedef irr::io::IrrXMLReader XmlReader;
|
using XmlReader = irr::io::IrrXMLReader ;
|
||||||
typedef std::shared_ptr<XmlReader> XmlReaderPtr;
|
using XmlReaderPtr = std::shared_ptr<XmlReader> ;
|
||||||
|
|
||||||
struct OpcPackageRelationship {
|
struct OpcPackageRelationship {
|
||||||
std::string id;
|
std::string id;
|
||||||
|
@ -67,6 +67,7 @@ public:
|
||||||
D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile);
|
D3MFOpcPackage(IOSystem* pIOHandler, const std::string& rFile);
|
||||||
~D3MFOpcPackage();
|
~D3MFOpcPackage();
|
||||||
IOStream* RootStream() const;
|
IOStream* RootStream() const;
|
||||||
|
bool validate();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string ReadPackageRootRelationship(IOStream* stream);
|
std::string ReadPackageRootRelationship(IOStream* stream);
|
||||||
|
@ -76,7 +77,7 @@ private:
|
||||||
std::unique_ptr<D3MFZipArchive> mZipArchive;
|
std::unique_ptr<D3MFZipArchive> mZipArchive;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // Namespace D3MF
|
||||||
}
|
} // Namespace Assimp
|
||||||
|
|
||||||
#endif // D3MFOPCPACKAGE_H
|
#endif // D3MFOPCPACKAGE_H
|
||||||
|
|
Loading…
Reference in New Issue