From eaf9cbc12076399d1abf6e6b12e65cde6989c7b2 Mon Sep 17 00:00:00 2001 From: Kester Maddock Date: Mon, 24 Dec 2012 15:11:46 +0000 Subject: [PATCH] Added (basic) Blender 2.63 support. No uvs or colours supported yet. --- code/BlenderLoader.cpp | 59 +- code/BlenderScene.cpp | 1132 ++++++++++++------------ code/BlenderScene.h | 17 + code/BlenderSceneGen.h | 348 ++++---- scripts/BlenderImporter/genblenddna.py | 9 +- 5 files changed, 844 insertions(+), 721 deletions(-) diff --git a/code/BlenderLoader.cpp b/code/BlenderLoader.cpp index cef6ffad3..a475b7442 100644 --- a/code/BlenderLoader.cpp +++ b/code/BlenderLoader.cpp @@ -1,3 +1,4 @@ + /* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -624,7 +625,7 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co ) { typedef std::pair MyPair; - if (!mesh->totface || !mesh->totvert) { + if ((!mesh->totface && !mesh->totloop) || !mesh->totvert) { return; } @@ -637,6 +638,10 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co ThrowException("Number of vertices is larger than the corresponding array"); } + if (static_cast ( mesh->totloop ) > mesh->mloop.size()) { + ThrowException("Number of vertices is larger than the corresponding array"); + } + // collect per-submesh numbers std::map per_mat; for (int i = 0; i < mesh->totface; ++i) { @@ -644,6 +649,10 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co const MFace& mf = mesh->mface[i]; per_mat[ mf.mat_nr ]++; } + for (int i = 0; i < mesh->totpoly; ++i) { + const MPoly& mp = mesh->mpoly[i]; + per_mat[ mp.mat_nr ]++; + } // ... and allocate the corresponding meshes const size_t old = temp->size(); @@ -780,6 +789,54 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co // } } + for (int i = 0; i < mesh->totpoly; ++i) { + + const MPoly& mf = mesh->mpoly[i]; + + aiMesh* const out = temp[ mat_num_to_mesh_idx[ mf.mat_nr ] ]; + aiFace& f = out->mFaces[out->mNumFaces++]; + + f.mIndices = new unsigned int[ f.mNumIndices = mf.totloop ]; + aiVector3D* vo = out->mVertices + out->mNumVertices; + aiVector3D* vn = out->mNormals + out->mNumVertices; + + // XXX we can't fold this easily, because we are restricted + // to the member names from the BLEND file (v1,v2,v3,v4) + // which are assigned by the genblenddna.py script and + // cannot be changed without breaking the entire + // import process. + for (int j = 0;j < mf.totloop; ++j) + { + const MLoop& loop = mesh->mloop[mf.loopstart + j]; + + if (loop.v >= mesh->totvert) { + ThrowException("Vertex index out of range"); + } + + const MVert& v = mesh->mvert[loop.v]; + + vo->x = v.co[0]; + vo->y = v.co[1]; + vo->z = v.co[2]; + vn->x = v.no[0]; + vn->y = v.no[1]; + vn->z = v.no[2]; + f.mIndices[j] = out->mNumVertices++; + + ++vo; + ++vn; + + } + if (mf.totloop == 3) + { + out->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE; + } + else + { + out->mPrimitiveTypes |= aiPrimitiveType_POLYGON; + } + } + // collect texture coordinates, they're stored in a separate per-face buffer if (mesh->mtface) { if (mesh->totface > static_cast ( mesh->mtface.size())) { diff --git a/code/BlenderScene.cpp b/code/BlenderScene.cpp index ef7c8eb0c..435db07bc 100644 --- a/code/BlenderScene.cpp +++ b/code/BlenderScene.cpp @@ -51,555 +51,589 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; using namespace Assimp::Blender; -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Object& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField((int&)dest.type,"type",db); - ReadFieldArray2(dest.obmat,"obmat",db); - ReadFieldArray2(dest.parentinv,"parentinv",db); - ReadFieldArray(dest.parsubstr,"parsubstr",db); - { - boost::shared_ptr parent; - ReadFieldPtr(parent,"*parent",db); - dest.parent = parent.get(); - } - ReadFieldPtr(dest.track,"*track",db); - ReadFieldPtr(dest.proxy,"*proxy",db); - ReadFieldPtr(dest.proxy_from,"*proxy_from",db); - ReadFieldPtr(dest.proxy_group,"*proxy_group",db); - ReadFieldPtr(dest.dup_group,"*dup_group",db); - ReadFieldPtr(dest.data,"*data",db); - ReadField(dest.modifiers,"modifiers",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Group& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField(dest.layer,"layer",db); - ReadFieldPtr(dest.gobject,"*gobject",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MTex& dest, - const FileDatabase& db - ) const -{ - - ReadField((int&)dest.blendtype,"blendtype",db); - ReadFieldPtr(dest.object,"*object",db); - ReadFieldPtr(dest.tex,"*tex",db); - ReadFieldArray(dest.uvname,"uvname",db); - ReadField((int&)dest.projx,"projx",db); - ReadField((int&)dest.projy,"projy",db); - ReadField((int&)dest.projz,"projz",db); - ReadField(dest.mapping,"mapping",db); - ReadFieldArray(dest.ofs,"ofs",db); - ReadFieldArray(dest.size,"size",db); - ReadField(dest.rot,"rot",db); - ReadField(dest.texflag,"texflag",db); - ReadField(dest.colormodel,"colormodel",db); - ReadField(dest.pmapto,"pmapto",db); - ReadField(dest.pmaptoneg,"pmaptoneg",db); - ReadField(dest.r,"r",db); - ReadField(dest.g,"g",db); - ReadField(dest.b,"b",db); - ReadField(dest.k,"k",db); - ReadField(dest.colspecfac,"colspecfac",db); - ReadField(dest.mirrfac,"mirrfac",db); - ReadField(dest.alphafac,"alphafac",db); - ReadField(dest.difffac,"difffac",db); - ReadField(dest.specfac,"specfac",db); - ReadField(dest.emitfac,"emitfac",db); - ReadField(dest.hardfac,"hardfac",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - TFace& dest, - const FileDatabase& db - ) const -{ - - ReadFieldArray2(dest.uv,"uv",db); - ReadFieldArray(dest.col,"col",db); - ReadField(dest.flag,"flag",db); - ReadField(dest.mode,"mode",db); - ReadField(dest.tile,"tile",db); - ReadField(dest.unwrap,"unwrap",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - SubsurfModifierData& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.modifier,"modifier",db); - ReadField(dest.subdivType,"subdivType",db); - ReadField(dest.levels,"levels",db); - ReadField(dest.renderLevels,"renderLevels",db); - ReadField(dest.flags,"flags",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MFace& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.v1,"v1",db); - ReadField(dest.v2,"v2",db); - ReadField(dest.v3,"v3",db); - ReadField(dest.v4,"v4",db); - ReadField(dest.mat_nr,"mat_nr",db); - ReadField(dest.flag,"flag",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Lamp& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField((int&)dest.type,"type",db); - ReadField(dest.flags,"flags",db); - ReadField(dest.colormodel,"colormodel",db); - ReadField(dest.totex,"totex",db); - ReadField(dest.r,"r",db); - ReadField(dest.g,"g",db); - ReadField(dest.b,"b",db); - ReadField(dest.k,"k",db); - ReadField(dest.energy,"energy",db); - ReadField(dest.dist,"dist",db); - ReadField(dest.spotsize,"spotsize",db); - ReadField(dest.spotblend,"spotblend",db); - ReadField(dest.att1,"att1",db); - ReadField(dest.att2,"att2",db); - ReadField((int&)dest.falloff_type,"falloff_type",db); - ReadField(dest.sun_brightness,"sun_brightness",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MDeformWeight& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.def_nr,"def_nr",db); - ReadField(dest.weight,"weight",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - PackedFile& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.size,"size",db); - ReadField(dest.seek,"seek",db); - ReadFieldPtr(dest.data,"*data",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Base& dest, - const FileDatabase& db - ) const -{ - - { - boost::shared_ptr prev; - ReadFieldPtr(prev,"*prev",db); - dest.prev = prev.get(); - } - ReadFieldPtr(dest.next,"*next",db); - ReadFieldPtr(dest.object,"*object",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MTFace& dest, - const FileDatabase& db - ) const -{ - - ReadFieldArray2(dest.uv,"uv",db); - ReadField(dest.flag,"flag",db); - ReadField(dest.mode,"mode",db); - ReadField(dest.tile,"tile",db); - ReadField(dest.unwrap,"unwrap",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Material& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField(dest.r,"r",db); - ReadField(dest.g,"g",db); - ReadField(dest.b,"b",db); - ReadField(dest.specr,"specr",db); - ReadField(dest.specg,"specg",db); - ReadField(dest.specb,"specb",db); - ReadField(dest.har,"har",db); - ReadField(dest.ambr,"ambr",db); - ReadField(dest.ambg,"ambg",db); - ReadField(dest.ambb,"ambb",db); - ReadField(dest.mirr,"mirr",db); - ReadField(dest.mirg,"mirg",db); - ReadField(dest.mirb,"mirb",db); - ReadField(dest.emit,"emit",db); - ReadField(dest.alpha,"alpha",db); - ReadField(dest.ref,"ref",db); - ReadField(dest.translucency,"translucency",db); - ReadField(dest.roughness,"roughness",db); - ReadField(dest.darkness,"darkness",db); - ReadField(dest.refrac,"refrac",db); - ReadFieldPtr(dest.group,"*group",db); - ReadField(dest.diff_shader,"diff_shader",db); - ReadField(dest.spec_shader,"spec_shader",db); - ReadFieldPtr(dest.mtex,"*mtex",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Mesh& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField(dest.totface,"totface",db); - ReadField(dest.totedge,"totedge",db); - ReadField(dest.totvert,"totvert",db); - ReadField(dest.subdiv,"subdiv",db); - ReadField(dest.subdivr,"subdivr",db); - ReadField(dest.subsurftype,"subsurftype",db); - ReadField(dest.smoothresh,"smoothresh",db); - ReadFieldPtr(dest.mface,"*mface",db); - ReadFieldPtr(dest.mtface,"*mtface",db); - ReadFieldPtr(dest.tface,"*tface",db); - ReadFieldPtr(dest.mvert,"*mvert",db); - ReadFieldPtr(dest.medge,"*medge",db); - ReadFieldPtr(dest.dvert,"*dvert",db); - ReadFieldPtr(dest.mcol,"*mcol",db); - ReadFieldPtr(dest.mat,"**mat",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MDeformVert& dest, - const FileDatabase& db - ) const -{ - - ReadFieldPtr(dest.dw,"*dw",db); - ReadField(dest.totweight,"totweight",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - World& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MVert& dest, - const FileDatabase& db - ) const -{ - - ReadFieldArray(dest.co,"co",db); - ReadFieldArray(dest.no,"no",db); - ReadField(dest.flag,"flag",db); - ReadField(dest.mat_nr,"mat_nr",db); - ReadField(dest.bweight,"bweight",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MEdge& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.v1,"v1",db); - ReadField(dest.v2,"v2",db); - ReadField(dest.crease,"crease",db); - ReadField(dest.bweight,"bweight",db); - ReadField(dest.flag,"flag",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - GroupObject& dest, - const FileDatabase& db - ) const -{ - - ReadFieldPtr(dest.prev,"*prev",db); - ReadFieldPtr(dest.next,"*next",db); - ReadFieldPtr(dest.ob,"*ob",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - ListBase& dest, - const FileDatabase& db - ) const -{ - - ReadFieldPtr(dest.first,"*first",db); - ReadFieldPtr(dest.last,"*last",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - ModifierData& dest, - const FileDatabase& db - ) const -{ - - ReadFieldPtr(dest.next,"*next",db); - ReadFieldPtr(dest.prev,"*prev",db); - ReadField(dest.type,"type",db); - ReadField(dest.mode,"mode",db); - ReadFieldArray(dest.name,"name",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - ID& dest, - const FileDatabase& db - ) const -{ - - ReadFieldArray(dest.name,"name",db); - ReadField(dest.flag,"flag",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MCol& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.r,"r",db); - ReadField(dest.g,"g",db); - ReadField(dest.b,"b",db); - ReadField(dest.a,"a",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Image& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadFieldArray(dest.name,"name",db); - ReadField(dest.ok,"ok",db); - ReadField(dest.flag,"flag",db); - ReadField(dest.source,"source",db); - ReadField(dest.type,"type",db); - ReadField(dest.pad,"pad",db); - ReadField(dest.pad1,"pad1",db); - ReadField(dest.lastframe,"lastframe",db); - ReadField(dest.tpageflag,"tpageflag",db); - ReadField(dest.totbind,"totbind",db); - ReadField(dest.xrep,"xrep",db); - ReadField(dest.yrep,"yrep",db); - ReadField(dest.twsta,"twsta",db); - ReadField(dest.twend,"twend",db); - ReadFieldPtr(dest.packedfile,"*packedfile",db); - ReadField(dest.lastupdate,"lastupdate",db); - ReadField(dest.lastused,"lastused",db); - ReadField(dest.animspeed,"animspeed",db); - ReadField(dest.gen_x,"gen_x",db); - ReadField(dest.gen_y,"gen_y",db); - ReadField(dest.gen_type,"gen_type",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Scene& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadFieldPtr(dest.camera,"*camera",db); - ReadFieldPtr(dest.world,"*world",db); - ReadFieldPtr(dest.basact,"*basact",db); - ReadField(dest.base,"base",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Library& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadFieldArray(dest.name,"name",db); - ReadFieldArray(dest.filename,"filename",db); - ReadFieldPtr(dest.parent,"*parent",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Tex& dest, - const FileDatabase& db - ) const -{ - - ReadField((int&)dest.type,"type",db); - ReadFieldPtr(dest.ima,"*ima",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - Camera& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.id,"id",db); - ReadField((int&)dest.type,"type",db); - ReadField((int&)dest.flag,"flag",db); - ReadField(dest.angle,"angle",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -template <> void Structure :: Convert ( - MirrorModifierData& dest, - const FileDatabase& db - ) const -{ - - ReadField(dest.modifier,"modifier",db); - ReadField(dest.axis,"axis",db); - ReadField(dest.flag,"flag",db); - ReadField(dest.tolerance,"tolerance",db); - ReadFieldPtr(dest.mirror_ob,"*mirror_ob",db); - - db.reader->IncPtr(size); -} - -//-------------------------------------------------------------------------------- -void DNA::RegisterConverters() { - - converters["Object"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Group"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MTex"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["TFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["SubsurfModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Lamp"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MDeformWeight"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["PackedFile"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Base"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MTFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Material"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Mesh"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MDeformVert"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["World"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MVert"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MEdge"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["GroupObject"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["ListBase"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["ModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["ID"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MCol"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Image"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Scene"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Library"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Tex"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["Camera"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); - converters["MirrorModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); -} +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Object& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField((int&)dest.type,"type",db); + ReadFieldArray2(dest.obmat,"obmat",db); + ReadFieldArray2(dest.parentinv,"parentinv",db); + ReadFieldArray(dest.parsubstr,"parsubstr",db); + { + boost::shared_ptr parent; + ReadFieldPtr(parent,"*parent",db); + dest.parent = parent.get(); + } + ReadFieldPtr(dest.track,"*track",db); + ReadFieldPtr(dest.proxy,"*proxy",db); + ReadFieldPtr(dest.proxy_from,"*proxy_from",db); + ReadFieldPtr(dest.proxy_group,"*proxy_group",db); + ReadFieldPtr(dest.dup_group,"*dup_group",db); + ReadFieldPtr(dest.data,"*data",db); + ReadField(dest.modifiers,"modifiers",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Group& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField(dest.layer,"layer",db); + ReadFieldPtr(dest.gobject,"*gobject",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MTex& dest, + const FileDatabase& db + ) const +{ + + ReadField((int&)dest.blendtype,"blendtype",db); + ReadFieldPtr(dest.object,"*object",db); + ReadFieldPtr(dest.tex,"*tex",db); + ReadFieldArray(dest.uvname,"uvname",db); + ReadField((int&)dest.projx,"projx",db); + ReadField((int&)dest.projy,"projy",db); + ReadField((int&)dest.projz,"projz",db); + ReadField(dest.mapping,"mapping",db); + ReadFieldArray(dest.ofs,"ofs",db); + ReadFieldArray(dest.size,"size",db); + ReadField(dest.rot,"rot",db); + ReadField(dest.texflag,"texflag",db); + ReadField(dest.colormodel,"colormodel",db); + ReadField(dest.pmapto,"pmapto",db); + ReadField(dest.pmaptoneg,"pmaptoneg",db); + ReadField(dest.r,"r",db); + ReadField(dest.g,"g",db); + ReadField(dest.b,"b",db); + ReadField(dest.k,"k",db); + ReadField(dest.colspecfac,"colspecfac",db); + ReadField(dest.mirrfac,"mirrfac",db); + ReadField(dest.alphafac,"alphafac",db); + ReadField(dest.difffac,"difffac",db); + ReadField(dest.specfac,"specfac",db); + ReadField(dest.emitfac,"emitfac",db); + ReadField(dest.hardfac,"hardfac",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + TFace& dest, + const FileDatabase& db + ) const +{ + + ReadFieldArray2(dest.uv,"uv",db); + ReadFieldArray(dest.col,"col",db); + ReadField(dest.flag,"flag",db); + ReadField(dest.mode,"mode",db); + ReadField(dest.tile,"tile",db); + ReadField(dest.unwrap,"unwrap",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + SubsurfModifierData& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.modifier,"modifier",db); + ReadField(dest.subdivType,"subdivType",db); + ReadField(dest.levels,"levels",db); + ReadField(dest.renderLevels,"renderLevels",db); + ReadField(dest.flags,"flags",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MFace& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.v1,"v1",db); + ReadField(dest.v2,"v2",db); + ReadField(dest.v3,"v3",db); + ReadField(dest.v4,"v4",db); + ReadField(dest.mat_nr,"mat_nr",db); + ReadField(dest.flag,"flag",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Lamp& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField((int&)dest.type,"type",db); + ReadField(dest.flags,"flags",db); + ReadField(dest.colormodel,"colormodel",db); + ReadField(dest.totex,"totex",db); + ReadField(dest.r,"r",db); + ReadField(dest.g,"g",db); + ReadField(dest.b,"b",db); + ReadField(dest.k,"k",db); + ReadField(dest.energy,"energy",db); + ReadField(dest.dist,"dist",db); + ReadField(dest.spotsize,"spotsize",db); + ReadField(dest.spotblend,"spotblend",db); + ReadField(dest.att1,"att1",db); + ReadField(dest.att2,"att2",db); + ReadField((int&)dest.falloff_type,"falloff_type",db); + ReadField(dest.sun_brightness,"sun_brightness",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MDeformWeight& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.def_nr,"def_nr",db); + ReadField(dest.weight,"weight",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + PackedFile& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.size,"size",db); + ReadField(dest.seek,"seek",db); + ReadFieldPtr(dest.data,"*data",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Base& dest, + const FileDatabase& db + ) const +{ + + { + boost::shared_ptr prev; + ReadFieldPtr(prev,"*prev",db); + dest.prev = prev.get(); + } + ReadFieldPtr(dest.next,"*next",db); + ReadFieldPtr(dest.object,"*object",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MTFace& dest, + const FileDatabase& db + ) const +{ + + ReadFieldArray2(dest.uv,"uv",db); + ReadField(dest.flag,"flag",db); + ReadField(dest.mode,"mode",db); + ReadField(dest.tile,"tile",db); + ReadField(dest.unwrap,"unwrap",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Material& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField(dest.r,"r",db); + ReadField(dest.g,"g",db); + ReadField(dest.b,"b",db); + ReadField(dest.specr,"specr",db); + ReadField(dest.specg,"specg",db); + ReadField(dest.specb,"specb",db); + ReadField(dest.har,"har",db); + ReadField(dest.ambr,"ambr",db); + ReadField(dest.ambg,"ambg",db); + ReadField(dest.ambb,"ambb",db); + ReadField(dest.mirr,"mirr",db); + ReadField(dest.mirg,"mirg",db); + ReadField(dest.mirb,"mirb",db); + ReadField(dest.emit,"emit",db); + ReadField(dest.alpha,"alpha",db); + ReadField(dest.ref,"ref",db); + ReadField(dest.translucency,"translucency",db); + ReadField(dest.roughness,"roughness",db); + ReadField(dest.darkness,"darkness",db); + ReadField(dest.refrac,"refrac",db); + ReadFieldPtr(dest.group,"*group",db); + ReadField(dest.diff_shader,"diff_shader",db); + ReadField(dest.spec_shader,"spec_shader",db); + ReadFieldPtr(dest.mtex,"*mtex",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Mesh& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField(dest.totface,"totface",db); + ReadField(dest.totedge,"totedge",db); + ReadField(dest.totvert,"totvert",db); + ReadField(dest.totloop,"totloop",db); + ReadField(dest.totpoly,"totpoly",db); + ReadField(dest.subdiv,"subdiv",db); + ReadField(dest.subdivr,"subdivr",db); + ReadField(dest.subsurftype,"subsurftype",db); + ReadField(dest.smoothresh,"smoothresh",db); + ReadFieldPtr(dest.mface,"*mface",db); + ReadFieldPtr(dest.mtface,"*mtface",db); + ReadFieldPtr(dest.tface,"*tface",db); + ReadFieldPtr(dest.mvert,"*mvert",db); + ReadFieldPtr(dest.medge,"*medge",db); + ReadFieldPtr(dest.mloop,"*mloop",db); + ReadFieldPtr(dest.mpoly,"*mpoly",db); + ReadFieldPtr(dest.dvert,"*dvert",db); + ReadFieldPtr(dest.mcol,"*mcol",db); + ReadFieldPtr(dest.mat,"**mat",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MDeformVert& dest, + const FileDatabase& db + ) const +{ + + ReadFieldPtr(dest.dw,"*dw",db); + ReadField(dest.totweight,"totweight",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + World& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MVert& dest, + const FileDatabase& db + ) const +{ + + ReadFieldArray(dest.co,"co",db); + ReadFieldArray(dest.no,"no",db); + ReadField(dest.flag,"flag",db); + ReadField(dest.mat_nr,"mat_nr",db); + ReadField(dest.bweight,"bweight",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MEdge& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.v1,"v1",db); + ReadField(dest.v2,"v2",db); + ReadField(dest.crease,"crease",db); + ReadField(dest.bweight,"bweight",db); + ReadField(dest.flag,"flag",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + GroupObject& dest, + const FileDatabase& db + ) const +{ + + ReadFieldPtr(dest.prev,"*prev",db); + ReadFieldPtr(dest.next,"*next",db); + ReadFieldPtr(dest.ob,"*ob",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + ListBase& dest, + const FileDatabase& db + ) const +{ + + ReadFieldPtr(dest.first,"*first",db); + ReadFieldPtr(dest.last,"*last",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MLoop& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.v,"v",db); + ReadField(dest.e,"e",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + ModifierData& dest, + const FileDatabase& db + ) const +{ + + ReadFieldPtr(dest.next,"*next",db); + ReadFieldPtr(dest.prev,"*prev",db); + ReadField(dest.type,"type",db); + ReadField(dest.mode,"mode",db); + ReadFieldArray(dest.name,"name",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + ID& dest, + const FileDatabase& db + ) const +{ + + ReadFieldArray(dest.name,"name",db); + ReadField(dest.flag,"flag",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MCol& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.r,"r",db); + ReadField(dest.g,"g",db); + ReadField(dest.b,"b",db); + ReadField(dest.a,"a",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MPoly& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.loopstart,"loopstart",db); + ReadField(dest.totloop,"totloop",db); + ReadField(dest.mat_nr,"mat_nr",db); + ReadField(dest.flag,"flag",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Scene& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadFieldPtr(dest.camera,"*camera",db); + ReadFieldPtr(dest.world,"*world",db); + ReadFieldPtr(dest.basact,"*basact",db); + ReadField(dest.base,"base",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Library& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadFieldArray(dest.name,"name",db); + ReadFieldArray(dest.filename,"filename",db); + ReadFieldPtr(dest.parent,"*parent",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Tex& dest, + const FileDatabase& db + ) const +{ + + ReadField((int&)dest.type,"type",db); + ReadFieldPtr(dest.ima,"*ima",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Camera& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadField((int&)dest.type,"type",db); + ReadField((int&)dest.flag,"flag",db); + ReadField(dest.angle,"angle",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + MirrorModifierData& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.modifier,"modifier",db); + ReadField(dest.axis,"axis",db); + ReadField(dest.flag,"flag",db); + ReadField(dest.tolerance,"tolerance",db); + ReadFieldPtr(dest.mirror_ob,"*mirror_ob",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +template <> void Structure :: Convert ( + Image& dest, + const FileDatabase& db + ) const +{ + + ReadField(dest.id,"id",db); + ReadFieldArray(dest.name,"name",db); + ReadField(dest.ok,"ok",db); + ReadField(dest.flag,"flag",db); + ReadField(dest.source,"source",db); + ReadField(dest.type,"type",db); + ReadField(dest.pad,"pad",db); + ReadField(dest.pad1,"pad1",db); + ReadField(dest.lastframe,"lastframe",db); + ReadField(dest.tpageflag,"tpageflag",db); + ReadField(dest.totbind,"totbind",db); + ReadField(dest.xrep,"xrep",db); + ReadField(dest.yrep,"yrep",db); + ReadField(dest.twsta,"twsta",db); + ReadField(dest.twend,"twend",db); + ReadFieldPtr(dest.packedfile,"*packedfile",db); + ReadField(dest.lastupdate,"lastupdate",db); + ReadField(dest.lastused,"lastused",db); + ReadField(dest.animspeed,"animspeed",db); + ReadField(dest.gen_x,"gen_x",db); + ReadField(dest.gen_y,"gen_y",db); + ReadField(dest.gen_type,"gen_type",db); + + db.reader->IncPtr(size); +} + +//-------------------------------------------------------------------------------- +void DNA::RegisterConverters() { + + converters["Object"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Group"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MTex"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["TFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["SubsurfModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Lamp"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MDeformWeight"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["PackedFile"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Base"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MTFace"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Material"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Mesh"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MDeformVert"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["World"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MVert"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MEdge"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["GroupObject"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["ListBase"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MLoop"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["ModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["ID"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MCol"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MPoly"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Scene"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Library"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Tex"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Camera"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["MirrorModifierData"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); + converters["Image"] = DNA::FactoryPair( &Structure::Allocate, &Structure::Convert ); +} #endif diff --git a/code/BlenderScene.h b/code/BlenderScene.h index 7c3b8dc0f..cc4a7ab50 100644 --- a/code/BlenderScene.h +++ b/code/BlenderScene.h @@ -156,6 +156,19 @@ struct MEdge : ElemBase { short flag; }; +// ------------------------------------------------------------------------------- +struct MLoop : ElemBase { + int v, e; +}; + +// ------------------------------------------------------------------------------- +struct MPoly : ElemBase { + int loopstart; + int totloop; + short mat_nr; + char flag; +}; + // ------------------------------------------------------------------------------- struct MCol : ElemBase { char r,g,b,a FAIL; @@ -235,6 +248,8 @@ struct Mesh : ElemBase { int totface FAIL; int totedge FAIL; int totvert FAIL; + int totloop; + int totpoly; short subdiv; short subdivr; @@ -246,6 +261,8 @@ struct Mesh : ElemBase { vector tface; vector mvert FAIL; vector medge WARN; + vector mloop; + vector mpoly; vector dvert; vector mcol; diff --git a/code/BlenderSceneGen.h b/code/BlenderSceneGen.h index c94ed55d6..a243b6db5 100644 --- a/code/BlenderSceneGen.h +++ b/code/BlenderSceneGen.h @@ -47,174 +47,186 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { namespace Blender { - -template <> void Structure :: Convert ( - Object& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Group& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MTex& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - TFace& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - SubsurfModifierData& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MFace& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Lamp& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MDeformWeight& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - PackedFile& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Base& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MTFace& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Material& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Mesh& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MDeformVert& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - World& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MVert& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MEdge& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - GroupObject& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - ListBase& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - ModifierData& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - ID& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MCol& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Image& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Scene& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Library& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Tex& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - Camera& dest, - const FileDatabase& db - ) const -; - -template <> void Structure :: Convert ( - MirrorModifierData& dest, - const FileDatabase& db - ) const -; + +template <> void Structure :: Convert ( + Object& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Group& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MTex& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + TFace& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + SubsurfModifierData& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MFace& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Lamp& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MDeformWeight& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + PackedFile& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Base& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MTFace& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Material& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Mesh& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MDeformVert& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + World& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MVert& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MEdge& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + GroupObject& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + ListBase& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MLoop& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + ModifierData& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + ID& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MCol& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MPoly& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Scene& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Library& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Tex& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Camera& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + MirrorModifierData& dest, + const FileDatabase& db + ) const +; + +template <> void Structure :: Convert ( + Image& dest, + const FileDatabase& db + ) const +; } diff --git a/scripts/BlenderImporter/genblenddna.py b/scripts/BlenderImporter/genblenddna.py index d417e3d7d..a6fa63117 100644 --- a/scripts/BlenderImporter/genblenddna.py +++ b/scripts/BlenderImporter/genblenddna.py @@ -105,7 +105,8 @@ def main(): # Parse structure definitions from BlenderScene.h input = open(inputfile,"rt").read() - flags = re.ASCII|re.DOTALL|re.MULTILINE + #flags = re.ASCII|re.DOTALL|re.MULTILINE + flags = re.DOTALL|re.MULTILINE #stripcoms = re.compile(r"/\*(.*?)*\/",flags) getstruct = re.compile(r"struct\s+(\w+?)\s*(:\s*ElemBase)?\s*\{(.*?)^\}\s*;",flags) getsmartx = re.compile(r"(std\s*::\s*)?(vector)\s*<\s*(boost\s*::\s*)?shared_(ptr)\s*<\s*(\w+)\s*>\s*>\s*",flags) @@ -143,7 +144,8 @@ def main(): input = input[match.end():] - [print ("Enum: "+e) for e in enums] + for e in enums: + print("Enum: "+e) for k,v in hits.items(): out = [] for line in v: @@ -177,7 +179,8 @@ def main(): v[:] = out print("Structure {0}".format(k)) - [print("\t"+"\t".join(elem)) for elem in out] + for elem in out: + print("\t"+"\t".join(elem)) print("")