Replaced BOOST_FOREACH with c++11 ranged for loops
parent
4836a2993e
commit
18843fe5e1
|
@ -48,13 +48,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "BlenderDNA.h"
|
#include "BlenderDNA.h"
|
||||||
#include "StreamReader.h"
|
#include "StreamReader.h"
|
||||||
#include "fast_atof.h"
|
#include "fast_atof.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
using namespace Assimp::Blender;
|
using namespace Assimp::Blender;
|
||||||
using namespace Assimp::Formatter;
|
using namespace Assimp::Formatter;
|
||||||
|
|
||||||
#define for_each BOOST_FOREACH
|
|
||||||
bool match4(StreamReaderAny& stream, const char* string) {
|
bool match4(StreamReaderAny& stream, const char* string) {
|
||||||
char tmp[] = {
|
char tmp[] = {
|
||||||
(stream).GetI1(),
|
(stream).GetI1(),
|
||||||
|
@ -86,7 +84,7 @@ void DNAParser :: Parse ()
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> names (stream.GetI4());
|
std::vector<std::string> names (stream.GetI4());
|
||||||
for_each(std::string& s, names) {
|
for(std::string& s : names) {
|
||||||
while (char c = stream.GetI1()) {
|
while (char c = stream.GetI1()) {
|
||||||
s += c;
|
s += c;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +97,7 @@ void DNAParser :: Parse ()
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Type> types (stream.GetI4());
|
std::vector<Type> types (stream.GetI4());
|
||||||
for_each(Type& s, types) {
|
for(Type& s : types) {
|
||||||
while (char c = stream.GetI1()) {
|
while (char c = stream.GetI1()) {
|
||||||
s.name += c;
|
s.name += c;
|
||||||
}
|
}
|
||||||
|
@ -111,7 +109,7 @@ void DNAParser :: Parse ()
|
||||||
throw DeadlyImportError("BlenderDNA: Expected TLEN field");
|
throw DeadlyImportError("BlenderDNA: Expected TLEN field");
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each(Type& s, types) {
|
for(Type& s : types) {
|
||||||
s.size = stream.GetI2();
|
s.size = stream.GetI2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,9 +236,9 @@ void DNA :: DumpToFile()
|
||||||
f << "Field format: type name offset size" << "\n";
|
f << "Field format: type name offset size" << "\n";
|
||||||
f << "Structure format: name size" << "\n";
|
f << "Structure format: name size" << "\n";
|
||||||
|
|
||||||
for_each(const Structure& s, structures) {
|
for(const Structure& s : structures) {
|
||||||
f << s.name << " " << s.size << "\n\n";
|
f << s.name << " " << s.size << "\n\n";
|
||||||
for_each(const Field& ff, s.fields) {
|
for(const Field& ff : s.fields) {
|
||||||
f << "\t" << ff.type << " " << ff.name << " " << ff.offset << " " << ff.size << std::endl;
|
f << "\t" << ff.type << " " << ff.name << " " << ff.offset << " " << ff.size << std::endl;
|
||||||
}
|
}
|
||||||
f << std::endl;
|
f << std::endl;
|
||||||
|
|
|
@ -49,14 +49,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "BlenderDNA.h"
|
#include "BlenderDNA.h"
|
||||||
#include "BlenderScene.h"
|
#include "BlenderScene.h"
|
||||||
#include "BlenderSceneGen.h"
|
#include "BlenderSceneGen.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include "./../include/assimp/material.h"
|
#include "./../include/assimp/material.h"
|
||||||
|
|
||||||
struct aiTexture;
|
struct aiTexture;
|
||||||
|
|
||||||
#define for_each(x,y) BOOST_FOREACH(x,y)
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace Blender {
|
namespace Blender {
|
||||||
|
|
||||||
|
@ -71,7 +68,7 @@ namespace Blender {
|
||||||
}
|
}
|
||||||
|
|
||||||
~TempArray () {
|
~TempArray () {
|
||||||
for_each(T* elem, arr) {
|
for(T* elem : arr) {
|
||||||
delete elem;
|
delete elem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -305,7 +305,7 @@ void BlenderImporter::ExtractScene(Scene& out, const FileDatabase& file)
|
||||||
const Structure& ss = file.dna.structures[(*it).second];
|
const Structure& ss = file.dna.structures[(*it).second];
|
||||||
|
|
||||||
// we need a scene somewhere to start with.
|
// we need a scene somewhere to start with.
|
||||||
for_each(const FileBlockHead& bl,file.entries) {
|
for(const FileBlockHead& bl :file.entries) {
|
||||||
|
|
||||||
// Fix: using the DNA index is more reliable to locate scenes
|
// Fix: using the DNA index is more reliable to locate scenes
|
||||||
//if (bl.id == "SC") {
|
//if (bl.id == "SC") {
|
||||||
|
@ -560,7 +560,7 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data)
|
||||||
|
|
||||||
// add a default material if necessary
|
// add a default material if necessary
|
||||||
unsigned int index = static_cast<unsigned int>( -1 );
|
unsigned int index = static_cast<unsigned int>( -1 );
|
||||||
for_each( aiMesh* mesh, conv_data.meshes.get() ) {
|
for( aiMesh* mesh : conv_data.meshes.get() ) {
|
||||||
if (mesh->mMaterialIndex == static_cast<unsigned int>( -1 )) {
|
if (mesh->mMaterialIndex == static_cast<unsigned int>( -1 )) {
|
||||||
|
|
||||||
if (index == static_cast<unsigned int>( -1 )) {
|
if (index == static_cast<unsigned int>( -1 )) {
|
||||||
|
@ -589,7 +589,7 @@ void BlenderImporter::BuildMaterials(ConversionData& conv_data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each(boost::shared_ptr<Material> mat, conv_data.materials_raw) {
|
for(boost::shared_ptr<Material> mat : conv_data.materials_raw) {
|
||||||
|
|
||||||
// reset per material global counters
|
// reset per material global counters
|
||||||
for (size_t i = 0; i < sizeof(conv_data.next_texture)/sizeof(conv_data.next_texture[0]);++i) {
|
for (size_t i = 0; i < sizeof(conv_data.next_texture)/sizeof(conv_data.next_texture[0]);++i) {
|
||||||
|
@ -722,7 +722,7 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
|
||||||
temp->reserve(temp->size() + per_mat.size());
|
temp->reserve(temp->size() + per_mat.size());
|
||||||
|
|
||||||
std::map<size_t,size_t> mat_num_to_mesh_idx;
|
std::map<size_t,size_t> mat_num_to_mesh_idx;
|
||||||
for_each(MyPair& it, per_mat) {
|
for(MyPair& it : per_mat) {
|
||||||
|
|
||||||
mat_num_to_mesh_idx[it.first] = temp->size();
|
mat_num_to_mesh_idx[it.first] = temp->size();
|
||||||
temp->push_back(new aiMesh());
|
temp->push_back(new aiMesh());
|
||||||
|
@ -1157,7 +1157,7 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
|
||||||
if (children.size()) {
|
if (children.size()) {
|
||||||
node->mNumChildren = static_cast<unsigned int>(children.size());
|
node->mNumChildren = static_cast<unsigned int>(children.size());
|
||||||
aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
|
aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
|
||||||
for_each (const Object* nobj,children) {
|
for (const Object* nobj :children) {
|
||||||
*nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
|
*nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
|
||||||
(*nd++)->mParent = node;
|
(*nd++)->mParent = node;
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "./../include/assimp/cexport.h"
|
#include "./../include/assimp/cexport.h"
|
||||||
#include "./../include/assimp/IOSystem.hpp"
|
#include "./../include/assimp/IOSystem.hpp"
|
||||||
#include "./../include/assimp/DefaultLogger.hpp"
|
#include "./../include/assimp/DefaultLogger.hpp"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -224,7 +223,7 @@ public:
|
||||||
|
|
||||||
virtual ~BlobIOSystem()
|
virtual ~BlobIOSystem()
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(BlobEntry& blobby, blobs) {
|
for(BlobEntry& blobby : blobs) {
|
||||||
delete blobby.second;
|
delete blobby.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,7 +242,7 @@ public:
|
||||||
{
|
{
|
||||||
// one must be the master
|
// one must be the master
|
||||||
aiExportDataBlob* master = NULL, *cur;
|
aiExportDataBlob* master = NULL, *cur;
|
||||||
BOOST_FOREACH(const BlobEntry& blobby, blobs) {
|
for(const BlobEntry& blobby : blobs) {
|
||||||
if (blobby.first == AI_BLOBIO_MAGIC) {
|
if (blobby.first == AI_BLOBIO_MAGIC) {
|
||||||
master = blobby.second;
|
master = blobby.second;
|
||||||
break;
|
break;
|
||||||
|
@ -257,7 +256,7 @@ public:
|
||||||
master->name.Set("");
|
master->name.Set("");
|
||||||
|
|
||||||
cur = master;
|
cur = master;
|
||||||
BOOST_FOREACH(const BlobEntry& blobby, blobs) {
|
for(const BlobEntry& blobby : blobs) {
|
||||||
if (blobby.second == master) {
|
if (blobby.second == master) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ void C4DImporter::InternReadFile( const std::string& pFile,
|
||||||
RecurseHierarchy(doc->GetFirstObject(), pScene->mRootNode);
|
RecurseHierarchy(doc->GetFirstObject(), pScene->mRootNode);
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(...) {
|
||||||
BOOST_FOREACH(aiMesh* mesh, meshes) {
|
for(aiMesh* mesh : meshes) {
|
||||||
delete mesh;
|
delete mesh;
|
||||||
}
|
}
|
||||||
BaseDocument::Free(doc);
|
BaseDocument::Free(doc);
|
||||||
|
@ -176,7 +176,7 @@ void C4DImporter::InternReadFile( const std::string& pFile,
|
||||||
|
|
||||||
// copy materials over, adding a default material if necessary
|
// copy materials over, adding a default material if necessary
|
||||||
unsigned int mat_count = static_cast<unsigned int>(materials.size());
|
unsigned int mat_count = static_cast<unsigned int>(materials.size());
|
||||||
BOOST_FOREACH(aiMesh* mesh, meshes) {
|
for(aiMesh* mesh : meshes) {
|
||||||
ai_assert(mesh->mMaterialIndex <= mat_count);
|
ai_assert(mesh->mMaterialIndex <= mat_count);
|
||||||
if(mesh->mMaterialIndex >= mat_count) {
|
if(mesh->mMaterialIndex >= mat_count) {
|
||||||
++mat_count;
|
++mat_count;
|
||||||
|
|
|
@ -54,7 +54,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "LineSplitter.h"
|
#include "LineSplitter.h"
|
||||||
#include "TinyFormatter.h"
|
#include "TinyFormatter.h"
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include "../include/assimp/IOSystem.hpp"
|
#include "../include/assimp/IOSystem.hpp"
|
||||||
#include "../include/assimp/DefaultLogger.hpp"
|
#include "../include/assimp/DefaultLogger.hpp"
|
||||||
#include "../include/assimp/scene.h"
|
#include "../include/assimp/scene.h"
|
||||||
|
@ -64,8 +63,6 @@ using namespace Assimp;
|
||||||
using namespace Assimp::COB;
|
using namespace Assimp::COB;
|
||||||
using namespace Assimp::Formatter;
|
using namespace Assimp::Formatter;
|
||||||
|
|
||||||
#define for_each BOOST_FOREACH
|
|
||||||
|
|
||||||
|
|
||||||
static const float units[] = {
|
static const float units[] = {
|
||||||
1000.f,
|
1000.f,
|
||||||
|
@ -170,17 +167,17 @@ void COBImporter::InternReadFile( const std::string& pFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort faces by material indices
|
// sort faces by material indices
|
||||||
for_each(boost::shared_ptr< Node >& n,scene.nodes) {
|
for(boost::shared_ptr< Node >& n : scene.nodes) {
|
||||||
if (n->type == Node::TYPE_MESH) {
|
if (n->type == Node::TYPE_MESH) {
|
||||||
Mesh& mesh = (Mesh&)(*n.get());
|
Mesh& mesh = (Mesh&)(*n.get());
|
||||||
for_each(Face& f,mesh.faces) {
|
for(Face& f : mesh.faces) {
|
||||||
mesh.temp_map[f.material].push_back(&f);
|
mesh.temp_map[f.material].push_back(&f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// count meshes
|
// count meshes
|
||||||
for_each(boost::shared_ptr< Node >& n,scene.nodes) {
|
for(boost::shared_ptr< Node >& n : scene.nodes) {
|
||||||
if (n->type == Node::TYPE_MESH) {
|
if (n->type == Node::TYPE_MESH) {
|
||||||
Mesh& mesh = (Mesh&)(*n.get());
|
Mesh& mesh = (Mesh&)(*n.get());
|
||||||
if (mesh.vertex_positions.size() && mesh.texture_coords.size()) {
|
if (mesh.vertex_positions.size() && mesh.texture_coords.size()) {
|
||||||
|
@ -193,7 +190,7 @@ void COBImporter::InternReadFile( const std::string& pFile,
|
||||||
pScene->mNumMeshes = 0;
|
pScene->mNumMeshes = 0;
|
||||||
|
|
||||||
// count lights and cameras
|
// count lights and cameras
|
||||||
for_each(boost::shared_ptr< Node >& n,scene.nodes) {
|
for(boost::shared_ptr< Node >& n : scene.nodes) {
|
||||||
if (n->type == Node::TYPE_LIGHT) {
|
if (n->type == Node::TYPE_LIGHT) {
|
||||||
++pScene->mNumLights;
|
++pScene->mNumLights;
|
||||||
}
|
}
|
||||||
|
@ -251,10 +248,10 @@ aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill
|
||||||
if (ndmesh.vertex_positions.size() && ndmesh.texture_coords.size()) {
|
if (ndmesh.vertex_positions.size() && ndmesh.texture_coords.size()) {
|
||||||
|
|
||||||
typedef std::pair<unsigned int,Mesh::FaceRefList> Entry;
|
typedef std::pair<unsigned int,Mesh::FaceRefList> Entry;
|
||||||
for_each(const Entry& reflist,ndmesh.temp_map) {
|
for(const Entry& reflist : ndmesh.temp_map) {
|
||||||
{ // create mesh
|
{ // create mesh
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
for_each(Face* f, reflist.second) {
|
for(Face* f : reflist.second) {
|
||||||
n += f->indices.size();
|
n += f->indices.size();
|
||||||
}
|
}
|
||||||
if (!n) {
|
if (!n) {
|
||||||
|
@ -267,7 +264,7 @@ aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill
|
||||||
outmesh->mTextureCoords[0] = new aiVector3D[n];
|
outmesh->mTextureCoords[0] = new aiVector3D[n];
|
||||||
|
|
||||||
outmesh->mFaces = new aiFace[reflist.second.size()]();
|
outmesh->mFaces = new aiFace[reflist.second.size()]();
|
||||||
for_each(Face* f, reflist.second) {
|
for(Face* f : reflist.second) {
|
||||||
if (f->indices.empty()) {
|
if (f->indices.empty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -275,7 +272,7 @@ aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill
|
||||||
aiFace& fout = outmesh->mFaces[outmesh->mNumFaces++];
|
aiFace& fout = outmesh->mFaces[outmesh->mNumFaces++];
|
||||||
fout.mIndices = new unsigned int[f->indices.size()];
|
fout.mIndices = new unsigned int[f->indices.size()];
|
||||||
|
|
||||||
for_each(VertexIndex& v, f->indices) {
|
for(VertexIndex& v : f->indices) {
|
||||||
if (v.pos_idx >= ndmesh.vertex_positions.size()) {
|
if (v.pos_idx >= ndmesh.vertex_positions.size()) {
|
||||||
ThrowException("Position index out of range");
|
ThrowException("Position index out of range");
|
||||||
}
|
}
|
||||||
|
@ -295,7 +292,7 @@ aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill
|
||||||
outmesh->mMaterialIndex = fill->mNumMaterials;
|
outmesh->mMaterialIndex = fill->mNumMaterials;
|
||||||
}{ // create material
|
}{ // create material
|
||||||
const Material* min = NULL;
|
const Material* min = NULL;
|
||||||
for_each(const Material& m, scin.materials) {
|
for(const Material& m : scin.materials) {
|
||||||
if (m.parent_id == ndmesh.id && m.matnum == reflist.first) {
|
if (m.parent_id == ndmesh.id && m.matnum == reflist.first) {
|
||||||
min = &m;
|
min = &m;
|
||||||
break;
|
break;
|
||||||
|
@ -396,7 +393,7 @@ aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill
|
||||||
|
|
||||||
// add children recursively
|
// add children recursively
|
||||||
nd->mChildren = new aiNode*[root.temp_children.size()]();
|
nd->mChildren = new aiNode*[root.temp_children.size()]();
|
||||||
for_each(const Node* n, root.temp_children) {
|
for(const Node* n : root.temp_children) {
|
||||||
(nd->mChildren[nd->mNumChildren++] = BuildNodes(*n,scin,fill))->mParent = nd;
|
(nd->mChildren[nd->mNumChildren++] = BuildNodes(*n,scin,fill))->mParent = nd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,7 +644,7 @@ void COBImporter::ReadUnit_Ascii(Scene& out, LineSplitter& splitter, const Chunk
|
||||||
|
|
||||||
// parent chunks preceede their childs, so we should have the
|
// parent chunks preceede their childs, so we should have the
|
||||||
// corresponding chunk already.
|
// corresponding chunk already.
|
||||||
for_each(boost::shared_ptr< Node >& nd, out.nodes) {
|
for(boost::shared_ptr< Node >& nd : out.nodes) {
|
||||||
if (nd->id == nfo.parent_id) {
|
if (nd->id == nfo.parent_id) {
|
||||||
const unsigned int t=strtoul10(splitter[1]);
|
const unsigned int t=strtoul10(splitter[1]);
|
||||||
|
|
||||||
|
@ -903,7 +900,7 @@ void COBImporter::ReadBitM_Ascii(Scene& /*out*/, LineSplitter& splitter, const C
|
||||||
void COBImporter::ReadString_Binary(std::string& out, StreamReaderLE& reader)
|
void COBImporter::ReadString_Binary(std::string& out, StreamReaderLE& reader)
|
||||||
{
|
{
|
||||||
out.resize( reader.GetI2());
|
out.resize( reader.GetI2());
|
||||||
for_each(char& c,out) {
|
for(char& c : out) {
|
||||||
c = reader.GetI1();
|
c = reader.GetI1();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1043,14 +1040,14 @@ void COBImporter::ReadPolH_Binary(COB::Scene& out, StreamReaderLE& reader, const
|
||||||
ReadBasicNodeInfo_Binary(msh,reader,nfo);
|
ReadBasicNodeInfo_Binary(msh,reader,nfo);
|
||||||
|
|
||||||
msh.vertex_positions.resize(reader.GetI4());
|
msh.vertex_positions.resize(reader.GetI4());
|
||||||
for_each(aiVector3D& v,msh.vertex_positions) {
|
for(aiVector3D& v : msh.vertex_positions) {
|
||||||
v.x = reader.GetF4();
|
v.x = reader.GetF4();
|
||||||
v.y = reader.GetF4();
|
v.y = reader.GetF4();
|
||||||
v.z = reader.GetF4();
|
v.z = reader.GetF4();
|
||||||
}
|
}
|
||||||
|
|
||||||
msh.texture_coords.resize(reader.GetI4());
|
msh.texture_coords.resize(reader.GetI4());
|
||||||
for_each(aiVector2D& v,msh.texture_coords) {
|
for(aiVector2D& v : msh.texture_coords) {
|
||||||
v.x = reader.GetF4();
|
v.x = reader.GetF4();
|
||||||
v.y = reader.GetF4();
|
v.y = reader.GetF4();
|
||||||
}
|
}
|
||||||
|
@ -1283,7 +1280,7 @@ void COBImporter::ReadUnit_Binary(COB::Scene& out, StreamReaderLE& reader, const
|
||||||
|
|
||||||
// parent chunks preceede their childs, so we should have the
|
// parent chunks preceede their childs, so we should have the
|
||||||
// corresponding chunk already.
|
// corresponding chunk already.
|
||||||
for_each(boost::shared_ptr< Node >& nd, out.nodes) {
|
for(boost::shared_ptr< Node >& nd : out.nodes) {
|
||||||
if (nd->id == nfo.parent_id) {
|
if (nd->id == nfo.parent_id) {
|
||||||
const unsigned int t=reader.GetI2();
|
const unsigned int t=reader.GetI2();
|
||||||
nd->unit_scale = t>=sizeof(units)/sizeof(units[0])?(
|
nd->unit_scale = t>=sizeof(units)/sizeof(units[0])?(
|
||||||
|
|
|
@ -56,7 +56,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include "../include/assimp/DefaultLogger.hpp"
|
#include "../include/assimp/DefaultLogger.hpp"
|
||||||
#include "../include/assimp/Importer.hpp"
|
#include "../include/assimp/Importer.hpp"
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
@ -317,7 +316,7 @@ void ColladaLoader::ApplyVertexToEffectSemanticMapping(Collada::Sampler& sampler
|
||||||
// Builds lights for the given node and references them
|
// Builds lights for the given node and references them
|
||||||
void ColladaLoader::BuildLightsForNode( const ColladaParser& pParser, const Collada::Node* pNode, aiNode* pTarget)
|
void ColladaLoader::BuildLightsForNode( const ColladaParser& pParser, const Collada::Node* pNode, aiNode* pTarget)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH( const Collada::LightInstance& lid, pNode->mLights)
|
for( const Collada::LightInstance& lid : pNode->mLights)
|
||||||
{
|
{
|
||||||
// find the referred light
|
// find the referred light
|
||||||
ColladaParser::LightLibrary::const_iterator srcLightIt = pParser.mLightLibrary.find( lid.mLight);
|
ColladaParser::LightLibrary::const_iterator srcLightIt = pParser.mLightLibrary.find( lid.mLight);
|
||||||
|
@ -385,7 +384,7 @@ void ColladaLoader::BuildLightsForNode( const ColladaParser& pParser, const Coll
|
||||||
// Builds cameras for the given node and references them
|
// Builds cameras for the given node and references them
|
||||||
void ColladaLoader::BuildCamerasForNode( const ColladaParser& pParser, const Collada::Node* pNode, aiNode* pTarget)
|
void ColladaLoader::BuildCamerasForNode( const ColladaParser& pParser, const Collada::Node* pNode, aiNode* pTarget)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH( const Collada::CameraInstance& cid, pNode->mCameras)
|
for( const Collada::CameraInstance& cid : pNode->mCameras)
|
||||||
{
|
{
|
||||||
// find the referred light
|
// find the referred light
|
||||||
ColladaParser::CameraLibrary::const_iterator srcCameraIt = pParser.mCameraLibrary.find( cid.mCamera);
|
ColladaParser::CameraLibrary::const_iterator srcCameraIt = pParser.mCameraLibrary.find( cid.mCamera);
|
||||||
|
@ -447,7 +446,7 @@ void ColladaLoader::BuildMeshesForNode( const ColladaParser& pParser, const Coll
|
||||||
newMeshRefs.reserve(pNode->mMeshes.size());
|
newMeshRefs.reserve(pNode->mMeshes.size());
|
||||||
|
|
||||||
// add a mesh for each subgroup in each collada mesh
|
// add a mesh for each subgroup in each collada mesh
|
||||||
BOOST_FOREACH( const Collada::MeshInstance& mid, pNode->mMeshes)
|
for( const Collada::MeshInstance& mid : pNode->mMeshes)
|
||||||
{
|
{
|
||||||
const Collada::Mesh* srcMesh = NULL;
|
const Collada::Mesh* srcMesh = NULL;
|
||||||
const Collada::Controller* srcController = NULL;
|
const Collada::Controller* srcController = NULL;
|
||||||
|
@ -1170,7 +1169,7 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||||
}
|
}
|
||||||
++pos;
|
++pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/assimp/assimp/issues/458
|
// https://github.com/assimp/assimp/issues/458
|
||||||
// Sub-sample axis-angle channels if the delta between two consecutive
|
// Sub-sample axis-angle channels if the delta between two consecutive
|
||||||
// key-frame angles is >= 180 degrees.
|
// key-frame angles is >= 180 degrees.
|
||||||
|
|
|
@ -52,7 +52,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "fast_atof.h"
|
#include "fast_atof.h"
|
||||||
#include "ParsingUtils.h"
|
#include "ParsingUtils.h"
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include "../include/assimp/DefaultLogger.hpp"
|
#include "../include/assimp/DefaultLogger.hpp"
|
||||||
#include "../include/assimp/IOSystem.hpp"
|
#include "../include/assimp/IOSystem.hpp"
|
||||||
#include "../include/assimp/light.h"
|
#include "../include/assimp/light.h"
|
||||||
|
@ -529,10 +528,10 @@ void ColladaParser::ReadAnimation( Collada::Animation* pParent)
|
||||||
// it turned out to have channels - add them
|
// it turned out to have channels - add them
|
||||||
if( !channels.empty())
|
if( !channels.empty())
|
||||||
{
|
{
|
||||||
// FIXME: Is this essentially doing the same as "single-anim-node" codepath in
|
// FIXME: Is this essentially doing the same as "single-anim-node" codepath in
|
||||||
// ColladaLoader::StoreAnimations? For now, this has been deferred to after
|
// ColladaLoader::StoreAnimations? For now, this has been deferred to after
|
||||||
// all animations and all clips have been read. Due to handling of
|
// all animations and all clips have been read. Due to handling of
|
||||||
// <library_animation_clips> this cannot be done here, as the channel owner
|
// <library_animation_clips> this cannot be done here, as the channel owner
|
||||||
// is lost, and some exporters make up animations by referring to multiple
|
// is lost, and some exporters make up animations by referring to multiple
|
||||||
// single-channel animations from an <instance_animation>.
|
// single-channel animations from an <instance_animation>.
|
||||||
/*
|
/*
|
||||||
|
@ -1404,7 +1403,7 @@ void ColladaParser::ReadEffectProfileCommon( Collada::Effect& pEffect)
|
||||||
pEffect.mHasTransparency = true;
|
pEffect.mHasTransparency = true;
|
||||||
|
|
||||||
const char* opaque = mReader->getAttributeValueSafe("opaque");
|
const char* opaque = mReader->getAttributeValueSafe("opaque");
|
||||||
|
|
||||||
if(::strcmp(opaque, "RGB_ZERO") == 0 || ::strcmp(opaque, "RGB_ONE") == 0) {
|
if(::strcmp(opaque, "RGB_ZERO") == 0 || ::strcmp(opaque, "RGB_ONE") == 0) {
|
||||||
pEffect.mRGBTransparency = true;
|
pEffect.mRGBTransparency = true;
|
||||||
}
|
}
|
||||||
|
@ -2249,7 +2248,7 @@ size_t ColladaParser::ReadPrimitives( Mesh* pMesh, std::vector<InputChannel>& pP
|
||||||
// find the offset index for all per-vertex channels
|
// find the offset index for all per-vertex channels
|
||||||
size_t numOffsets = 1;
|
size_t numOffsets = 1;
|
||||||
size_t perVertexOffset = SIZE_MAX; // invalid value
|
size_t perVertexOffset = SIZE_MAX; // invalid value
|
||||||
BOOST_FOREACH( const InputChannel& channel, pPerIndexChannels)
|
for( const InputChannel& channel : pPerIndexChannels)
|
||||||
{
|
{
|
||||||
numOffsets = std::max( numOffsets, channel.mOffset+1);
|
numOffsets = std::max( numOffsets, channel.mOffset+1);
|
||||||
if( channel.mType == IT_Vertex)
|
if( channel.mType == IT_Vertex)
|
||||||
|
@ -2262,7 +2261,7 @@ size_t ColladaParser::ReadPrimitives( Mesh* pMesh, std::vector<InputChannel>& pP
|
||||||
{
|
{
|
||||||
case Prim_Polylist:
|
case Prim_Polylist:
|
||||||
{
|
{
|
||||||
BOOST_FOREACH( size_t i, pVCount)
|
for( size_t i : pVCount)
|
||||||
expectedPointCount += i;
|
expectedPointCount += i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2910,14 +2909,14 @@ AI_WONT_RETURN void ColladaParser::ThrowException( const std::string& pError) co
|
||||||
void ColladaParser::ReportWarning(const char* msg,...)
|
void ColladaParser::ReportWarning(const char* msg,...)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != msg);
|
ai_assert(NULL != msg);
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args,msg);
|
va_start(args,msg);
|
||||||
|
|
||||||
char szBuffer[3000];
|
char szBuffer[3000];
|
||||||
const int iLen = vsprintf(szBuffer,msg,args);
|
const int iLen = vsprintf(szBuffer,msg,args);
|
||||||
ai_assert(iLen > 0);
|
ai_assert(iLen > 0);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
DefaultLogger::get()->warn("Validation warning: " + std::string(szBuffer,iLen));
|
DefaultLogger::get()->warn("Validation warning: " + std::string(szBuffer,iLen));
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "DXFHelper.h"
|
#include "DXFHelper.h"
|
||||||
#include "../include/assimp/IOSystem.hpp"
|
#include "../include/assimp/IOSystem.hpp"
|
||||||
#include "../include/assimp/scene.h"
|
#include "../include/assimp/scene.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
@ -222,8 +221,8 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
if (!DefaultLogger::isNullLogger()) {
|
if (!DefaultLogger::isNullLogger()) {
|
||||||
|
|
||||||
unsigned int vcount = 0, icount = 0;
|
unsigned int vcount = 0, icount = 0;
|
||||||
BOOST_FOREACH (const DXF::Block& bl, output.blocks) {
|
for (const DXF::Block& bl : output.blocks) {
|
||||||
BOOST_FOREACH (boost::shared_ptr<const DXF::PolyLine> pl, bl.lines) {
|
for (boost::shared_ptr<const DXF::PolyLine> pl : bl.lines) {
|
||||||
vcount += pl->positions.size();
|
vcount += pl->positions.size();
|
||||||
icount += pl->counts.size();
|
icount += pl->counts.size();
|
||||||
}
|
}
|
||||||
|
@ -242,7 +241,7 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
|
|
||||||
// index blocks by name
|
// index blocks by name
|
||||||
DXF::BlockMap blocks_by_name;
|
DXF::BlockMap blocks_by_name;
|
||||||
BOOST_FOREACH (DXF::Block& bl, output.blocks) {
|
for (DXF::Block& bl : output.blocks) {
|
||||||
blocks_by_name[bl.name] = &bl;
|
blocks_by_name[bl.name] = &bl;
|
||||||
if ( !entities && bl.name == AI_DXF_ENTITIES_MAGIC_BLOCK ) {
|
if ( !entities && bl.name == AI_DXF_ENTITIES_MAGIC_BLOCK ) {
|
||||||
entities = &bl;
|
entities = &bl;
|
||||||
|
@ -263,7 +262,7 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
ExpandBlockReferences(*entities,blocks_by_name);
|
ExpandBlockReferences(*entities,blocks_by_name);
|
||||||
|
|
||||||
unsigned int cur = 0;
|
unsigned int cur = 0;
|
||||||
BOOST_FOREACH (boost::shared_ptr<const DXF::PolyLine> pl, entities->lines) {
|
for (boost::shared_ptr<const DXF::PolyLine> pl : entities->lines) {
|
||||||
if (pl->positions.size()) {
|
if (pl->positions.size()) {
|
||||||
|
|
||||||
std::map<std::string, unsigned int>::iterator it = layers.find(pl->layer);
|
std::map<std::string, unsigned int>::iterator it = layers.find(pl->layer);
|
||||||
|
@ -289,12 +288,12 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
|
|
||||||
pScene->mMeshes = new aiMesh*[ pScene->mNumMeshes ] ();
|
pScene->mMeshes = new aiMesh*[ pScene->mNumMeshes ] ();
|
||||||
|
|
||||||
BOOST_FOREACH(const LayerMap::value_type& elem, layers){
|
for(const LayerMap::value_type& elem : layers){
|
||||||
aiMesh* const mesh = pScene->mMeshes[elem.second] = new aiMesh();
|
aiMesh* const mesh = pScene->mMeshes[elem.second] = new aiMesh();
|
||||||
mesh->mName.Set(elem.first);
|
mesh->mName.Set(elem.first);
|
||||||
|
|
||||||
unsigned int cvert = 0,cface = 0;
|
unsigned int cvert = 0,cface = 0;
|
||||||
BOOST_FOREACH(const DXF::PolyLine* pl, corr[elem.second]){
|
for(const DXF::PolyLine* pl : corr[elem.second]){
|
||||||
// sum over all faces since we need to 'verbosify' them.
|
// sum over all faces since we need to 'verbosify' them.
|
||||||
cvert += std::accumulate(pl->counts.begin(),pl->counts.end(),0);
|
cvert += std::accumulate(pl->counts.begin(),pl->counts.end(),0);
|
||||||
cface += pl->counts.size();
|
cface += pl->counts.size();
|
||||||
|
@ -309,10 +308,10 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
|
|
||||||
unsigned int prims = 0;
|
unsigned int prims = 0;
|
||||||
unsigned int overall_indices = 0;
|
unsigned int overall_indices = 0;
|
||||||
BOOST_FOREACH(const DXF::PolyLine* pl, corr[elem.second]){
|
for(const DXF::PolyLine* pl : corr[elem.second]){
|
||||||
|
|
||||||
std::vector<unsigned int>::const_iterator it = pl->indices.begin();
|
std::vector<unsigned int>::const_iterator it = pl->indices.begin();
|
||||||
BOOST_FOREACH(unsigned int facenumv,pl->counts) {
|
for(unsigned int facenumv : pl->counts) {
|
||||||
aiFace& face = *faces++;
|
aiFace& face = *faces++;
|
||||||
face.mIndices = new unsigned int[face.mNumIndices = facenumv];
|
face.mIndices = new unsigned int[face.mNumIndices = facenumv];
|
||||||
|
|
||||||
|
@ -358,7 +357,7 @@ void DXFImporter::ConvertMeshes(aiScene* pScene, DXF::FileData& output)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void DXFImporter::ExpandBlockReferences(DXF::Block& bl,const DXF::BlockMap& blocks_by_name)
|
void DXFImporter::ExpandBlockReferences(DXF::Block& bl,const DXF::BlockMap& blocks_by_name)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH (const DXF::InsertBlock& insert, bl.insertions) {
|
for (const DXF::InsertBlock& insert : bl.insertions) {
|
||||||
|
|
||||||
// first check if the referenced blocks exists ...
|
// first check if the referenced blocks exists ...
|
||||||
const DXF::BlockMap::const_iterator it = blocks_by_name.find(insert.name);
|
const DXF::BlockMap::const_iterator it = blocks_by_name.find(insert.name);
|
||||||
|
@ -372,7 +371,7 @@ void DXFImporter::ExpandBlockReferences(DXF::Block& bl,const DXF::BlockMap& bloc
|
||||||
// XXX this would be the place to implement recursive expansion if needed.
|
// XXX this would be the place to implement recursive expansion if needed.
|
||||||
const DXF::Block& bl_src = *(*it).second;
|
const DXF::Block& bl_src = *(*it).second;
|
||||||
|
|
||||||
BOOST_FOREACH (boost::shared_ptr<const DXF::PolyLine> pl_in, bl_src.lines) {
|
for (boost::shared_ptr<const DXF::PolyLine> pl_in : bl_src.lines) {
|
||||||
boost::shared_ptr<DXF::PolyLine> pl_out = boost::shared_ptr<DXF::PolyLine>(new DXF::PolyLine(*pl_in));
|
boost::shared_ptr<DXF::PolyLine> pl_out = boost::shared_ptr<DXF::PolyLine>(new DXF::PolyLine(*pl_in));
|
||||||
|
|
||||||
if (bl_src.base.Length() || insert.scale.x!=1.f || insert.scale.y!=1.f || insert.scale.z!=1.f || insert.angle || insert.pos.Length()) {
|
if (bl_src.base.Length() || insert.scale.x!=1.f || insert.scale.y!=1.f || insert.scale.z!=1.f || insert.angle || insert.pos.Length()) {
|
||||||
|
@ -388,7 +387,7 @@ void DXFImporter::ExpandBlockReferences(DXF::Block& bl,const DXF::BlockMap& bloc
|
||||||
DefaultLogger::get()->warn("DXF: BLOCK rotation not currently implemented");
|
DefaultLogger::get()->warn("DXF: BLOCK rotation not currently implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH (aiVector3D& v, pl_out->positions) {
|
for (aiVector3D& v : pl_out->positions) {
|
||||||
v *= trafo;
|
v *= trafo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -491,7 +491,7 @@ const aiExportFormatDesc* Exporter :: GetExportFormatDescription( size_t pIndex
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
aiReturn Exporter :: RegisterExporter(const ExportFormatEntry& desc)
|
aiReturn Exporter :: RegisterExporter(const ExportFormatEntry& desc)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const ExportFormatEntry& e, pimpl->mExporters) {
|
for(const ExportFormatEntry& e : pimpl->mExporters) {
|
||||||
if (!strcmp(e.mDescription.id,desc.mDescription.id)) {
|
if (!strcmp(e.mDescription.id,desc.mDescription.id)) {
|
||||||
return aiReturn_FAILURE;
|
return aiReturn_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXImportSettings.h"
|
#include "FBXImportSettings.h"
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
|
@ -110,7 +109,7 @@ AnimationCurveNode::AnimationCurveNode(uint64_t id, const Element& element, cons
|
||||||
const char* whitelist[] = {"Model","NodeAttribute"};
|
const char* whitelist[] = {"Model","NodeAttribute"};
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsBySourceSequenced(ID(),whitelist,2);
|
const std::vector<const Connection*>& conns = doc.GetConnectionsBySourceSequenced(ID(),whitelist,2);
|
||||||
|
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// link should go for a property
|
// link should go for a property
|
||||||
if (!con->PropertyName().length()) {
|
if (!con->PropertyName().length()) {
|
||||||
|
@ -171,7 +170,7 @@ const AnimationCurveMap& AnimationCurveNode::Curves() const
|
||||||
// resolve attached animation curves
|
// resolve attached animation curves
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurve");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurve");
|
||||||
|
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// link should go for a property
|
// link should go for a property
|
||||||
if (!con->PropertyName().length()) {
|
if (!con->PropertyName().length()) {
|
||||||
|
@ -227,7 +226,7 @@ AnimationCurveNodeList AnimationLayer::Nodes(const char* const * target_prop_whi
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurveNode");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurveNode");
|
||||||
nodes.reserve(conns.size());
|
nodes.reserve(conns.size());
|
||||||
|
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// link should not go to a property
|
// link should not go to a property
|
||||||
if (con->PropertyName().length()) {
|
if (con->PropertyName().length()) {
|
||||||
|
@ -278,7 +277,7 @@ AnimationStack::AnimationStack(uint64_t id, const Element& element, const std::s
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationLayer");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationLayer");
|
||||||
layers.reserve(conns.size());
|
layers.reserve(conns.size());
|
||||||
|
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// link should not go to a property
|
// link should not go to a property
|
||||||
if (con->PropertyName().length()) {
|
if (con->PropertyName().length()) {
|
||||||
|
|
|
@ -55,7 +55,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "../include/assimp/scene.h"
|
#include "../include/assimp/scene.h"
|
||||||
#include <boost/tuple/tuple.hpp>
|
#include <boost/tuple/tuple.hpp>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/scoped_array.hpp>
|
#include <boost/scoped_array.hpp>
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
@ -79,8 +78,8 @@ using namespace Util;
|
||||||
class Converter
|
class Converter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* The different parts that make up the final local transformation of a fbx-node
|
* The different parts that make up the final local transformation of a fbx-node
|
||||||
*/
|
*/
|
||||||
enum TransformationComp
|
enum TransformationComp
|
||||||
{
|
{
|
||||||
|
@ -144,8 +143,8 @@ private:
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void GetRotationMatrix( Model::RotOrder mode, const aiVector3D& rotation, aiMatrix4x4& out );
|
void GetRotationMatrix( Model::RotOrder mode, const aiVector3D& rotation, aiMatrix4x4& out );
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* checks if a node has more than just scaling, rotation and translation components
|
* checks if a node has more than just scaling, rotation and translation components
|
||||||
*/
|
*/
|
||||||
bool NeedsComplexTransformationChain( const Model& model );
|
bool NeedsComplexTransformationChain( const Model& model );
|
||||||
|
|
||||||
|
@ -154,8 +153,8 @@ private:
|
||||||
std::string NameTransformationChainNode( const std::string& name, TransformationComp comp );
|
std::string NameTransformationChainNode( const std::string& name, TransformationComp comp );
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* note: memory for output_nodes will be managed by the caller
|
* note: memory for output_nodes will be managed by the caller
|
||||||
*/
|
*/
|
||||||
void GenerateTransformationNodeChain( const Model& model, std::vector<aiNode*>& output_nodes );
|
void GenerateTransformationNodeChain( const Model& model, std::vector<aiNode*>& output_nodes );
|
||||||
|
|
||||||
|
@ -192,11 +191,11 @@ private:
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* - if materialIndex == NO_MATERIAL_SEPARATION, materials are not taken into
|
* - if materialIndex == NO_MATERIAL_SEPARATION, materials are not taken into
|
||||||
* account when determining which weights to include.
|
* account when determining which weights to include.
|
||||||
* - outputVertStartIndices is only used when a material index is specified, it gives for
|
* - outputVertStartIndices is only used when a material index is specified, it gives for
|
||||||
* each output vertex the DOM index it maps to.
|
* each output vertex the DOM index it maps to.
|
||||||
*/
|
*/
|
||||||
void ConvertWeights( aiMesh* out, const Model& model, const MeshGeometry& geo,
|
void ConvertWeights( aiMesh* out, const Model& model, const MeshGeometry& geo,
|
||||||
const aiMatrix4x4& node_global_transform = aiMatrix4x4(),
|
const aiMatrix4x4& node_global_transform = aiMatrix4x4(),
|
||||||
|
@ -457,7 +456,7 @@ Converter::Converter( aiScene* out, const Document& doc )
|
||||||
|
|
||||||
if ( doc.Settings().readAllMaterials ) {
|
if ( doc.Settings().readAllMaterials ) {
|
||||||
// unfortunately this means we have to evaluate all objects
|
// unfortunately this means we have to evaluate all objects
|
||||||
BOOST_FOREACH( const ObjectMap::value_type& v, doc.Objects() ) {
|
for( const ObjectMap::value_type& v : doc.Objects() ) {
|
||||||
|
|
||||||
const Object* ob = v.second->Get();
|
const Object* ob = v.second->Get();
|
||||||
if ( !ob ) {
|
if ( !ob ) {
|
||||||
|
@ -515,7 +514,7 @@ void Converter::ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& pa
|
||||||
std::vector<aiNode*> nodes_chain;
|
std::vector<aiNode*> nodes_chain;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BOOST_FOREACH( const Connection* con, conns ) {
|
for( const Connection* con : conns ) {
|
||||||
|
|
||||||
// ignore object-property links
|
// ignore object-property links
|
||||||
if ( con->PropertyName().length() ) {
|
if ( con->PropertyName().length() ) {
|
||||||
|
@ -550,7 +549,7 @@ void Converter::ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& pa
|
||||||
// preserve the name - people might have scripts etc. that rely
|
// preserve the name - people might have scripts etc. that rely
|
||||||
// on specific node names.
|
// on specific node names.
|
||||||
aiNode* name_carrier = NULL;
|
aiNode* name_carrier = NULL;
|
||||||
BOOST_FOREACH( aiNode* prenode, nodes_chain ) {
|
for( aiNode* prenode : nodes_chain ) {
|
||||||
if ( !strcmp( prenode->mName.C_Str(), original_name.c_str() ) ) {
|
if ( !strcmp( prenode->mName.C_Str(), original_name.c_str() ) ) {
|
||||||
name_carrier = prenode;
|
name_carrier = prenode;
|
||||||
break;
|
break;
|
||||||
|
@ -567,7 +566,7 @@ void Converter::ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& pa
|
||||||
|
|
||||||
// link all nodes in a row
|
// link all nodes in a row
|
||||||
aiNode* last_parent = &parent;
|
aiNode* last_parent = &parent;
|
||||||
BOOST_FOREACH( aiNode* prenode, nodes_chain ) {
|
for( aiNode* prenode : nodes_chain ) {
|
||||||
ai_assert( prenode );
|
ai_assert( prenode );
|
||||||
|
|
||||||
if ( last_parent != &parent ) {
|
if ( last_parent != &parent ) {
|
||||||
|
@ -619,7 +618,7 @@ void Converter::ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& pa
|
||||||
void Converter::ConvertLights( const Model& model )
|
void Converter::ConvertLights( const Model& model )
|
||||||
{
|
{
|
||||||
const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
|
const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
|
||||||
BOOST_FOREACH( const NodeAttribute* attr, node_attrs ) {
|
for( const NodeAttribute* attr : node_attrs ) {
|
||||||
const Light* const light = dynamic_cast<const Light*>( attr );
|
const Light* const light = dynamic_cast<const Light*>( attr );
|
||||||
if ( light ) {
|
if ( light ) {
|
||||||
ConvertLight( model, *light );
|
ConvertLight( model, *light );
|
||||||
|
@ -630,7 +629,7 @@ void Converter::ConvertLights( const Model& model )
|
||||||
void Converter::ConvertCameras( const Model& model )
|
void Converter::ConvertCameras( const Model& model )
|
||||||
{
|
{
|
||||||
const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
|
const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
|
||||||
BOOST_FOREACH( const NodeAttribute* attr, node_attrs ) {
|
for( const NodeAttribute* attr : node_attrs ) {
|
||||||
const Camera* const cam = dynamic_cast<const Camera*>( attr );
|
const Camera* const cam = dynamic_cast<const Camera*>( attr );
|
||||||
if ( cam ) {
|
if ( cam ) {
|
||||||
ConvertCamera( model, *cam );
|
ConvertCamera( model, *cam );
|
||||||
|
@ -1089,7 +1088,7 @@ void Converter::SetupNodeMetadata( const Model& model, aiNode& nd )
|
||||||
data->Set( index++, "IsNull", model.IsNull() ? true : false );
|
data->Set( index++, "IsNull", model.IsNull() ? true : false );
|
||||||
|
|
||||||
// add unparsed properties to the node's metadata
|
// add unparsed properties to the node's metadata
|
||||||
BOOST_FOREACH( const DirectPropertyMap::value_type& prop, unparsedProperties ) {
|
for( const DirectPropertyMap::value_type& prop : unparsedProperties ) {
|
||||||
|
|
||||||
// Interpret the property as a concrete type
|
// Interpret the property as a concrete type
|
||||||
if ( const TypedProperty<bool>* interpreted = prop.second->As<TypedProperty<bool> >() )
|
if ( const TypedProperty<bool>* interpreted = prop.second->As<TypedProperty<bool> >() )
|
||||||
|
@ -1116,7 +1115,7 @@ void Converter::ConvertModel( const Model& model, aiNode& nd, const aiMatrix4x4&
|
||||||
std::vector<unsigned int> meshes;
|
std::vector<unsigned int> meshes;
|
||||||
meshes.reserve( geos.size() );
|
meshes.reserve( geos.size() );
|
||||||
|
|
||||||
BOOST_FOREACH( const Geometry* geo, geos ) {
|
for( const Geometry* geo : geos ) {
|
||||||
|
|
||||||
const MeshGeometry* const mesh = dynamic_cast< const MeshGeometry* >( geo );
|
const MeshGeometry* const mesh = dynamic_cast< const MeshGeometry* >( geo );
|
||||||
if ( mesh ) {
|
if ( mesh ) {
|
||||||
|
@ -1160,7 +1159,7 @@ std::vector<unsigned int> Converter::ConvertMesh( const MeshGeometry& mesh, cons
|
||||||
const MatIndexArray& mindices = mesh.GetMaterialIndices();
|
const MatIndexArray& mindices = mesh.GetMaterialIndices();
|
||||||
if ( doc.Settings().readMaterials && !mindices.empty() ) {
|
if ( doc.Settings().readMaterials && !mindices.empty() ) {
|
||||||
const MatIndexArray::value_type base = mindices[ 0 ];
|
const MatIndexArray::value_type base = mindices[ 0 ];
|
||||||
BOOST_FOREACH( MatIndexArray::value_type index, mindices ) {
|
for( MatIndexArray::value_type index : mindices ) {
|
||||||
if ( index != base ) {
|
if ( index != base ) {
|
||||||
return ConvertMeshMultiMaterial( mesh, model, node_global_transform );
|
return ConvertMeshMultiMaterial( mesh, model, node_global_transform );
|
||||||
}
|
}
|
||||||
|
@ -1212,7 +1211,7 @@ unsigned int Converter::ConvertMeshSingleMaterial( const MeshGeometry& mesh, con
|
||||||
aiFace* fac = out_mesh->mFaces = new aiFace[ faces.size() ]();
|
aiFace* fac = out_mesh->mFaces = new aiFace[ faces.size() ]();
|
||||||
|
|
||||||
unsigned int cursor = 0;
|
unsigned int cursor = 0;
|
||||||
BOOST_FOREACH( unsigned int pcount, faces ) {
|
for( unsigned int pcount : faces ) {
|
||||||
aiFace& f = *fac++;
|
aiFace& f = *fac++;
|
||||||
f.mNumIndices = pcount;
|
f.mNumIndices = pcount;
|
||||||
f.mIndices = new unsigned int[ pcount ];
|
f.mIndices = new unsigned int[ pcount ];
|
||||||
|
@ -1287,7 +1286,7 @@ unsigned int Converter::ConvertMeshSingleMaterial( const MeshGeometry& mesh, con
|
||||||
}
|
}
|
||||||
|
|
||||||
aiVector3D* out_uv = out_mesh->mTextureCoords[ i ] = new aiVector3D[ vertices.size() ];
|
aiVector3D* out_uv = out_mesh->mTextureCoords[ i ] = new aiVector3D[ vertices.size() ];
|
||||||
BOOST_FOREACH( const aiVector2D& v, uvs ) {
|
for( const aiVector2D& v : uvs ) {
|
||||||
*out_uv++ = aiVector3D( v.x, v.y, 0.0f );
|
*out_uv++ = aiVector3D( v.x, v.y, 0.0f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1329,7 +1328,7 @@ std::vector<unsigned int> Converter::ConvertMeshMultiMaterial( const MeshGeometr
|
||||||
std::set<MatIndexArray::value_type> had;
|
std::set<MatIndexArray::value_type> had;
|
||||||
std::vector<unsigned int> indices;
|
std::vector<unsigned int> indices;
|
||||||
|
|
||||||
BOOST_FOREACH( MatIndexArray::value_type index, mindices ) {
|
for( MatIndexArray::value_type index : mindices ) {
|
||||||
if ( had.find( index ) == had.end() ) {
|
if ( had.find( index ) == had.end() ) {
|
||||||
|
|
||||||
indices.push_back( ConvertMeshMultiMaterial( mesh, model, index, node_global_transform ) );
|
indices.push_back( ConvertMeshMultiMaterial( mesh, model, index, node_global_transform ) );
|
||||||
|
@ -1537,7 +1536,7 @@ void Converter::ConvertWeights( aiMesh* out, const Model& model, const MeshGeome
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
BOOST_FOREACH( const Cluster* cluster, sk.Clusters() ) {
|
for( const Cluster* cluster : sk.Clusters() ) {
|
||||||
ai_assert( cluster );
|
ai_assert( cluster );
|
||||||
|
|
||||||
const WeightIndexArray& indices = cluster->GetIndices();
|
const WeightIndexArray& indices = cluster->GetIndices();
|
||||||
|
@ -1558,7 +1557,7 @@ void Converter::ConvertWeights( aiMesh* out, const Model& model, const MeshGeome
|
||||||
|
|
||||||
// now check if *any* of these weights is contained in the output mesh,
|
// now check if *any* of these weights is contained in the output mesh,
|
||||||
// taking notes so we don't need to do it twice.
|
// taking notes so we don't need to do it twice.
|
||||||
BOOST_FOREACH( WeightIndexArray::value_type index, indices ) {
|
for( WeightIndexArray::value_type index : indices ) {
|
||||||
|
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
const unsigned int* const out_idx = geo.ToOutputVertexIndex( index, count );
|
const unsigned int* const out_idx = geo.ToOutputVertexIndex( index, count );
|
||||||
|
@ -1839,7 +1838,7 @@ void Converter::TrySetTextureProperties( aiMaterial* out_mat, const TextureMap&
|
||||||
uvIndex = -1;
|
uvIndex = -1;
|
||||||
if ( !mesh )
|
if ( !mesh )
|
||||||
{
|
{
|
||||||
BOOST_FOREACH( const MeshMap::value_type& v, meshes_converted ) {
|
for( const MeshMap::value_type& v : meshes_converted ) {
|
||||||
const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> ( v.first );
|
const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> ( v.first );
|
||||||
if ( !mesh ) {
|
if ( !mesh ) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1957,7 +1956,7 @@ void Converter::TrySetTextureProperties( aiMaterial* out_mat, const LayeredTextu
|
||||||
uvIndex = -1;
|
uvIndex = -1;
|
||||||
if ( !mesh )
|
if ( !mesh )
|
||||||
{
|
{
|
||||||
BOOST_FOREACH( const MeshMap::value_type& v, meshes_converted ) {
|
for( const MeshMap::value_type& v : meshes_converted ) {
|
||||||
const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> ( v.first );
|
const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> ( v.first );
|
||||||
if ( !mesh ) {
|
if ( !mesh ) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -2190,7 +2189,7 @@ void Converter::ConvertAnimations()
|
||||||
anim_fps = FrameRateToDouble( fps, custom );
|
anim_fps = FrameRateToDouble( fps, custom );
|
||||||
|
|
||||||
const std::vector<const AnimationStack*>& animations = doc.AnimationStacks();
|
const std::vector<const AnimationStack*>& animations = doc.AnimationStacks();
|
||||||
BOOST_FOREACH( const AnimationStack* stack, animations ) {
|
for( const AnimationStack* stack : animations ) {
|
||||||
ConvertAnimationStack( *stack );
|
ConvertAnimationStack( *stack );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2205,21 +2204,21 @@ void Converter::RenameNode( const std::string& fixed_name, const std::string& ne
|
||||||
|
|
||||||
const aiString fn( fixed_name );
|
const aiString fn( fixed_name );
|
||||||
|
|
||||||
BOOST_FOREACH( aiCamera* cam, cameras ) {
|
for( aiCamera* cam : cameras ) {
|
||||||
if ( cam->mName == fn ) {
|
if ( cam->mName == fn ) {
|
||||||
cam->mName.Set( new_name );
|
cam->mName.Set( new_name );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH( aiLight* light, lights ) {
|
for( aiLight* light : lights ) {
|
||||||
if ( light->mName == fn ) {
|
if ( light->mName == fn ) {
|
||||||
light->mName.Set( new_name );
|
light->mName.Set( new_name );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH( aiAnimation* anim, animations ) {
|
for( aiAnimation* anim : animations ) {
|
||||||
for ( unsigned int i = 0; i < anim->mNumChannels; ++i ) {
|
for ( unsigned int i = 0; i < anim->mNumChannels; ++i ) {
|
||||||
aiNodeAnim* const na = anim->mChannels[ i ];
|
aiNodeAnim* const na = anim->mChannels[ i ];
|
||||||
if ( na->mNodeName == fn ) {
|
if ( na->mNodeName == fn ) {
|
||||||
|
@ -2299,11 +2298,11 @@ void Converter::ConvertAnimationStack( const AnimationStack& st )
|
||||||
"Lcl Translation"
|
"Lcl Translation"
|
||||||
};
|
};
|
||||||
|
|
||||||
BOOST_FOREACH( const AnimationLayer* layer, layers ) {
|
for( const AnimationLayer* layer : layers ) {
|
||||||
ai_assert( layer );
|
ai_assert( layer );
|
||||||
|
|
||||||
const AnimationCurveNodeList& nodes = layer->Nodes( prop_whitelist, 3 );
|
const AnimationCurveNodeList& nodes = layer->Nodes( prop_whitelist, 3 );
|
||||||
BOOST_FOREACH( const AnimationCurveNode* node, nodes ) {
|
for( const AnimationCurveNode* node : nodes ) {
|
||||||
ai_assert( node );
|
ai_assert( node );
|
||||||
|
|
||||||
const Model* const model = dynamic_cast<const Model*>( node->Target() );
|
const Model* const model = dynamic_cast<const Model*>( node->Target() );
|
||||||
|
@ -2331,7 +2330,7 @@ void Converter::ConvertAnimationStack( const AnimationStack& st )
|
||||||
double stop_timeF = CONVERT_FBX_TIME( stop_time );
|
double stop_timeF = CONVERT_FBX_TIME( stop_time );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BOOST_FOREACH( const NodeMap::value_type& kv, node_map ) {
|
for( const NodeMap::value_type& kv : node_map ) {
|
||||||
GenerateNodeAnimations( node_anims,
|
GenerateNodeAnimations( node_anims,
|
||||||
kv.first,
|
kv.first,
|
||||||
kv.second,
|
kv.second,
|
||||||
|
@ -2389,7 +2388,7 @@ void Converter::ConvertAnimationStack( const AnimationStack& st )
|
||||||
static void validateAnimCurveNodes( const std::vector<const AnimationCurveNode*>& curves,
|
static void validateAnimCurveNodes( const std::vector<const AnimationCurveNode*>& curves,
|
||||||
bool strictMode ) {
|
bool strictMode ) {
|
||||||
const Object* target( NULL );
|
const Object* target( NULL );
|
||||||
BOOST_FOREACH( const AnimationCurveNode* node, curves ) {
|
for( const AnimationCurveNode* node : curves ) {
|
||||||
if ( !target ) {
|
if ( !target ) {
|
||||||
target = node->Target();
|
target = node->Target();
|
||||||
}
|
}
|
||||||
|
@ -2419,7 +2418,7 @@ void Converter::GenerateNodeAnimations( std::vector<aiNodeAnim*>& node_anims,
|
||||||
validateAnimCurveNodes( curves, doc.Settings().strictMode );
|
validateAnimCurveNodes( curves, doc.Settings().strictMode );
|
||||||
#endif
|
#endif
|
||||||
const AnimationCurveNode* curve_node = NULL;
|
const AnimationCurveNode* curve_node = NULL;
|
||||||
BOOST_FOREACH( const AnimationCurveNode* node, curves ) {
|
for( const AnimationCurveNode* node : curves ) {
|
||||||
ai_assert( node );
|
ai_assert( node );
|
||||||
|
|
||||||
if ( node->TargetProperty().empty() ) {
|
if ( node->TargetProperty().empty() ) {
|
||||||
|
@ -2927,11 +2926,11 @@ Converter::KeyFrameListList Converter::GetKeyframeList( const std::vector<const
|
||||||
int64_t adj_start = start - 10000;
|
int64_t adj_start = start - 10000;
|
||||||
int64_t adj_stop = stop + 10000;
|
int64_t adj_stop = stop + 10000;
|
||||||
|
|
||||||
BOOST_FOREACH( const AnimationCurveNode* node, nodes ) {
|
for( const AnimationCurveNode* node : nodes ) {
|
||||||
ai_assert( node );
|
ai_assert( node );
|
||||||
|
|
||||||
const AnimationCurveMap& curves = node->Curves();
|
const AnimationCurveMap& curves = node->Curves();
|
||||||
BOOST_FOREACH( const AnimationCurveMap::value_type& kv, curves ) {
|
for( const AnimationCurveMap::value_type& kv : curves ) {
|
||||||
|
|
||||||
unsigned int mapto;
|
unsigned int mapto;
|
||||||
if ( kv.first == "d|X" ) {
|
if ( kv.first == "d|X" ) {
|
||||||
|
@ -2984,7 +2983,7 @@ KeyTimeList Converter::GetKeyTimeList( const KeyFrameListList& inputs )
|
||||||
KeyTimeList keys;
|
KeyTimeList keys;
|
||||||
|
|
||||||
size_t estimate = 0;
|
size_t estimate = 0;
|
||||||
BOOST_FOREACH( const KeyFrameList& kfl, inputs ) {
|
for( const KeyFrameList& kfl : inputs ) {
|
||||||
estimate = std::max( estimate, kfl.get<0>()->size() );
|
estimate = std::max( estimate, kfl.get<0>()->size() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3037,7 +3036,7 @@ void Converter::InterpolateKeys( aiVectorKey* valOut, const KeyTimeList& keys, c
|
||||||
|
|
||||||
next_pos.resize( inputs.size(), 0 );
|
next_pos.resize( inputs.size(), 0 );
|
||||||
|
|
||||||
BOOST_FOREACH( KeyTimeList::value_type time, keys ) {
|
for( KeyTimeList::value_type time : keys ) {
|
||||||
float result[ 3 ] = { def_value.x, def_value.y, def_value.z };
|
float result[ 3 ] = { def_value.x, def_value.y, def_value.z };
|
||||||
|
|
||||||
for ( size_t i = 0; i < count; ++i ) {
|
for ( size_t i = 0; i < count; ++i ) {
|
||||||
|
|
|
@ -50,7 +50,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXImportSettings.h"
|
#include "FBXImportSettings.h"
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
|
@ -107,7 +106,7 @@ Cluster::Cluster(uint64_t id, const Element& element, const Document& doc, const
|
||||||
|
|
||||||
// read assigned node
|
// read assigned node
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Model");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Model");
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
const Model* const mod = ProcessSimpleConnection<Model>(*con, false, "Model -> Cluster", element);
|
const Model* const mod = ProcessSimpleConnection<Model>(*con, false, "Model -> Cluster", element);
|
||||||
if(mod) {
|
if(mod) {
|
||||||
node = mod;
|
node = mod;
|
||||||
|
@ -143,7 +142,7 @@ Skin::Skin(uint64_t id, const Element& element, const Document& doc, const std::
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
|
||||||
|
|
||||||
clusters.reserve(conns.size());
|
clusters.reserve(conns.size());
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
const Cluster* const cluster = ProcessSimpleConnection<Cluster>(*con, false, "Cluster -> Skin", element);
|
const Cluster* const cluster = ProcessSimpleConnection<Cluster>(*con, false, "Cluster -> Skin", element);
|
||||||
if(cluster) {
|
if(cluster) {
|
||||||
|
|
|
@ -53,7 +53,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
|
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
@ -146,7 +145,7 @@ const Object* LazyObject::Get(bool dieOnError)
|
||||||
|
|
||||||
// For debugging
|
// For debugging
|
||||||
//dumpObjectClassInfo( objtype, classtag );
|
//dumpObjectClassInfo( objtype, classtag );
|
||||||
|
|
||||||
if (!strncmp(obtype,"Geometry",length)) {
|
if (!strncmp(obtype,"Geometry",length)) {
|
||||||
if (!strcmp(classtag.c_str(),"Mesh")) {
|
if (!strcmp(classtag.c_str(),"Mesh")) {
|
||||||
object.reset(new MeshGeometry(id,element,name,doc));
|
object.reset(new MeshGeometry(id,element,name,doc));
|
||||||
|
@ -290,11 +289,11 @@ Document::Document(const Parser& parser, const ImportSettings& settings)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Document::~Document()
|
Document::~Document()
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(ObjectMap::value_type& v, objects) {
|
for(ObjectMap::value_type& v : objects) {
|
||||||
delete v.second;
|
delete v.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(ConnectionMap::value_type& v, src_connections) {
|
for(ConnectionMap::value_type& v : src_connections) {
|
||||||
delete v.second;
|
delete v.second;
|
||||||
}
|
}
|
||||||
// |dest_connections| contain the same Connection objects as the |src_connections|
|
// |dest_connections| contain the same Connection objects as the |src_connections|
|
||||||
|
@ -388,7 +387,7 @@ void Document::ReadObjects()
|
||||||
objects[0] = new LazyObject(0L, *eobjects, *this);
|
objects[0] = new LazyObject(0L, *eobjects, *this);
|
||||||
|
|
||||||
const Scope& sobjects = *eobjects->Compound();
|
const Scope& sobjects = *eobjects->Compound();
|
||||||
BOOST_FOREACH(const ElementMap::value_type& el, sobjects.Elements()) {
|
for(const ElementMap::value_type& el : sobjects.Elements()) {
|
||||||
|
|
||||||
// extract ID
|
// extract ID
|
||||||
const TokenList& tok = el.second->Tokens();
|
const TokenList& tok = el.second->Tokens();
|
||||||
|
@ -538,7 +537,7 @@ const std::vector<const AnimationStack*>& Document::AnimationStacks() const
|
||||||
}
|
}
|
||||||
|
|
||||||
animationStacksResolved.reserve(animationStacks.size());
|
animationStacksResolved.reserve(animationStacks.size());
|
||||||
BOOST_FOREACH(uint64_t id, animationStacks) {
|
for(uint64_t id : animationStacks) {
|
||||||
LazyObject* const lazy = GetObject(id);
|
LazyObject* const lazy = GetObject(id);
|
||||||
const AnimationStack* stack;
|
const AnimationStack* stack;
|
||||||
if(!lazy || !(stack = lazy->Get<AnimationStack>())) {
|
if(!lazy || !(stack = lazy->Get<AnimationStack>())) {
|
||||||
|
|
|
@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
#include "ByteSwapper.h"
|
#include "ByteSwapper.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
|
@ -96,7 +95,7 @@ Material::Material(uint64_t id, const Element& element, const Document& doc, con
|
||||||
|
|
||||||
// resolve texture links
|
// resolve texture links
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// texture link to properties, not objects
|
// texture link to properties, not objects
|
||||||
if (!con->PropertyName().length()) {
|
if (!con->PropertyName().length()) {
|
||||||
|
@ -205,7 +204,7 @@ Texture::Texture(uint64_t id, const Element& element, const Document& doc, const
|
||||||
// resolve video links
|
// resolve video links
|
||||||
if(doc.Settings().readTextures) {
|
if(doc.Settings().readTextures) {
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
const Object* const ob = con->SourceObject();
|
const Object* const ob = con->SourceObject();
|
||||||
if(!ob) {
|
if(!ob) {
|
||||||
DOMWarning("failed to read source object for texture link, ignoring",&element);
|
DOMWarning("failed to read source object for texture link, ignoring",&element);
|
||||||
|
|
|
@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXImporter.h"
|
#include "FBXImporter.h"
|
||||||
#include "FBXImportSettings.h"
|
#include "FBXImportSettings.h"
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
@ -65,7 +64,7 @@ Geometry::Geometry(uint64_t id, const Element& element, const std::string& name,
|
||||||
, skin()
|
, skin()
|
||||||
{
|
{
|
||||||
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
|
const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
const Skin* const sk = ProcessSimpleConnection<Skin>(*con, false, "Skin -> Geometry", element);
|
const Skin* const sk = ProcessSimpleConnection<Skin>(*con, false, "Skin -> Geometry", element);
|
||||||
if(sk) {
|
if(sk) {
|
||||||
skin = sk;
|
skin = sk;
|
||||||
|
@ -130,7 +129,7 @@ MeshGeometry::MeshGeometry(uint64_t id, const Element& element, const std::strin
|
||||||
// generate output vertices, computing an adjacency table to
|
// generate output vertices, computing an adjacency table to
|
||||||
// preserve the mapping from fbx indices to *this* indexing.
|
// preserve the mapping from fbx indices to *this* indexing.
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
BOOST_FOREACH(int index, tempFaces) {
|
for(int index : tempFaces) {
|
||||||
const int absi = index < 0 ? (-index - 1) : index;
|
const int absi = index < 0 ? (-index - 1) : index;
|
||||||
if(static_cast<size_t>(absi) >= vertex_count) {
|
if(static_cast<size_t>(absi) >= vertex_count) {
|
||||||
DOMError("polygon vertex index out of range",&PolygonVertexIndex);
|
DOMError("polygon vertex index out of range",&PolygonVertexIndex);
|
||||||
|
@ -156,7 +155,7 @@ MeshGeometry::MeshGeometry(uint64_t id, const Element& element, const std::strin
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor = 0;
|
cursor = 0;
|
||||||
BOOST_FOREACH(int index, tempFaces) {
|
for(int index : tempFaces) {
|
||||||
const int absi = index < 0 ? (-index - 1) : index;
|
const int absi = index < 0 ? (-index - 1) : index;
|
||||||
mappings[mapping_offsets[absi] + mapping_counts[absi]++] = cursor++;
|
mappings[mapping_offsets[absi] + mapping_counts[absi]++] = cursor++;
|
||||||
}
|
}
|
||||||
|
@ -494,7 +493,7 @@ void ResolveVertexDataArray(std::vector<T>& data_out, const Scope& source,
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int next = 0;
|
unsigned int next = 0;
|
||||||
BOOST_FOREACH(int i, uvIndices) {
|
for(int i : uvIndices) {
|
||||||
if (static_cast<size_t>(i) >= tempData.size()) {
|
if (static_cast<size_t>(i) >= tempData.size()) {
|
||||||
DOMError("index out of range",&GetRequiredElement(source,indexDataElementName));
|
DOMError("index out of range",&GetRequiredElement(source,indexDataElementName));
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXImportSettings.h"
|
#include "FBXImportSettings.h"
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
|
@ -98,7 +97,7 @@ void Model::ResolveLinks(const Element& element, const Document& doc)
|
||||||
materials.reserve(conns.size());
|
materials.reserve(conns.size());
|
||||||
geometry.reserve(conns.size());
|
geometry.reserve(conns.size());
|
||||||
attributes.reserve(conns.size());
|
attributes.reserve(conns.size());
|
||||||
BOOST_FOREACH(const Connection* con, conns) {
|
for(const Connection* con : conns) {
|
||||||
|
|
||||||
// material and geometry links should be Object-Object connections
|
// material and geometry links should be Object-Object connections
|
||||||
if (con->PropertyName().length()) {
|
if (con->PropertyName().length()) {
|
||||||
|
@ -139,7 +138,7 @@ void Model::ResolveLinks(const Element& element, const Document& doc)
|
||||||
bool Model::IsNull() const
|
bool Model::IsNull() const
|
||||||
{
|
{
|
||||||
const std::vector<const NodeAttribute*>& attrs = GetAttributes();
|
const std::vector<const NodeAttribute*>& attrs = GetAttributes();
|
||||||
BOOST_FOREACH(const NodeAttribute* att, attrs) {
|
for(const NodeAttribute* att : attrs) {
|
||||||
|
|
||||||
const Null* null_tag = dynamic_cast<const Null*>(att);
|
const Null* null_tag = dynamic_cast<const Null*>(att);
|
||||||
if(null_tag) {
|
if(null_tag) {
|
||||||
|
|
|
@ -58,7 +58,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "ParsingUtils.h"
|
#include "ParsingUtils.h"
|
||||||
#include "fast_atof.h"
|
#include "fast_atof.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include "ByteSwapper.h"
|
#include "ByteSwapper.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -208,7 +207,7 @@ Scope::Scope(Parser& parser,bool topLevel)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
Scope::~Scope()
|
Scope::~Scope()
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(ElementMap::value_type& v, elements) {
|
for(ElementMap::value_type& v : elements) {
|
||||||
delete v.second;
|
delete v.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "FBXDocument.h"
|
#include "FBXDocument.h"
|
||||||
#include "FBXDocumentUtil.h"
|
#include "FBXDocumentUtil.h"
|
||||||
#include "FBXProperties.h"
|
#include "FBXProperties.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
namespace FBX {
|
namespace FBX {
|
||||||
|
@ -145,7 +144,7 @@ PropertyTable::PropertyTable(const Element& element, boost::shared_ptr<const Pro
|
||||||
, element(&element)
|
, element(&element)
|
||||||
{
|
{
|
||||||
const Scope& scope = GetRequiredScope(element);
|
const Scope& scope = GetRequiredScope(element);
|
||||||
BOOST_FOREACH(const ElementMap::value_type& v, scope.Elements()) {
|
for(const ElementMap::value_type& v : scope.Elements()) {
|
||||||
if(v.first != "P") {
|
if(v.first != "P") {
|
||||||
DOMWarning("expected only P elements in property table",v.second);
|
DOMWarning("expected only P elements in property table",v.second);
|
||||||
continue;
|
continue;
|
||||||
|
@ -171,7 +170,7 @@ PropertyTable::PropertyTable(const Element& element, boost::shared_ptr<const Pro
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
PropertyTable::~PropertyTable()
|
PropertyTable::~PropertyTable()
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(PropertyMap::value_type& v, props) {
|
for(PropertyMap::value_type& v : props) {
|
||||||
delete v.second;
|
delete v.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,7 +208,7 @@ DirectPropertyMap PropertyTable::GetUnparsedProperties() const
|
||||||
DirectPropertyMap result;
|
DirectPropertyMap result;
|
||||||
|
|
||||||
// Loop through all the lazy properties (which is all the properties)
|
// Loop through all the lazy properties (which is all the properties)
|
||||||
BOOST_FOREACH(const LazyPropertyMap::value_type& element, lazyProps) {
|
for(const LazyPropertyMap::value_type& element : lazyProps) {
|
||||||
|
|
||||||
// Skip parsed properties
|
// Skip parsed properties
|
||||||
if (props.end() != props.find(element.first)) continue;
|
if (props.end() != props.find(element.first)) continue;
|
||||||
|
|
|
@ -740,7 +740,7 @@ void ProcessBooleanExtrudedAreaSolidDifference(const IfcExtrudedAreaSolid* as, T
|
||||||
TempMesh temp;
|
TempMesh temp;
|
||||||
|
|
||||||
std::vector<IfcVector3>::const_iterator vit = first_operand.verts.begin();
|
std::vector<IfcVector3>::const_iterator vit = first_operand.verts.begin();
|
||||||
BOOST_FOREACH(unsigned int pcount, first_operand.vertcnt) {
|
for(unsigned int pcount : first_operand.vertcnt) {
|
||||||
temp.Clear();
|
temp.Clear();
|
||||||
|
|
||||||
temp.verts.insert(temp.verts.end(), vit, vit + pcount);
|
temp.verts.insert(temp.verts.end(), vit, vit + pcount);
|
||||||
|
|
|
@ -239,7 +239,7 @@ public:
|
||||||
, total()
|
, total()
|
||||||
{
|
{
|
||||||
curves.reserve(entity.Segments.size());
|
curves.reserve(entity.Segments.size());
|
||||||
BOOST_FOREACH(const IfcCompositeCurveSegment& curveSegment,entity.Segments) {
|
for(const IfcCompositeCurveSegment& curveSegment :entity.Segments) {
|
||||||
// according to the specification, this must be a bounded curve
|
// according to the specification, this must be a bounded curve
|
||||||
boost::shared_ptr< Curve > cv(Curve::Convert(curveSegment.ParentCurve,conv));
|
boost::shared_ptr< Curve > cv(Curve::Convert(curveSegment.ParentCurve,conv));
|
||||||
boost::shared_ptr< BoundedCurve > bc = boost::dynamic_pointer_cast<BoundedCurve>(cv);
|
boost::shared_ptr< BoundedCurve > bc = boost::dynamic_pointer_cast<BoundedCurve>(cv);
|
||||||
|
@ -271,7 +271,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
IfcFloat acc = 0;
|
IfcFloat acc = 0;
|
||||||
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
for(const CurveEntry& entry : curves) {
|
||||||
const ParamRange& range = entry.first->GetParametricRange();
|
const ParamRange& range = entry.first->GetParametricRange();
|
||||||
const IfcFloat delta = std::abs(range.second-range.first);
|
const IfcFloat delta = std::abs(range.second-range.first);
|
||||||
if (u < acc+delta) {
|
if (u < acc+delta) {
|
||||||
|
@ -290,7 +290,7 @@ public:
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
|
|
||||||
IfcFloat acc = 0;
|
IfcFloat acc = 0;
|
||||||
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
for(const CurveEntry& entry : curves) {
|
||||||
const ParamRange& range = entry.first->GetParametricRange();
|
const ParamRange& range = entry.first->GetParametricRange();
|
||||||
const IfcFloat delta = std::abs(range.second-range.first);
|
const IfcFloat delta = std::abs(range.second-range.first);
|
||||||
if (a <= acc+delta && b >= acc) {
|
if (a <= acc+delta && b >= acc) {
|
||||||
|
@ -312,7 +312,7 @@ public:
|
||||||
const size_t cnt = EstimateSampleCount(a,b);
|
const size_t cnt = EstimateSampleCount(a,b);
|
||||||
out.verts.reserve(out.verts.size() + cnt);
|
out.verts.reserve(out.verts.size() + cnt);
|
||||||
|
|
||||||
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
for(const CurveEntry& entry : curves) {
|
||||||
const size_t cnt = out.verts.size();
|
const size_t cnt = out.verts.size();
|
||||||
entry.first->SampleDiscrete(out);
|
entry.first->SampleDiscrete(out);
|
||||||
|
|
||||||
|
@ -357,7 +357,7 @@ public:
|
||||||
// oh well.
|
// oh well.
|
||||||
bool have_param = false, have_point = false;
|
bool have_param = false, have_point = false;
|
||||||
IfcVector3 point;
|
IfcVector3 point;
|
||||||
BOOST_FOREACH(const Entry sel,entity.Trim1) {
|
for(const Entry sel :entity.Trim1) {
|
||||||
if (const EXPRESS::REAL* const r = sel->ToPtr<EXPRESS::REAL>()) {
|
if (const EXPRESS::REAL* const r = sel->ToPtr<EXPRESS::REAL>()) {
|
||||||
range.first = *r;
|
range.first = *r;
|
||||||
have_param = true;
|
have_param = true;
|
||||||
|
@ -374,7 +374,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
have_param = false, have_point = false;
|
have_param = false, have_point = false;
|
||||||
BOOST_FOREACH(const Entry sel,entity.Trim2) {
|
for(const Entry sel :entity.Trim2) {
|
||||||
if (const EXPRESS::REAL* const r = sel->ToPtr<EXPRESS::REAL>()) {
|
if (const EXPRESS::REAL* const r = sel->ToPtr<EXPRESS::REAL>()) {
|
||||||
range.second = *r;
|
range.second = *r;
|
||||||
have_param = true;
|
have_param = true;
|
||||||
|
@ -465,7 +465,7 @@ public:
|
||||||
points.reserve(entity.Points.size());
|
points.reserve(entity.Points.size());
|
||||||
|
|
||||||
IfcVector3 t;
|
IfcVector3 t;
|
||||||
BOOST_FOREACH(const IfcCartesianPoint& cp, entity.Points) {
|
for(const IfcCartesianPoint& cp : entity.Points) {
|
||||||
ConvertCartesianPoint(t,cp);
|
ConvertCartesianPoint(t,cp);
|
||||||
points.push_back(t);
|
points.push_back(t);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace Assimp {
|
||||||
bool ProcessPolyloop(const IfcPolyLoop& loop, TempMesh& meshout, ConversionData& /*conv*/)
|
bool ProcessPolyloop(const IfcPolyLoop& loop, TempMesh& meshout, ConversionData& /*conv*/)
|
||||||
{
|
{
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
BOOST_FOREACH(const IfcCartesianPoint& c, loop.Polygon) {
|
for(const IfcCartesianPoint& c : loop.Polygon) {
|
||||||
IfcVector3 tmp;
|
IfcVector3 tmp;
|
||||||
ConvertCartesianPoint(tmp,c);
|
ConvertCartesianPoint(tmp,c);
|
||||||
|
|
||||||
|
@ -191,10 +191,10 @@ void ProcessPolygonBoundaries(TempMesh& result, const TempMesh& inmesh, size_t m
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result, ConversionData& conv)
|
void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result, ConversionData& conv)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const IfcFace& face, fset.CfsFaces) {
|
for(const IfcFace& face : fset.CfsFaces) {
|
||||||
// size_t ob = -1, cnt = 0;
|
// size_t ob = -1, cnt = 0;
|
||||||
TempMesh meshout;
|
TempMesh meshout;
|
||||||
BOOST_FOREACH(const IfcFaceBound& bound, face.Bounds) {
|
for(const IfcFaceBound& bound : face.Bounds) {
|
||||||
|
|
||||||
if(const IfcPolyLoop* const polyloop = bound.Bound->ToPtr<IfcPolyLoop>()) {
|
if(const IfcPolyLoop* const polyloop = bound.Bound->ToPtr<IfcPolyLoop>()) {
|
||||||
if(ProcessPolyloop(*polyloop, meshout,conv)) {
|
if(ProcessPolyloop(*polyloop, meshout,conv)) {
|
||||||
|
@ -219,7 +219,7 @@ void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result,
|
||||||
|
|
||||||
/*if(!IsTrue(bound.Orientation)) {
|
/*if(!IsTrue(bound.Orientation)) {
|
||||||
size_t c = 0;
|
size_t c = 0;
|
||||||
BOOST_FOREACH(unsigned int& c, meshout.vertcnt) {
|
for(unsigned int& c : meshout.vertcnt) {
|
||||||
std::reverse(result.verts.begin() + cnt,result.verts.begin() + cnt + c);
|
std::reverse(result.verts.begin() + cnt,result.verts.begin() + cnt + c);
|
||||||
cnt += c;
|
cnt += c;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ void ProcessExtrudedArea(const IfcExtrudedAreaSolid& solid, const TempMesh& curv
|
||||||
|
|
||||||
IfcVector3 vmin, vmax;
|
IfcVector3 vmin, vmax;
|
||||||
MinMaxChooser<IfcVector3>()(vmin, vmax);
|
MinMaxChooser<IfcVector3>()(vmin, vmax);
|
||||||
BOOST_FOREACH(IfcVector3& v, in) {
|
for(IfcVector3& v : in) {
|
||||||
v *= trafo;
|
v *= trafo;
|
||||||
|
|
||||||
vmin = std::min(vmin, v);
|
vmin = std::min(vmin, v);
|
||||||
|
@ -579,7 +579,7 @@ void ProcessExtrudedArea(const IfcExtrudedAreaSolid& solid, const TempMesh& curv
|
||||||
}
|
}
|
||||||
|
|
||||||
nors.reserve(conv.apply_openings->size());
|
nors.reserve(conv.apply_openings->size());
|
||||||
BOOST_FOREACH(TempOpening& t, *conv.apply_openings) {
|
for(TempOpening& t : *conv.apply_openings) {
|
||||||
TempMesh& bounds = *t.profileMesh.get();
|
TempMesh& bounds = *t.profileMesh.get();
|
||||||
|
|
||||||
if( bounds.verts.size() <= 2 ) {
|
if( bounds.verts.size() <= 2 ) {
|
||||||
|
@ -617,7 +617,7 @@ void ProcessExtrudedArea(const IfcExtrudedAreaSolid& solid, const TempMesh& curv
|
||||||
}
|
}
|
||||||
|
|
||||||
if( openings ) {
|
if( openings ) {
|
||||||
BOOST_FOREACH(TempOpening& opening, *conv.apply_openings) {
|
for(TempOpening& opening : *conv.apply_openings) {
|
||||||
if( !opening.wallPoints.empty() ) {
|
if( !opening.wallPoints.empty() ) {
|
||||||
IFCImporter::LogError("failed to generate all window caps");
|
IFCImporter::LogError("failed to generate all window caps");
|
||||||
}
|
}
|
||||||
|
@ -697,7 +697,7 @@ void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& resul
|
||||||
std::vector<TempOpening>* oldCollectOpenings = conv.collect_openings;
|
std::vector<TempOpening>* oldCollectOpenings = conv.collect_openings;
|
||||||
conv.collect_openings = &fisherPriceMyFirstOpenings;
|
conv.collect_openings = &fisherPriceMyFirstOpenings;
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcCurve* curve, cprofile->InnerCurves) {
|
for(const IfcCurve* curve : cprofile->InnerCurves) {
|
||||||
TempMesh curveMesh, tempMesh;
|
TempMesh curveMesh, tempMesh;
|
||||||
ProcessCurve(*curve, curveMesh, conv);
|
ProcessCurve(*curve, curveMesh, conv);
|
||||||
ProcessExtrudedArea(solid, curveMesh, dir, tempMesh, conv, true);
|
ProcessExtrudedArea(solid, curveMesh, dir, tempMesh, conv, true);
|
||||||
|
@ -734,7 +734,7 @@ bool ProcessGeometricItem(const IfcRepresentationItem& geo, unsigned int matid,
|
||||||
bool fix_orientation = false;
|
bool fix_orientation = false;
|
||||||
boost::shared_ptr< TempMesh > meshtmp = boost::make_shared<TempMesh>();
|
boost::shared_ptr< TempMesh > meshtmp = boost::make_shared<TempMesh>();
|
||||||
if(const IfcShellBasedSurfaceModel* shellmod = geo.ToPtr<IfcShellBasedSurfaceModel>()) {
|
if(const IfcShellBasedSurfaceModel* shellmod = geo.ToPtr<IfcShellBasedSurfaceModel>()) {
|
||||||
BOOST_FOREACH(boost::shared_ptr<const IfcShell> shell,shellmod->SbsmBoundary) {
|
for(boost::shared_ptr<const IfcShell> shell :shellmod->SbsmBoundary) {
|
||||||
try {
|
try {
|
||||||
const EXPRESS::ENTITY& e = shell->To<ENTITY>();
|
const EXPRESS::ENTITY& e = shell->To<ENTITY>();
|
||||||
const IfcConnectedFaceSet& fs = conv.db.MustGetObject(e).To<IfcConnectedFaceSet>();
|
const IfcConnectedFaceSet& fs = conv.db.MustGetObject(e).To<IfcConnectedFaceSet>();
|
||||||
|
@ -762,7 +762,7 @@ bool ProcessGeometricItem(const IfcRepresentationItem& geo, unsigned int matid,
|
||||||
fix_orientation = true;
|
fix_orientation = true;
|
||||||
}
|
}
|
||||||
else if(const IfcFaceBasedSurfaceModel* surf = geo.ToPtr<IfcFaceBasedSurfaceModel>()) {
|
else if(const IfcFaceBasedSurfaceModel* surf = geo.ToPtr<IfcFaceBasedSurfaceModel>()) {
|
||||||
BOOST_FOREACH(const IfcConnectedFaceSet& fc, surf->FbsmFaces) {
|
for(const IfcConnectedFaceSet& fc : surf->FbsmFaces) {
|
||||||
ProcessConnectedFaceSet(fc,*meshtmp.get(),conv);
|
ProcessConnectedFaceSet(fc,*meshtmp.get(),conv);
|
||||||
}
|
}
|
||||||
fix_orientation = true;
|
fix_orientation = true;
|
||||||
|
|
|
@ -383,7 +383,7 @@ void SetUnits(ConversionData& conv)
|
||||||
void SetCoordinateSpace(ConversionData& conv)
|
void SetCoordinateSpace(ConversionData& conv)
|
||||||
{
|
{
|
||||||
const IfcRepresentationContext* fav = NULL;
|
const IfcRepresentationContext* fav = NULL;
|
||||||
BOOST_FOREACH(const IfcRepresentationContext& v, conv.proj.RepresentationContexts) {
|
for(const IfcRepresentationContext& v : conv.proj.RepresentationContexts) {
|
||||||
fav = &v;
|
fav = &v;
|
||||||
// Model should be the most suitable type of context, hence ignore the others
|
// Model should be the most suitable type of context, hence ignore the others
|
||||||
if (v.ContextType && v.ContextType.Get() == "Model") {
|
if (v.ContextType && v.ContextType.Get() == "Model") {
|
||||||
|
@ -440,7 +440,7 @@ bool ProcessMappedItem(const IfcMappedItem& mapped, aiNode* nd_src, std::vector<
|
||||||
if (conv.apply_openings) {
|
if (conv.apply_openings) {
|
||||||
IfcMatrix4 minv = msrc;
|
IfcMatrix4 minv = msrc;
|
||||||
minv.Inverse();
|
minv.Inverse();
|
||||||
BOOST_FOREACH(TempOpening& open,*conv.apply_openings){
|
for(TempOpening& open :*conv.apply_openings){
|
||||||
open.Transform(minv);
|
open.Transform(minv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,7 +449,7 @@ bool ProcessMappedItem(const IfcMappedItem& mapped, aiNode* nd_src, std::vector<
|
||||||
const IfcRepresentation& repr = mapped.MappingSource->MappedRepresentation;
|
const IfcRepresentation& repr = mapped.MappingSource->MappedRepresentation;
|
||||||
|
|
||||||
bool got = false;
|
bool got = false;
|
||||||
BOOST_FOREACH(const IfcRepresentationItem& item, repr.Items) {
|
for(const IfcRepresentationItem& item : repr.Items) {
|
||||||
if(!ProcessRepresentationItem(item,localmatid,meshes,conv)) {
|
if(!ProcessRepresentationItem(item,localmatid,meshes,conv)) {
|
||||||
IFCImporter::LogWarn("skipping mapped entity of type " + item.GetClassName() + ", no representations could be generated");
|
IFCImporter::LogWarn("skipping mapped entity of type " + item.GetClassName() + ", no representations could be generated");
|
||||||
}
|
}
|
||||||
|
@ -564,9 +564,9 @@ void ProcessProductRepresentation(const IfcProduct& el, aiNode* nd, std::vector<
|
||||||
std::vector<const IfcRepresentation*> repr_ordered(src.size());
|
std::vector<const IfcRepresentation*> repr_ordered(src.size());
|
||||||
std::copy(src.begin(),src.end(),repr_ordered.begin());
|
std::copy(src.begin(),src.end(),repr_ordered.begin());
|
||||||
std::sort(repr_ordered.begin(),repr_ordered.end(),RateRepresentationPredicate());
|
std::sort(repr_ordered.begin(),repr_ordered.end(),RateRepresentationPredicate());
|
||||||
BOOST_FOREACH(const IfcRepresentation* repr, repr_ordered) {
|
for(const IfcRepresentation* repr : repr_ordered) {
|
||||||
bool res = false;
|
bool res = false;
|
||||||
BOOST_FOREACH(const IfcRepresentationItem& item, repr->Items) {
|
for(const IfcRepresentationItem& item : repr->Items) {
|
||||||
if(const IfcMappedItem* const geo = item.ToPtr<IfcMappedItem>()) {
|
if(const IfcMappedItem* const geo = item.ToPtr<IfcMappedItem>()) {
|
||||||
res = ProcessMappedItem(*geo,nd,subnodes,matid,conv) || res;
|
res = ProcessMappedItem(*geo,nd,subnodes,matid,conv) || res;
|
||||||
}
|
}
|
||||||
|
@ -589,7 +589,7 @@ void ProcessMetadata(const ListOf< Lazy< IfcProperty >, 1, 0 >& set, ConversionD
|
||||||
const std::string& prefix = "",
|
const std::string& prefix = "",
|
||||||
unsigned int nest = 0)
|
unsigned int nest = 0)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const IfcProperty& property, set) {
|
for(const IfcProperty& property : set) {
|
||||||
const std::string& key = prefix.length() > 0 ? (prefix + "." + property.Name) : property.Name;
|
const std::string& key = prefix.length() > 0 ? (prefix + "." + property.Name) : property.Name;
|
||||||
if (const IfcPropertySingleValue* const singleValue = property.ToPtr<IfcPropertySingleValue>()) {
|
if (const IfcPropertySingleValue* const singleValue = property.ToPtr<IfcPropertySingleValue>()) {
|
||||||
if (singleValue->NominalValue) {
|
if (singleValue->NominalValue) {
|
||||||
|
@ -615,7 +615,7 @@ void ProcessMetadata(const ListOf< Lazy< IfcProperty >, 1, 0 >& set, ConversionD
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "[";
|
ss << "[";
|
||||||
unsigned index=0;
|
unsigned index=0;
|
||||||
BOOST_FOREACH(const IfcValue::Out& v, listValue->ListValues) {
|
for(const IfcValue::Out& v : listValue->ListValues) {
|
||||||
if (!v) continue;
|
if (!v) continue;
|
||||||
if (const EXPRESS::STRING* str = v->ToPtr<EXPRESS::STRING>()) {
|
if (const EXPRESS::STRING* str = v->ToPtr<EXPRESS::STRING>()) {
|
||||||
std::string value = static_cast<std::string>(*str);
|
std::string value = static_cast<std::string>(*str);
|
||||||
|
@ -713,7 +713,7 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
|
||||||
data->mValues = new aiMetadataEntry[data->mNumProperties]();
|
data->mValues = new aiMetadataEntry[data->mNumProperties]();
|
||||||
|
|
||||||
unsigned int index = 0;
|
unsigned int index = 0;
|
||||||
BOOST_FOREACH(const Metadata::value_type& kv, properties)
|
for(const Metadata::value_type& kv : properties)
|
||||||
data->Set(index++, kv.first, aiString(kv.second));
|
data->Set(index++, kv.first, aiString(kv.second));
|
||||||
|
|
||||||
nd->mMetaData = data;
|
nd->mMetaData = data;
|
||||||
|
@ -751,7 +751,7 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
|
||||||
if(cont->RelatingStructure->GetID() != el.GetID()) {
|
if(cont->RelatingStructure->GetID() != el.GetID()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
BOOST_FOREACH(const IfcProduct& pro, cont->RelatedElements) {
|
for(const IfcProduct& pro : cont->RelatedElements) {
|
||||||
if(pro.ToPtr<IfcOpeningElement>()) {
|
if(pro.ToPtr<IfcOpeningElement>()) {
|
||||||
// IfcOpeningElement is handled below. Sadly we can't use it here as is:
|
// IfcOpeningElement is handled below. Sadly we can't use it here as is:
|
||||||
// The docs say that opening elements are USUALLY attached to building storey,
|
// The docs say that opening elements are USUALLY attached to building storey,
|
||||||
|
@ -794,7 +794,7 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
|
||||||
}
|
}
|
||||||
|
|
||||||
// we need all openings to be in the local space of *this* node, so transform them
|
// we need all openings to be in the local space of *this* node, so transform them
|
||||||
BOOST_FOREACH(TempOpening& op,openings_local) {
|
for(TempOpening& op :openings_local) {
|
||||||
op.Transform( myInv*nd_aggr->mChildren[0]->mTransformation);
|
op.Transform( myInv*nd_aggr->mChildren[0]->mTransformation);
|
||||||
openings.push_back(op);
|
openings.push_back(op);
|
||||||
}
|
}
|
||||||
|
@ -823,7 +823,7 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
|
||||||
nd_aggr->mTransformation = nd->mTransformation;
|
nd_aggr->mTransformation = nd->mTransformation;
|
||||||
|
|
||||||
nd_aggr->mChildren = new aiNode*[aggr->RelatedObjects.size()]();
|
nd_aggr->mChildren = new aiNode*[aggr->RelatedObjects.size()]();
|
||||||
BOOST_FOREACH(const IfcObjectDefinition& def, aggr->RelatedObjects) {
|
for(const IfcObjectDefinition& def : aggr->RelatedObjects) {
|
||||||
if(const IfcProduct* const prod = def.ToPtr<IfcProduct>()) {
|
if(const IfcProduct* const prod = def.ToPtr<IfcProduct>()) {
|
||||||
|
|
||||||
aiNode* const ndnew = ProcessSpatialStructure(nd_aggr.get(),*prod,conv,NULL);
|
aiNode* const ndnew = ProcessSpatialStructure(nd_aggr.get(),*prod,conv,NULL);
|
||||||
|
@ -849,7 +849,7 @@ aiNode* ProcessSpatialStructure(aiNode* parent, const IfcProduct& el, Conversion
|
||||||
|
|
||||||
if (subnodes.size()) {
|
if (subnodes.size()) {
|
||||||
nd->mChildren = new aiNode*[subnodes.size()]();
|
nd->mChildren = new aiNode*[subnodes.size()]();
|
||||||
BOOST_FOREACH(aiNode* nd2, subnodes) {
|
for(aiNode* nd2 : subnodes) {
|
||||||
nd->mChildren[nd->mNumChildren++] = nd2;
|
nd->mChildren[nd->mNumChildren++] = nd2;
|
||||||
nd2->mParent = nd.get();
|
nd2->mParent = nd.get();
|
||||||
}
|
}
|
||||||
|
@ -889,7 +889,7 @@ void ProcessSpatialStructures(ConversionData& conv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOST_FOREACH(const STEP::LazyObject* lz, *range) {
|
for(const STEP::LazyObject* lz : *range) {
|
||||||
const IfcSpatialStructureElement* const prod = lz->ToPtr<IfcSpatialStructureElement>();
|
const IfcSpatialStructureElement* const prod = lz->ToPtr<IfcSpatialStructureElement>();
|
||||||
if(!prod) {
|
if(!prod) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -902,7 +902,7 @@ void ProcessSpatialStructures(ConversionData& conv)
|
||||||
for(;range.first != range.second; ++range.first) {
|
for(;range.first != range.second; ++range.first) {
|
||||||
if(const IfcRelAggregates* const aggr = conv.db.GetObject((*range.first).second)->ToPtr<IfcRelAggregates>()) {
|
if(const IfcRelAggregates* const aggr = conv.db.GetObject((*range.first).second)->ToPtr<IfcRelAggregates>()) {
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcObjectDefinition& def, aggr->RelatedObjects) {
|
for(const IfcObjectDefinition& def : aggr->RelatedObjects) {
|
||||||
// comparing pointer values is not sufficient, we would need to cast them to the same type first
|
// comparing pointer values is not sufficient, we would need to cast them to the same type first
|
||||||
// as there is multiple inheritance in the game.
|
// as there is multiple inheritance in the game.
|
||||||
if (def.GetID() == prod->GetID()) {
|
if (def.GetID() == prod->GetID()) {
|
||||||
|
@ -919,7 +919,7 @@ void ProcessSpatialStructures(ConversionData& conv)
|
||||||
|
|
||||||
|
|
||||||
IFCImporter::LogWarn("failed to determine primary site element, taking the first IfcSite");
|
IFCImporter::LogWarn("failed to determine primary site element, taking the first IfcSite");
|
||||||
BOOST_FOREACH(const STEP::LazyObject* lz, *range) {
|
for(const STEP::LazyObject* lz : *range) {
|
||||||
const IfcSpatialStructureElement* const prod = lz->ToPtr<IfcSpatialStructureElement>();
|
const IfcSpatialStructureElement* const prod = lz->ToPtr<IfcSpatialStructureElement>();
|
||||||
if(!prod) {
|
if(!prod) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -76,7 +76,7 @@ void FillMaterial(aiMaterial* mat,const IFC::IfcSurfaceStyle* surf,ConversionDat
|
||||||
mat->AddProperty(&name,AI_MATKEY_NAME);
|
mat->AddProperty(&name,AI_MATKEY_NAME);
|
||||||
|
|
||||||
// now see which kinds of surface information are present
|
// now see which kinds of surface information are present
|
||||||
BOOST_FOREACH(boost::shared_ptr< const IFC::IfcSurfaceStyleElementSelect > sel2, surf->Styles) {
|
for(boost::shared_ptr< const IFC::IfcSurfaceStyleElementSelect > sel2 : surf->Styles) {
|
||||||
if (const IFC::IfcSurfaceStyleShading* shade = sel2->ResolveSelectPtr<IFC::IfcSurfaceStyleShading>(conv.db)) {
|
if (const IFC::IfcSurfaceStyleShading* shade = sel2->ResolveSelectPtr<IFC::IfcSurfaceStyleShading>(conv.db)) {
|
||||||
aiColor4D col_base,col;
|
aiColor4D col_base,col;
|
||||||
|
|
||||||
|
@ -139,8 +139,8 @@ unsigned int ProcessMaterials(uint64_t id, unsigned int prevMatId, ConversionDat
|
||||||
STEP::DB::RefMapRange range = conv.db.GetRefs().equal_range(id);
|
STEP::DB::RefMapRange range = conv.db.GetRefs().equal_range(id);
|
||||||
for(;range.first != range.second; ++range.first) {
|
for(;range.first != range.second; ++range.first) {
|
||||||
if(const IFC::IfcStyledItem* const styled = conv.db.GetObject((*range.first).second)->ToPtr<IFC::IfcStyledItem>()) {
|
if(const IFC::IfcStyledItem* const styled = conv.db.GetObject((*range.first).second)->ToPtr<IFC::IfcStyledItem>()) {
|
||||||
BOOST_FOREACH(const IFC::IfcPresentationStyleAssignment& as, styled->Styles) {
|
for(const IFC::IfcPresentationStyleAssignment& as : styled->Styles) {
|
||||||
BOOST_FOREACH(boost::shared_ptr<const IFC::IfcPresentationStyleSelect> sel, as.Styles) {
|
for(boost::shared_ptr<const IFC::IfcPresentationStyleSelect> sel : as.Styles) {
|
||||||
|
|
||||||
if( const IFC::IfcSurfaceStyle* const surf = sel->ResolveSelectPtr<IFC::IfcSurfaceStyle>(conv.db) ) {
|
if( const IFC::IfcSurfaceStyle* const surf = sel->ResolveSelectPtr<IFC::IfcSurfaceStyle>(conv.db) ) {
|
||||||
// try to satisfy from cache
|
// try to satisfy from cache
|
||||||
|
|
|
@ -213,7 +213,7 @@ bool BoundingBoxesOverlapping( const BoundingBox &ibb, const BoundingBox &bb )
|
||||||
bool IsDuplicateVertex(const IfcVector2& vv, const std::vector<IfcVector2>& temp_contour)
|
bool IsDuplicateVertex(const IfcVector2& vv, const std::vector<IfcVector2>& temp_contour)
|
||||||
{
|
{
|
||||||
// sanity check for duplicate vertices
|
// sanity check for duplicate vertices
|
||||||
BOOST_FOREACH(const IfcVector2& cp, temp_contour) {
|
for(const IfcVector2& cp : temp_contour) {
|
||||||
if ((cp-vv).SquareLength() < 1e-5f) {
|
if ((cp-vv).SquareLength() < 1e-5f) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ void ExtractVerticesFromClipper(const ClipperLib::Polygon& poly, std::vector<Ifc
|
||||||
bool filter_duplicates = false)
|
bool filter_duplicates = false)
|
||||||
{
|
{
|
||||||
temp_contour.clear();
|
temp_contour.clear();
|
||||||
BOOST_FOREACH(const ClipperLib::IntPoint& point, poly) {
|
for(const ClipperLib::IntPoint& point : poly) {
|
||||||
IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
|
IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
|
||||||
vv = std::max(vv,IfcVector2());
|
vv = std::max(vv,IfcVector2());
|
||||||
vv = std::min(vv,one_vec);
|
vv = std::min(vv,one_vec);
|
||||||
|
@ -243,7 +243,7 @@ BoundingBox GetBoundingBox(const ClipperLib::Polygon& poly)
|
||||||
IfcVector2 newbb_min, newbb_max;
|
IfcVector2 newbb_min, newbb_max;
|
||||||
MinMaxChooser<IfcVector2>()(newbb_min, newbb_max);
|
MinMaxChooser<IfcVector2>()(newbb_min, newbb_max);
|
||||||
|
|
||||||
BOOST_FOREACH(const ClipperLib::IntPoint& point, poly) {
|
for(const ClipperLib::IntPoint& point : poly) {
|
||||||
IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
|
IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
|
||||||
|
|
||||||
// sanity rounding
|
// sanity rounding
|
||||||
|
@ -391,7 +391,7 @@ void MergeWindowContours (const std::vector<IfcVector2>& a,
|
||||||
ClipperLib::Clipper clipper;
|
ClipperLib::Clipper clipper;
|
||||||
ClipperLib::Polygon clip;
|
ClipperLib::Polygon clip;
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector2& pip, a) {
|
for(const IfcVector2& pip : a) {
|
||||||
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,7 +402,7 @@ void MergeWindowContours (const std::vector<IfcVector2>& a,
|
||||||
clipper.AddPolygon(clip, ClipperLib::ptSubject);
|
clipper.AddPolygon(clip, ClipperLib::ptSubject);
|
||||||
clip.clear();
|
clip.clear();
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector2& pip, b) {
|
for(const IfcVector2& pip : b) {
|
||||||
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,7 +425,7 @@ void MakeDisjunctWindowContours (const std::vector<IfcVector2>& a,
|
||||||
ClipperLib::Clipper clipper;
|
ClipperLib::Clipper clipper;
|
||||||
ClipperLib::Polygon clip;
|
ClipperLib::Polygon clip;
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector2& pip, a) {
|
for(const IfcVector2& pip : a) {
|
||||||
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +436,7 @@ void MakeDisjunctWindowContours (const std::vector<IfcVector2>& a,
|
||||||
clipper.AddPolygon(clip, ClipperLib::ptClip);
|
clipper.AddPolygon(clip, ClipperLib::ptClip);
|
||||||
clip.clear();
|
clip.clear();
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector2& pip, b) {
|
for(const IfcVector2& pip : b) {
|
||||||
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,7 +458,7 @@ void CleanupWindowContour(ProjectedWindowContour& window)
|
||||||
ClipperLib::Clipper clipper;
|
ClipperLib::Clipper clipper;
|
||||||
ClipperLib::ExPolygons clipped;
|
ClipperLib::ExPolygons clipped;
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector2& pip, contour) {
|
for(const IfcVector2& pip : contour) {
|
||||||
subject.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
subject.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@ void CleanupWindowContours(ContourVector& contours)
|
||||||
{
|
{
|
||||||
// Use PolyClipper to clean up window contours
|
// Use PolyClipper to clean up window contours
|
||||||
try {
|
try {
|
||||||
BOOST_FOREACH(ProjectedWindowContour& window, contours) {
|
for(ProjectedWindowContour& window : contours) {
|
||||||
CleanupWindowContour(window);
|
CleanupWindowContour(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -516,7 +516,7 @@ void CleanupOuterContour(const std::vector<IfcVector2>& contour_flat, TempMesh&
|
||||||
|
|
||||||
ClipperLib::Polygon clip;
|
ClipperLib::Polygon clip;
|
||||||
clip.reserve(contour_flat.size());
|
clip.reserve(contour_flat.size());
|
||||||
BOOST_FOREACH(const IfcVector2& pip, contour_flat) {
|
for(const IfcVector2& pip : contour_flat) {
|
||||||
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,7 +530,7 @@ void CleanupOuterContour(const std::vector<IfcVector2>& contour_flat, TempMesh&
|
||||||
subject.reserve(4);
|
subject.reserve(4);
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
size_t countdown = 0;
|
size_t countdown = 0;
|
||||||
BOOST_FOREACH(const IfcVector3& pip, curmesh.verts) {
|
for(const IfcVector3& pip : curmesh.verts) {
|
||||||
if (!countdown) {
|
if (!countdown) {
|
||||||
countdown = curmesh.vertcnt[index++];
|
countdown = curmesh.vertcnt[index++];
|
||||||
if (!countdown) {
|
if (!countdown) {
|
||||||
|
@ -548,9 +548,9 @@ void CleanupOuterContour(const std::vector<IfcVector2>& contour_flat, TempMesh&
|
||||||
|
|
||||||
clipper.Execute(ClipperLib::ctIntersection,clipped,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
|
clipper.Execute(ClipperLib::ctIntersection,clipped,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
|
||||||
|
|
||||||
BOOST_FOREACH(const ClipperLib::ExPolygon& ex, clipped) {
|
for(const ClipperLib::ExPolygon& ex : clipped) {
|
||||||
iold.push_back(ex.outer.size());
|
iold.push_back(ex.outer.size());
|
||||||
BOOST_FOREACH(const ClipperLib::IntPoint& point, ex.outer) {
|
for(const ClipperLib::IntPoint& point : ex.outer) {
|
||||||
vold.push_back(IfcVector3(
|
vold.push_back(IfcVector3(
|
||||||
from_int64(point.X),
|
from_int64(point.X),
|
||||||
from_int64(point.Y),
|
from_int64(point.Y),
|
||||||
|
@ -866,7 +866,7 @@ size_t CloseWindows(ContourVector& contours,
|
||||||
OpeningRefs& refs = contours_to_openings[std::distance(contours.begin(), it)];
|
OpeningRefs& refs = contours_to_openings[std::distance(contours.begin(), it)];
|
||||||
|
|
||||||
bool has_other_side = false;
|
bool has_other_side = false;
|
||||||
BOOST_FOREACH(const TempOpening* opening, refs) {
|
for(const TempOpening* opening : refs) {
|
||||||
if(!opening->wallPoints.empty()) {
|
if(!opening->wallPoints.empty()) {
|
||||||
has_other_side = true;
|
has_other_side = true;
|
||||||
break;
|
break;
|
||||||
|
@ -929,8 +929,8 @@ size_t CloseWindows(ContourVector& contours,
|
||||||
|
|
||||||
const IfcVector3 world_point = minv * IfcVector3(proj_point.x,proj_point.y,0.0f);
|
const IfcVector3 world_point = minv * IfcVector3(proj_point.x,proj_point.y,0.0f);
|
||||||
|
|
||||||
BOOST_FOREACH(const TempOpening* opening, refs) {
|
for(const TempOpening* opening : refs) {
|
||||||
BOOST_FOREACH(const IfcVector3& other, opening->wallPoints) {
|
for(const IfcVector3& other : opening->wallPoints) {
|
||||||
const IfcFloat sqdist = (world_point - other).SquareLength();
|
const IfcFloat sqdist = (world_point - other).SquareLength();
|
||||||
|
|
||||||
if (sqdist < best) {
|
if (sqdist < best) {
|
||||||
|
@ -987,7 +987,7 @@ size_t CloseWindows(ContourVector& contours,
|
||||||
else {
|
else {
|
||||||
|
|
||||||
const Contour::const_iterator cbegin = (*it).contour.begin(), cend = (*it).contour.end();
|
const Contour::const_iterator cbegin = (*it).contour.begin(), cend = (*it).contour.end();
|
||||||
BOOST_FOREACH(TempOpening* opening, refs) {
|
for(TempOpening* opening : refs) {
|
||||||
ai_assert(opening->wallPoints.empty());
|
ai_assert(opening->wallPoints.empty());
|
||||||
opening->wallPoints.reserve(opening->wallPoints.capacity() + (*it).contour.size());
|
opening->wallPoints.reserve(opening->wallPoints.capacity() + (*it).contour.size());
|
||||||
for (Contour::const_iterator cit = cbegin; cit != cend; ++cit) {
|
for (Contour::const_iterator cit = cbegin; cit != cend; ++cit) {
|
||||||
|
@ -1023,7 +1023,7 @@ void Quadrify(const std::vector< BoundingBox >& bbs, TempMesh& curmesh)
|
||||||
|
|
||||||
curmesh.vertcnt.resize(quads.size()/4,4);
|
curmesh.vertcnt.resize(quads.size()/4,4);
|
||||||
curmesh.verts.reserve(quads.size());
|
curmesh.verts.reserve(quads.size());
|
||||||
BOOST_FOREACH(const IfcVector2& v2, quads) {
|
for(const IfcVector2& v2 : quads) {
|
||||||
curmesh.verts.push_back(IfcVector3(v2.x, v2.y, static_cast<IfcFloat>(0.0)));
|
curmesh.verts.push_back(IfcVector3(v2.x, v2.y, static_cast<IfcFloat>(0.0)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1034,7 @@ void Quadrify(const ContourVector& contours, TempMesh& curmesh)
|
||||||
std::vector<BoundingBox> bbs;
|
std::vector<BoundingBox> bbs;
|
||||||
bbs.reserve(contours.size());
|
bbs.reserve(contours.size());
|
||||||
|
|
||||||
BOOST_FOREACH(const ContourVector::value_type& val, contours) {
|
for(const ContourVector::value_type& val : contours) {
|
||||||
bbs.push_back(val.bb);
|
bbs.push_back(val.bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1065,7 +1065,7 @@ IfcMatrix4 ProjectOntoPlane(std::vector<IfcVector2>& out_contour, const TempMesh
|
||||||
MinMaxChooser<IfcVector3>()(vmin, vmax);
|
MinMaxChooser<IfcVector3>()(vmin, vmax);
|
||||||
|
|
||||||
// Project all points into the new coordinate system, collect min/max verts on the way
|
// Project all points into the new coordinate system, collect min/max verts on the way
|
||||||
BOOST_FOREACH(const IfcVector3& x, in_verts) {
|
for(const IfcVector3& x : in_verts) {
|
||||||
const IfcVector3 vv = m * x;
|
const IfcVector3 vv = m * x;
|
||||||
// keep Z offset in the plane coordinate system. Ignoring precision issues
|
// keep Z offset in the plane coordinate system. Ignoring precision issues
|
||||||
// (which are present, of course), this should be the same value for
|
// (which are present, of course), this should be the same value for
|
||||||
|
@ -1089,7 +1089,7 @@ IfcMatrix4 ProjectOntoPlane(std::vector<IfcVector2>& out_contour, const TempMesh
|
||||||
// [0,1] range. This gives us a consistent data range so all epsilons
|
// [0,1] range. This gives us a consistent data range so all epsilons
|
||||||
// used below can be constants.
|
// used below can be constants.
|
||||||
vmax -= vmin;
|
vmax -= vmin;
|
||||||
BOOST_FOREACH(IfcVector2& vv, out_contour) {
|
for(IfcVector2& vv : out_contour) {
|
||||||
vv.x = (vv.x - vmin.x) / vmax.x;
|
vv.x = (vv.x - vmin.x) / vmax.x;
|
||||||
vv.y = (vv.y - vmin.y) / vmax.y;
|
vv.y = (vv.y - vmin.y) / vmax.y;
|
||||||
|
|
||||||
|
@ -1110,7 +1110,7 @@ IfcMatrix4 ProjectOntoPlane(std::vector<IfcVector2>& out_contour, const TempMesh
|
||||||
// debug code to verify correctness
|
// debug code to verify correctness
|
||||||
#ifdef ASSIMP_BUILD_DEBUG
|
#ifdef ASSIMP_BUILD_DEBUG
|
||||||
std::vector<IfcVector2> out_contour2;
|
std::vector<IfcVector2> out_contour2;
|
||||||
BOOST_FOREACH(const IfcVector3& x, in_verts) {
|
for(const IfcVector3& x : in_verts) {
|
||||||
const IfcVector3& vv = m * x;
|
const IfcVector3& vv = m * x;
|
||||||
|
|
||||||
out_contour2.push_back(IfcVector2(vv.x,vv.y));
|
out_contour2.push_back(IfcVector2(vv.x,vv.y));
|
||||||
|
@ -1161,7 +1161,7 @@ bool GenerateOpenings(std::vector<TempOpening>& openings,
|
||||||
IfcVector3 wall_extrusion_axis_norm = wall_extrusion_axis;
|
IfcVector3 wall_extrusion_axis_norm = wall_extrusion_axis;
|
||||||
wall_extrusion_axis_norm.Normalize();
|
wall_extrusion_axis_norm.Normalize();
|
||||||
|
|
||||||
BOOST_FOREACH(TempOpening& opening,openings) {
|
for(TempOpening& opening :openings) {
|
||||||
|
|
||||||
// extrusionDir may be 0,0,0 on case where the opening mesh is not an
|
// extrusionDir may be 0,0,0 on case where the opening mesh is not an
|
||||||
// IfcExtrudedAreaSolid but something else (i.e. a brep)
|
// IfcExtrudedAreaSolid but something else (i.e. a brep)
|
||||||
|
@ -1413,7 +1413,7 @@ bool GenerateOpenings(std::vector<TempOpening>& openings,
|
||||||
CleanupOuterContour(contour_flat, curmesh);
|
CleanupOuterContour(contour_flat, curmesh);
|
||||||
|
|
||||||
// Undo the projection and get back to world (or local object) space
|
// Undo the projection and get back to world (or local object) space
|
||||||
BOOST_FOREACH(IfcVector3& v3, curmesh.verts) {
|
for(IfcVector3& v3 : curmesh.verts) {
|
||||||
v3 = minv * v3;
|
v3 = minv * v3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1455,7 +1455,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
MinMaxChooser<IfcVector2>()(vmin, vmax);
|
MinMaxChooser<IfcVector2>()(vmin, vmax);
|
||||||
|
|
||||||
// Move all points into the new coordinate system, collecting min/max verts on the way
|
// Move all points into the new coordinate system, collecting min/max verts on the way
|
||||||
BOOST_FOREACH(IfcVector3& x, out) {
|
for(IfcVector3& x : out) {
|
||||||
const IfcVector3 vv = m * x;
|
const IfcVector3 vv = m * x;
|
||||||
|
|
||||||
// keep Z offset in the plane coordinate system. Ignoring precision issues
|
// keep Z offset in the plane coordinate system. Ignoring precision issues
|
||||||
|
@ -1498,7 +1498,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
ClipperLib::Clipper clipper_holes;
|
ClipperLib::Clipper clipper_holes;
|
||||||
size_t c = 0;
|
size_t c = 0;
|
||||||
|
|
||||||
BOOST_FOREACH(const TempOpening& t,openings) {
|
for(const TempOpening& t :openings) {
|
||||||
const IfcVector3& outernor = nors[c++];
|
const IfcVector3& outernor = nors[c++];
|
||||||
const IfcFloat dot = nor * outernor;
|
const IfcFloat dot = nor * outernor;
|
||||||
if (std::fabs(dot)<1.f-1e-6f) {
|
if (std::fabs(dot)<1.f-1e-6f) {
|
||||||
|
@ -1512,7 +1512,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
|
|
||||||
std::vector<IfcVector2> contour;
|
std::vector<IfcVector2> contour;
|
||||||
|
|
||||||
BOOST_FOREACH(const IfcVector3& xx, t.profileMesh->verts) {
|
for(const IfcVector3& xx : t.profileMesh->verts) {
|
||||||
IfcVector3 vv = m * xx, vv_extr = m * (xx + t.extrusionDir);
|
IfcVector3 vv = m * xx, vv_extr = m * (xx + t.extrusionDir);
|
||||||
|
|
||||||
const bool is_extruded_side = std::fabs(vv.z - coord) > std::fabs(vv_extr.z - coord);
|
const bool is_extruded_side = std::fabs(vv.z - coord) > std::fabs(vv_extr.z - coord);
|
||||||
|
@ -1533,7 +1533,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
}
|
}
|
||||||
|
|
||||||
ClipperLib::Polygon hole;
|
ClipperLib::Polygon hole;
|
||||||
BOOST_FOREACH(IfcVector2& pip, contour) {
|
for(IfcVector2& pip : contour) {
|
||||||
pip.x = (pip.x - vmin.x) / vmax.x;
|
pip.x = (pip.x - vmin.x) / vmax.x;
|
||||||
pip.y = (pip.y - vmin.y) / vmax.y;
|
pip.y = (pip.y - vmin.y) / vmax.y;
|
||||||
|
|
||||||
|
@ -1566,7 +1566,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
// to obtain the final polygon to feed into the triangulator.
|
// to obtain the final polygon to feed into the triangulator.
|
||||||
{
|
{
|
||||||
ClipperLib::Polygon poly;
|
ClipperLib::Polygon poly;
|
||||||
BOOST_FOREACH(IfcVector2& pip, contour_flat) {
|
for(IfcVector2& pip : contour_flat) {
|
||||||
pip.x = (pip.x - vmin.x) / vmax.x;
|
pip.x = (pip.x - vmin.x) / vmax.x;
|
||||||
pip.y = (pip.y - vmin.y) / vmax.y;
|
pip.y = (pip.y - vmin.y) / vmax.y;
|
||||||
|
|
||||||
|
@ -1606,13 +1606,13 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
if (false && do_connections) {
|
if (false && do_connections) {
|
||||||
|
|
||||||
std::vector<IfcVector3> tmpvec;
|
std::vector<IfcVector3> tmpvec;
|
||||||
BOOST_FOREACH(ClipperLib::Polygon& opening, holes_union) {
|
for(ClipperLib::Polygon& opening : holes_union) {
|
||||||
|
|
||||||
assert(ClipperLib::Orientation(opening));
|
assert(ClipperLib::Orientation(opening));
|
||||||
|
|
||||||
tmpvec.clear();
|
tmpvec.clear();
|
||||||
|
|
||||||
BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
|
for(ClipperLib::IntPoint& point : opening) {
|
||||||
|
|
||||||
tmpvec.push_back( minv * IfcVector3(
|
tmpvec.push_back( minv * IfcVector3(
|
||||||
vmin.x + from_int64(point.X) * vmax.x,
|
vmin.x + from_int64(point.X) * vmax.x,
|
||||||
|
@ -1638,13 +1638,13 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector< std::vector<p2t::Point*> > contours;
|
std::vector< std::vector<p2t::Point*> > contours;
|
||||||
BOOST_FOREACH(ClipperLib::ExPolygon& clip, clipped) {
|
for(ClipperLib::ExPolygon& clip : clipped) {
|
||||||
|
|
||||||
contours.clear();
|
contours.clear();
|
||||||
|
|
||||||
// Build the outer polygon contour line for feeding into poly2tri
|
// Build the outer polygon contour line for feeding into poly2tri
|
||||||
std::vector<p2t::Point*> contour_points;
|
std::vector<p2t::Point*> contour_points;
|
||||||
BOOST_FOREACH(ClipperLib::IntPoint& point, clip.outer) {
|
for(ClipperLib::IntPoint& point : clip.outer) {
|
||||||
contour_points.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
|
contour_points.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1664,12 +1664,12 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
|
|
||||||
|
|
||||||
// Build the poly2tri inner contours for all holes we got from ClipperLib
|
// Build the poly2tri inner contours for all holes we got from ClipperLib
|
||||||
BOOST_FOREACH(ClipperLib::Polygon& opening, clip.holes) {
|
for(ClipperLib::Polygon& opening : clip.holes) {
|
||||||
|
|
||||||
contours.push_back(std::vector<p2t::Point*>());
|
contours.push_back(std::vector<p2t::Point*>());
|
||||||
std::vector<p2t::Point*>& contour = contours.back();
|
std::vector<p2t::Point*>& contour = contours.back();
|
||||||
|
|
||||||
BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
|
for(ClipperLib::IntPoint& point : opening) {
|
||||||
contour.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
|
contour.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1689,7 +1689,7 @@ bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std:
|
||||||
const std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
|
const std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
|
||||||
|
|
||||||
// Collect the triangles we just produced
|
// Collect the triangles we just produced
|
||||||
BOOST_FOREACH(p2t::Triangle* tri, tris) {
|
for(p2t::Triangle* tri : tris) {
|
||||||
for(int i = 0; i < 3; ++i) {
|
for(int i = 0; i < 3; ++i) {
|
||||||
|
|
||||||
const IfcVector2 v = IfcVector2(
|
const IfcVector2 v = IfcVector2(
|
||||||
|
|
|
@ -55,7 +55,7 @@ void ProcessPolyLine(const IfcPolyline& def, TempMesh& meshout, ConversionData&
|
||||||
{
|
{
|
||||||
// this won't produce a valid mesh, it just spits out a list of vertices
|
// this won't produce a valid mesh, it just spits out a list of vertices
|
||||||
IfcVector3 t;
|
IfcVector3 t;
|
||||||
BOOST_FOREACH(const IfcCartesianPoint& cp, def.Points) {
|
for(const IfcCartesianPoint& cp : def.Points) {
|
||||||
ConvertCartesianPoint(t,cp);
|
ConvertCartesianPoint(t,cp);
|
||||||
meshout.verts.push_back(t);
|
meshout.verts.push_back(t);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,7 @@ void TempMesh::Clear()
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void TempMesh::Transform(const IfcMatrix4& mat)
|
void TempMesh::Transform(const IfcMatrix4& mat)
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(IfcVector3& v, verts) {
|
for(IfcVector3& v : verts) {
|
||||||
v *= mat;
|
v *= mat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,7 +222,7 @@ void TempMesh::ComputePolygonNormals(std::vector<IfcVector3>& normals,
|
||||||
}
|
}
|
||||||
|
|
||||||
if(normalize) {
|
if(normalize) {
|
||||||
BOOST_FOREACH(IfcVector3& n, normals) {
|
for(IfcVector3& n : normals) {
|
||||||
n.Normalize();
|
n.Normalize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,7 @@ void TempMesh::RemoveAdjacentDuplicates()
|
||||||
|
|
||||||
bool drop = false;
|
bool drop = false;
|
||||||
std::vector<IfcVector3>::iterator base = verts.begin();
|
std::vector<IfcVector3>::iterator base = verts.begin();
|
||||||
BOOST_FOREACH(unsigned int& cnt, vertcnt) {
|
for(unsigned int& cnt : vertcnt) {
|
||||||
if (cnt < 2){
|
if (cnt < 2){
|
||||||
base += cnt;
|
base += cnt;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -50,10 +50,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "../include/assimp/IOSystem.hpp"
|
#include "../include/assimp/IOSystem.hpp"
|
||||||
#include "../include/assimp/scene.h"
|
#include "../include/assimp/scene.h"
|
||||||
#include "StreamReader.h"
|
#include "StreamReader.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
#define for_each BOOST_FOREACH
|
|
||||||
|
|
||||||
static const aiImporterDesc desc = {
|
static const aiImporterDesc desc = {
|
||||||
"Nendo Mesh Importer",
|
"Nendo Mesh Importer",
|
||||||
|
@ -241,7 +239,7 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
std::vector<aiVector3D> vertices;
|
std::vector<aiVector3D> vertices;
|
||||||
std::vector<unsigned int> indices;
|
std::vector<unsigned int> indices;
|
||||||
|
|
||||||
for_each(const Object& obj,objects) {
|
for(const Object& obj : objects) {
|
||||||
aiNode* nd = *cc++ = new aiNode(obj.name);
|
aiNode* nd = *cc++ = new aiNode(obj.name);
|
||||||
nd->mParent = root;
|
nd->mParent = root;
|
||||||
|
|
||||||
|
@ -250,7 +248,7 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
FaceTable face_table;
|
FaceTable face_table;
|
||||||
|
|
||||||
unsigned int n = 0;
|
unsigned int n = 0;
|
||||||
for_each(const Edge& edge, obj.edges) {
|
for(const Edge& edge : obj.edges) {
|
||||||
|
|
||||||
face_table[edge.edge[2]] = n;
|
face_table[edge.edge[2]] = n;
|
||||||
face_table[edge.edge[3]] = n;
|
face_table[edge.edge[3]] = n;
|
||||||
|
@ -263,7 +261,7 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
|
|
||||||
vertices.clear();
|
vertices.clear();
|
||||||
vertices.reserve(4 * face_table.size()); // arbitrarily chosen
|
vertices.reserve(4 * face_table.size()); // arbitrarily chosen
|
||||||
for_each(FaceTable::value_type& v, face_table) {
|
for(FaceTable::value_type& v : face_table) {
|
||||||
indices.clear();
|
indices.clear();
|
||||||
|
|
||||||
aiFace& f = *faces++;
|
aiFace& f = *faces++;
|
||||||
|
|
|
@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/Exporter.hpp>
|
#include <assimp/Exporter.hpp>
|
||||||
#include <assimp/material.h>
|
#include <assimp/material.h>
|
||||||
#include <assimp/scene.h>
|
#include <assimp/scene.h>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,7 +216,7 @@ void ObjExporter :: WriteGeometryFile()
|
||||||
// write vertex positions
|
// write vertex positions
|
||||||
vpMap.getVectors(vp);
|
vpMap.getVectors(vp);
|
||||||
mOutput << "# " << vp.size() << " vertex positions" << endl;
|
mOutput << "# " << vp.size() << " vertex positions" << endl;
|
||||||
BOOST_FOREACH(const aiVector3D& v, vp) {
|
for(const aiVector3D& v : vp) {
|
||||||
mOutput << "v " << v.x << " " << v.y << " " << v.z << endl;
|
mOutput << "v " << v.x << " " << v.y << " " << v.z << endl;
|
||||||
}
|
}
|
||||||
mOutput << endl;
|
mOutput << endl;
|
||||||
|
@ -225,7 +224,7 @@ void ObjExporter :: WriteGeometryFile()
|
||||||
// write uv coordinates
|
// write uv coordinates
|
||||||
vtMap.getVectors(vt);
|
vtMap.getVectors(vt);
|
||||||
mOutput << "# " << vt.size() << " UV coordinates" << endl;
|
mOutput << "# " << vt.size() << " UV coordinates" << endl;
|
||||||
BOOST_FOREACH(const aiVector3D& v, vt) {
|
for(const aiVector3D& v : vt) {
|
||||||
mOutput << "vt " << v.x << " " << v.y << " " << v.z << endl;
|
mOutput << "vt " << v.x << " " << v.y << " " << v.z << endl;
|
||||||
}
|
}
|
||||||
mOutput << endl;
|
mOutput << endl;
|
||||||
|
@ -233,22 +232,22 @@ void ObjExporter :: WriteGeometryFile()
|
||||||
// write vertex normals
|
// write vertex normals
|
||||||
vnMap.getVectors(vn);
|
vnMap.getVectors(vn);
|
||||||
mOutput << "# " << vn.size() << " vertex normals" << endl;
|
mOutput << "# " << vn.size() << " vertex normals" << endl;
|
||||||
BOOST_FOREACH(const aiVector3D& v, vn) {
|
for(const aiVector3D& v : vn) {
|
||||||
mOutput << "vn " << v.x << " " << v.y << " " << v.z << endl;
|
mOutput << "vn " << v.x << " " << v.y << " " << v.z << endl;
|
||||||
}
|
}
|
||||||
mOutput << endl;
|
mOutput << endl;
|
||||||
|
|
||||||
// now write all mesh instances
|
// now write all mesh instances
|
||||||
BOOST_FOREACH(const MeshInstance& m, meshes) {
|
for(const MeshInstance& m : meshes) {
|
||||||
mOutput << "# Mesh \'" << m.name << "\' with " << m.faces.size() << " faces" << endl;
|
mOutput << "# Mesh \'" << m.name << "\' with " << m.faces.size() << " faces" << endl;
|
||||||
if (!m.name.empty()) {
|
if (!m.name.empty()) {
|
||||||
mOutput << "g " << m.name << endl;
|
mOutput << "g " << m.name << endl;
|
||||||
}
|
}
|
||||||
mOutput << "usemtl " << m.matname << endl;
|
mOutput << "usemtl " << m.matname << endl;
|
||||||
|
|
||||||
BOOST_FOREACH(const Face& f, m.faces) {
|
for(const Face& f : m.faces) {
|
||||||
mOutput << f.kind << ' ';
|
mOutput << f.kind << ' ';
|
||||||
BOOST_FOREACH(const FaceVertex& fv, f.indices) {
|
for(const FaceVertex& fv : f.indices) {
|
||||||
mOutput << ' ' << fv.vp;
|
mOutput << ' ' << fv.vp;
|
||||||
|
|
||||||
if (f.kind != 'p') {
|
if (f.kind != 'p') {
|
||||||
|
|
|
@ -42,7 +42,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define INCLUDED_AI_STEPFILE_H
|
#define INCLUDED_AI_STEPFILE_H
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <bitset>
|
#include <bitset>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
@ -868,7 +867,7 @@ namespace STEP {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
~DB() {
|
~DB() {
|
||||||
BOOST_FOREACH(ObjectMap::value_type& o, objects) {
|
for(ObjectMap::value_type& o : objects) {
|
||||||
delete o.second;
|
delete o.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -950,7 +949,7 @@ namespace STEP {
|
||||||
|
|
||||||
// evaluate *all* entities in the file. this is a power test for the loader
|
// evaluate *all* entities in the file. this is a power test for the loader
|
||||||
void EvaluateAll() {
|
void EvaluateAll() {
|
||||||
BOOST_FOREACH(ObjectMap::value_type& e,objects) {
|
for(ObjectMap::value_type& e :objects) {
|
||||||
**e.second;
|
**e.second;
|
||||||
}
|
}
|
||||||
ai_assert(evaluated_count == objects.size());
|
ai_assert(evaluated_count == objects.size());
|
||||||
|
|
|
@ -431,7 +431,7 @@ aiNode* XGLImporter::ReadObject(TempScope& scope, bool skipFirst, const char* cl
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
BOOST_FOREACH(aiNode* ch, children) {
|
for(aiNode* ch : children) {
|
||||||
delete ch;
|
delete ch;
|
||||||
}
|
}
|
||||||
throw;
|
throw;
|
||||||
|
@ -691,7 +691,7 @@ bool XGLImporter::ReadMesh(TempScope& scope)
|
||||||
|
|
||||||
// finally extract output meshes and add them to the scope
|
// finally extract output meshes and add them to the scope
|
||||||
typedef std::pair<unsigned int, TempMaterialMesh> pairt;
|
typedef std::pair<unsigned int, TempMaterialMesh> pairt;
|
||||||
BOOST_FOREACH(const pairt& p, bymat) {
|
for(const pairt& p : bymat) {
|
||||||
aiMesh* const m = ToOutputMesh(p.second);
|
aiMesh* const m = ToOutputMesh(p.second);
|
||||||
scope.meshes_linear.push_back(m);
|
scope.meshes_linear.push_back(m);
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "BaseImporter.h"
|
#include "BaseImporter.h"
|
||||||
#include "irrXMLWrapper.h"
|
#include "irrXMLWrapper.h"
|
||||||
#include "LogAux.h"
|
#include "LogAux.h"
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include "../include/assimp/material.h"
|
#include "../include/assimp/material.h"
|
||||||
#include "../include/assimp/Importer.hpp"
|
#include "../include/assimp/Importer.hpp"
|
||||||
#include "../include/assimp/mesh.h"
|
#include "../include/assimp/mesh.h"
|
||||||
|
@ -102,11 +101,11 @@ private:
|
||||||
|
|
||||||
~TempScope()
|
~TempScope()
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(aiMesh* m, meshes_linear) {
|
for(aiMesh* m : meshes_linear) {
|
||||||
delete m;
|
delete m;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FOREACH(aiMaterial* m, materials_linear) {
|
for(aiMaterial* m : materials_linear) {
|
||||||
delete m;
|
delete m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/material.h>
|
#include <assimp/material.h>
|
||||||
#include <assimp/scene.h>
|
#include <assimp/scene.h>
|
||||||
|
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
@ -130,7 +129,7 @@ glTFExporter::glTFExporter(const char* filename, IOSystem* pIOSystem, const aiSc
|
||||||
|
|
||||||
|
|
||||||
static void CopyValue(const aiMatrix4x4& v, glTF::mat4& o)
|
static void CopyValue(const aiMatrix4x4& v, glTF::mat4& o)
|
||||||
{
|
{
|
||||||
o[ 0] = v.a1; o[ 1] = v.b1; o[ 2] = v.c1; o[ 3] = v.d1;
|
o[ 0] = v.a1; o[ 1] = v.b1; o[ 2] = v.c1; o[ 3] = v.d1;
|
||||||
o[ 4] = v.a2; o[ 5] = v.b2; o[ 6] = v.c2; o[ 7] = v.d2;
|
o[ 4] = v.a2; o[ 5] = v.b2; o[ 6] = v.c2; o[ 7] = v.d2;
|
||||||
o[ 8] = v.a3; o[ 9] = v.b3; o[10] = v.c3; o[11] = v.d3;
|
o[ 8] = v.a3; o[ 9] = v.b3; o[10] = v.c3; o[11] = v.d3;
|
||||||
|
@ -233,7 +232,7 @@ void glTFExporter::ExportMaterials()
|
||||||
for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) {
|
for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) {
|
||||||
const aiMaterial* mat = mScene->mMaterials[i];
|
const aiMaterial* mat = mScene->mMaterials[i];
|
||||||
|
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
if (mat->Get(AI_MATKEY_NAME, aiName) == AI_SUCCESS) {
|
if (mat->Get(AI_MATKEY_NAME, aiName) == AI_SUCCESS) {
|
||||||
name = aiName.C_Str();
|
name = aiName.C_Str();
|
||||||
|
|
Loading…
Reference in New Issue