Преглед изворни кода

Add first WIP version of a TrueSpace loader. Currently only ASCII COB/SCNs are supported.
Add some fast_atof overloads to simplify calling it.
Add another convenience c'tor to aiColorMM.
Add COB test models.
Remove unreferenced member in B3D importer.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@633 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg пре 15 година
родитељ
комит
4c1b5a532d

+ 1 - 1
code/B3DImporter.h

@@ -105,7 +105,7 @@ private:
 	void ReadBB3D( aiScene *scene );
 	void ReadBB3D( aiScene *scene );
 
 
 	unsigned _pos;
 	unsigned _pos;
-	unsigned _size;
+//	unsigned _size;
 	std::vector<unsigned char> _buf;
 	std::vector<unsigned char> _buf;
 	std::vector<unsigned> _stack;
 	std::vector<unsigned> _stack;
 	
 	

+ 13 - 0
code/CMakeLists.txt

@@ -137,6 +137,8 @@ SOURCE_GROUP( Common FILES
 	Subdivision.cpp
 	Subdivision.cpp
 	Subdivision.h
 	Subdivision.h
 	Vertex.h
 	Vertex.h
+	LineSplitter.h
+	TinyFormatter.h
 )
 )
 
 
 SOURCE_GROUP( 3DS FILES 
 SOURCE_GROUP( 3DS FILES 
@@ -295,6 +297,12 @@ SOURCE_GROUP(MS3D FILES
 	MS3DLoader.h
 	MS3DLoader.h
 )
 )
 
 
+SOURCE_GROUP(COB FILES
+	COBLoader.cpp
+	COBLoader.h
+	COBScene.h
+)
+
 SOURCE_GROUP( PostProcessing FILES
 SOURCE_GROUP( PostProcessing FILES
 	CalcTangentsProcess.cpp
 	CalcTangentsProcess.cpp
 	CalcTangentsProcess.h
 	CalcTangentsProcess.h
@@ -661,6 +669,11 @@ ADD_LIBRARY( assimp SHARED
 	Vertex.h
 	Vertex.h
 	MS3DLoader.h
 	MS3DLoader.h
 	MS3DLoader.cpp
 	MS3DLoader.cpp
+	COBLoader.cpp
+	COBLoader.h
+	COBScene.h
+	TinyFormatter.h
+	LineSplitter.h
 
 
 	# Necessary to show the headers in the project when using the VC++ generator:
 	# Necessary to show the headers in the project when using the VC++ generator:
 	BoostWorkaround/boost/math/common_factor_rt.hpp
 	BoostWorkaround/boost/math/common_factor_rt.hpp

+ 882 - 0
code/COBLoader.cpp

@@ -0,0 +1,882 @@
+/*
+Open Asset Import Library (ASSIMP)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2008, ASSIMP Development Team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, 
+with or without modification, are permitted provided that the 
+following conditions are met:
+
+* Redistributions of source code must retain the above
+  copyright notice, this list of conditions and the
+  following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the
+  following disclaimer in the documentation and/or other
+  materials provided with the distribution.
+
+* Neither the name of the ASSIMP team, nor the names of its
+  contributors may be used to endorse or promote products
+  derived from this software without specific prior
+  written permission of the ASSIMP Development Team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  COBLoader.cpp
+ *  @brief Implementation of the TrueSpace COB/SCN importer class.
+ */
+#include "AssimpPCH.h"
+
+#ifndef AI_BUILD_NO_COB_IMPORTER
+#include "COBLoader.h"
+#include "COBScene.h"
+
+#include "StreamReader.h"
+#include "ParsingUtils.h"
+#include "fast_atof.h"
+
+#include "LineSplitter.h"
+#include "TinyFormatter.h"
+
+using namespace Assimp;
+using namespace Assimp::COB;
+using namespace Assimp::Formatter;
+
+#define for_each BOOST_FOREACH
+
+
+// ------------------------------------------------------------------------------------------------
+// Constructor to be privately used by Importer
+COBImporter::COBImporter()
+{}
+
+// ------------------------------------------------------------------------------------------------
+// Destructor, private as well 
+COBImporter::~COBImporter()
+{}
+
+// ------------------------------------------------------------------------------------------------
+// Returns whether the class can handle the format of the given file. 
+bool COBImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
+{
+	const std::string& extension = GetExtension(pFile);
+	if (extension == "cob" || extension == "scn") {
+		return true;
+	}
+
+	else if (!extension.length() || checkSig)	{
+		if (!pIOHandler) {
+			return true;
+		}
+		const char* tokens[] = {"Caligary"};
+		return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1);
+	}
+	return false;
+}
+
+// ------------------------------------------------------------------------------------------------
+// List all extensions handled by this loader
+void COBImporter::GetExtensionList(std::set<std::string>& app)
+{
+	app.insert("cob");
+	app.insert("scn");
+}
+
+// ------------------------------------------------------------------------------------------------
+// Setup configuration properties for the loader
+void COBImporter::SetupProperties(const Importer* pImp)
+{
+	// nothing to be done for the moment
+}
+
+// ------------------------------------------------------------------------------------------------
+/*static*/ void COBImporter::ThrowException(const std::string& msg)
+{
+	throw DeadlyImportError("COB: "+msg);
+}
+
+// ------------------------------------------------------------------------------------------------
+// Imports the given file into the given scene structure. 
+void COBImporter::InternReadFile( const std::string& pFile, 
+	aiScene* pScene, IOSystem* pIOHandler)
+{
+	COB::Scene scene;
+	boost::scoped_ptr<StreamReaderLE> stream(new StreamReaderLE( 
+		pIOHandler->Open(pFile,"rb")) );
+
+	// check header
+	char head[32];
+	stream->CopyAndAdvance(head,32);
+	if (strncmp(head,"Caligari ",9)) {
+		ThrowException("Could not found magic id: `Caligari`");
+	}
+
+	DefaultLogger::get()->info("File format tag: "+std::string(head+9,6));
+	void (COBImporter::* load)(Scene&,StreamReaderLE*)= head[15]=='A'?&COBImporter::ReadAsciiFile:&COBImporter::ReadBinaryFile;
+	if (head[16]!='L') {
+		ThrowException("File is big-endian, which is not supported");
+	}
+	
+	// load data into intermediate structures
+	(this->*load)(scene,stream.get());
+	if(scene.nodes.empty()) {
+		ThrowException("No nodes loaded");
+	}
+
+	// sort faces by material indices
+	for_each(boost::shared_ptr< Node >& n,scene.nodes) {
+		try {
+			Mesh& mesh = dynamic_cast<Mesh&>(*n.get());
+			for_each(Face& f,mesh.faces) {
+				mesh.temp_map[f.material].push_back(&f);
+			}
+		} catch (std::bad_cast&) {}
+	}
+
+	// count meshes
+	for_each(boost::shared_ptr< Node >& n,scene.nodes) {
+		try {
+			Mesh& mesh = dynamic_cast<Mesh&>(*n.get());
+			if (mesh.vertex_positions.size() && mesh.texture_coords.size()) {
+				pScene->mNumMeshes += mesh.temp_map.size();
+			}
+		} catch (std::bad_cast&) {}
+	}
+	pScene->mMeshes = new aiMesh*[pScene->mNumMeshes]();
+	pScene->mMaterials = new aiMaterial*[pScene->mNumMeshes]();
+	pScene->mNumMeshes = 0;
+
+	// count lights and cameras
+	for_each(boost::shared_ptr< Node >& n,scene.nodes) {
+		if (n->type == Node::TYPE_LIGHT) {
+			++pScene->mNumLights;
+		}
+		else if (n->type == Node::TYPE_CAMERA) {
+			++pScene->mNumCameras;
+		}
+	}
+
+	if (pScene->mNumLights) {
+		pScene->mLights  = new aiLight*[pScene->mNumLights]();
+	}
+	if (pScene->mNumCameras) {
+		pScene->mCameras = new aiCamera*[pScene->mNumCameras]();
+	}
+	pScene->mNumLights = pScene->mNumCameras = 0;
+
+	// resolve parents by their IDs and build the output graph
+	boost::scoped_ptr<Node> root(new Group());
+	for(size_t n = 0; n < scene.nodes.size(); ++n) {
+		const Node& nn = *scene.nodes[n].get();
+		if(nn.parent_id==0) {
+			root->temp_children.push_back(&nn);
+		}
+
+		for(size_t m = n; m < scene.nodes.size(); ++m) {
+			const Node& mm = *scene.nodes[m].get();
+			if (mm.parent_id == nn.id) {
+				nn.temp_children.push_back(&mm);
+			}
+		}
+	}
+
+	pScene->mRootNode = BuildNodes(*root.get(),scene,pScene);
+}
+
+// ------------------------------------------------------------------------------------------------
+aiNode* COBImporter::BuildNodes(const Node& root,const Scene& scin,aiScene* fill)
+{
+	aiNode* nd = new aiNode();
+	nd->mName.Set(root.name);
+	nd->mTransformation = root.transform;
+
+	// Note to everybody believing Voodoo is appropriate here:
+	// I know polymorphism, run as fast as you can ;-)
+	if (Node::TYPE_MESH == root.type) {
+		const Mesh& ndmesh = dynamic_cast<const Mesh&>(root);
+		if (ndmesh.vertex_positions.size() && ndmesh.texture_coords.size()) {
+
+			typedef std::pair<unsigned int,Mesh::FaceRefList> Entry;
+			for_each(const Entry& reflist,ndmesh.temp_map) {
+				{	// create mesh
+					size_t n = 0;
+					for_each(Face* f, reflist.second) {
+						n += f->indices.size();
+					}
+					if (!n) {
+						continue;
+					}
+					aiMesh* outmesh = fill->mMeshes[fill->mNumMeshes++] = new aiMesh();
+					++nd->mNumMeshes;
+
+					outmesh->mVertices = new aiVector3D[n];
+					outmesh->mTextureCoords[0] = new aiVector3D[n];
+
+					outmesh->mFaces = new aiFace[reflist.second.size()]();
+					for_each(Face* f, reflist.second) {
+						if (f->indices.empty()) {
+							continue;
+						}
+
+						aiFace& fout = outmesh->mFaces[outmesh->mNumFaces++];
+						fout.mIndices = new unsigned int[f->indices.size()];
+
+						for_each(VertexIndex& v, f->indices) {
+							if (v.pos_idx >= ndmesh.vertex_positions.size()) {
+								ThrowException("Position index out of range");
+							}
+							if (v.uv_idx >= ndmesh.texture_coords.size()) {
+								ThrowException("UV index out of range");
+							}
+							outmesh->mVertices[outmesh->mNumVertices] = ndmesh.vertex_positions[ v.pos_idx ]; 
+							outmesh->mTextureCoords[0][outmesh->mNumVertices] = aiVector3D( 
+								ndmesh.texture_coords[ v.uv_idx ].x,
+								ndmesh.texture_coords[ v.uv_idx ].y,
+								0.f
+							);
+
+							fout.mIndices[fout.mNumIndices++] = outmesh->mNumVertices++;
+						}
+					}
+					outmesh->mMaterialIndex = fill->mNumMaterials;
+				}{	// create material
+					const Material* min = NULL;
+					for_each(const Material& m, scin.materials) {
+						if (m.parent_id == ndmesh.id && m.matnum == reflist.first) {
+							min = &m;
+							break;
+						}
+					}
+					boost::scoped_ptr<const Material> defmat;
+					if(!min) {
+						DefaultLogger::get()->debug(format()<<"Could not resolve material index "
+							<<reflist.first<<" - creating default material for this slot");
+
+						defmat.reset(min=new Material());
+					}
+
+					MaterialHelper* mat = new MaterialHelper();
+					fill->mMaterials[fill->mNumMaterials++] = mat;
+					aiString s;
+					s.Set(min->type);
+
+					mat->AddProperty(&s,AI_MATKEY_NAME);
+
+					if(int tmp = ndmesh.draw_flags & Mesh::WIRED ? 1 : 0) {
+						mat->AddProperty(&tmp,1,AI_MATKEY_ENABLE_WIREFRAME);
+					}
+
+					{	int shader;
+						switch(min->shader) 
+						{
+						case Material::FLAT:
+							shader = aiShadingMode_Gouraud;
+							break;
+
+						case Material::PHONG:
+							shader = aiShadingMode_Phong;
+							break;
+
+						case Material::METAL:
+							shader = aiShadingMode_CookTorrance;
+							break;
+
+						default:
+							ai_assert(false); // shouldn't be here
+						}
+						mat->AddProperty(&shader,1,AI_MATKEY_SHADING_MODEL);
+						if(shader != aiShadingMode_Gouraud) {
+							mat->AddProperty(&min->exp,1,AI_MATKEY_SHININESS);
+						}
+					}
+
+					mat->AddProperty(&min->ior,1,AI_MATKEY_REFRACTI);
+					mat->AddProperty(&min->rgb,1,AI_MATKEY_COLOR_DIFFUSE);
+
+					aiColor3D c = aiColor3D(min->rgb)*min->ks;
+					mat->AddProperty(&c,1,AI_MATKEY_COLOR_SPECULAR);
+
+					c = aiColor3D(min->rgb)*min->ka;
+					mat->AddProperty(&c,1,AI_MATKEY_COLOR_AMBIENT);
+				}
+			}
+		}
+	}
+	else if (Node::TYPE_LIGHT == root.type) {
+		const Light& ndlight = dynamic_cast<const Light&>(root);
+	}
+	else if (Node::TYPE_CAMERA == root.type) {
+		const Camera& ndcam = dynamic_cast<const Camera&>(root);
+	}
+
+	// add meshes
+	if (nd->mNumMeshes) { // mMeshes must be NULL if count is 0
+		nd->mMeshes = new unsigned int[nd->mNumMeshes];
+		for(unsigned int i = 0; i < nd->mNumMeshes;++i) {
+			nd->mMeshes[i] = fill->mNumMeshes-i-1;
+		}
+	}
+
+	// add children recursively
+	nd->mChildren = new aiNode*[root.temp_children.size()]();
+	for_each(const Node* n, root.temp_children) {
+		(nd->mChildren[nd->mNumChildren++] = BuildNodes(*n,scin,fill))->mParent = nd;
+	}
+
+	return nd;
+}
+
+// ------------------------------------------------------------------------------------------------
+// Read an ASCII file into the given scene data structure
+void COBImporter::ReadAsciiFile(Scene& out, StreamReaderLE* stream)
+{
+	ChunkInfo ci;
+	for(LineSplitter splitter(*stream);splitter;++splitter) {
+
+		// add all chunks to be recognized here. /else ../ ommitted intentionally.
+		if (splitter.match_start("PolH ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadPolH_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("BitM ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadBitM_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Mat1 ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadMat1_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Grou ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadGrou_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Lght ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadLght_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Came ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadCame_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Bone ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadBone_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Chan ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadChan_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("Unit ")) {
+			ReadChunkInfo_Ascii(ci,splitter);
+			ReadUnit_Ascii(out,splitter,ci);
+		}
+		if (splitter.match_start("END ")) {
+			// we don't need this, but I guess there is a reason this
+			// chunk has been implemented into COB for.
+			return;
+		}
+	}
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadChunkInfo_Ascii(ChunkInfo& out, const LineSplitter& splitter)
+{
+	const char* all_tokens[8];
+	splitter.get_tokens(all_tokens);
+
+	out.version = (all_tokens[1][1]-'0')*100+(all_tokens[1][3]-'0')*10+(all_tokens[1][4]-'0');
+	out.id	= strtol10(all_tokens[3]);
+	out.parent_id = strtol10(all_tokens[5]);
+	out.size = strtol10s(all_tokens[7]);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::UnsupportedChunk_Ascii(LineSplitter& splitter, const ChunkInfo& nfo, const char* name)
+{
+	std::string error = "Encountered unsupported chunk: "; error += name;
+
+	// we can recover if the chunk size was specified.
+	if(nfo.size) {
+		DefaultLogger::get()->error(error);
+
+		// (HACK) - our current position in the stream is the beginning of the
+		// head line of the next chunk. That's fine, but the caller is going
+		// to call ++ on `splitter`, which we need to swallow to avoid 
+		// missing the next line.
+		splitter.get_stream().IncPtr(nfo.size);
+		splitter.swallow_next_increment();
+	}
+	else ThrowException(error);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogWarn_Ascii(const LineSplitter& splitter, const format& message)	{
+	LogWarn_Ascii(message << " [at line "<< splitter.get_index()<<"]");
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogError_Ascii(const LineSplitter& splitter, const format& message)	{
+	LogError_Ascii(message << " [at line "<< splitter.get_index()<<"]");
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogInfo_Ascii(const LineSplitter& splitter, const format& message)	{
+	LogInfo_Ascii(message << " [at line "<< splitter.get_index()<<"]");
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogDebug_Ascii(const LineSplitter& splitter, const format& message)	{
+	LogDebug_Ascii(message << " [at line "<< splitter.get_index()<<"]");
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogWarn_Ascii(const std::string& message)	{
+	DefaultLogger::get()->warn("COB: "+message);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogError_Ascii(const std::string& message)	{
+	DefaultLogger::get()->error("COB: "+message);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogInfo_Ascii(const std::string& message)	{
+	DefaultLogger::get()->info("COB: "+message);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::LogDebug_Ascii(const std::string& message)	{
+	DefaultLogger::get()->debug("COB: "+message);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBasicNodeInfo_Ascii(Node& msh, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	for(;splitter;++splitter) {
+		if (splitter.match_start("Name")) {
+			msh.name = std::string(splitter[1]);
+
+			// make nice names by merging the dupe count
+			std::replace(msh.name.begin(),msh.name.end(),
+				',','_');
+		}
+		else if (splitter.match_start("Transform")) {
+			for(unsigned int y = 0; y < 4 && ++splitter; ++y) {
+				const char* s = splitter->c_str();
+				for(unsigned int x = 0; x < 4; ++x) {
+					SkipSpaces(&s);
+					msh.transform[y][x] = fast_atof(&s);
+				}
+			}
+			// we need the transform chunk, so we won't return until we have it.
+			return;
+		}
+	}
+}
+
+// ------------------------------------------------------------------------------------------------
+template <typename T>
+void COBImporter::ReadFloat3Tuple_Ascii(T& fill, const char** in) 
+{
+	const char* rgb = *in;
+	for(unsigned int i = 0; i < 3; ++i) {
+		SkipSpaces(&rgb);
+		if (*rgb == ',')++rgb;
+		SkipSpaces(&rgb);
+		
+		fill[i] = fast_atof(&rgb);
+	}
+	*in = rgb;
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadMat1_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 8) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Mat1");
+	}
+
+	++splitter;
+	if (!splitter.match_start("mat# ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `mat#` line in `Mat1` chunk "<<nfo.id);
+		return;
+	}
+
+	out.materials.push_back(Material());
+	Material& mat = out.materials.back();
+	mat = nfo;
+
+	mat.matnum = strtol10(splitter[1]);
+	++splitter;
+
+	if (!splitter.match_start("shader: ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `mat#` line in `Mat1` chunk "<<nfo.id);
+		return;
+	}
+	std::string shader = std::string(splitter[1]);
+	shader = shader.substr(0,shader.find_first_of(" \t"));
+
+	if (shader == "metal") {
+		mat.shader = Material::METAL;
+	}
+	else if (shader == "phong") {
+		mat.shader = Material::PHONG;
+	}
+	else if (shader != "flat") {
+		LogWarn_Ascii(splitter,format()<<
+			"Unknown value for `shader` in `Mat1` chunk "<<nfo.id);
+	}
+
+	++splitter;
+	if (!splitter.match_start("rgb ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `rgb` line in `Mat1` chunk "<<nfo.id);
+	}
+
+	const char* rgb = splitter[1];
+	ReadFloat3Tuple_Ascii(mat.rgb,&rgb);
+
+	++splitter;
+	if (!splitter.match_start("alpha ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `alpha` line in `Mat1` chunk "<<nfo.id);
+	}
+
+	const char* tokens[10];
+	splitter.get_tokens(tokens);
+
+	mat.alpha	= fast_atof( tokens[1] );
+	mat.ka		= fast_atof( tokens[3] );
+	mat.ks		= fast_atof( tokens[5] );
+	mat.exp		= fast_atof( tokens[7] );
+	mat.ior		= fast_atof( tokens[9] );
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadUnit_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 1) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Unit");
+	}
+	++splitter;
+	if (!splitter.match_start("Units ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `Units` line in `Unit` chunk "<<nfo.id);
+		return;
+	}
+
+	// parent chunks preceede their childs, so we should have the
+	// corresponding chunk already.
+	for_each(boost::shared_ptr< Node >& nd, out.nodes) {
+		if (nd->id == nfo.parent_id) {
+			unsigned int t;
+			static const float units[] = {1000.f,100.f,1.f,0.001f,
+				1.f/0.0254f,1.f/0.3048f,1.f/0.9144f,1.f/1609.344f
+			};	
+			nd->unit_scale = (t=strtol10(splitter[1]))>=sizeof(units)/sizeof(units[0])?(
+				LogWarn_Ascii(splitter,format()<<t<<" is not a valid value for `Units` attribute in `Unit chunk` "<<nfo.id)
+				,1.f):units[t];
+			return;
+		}
+	}
+	LogWarn_Ascii(splitter,format()<<"`Unit` chunk "<<nfo.id<<" is a child of "
+		<<nfo.parent_id<<" which does not exist");
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadChan_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 8) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Chan");
+	}
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadLght_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 8) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Lght");
+	}
+
+	out.nodes.push_back(boost::shared_ptr<Light>(new Light()));
+	Light& msh = *dynamic_cast<Light*>(out.nodes.back().get());
+	msh = nfo;
+
+	ReadBasicNodeInfo_Ascii(msh,++splitter,nfo);
+
+	if (splitter.match_start("Infinite ")) {
+		msh.ltype = Light::INFINITE;
+	}
+	else if (splitter.match_start("Local ")) {
+		msh.ltype = Light::LOCAL;
+	}
+	else if (splitter.match_start("Spot ")) {
+		msh.ltype = Light::SPOT;
+	}
+	else {
+		LogWarn_Ascii(splitter,format()<<
+			"Unknown kind of light source in `Lght` chunk "<<nfo.id<<" : "<<*splitter);
+		msh.ltype = Light::SPOT;
+	}
+	
+	++splitter;
+	if (!splitter.match_start("color ")) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `color` line in `Lght` chunk "<<nfo.id);
+	}
+
+	const char* rgb = splitter[1];
+	ReadFloat3Tuple_Ascii(msh.color ,&rgb);
+
+	SkipSpaces(&rgb);
+	if (strncmp(rgb,"cone angle",10)) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `cone angle` entity in `color` line in `Lght` chunk "<<nfo.id);
+	}
+	SkipSpaces(rgb+10,&rgb);
+	msh.angle = fast_atof(&rgb);
+
+	SkipSpaces(&rgb);
+	if (strncmp(rgb,"inner angle",11)) {
+		LogWarn_Ascii(splitter,format()<<
+			"Expected `inner angle` entity in `color` line in `Lght` chunk "<<nfo.id);
+	}
+	SkipSpaces(rgb+11,&rgb);
+	msh.inner_angle = fast_atof(&rgb);
+
+	// skip the rest for we can't handle this kind of physically-based lighting information.
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadCame_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 2) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Came");
+	}
+
+	out.nodes.push_back(boost::shared_ptr<Camera>(new Camera()));
+	Camera& msh = *dynamic_cast<Camera*>(out.nodes.back().get());
+	msh = nfo;
+
+	ReadBasicNodeInfo_Ascii(msh,++splitter,nfo);
+
+	// skip the next line, we don't know this differenciation between a
+	// standard camera and a panoramic camera.
+	++splitter;
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBone_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 5) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Bone");
+	}
+
+	out.nodes.push_back(boost::shared_ptr<Bone>(new Bone()));
+	Bone& msh = *dynamic_cast<Bone*>(out.nodes.back().get());
+	msh = nfo;
+
+	ReadBasicNodeInfo_Ascii(msh,++splitter,nfo);
+
+	// TODO
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadGrou_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 1) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"Grou");
+	}
+
+	out.nodes.push_back(boost::shared_ptr<Group>(new Group()));
+	Group& msh = *dynamic_cast<Group*>(out.nodes.back().get());
+	msh = nfo;
+
+	ReadBasicNodeInfo_Ascii(msh,++splitter,nfo);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadPolH_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 8) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"PolH");
+	}
+
+	out.nodes.push_back(boost::shared_ptr<Mesh>(new Mesh()));
+	Mesh& msh = *dynamic_cast<Mesh*>(out.nodes.back().get());
+	msh = nfo;
+
+	ReadBasicNodeInfo_Ascii(msh,++splitter,nfo);
+
+	// the chunk has a fixed order of components, but some are not interesting of us so
+	// we're just looking for keywords in arbitrary order. The end of the chunk is
+	// either the last `Face` or the `DrawFlags` attribute, depending on the format ver.
+	for(;splitter;++splitter) {
+		if (splitter.match_start("World Vertices")) {
+			const unsigned int cnt = strtol10(splitter[2]);
+			msh.vertex_positions.resize(cnt);
+
+			for(unsigned int cur = 0;cur < cnt && ++splitter;++cur) {
+				const char* s = splitter->c_str();
+
+				aiVector3D& v = msh.vertex_positions[cur]; 
+
+				SkipSpaces(&s);
+				v.x = fast_atof(&s);
+				SkipSpaces(&s);
+				v.y = fast_atof(&s);
+				SkipSpaces(&s);
+				v.z = fast_atof(&s);
+			}
+		}
+		else if (splitter.match_start("Texture Vertices")) {
+			const unsigned int cnt = strtol10(splitter[2]);
+			msh.texture_coords.resize(cnt);
+
+			for(unsigned int cur = 0;cur < cnt && ++splitter;++cur) {
+				const char* s = splitter->c_str();
+
+				aiVector2D& v = msh.texture_coords[cur]; 
+
+				SkipSpaces(&s);
+				v.x = fast_atof(&s);
+				SkipSpaces(&s);
+				v.y = fast_atof(&s);
+			}
+		}
+		else if (splitter.match_start("Faces")) {
+			const unsigned int cnt = strtol10(splitter[1]);
+			msh.faces.reserve(cnt);
+
+			for(unsigned int cur = 0; cur < cnt && ++splitter ;++cur) {
+				if (splitter.match_start("Hole")) {
+					LogWarn_Ascii(splitter,"Skipping unsupported `Hole` line");
+					continue;
+				}
+
+				if (!splitter.match_start("Face")) {
+					ThrowException("Expected Face line");
+				}
+
+				std::back_inserter(msh.faces) = Face();
+				Face& face = msh.faces.back();
+
+				face.indices.resize(strtol10(splitter[2]));
+				face.flags = strtol10(splitter[4]);
+				face.material = strtol10(splitter[6]);
+
+				const char* s = (++splitter)->c_str();
+				for(size_t i = 0; i < face.indices.size(); ++i) {
+					if(!SkipSpaces(&s)) {
+						ThrowException("Expected EOL token in Face entry");
+					}
+					if ('<' != *s++) {
+						ThrowException("Expected < token in Face entry");
+					}
+					face.indices[i].pos_idx = strtol10(s,&s);
+					if (',' != *s++) {
+						ThrowException("Expected , token in Face entry");
+					}
+					face.indices[i].uv_idx = strtol10(s,&s);
+					if ('>' != *s++) {
+						ThrowException("Expected < token in Face entry");
+					}
+				}
+			}
+			if (nfo.version <= 4) {
+				break;
+			}
+		}
+		else if (splitter.match_start("DrawFlags")) {
+			msh.draw_flags = strtol10(splitter[1]);
+			break;
+		}
+	}
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBitM_Ascii(Scene& out, LineSplitter& splitter, const ChunkInfo& nfo)
+{
+	if(nfo.version > 1) {
+		return UnsupportedChunk_Ascii(splitter,nfo,"BitM");
+	}
+/*
+	"\nThumbNailHdrSize %ld"
+	"\nThumbHeader: %02hx 02hx %02hx "
+	"\nColorBufSize %ld"		
+	"\nColorBufZipSize %ld"		
+	"\nZippedThumbnail: %02hx 02hx %02hx "
+*/
+
+	const unsigned int head = strtol10((++splitter)[1]);
+	if (head != sizeof(Bitmap::BitmapHeader)) {
+		LogWarn_Ascii(splitter,"Unexpected ThumbNailHdrSize, skipping this chunk");
+		return;
+	}
+
+	//union {
+	//	Bitmap::BitmapHeader data;
+	//	char opaq[sizeof Bitmap::BitmapHeader];
+	//};
+//	ReadHexOctets(opaq,head,(++splitter)[1]);
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBinaryFile(Scene& out, StreamReaderLE* stream)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadPolH_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBitM_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadMat1_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadBone_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadCame_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadLght_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+// ------------------------------------------------------------------------------------------------
+void COBImporter::ReadGrou_Binary(COB::Scene& out, StreamReaderLE& reader)
+{
+}
+
+#endif

+ 171 - 0
code/COBLoader.h

@@ -0,0 +1,171 @@
+/*
+Open Asset Import Library (ASSIMP)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2008, ASSIMP Development Team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, 
+with or without modification, are permitted provided that the 
+following conditions are met:
+
+* Redistributions of source code must retain the above
+  copyright notice, this list of conditions and the
+  following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the
+  following disclaimer in the documentation and/or other
+  materials provided with the distribution.
+
+* Neither the name of the ASSIMP team, nor the names of its
+  contributors may be used to endorse or promote products
+  derived from this software without specific prior
+  written permission of the ASSIMP Development Team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  COBLoader.h
+ *  @brief Declaration of the TrueSpace (*.cob,*.scn) importer class.
+ */
+#ifndef INCLUDED_AI_COB_LOADER_H
+#define INCLUDED_AI_COB_LOADER_H
+
+#include "BaseImporter.h"
+namespace Assimp	{
+	class LineSplitter;
+	
+	// TinyFormatter.h
+	namespace Formatter {
+		template <typename T,typename TR, typename A> class basic_formatter;
+		typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
+	}
+
+	// COBScene.h
+	namespace COB {
+		struct ChunkInfo;
+		struct Node;
+		struct Scene;
+	}
+
+// -------------------------------------------------------------------------------------------
+/** Importer class to load TrueSpace files (cob,scn) up to v6. 
+ *
+ *  Currently relatively limited, loads only ASCII files and needs more test coverage. */
+// -------------------------------------------------------------------------------------------
+class COBImporter : public BaseImporter
+{
+	friend class Importer;
+
+protected:
+
+	/** Constructor to be privately used by Importer */
+	COBImporter();
+
+	/** Destructor, private as well */
+	~COBImporter();
+
+public:
+
+	// --------------------
+	bool CanRead( const std::string& pFile, IOSystem* pIOHandler,
+		bool checkSig) const;
+
+protected:
+
+	// --------------------
+	void GetExtensionList(std::set<std::string>& app);
+
+	// --------------------
+	void SetupProperties(const Importer* pImp);
+
+	// --------------------
+	void InternReadFile( const std::string& pFile, aiScene* pScene, 
+		IOSystem* pIOHandler);
+
+private:
+
+	// -------------------------------------------------------------------
+	/** Prepend 'COB: ' and throw msg.*/
+	static void ThrowException(const std::string& msg);
+
+	// -------------------------------------------------------------------
+	/** @brief Read from an ascii scene/object file
+	 *  @param out Receives output data.
+	 *  @param stream Stream to read from. */
+	void ReadAsciiFile(COB::Scene& out, StreamReaderLE* stream);
+
+	// -------------------------------------------------------------------
+	/** @brief Read from a binary scene/object file
+	 *  @param out Receives output data.
+	 *  @param stream Stream to read from.  */
+	void ReadBinaryFile(COB::Scene& out, StreamReaderLE* stream);
+
+
+private:
+
+	// Conversion to Assimp output format
+
+	aiNode* BuildNodes(const COB::Node& root,const COB::Scene& scin,aiScene* fill);
+
+private:
+
+	// ASCII file support
+
+	void UnsupportedChunk_Ascii(LineSplitter& splitter, const COB::ChunkInfo& nfo, const char* name);
+	void ReadChunkInfo_Ascii(COB::ChunkInfo& out, const LineSplitter& splitter);
+	void ReadBasicNodeInfo_Ascii(COB::Node& msh, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	template <typename T> void ReadFloat3Tuple_Ascii(T& fill, const char** in);
+
+	void ReadPolH_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadBitM_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadMat1_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadGrou_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadBone_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadCame_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadLght_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadUnit_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+	void ReadChan_Ascii(COB::Scene& out, LineSplitter& splitter, const COB::ChunkInfo& nfo);
+
+
+	// ASCII file logging stuff to add proper line numbers to messages
+
+	static void LogWarn_Ascii (const LineSplitter& splitter, const Formatter::format& message);
+	static void LogError_Ascii(const LineSplitter& splitter, const Formatter::format& message);
+	static void LogInfo_Ascii (const LineSplitter& splitter, const Formatter::format& message);
+	static void LogDebug_Ascii(const LineSplitter& splitter, const Formatter::format& message);
+
+	static void LogWarn_Ascii  (const std::string& message);
+	static void LogError_Ascii (const std::string& message);
+	static void LogInfo_Ascii  (const std::string& message);
+	static void LogDebug_Ascii (const std::string& message);
+
+
+	// Binary file support
+
+	void ReadPolH_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadBitM_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadMat1_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadBone_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadCame_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadLght_Binary(COB::Scene& out, StreamReaderLE& reader);
+	void ReadGrou_Binary(COB::Scene& out, StreamReaderLE& reader);
+
+
+}; // !class COBImporter
+
+} // end of namespace Assimp
+#endif // AI_UNREALIMPORTER_H_INC

+ 249 - 0
code/COBScene.h

@@ -0,0 +1,249 @@
+/*
+Open Asset Import Library (ASSIMP)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2008, ASSIMP Development Team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, 
+with or without modification, are permitted provided that the 
+following conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the ASSIMP team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the ASSIMP Development Team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  COBScene.h
+*  @brief Utilities for the COB importer.
+*/
+#ifndef INCLUDED_AI_COB_SCENE_H
+#define INCLUDED_AI_COB_SCENE_H
+
+#include <boost/shared_ptr.hpp>
+#include "BaseImporter.h"
+
+namespace Assimp	{
+	namespace COB {
+
+// ------------------
+/** Represents a single vertex index in a face */
+struct VertexIndex
+{
+	// intentionally uninitialized
+	unsigned int pos_idx,uv_idx;
+};
+
+// ------------------
+/** COB Face data structure */
+struct Face
+{
+	// intentionally uninitialized
+	unsigned int material, flags;
+	std::vector<VertexIndex> indices;
+};
+
+// ------------------
+/** COB chunk header information */
+struct ChunkInfo
+{
+	enum {NO_SIZE=0xffffffff};
+
+	ChunkInfo ()
+		:	id        (0)
+		,	parent_id (0)
+		,	version	  (0)
+		,	size	  (NO_SIZE)
+	{}
+
+	// Id of this chunk, unique within file
+	unsigned int id;
+
+	// and the corresponding parent
+	unsigned int parent_id;
+
+	// version. v1.23 becomes 123
+	unsigned int version;
+
+	// chunk size in bytes, only relevant for binary files
+	// NO_SIZE is also valid.
+	unsigned int size;
+};
+
+// ------------------
+/** A node in the scenegraph */
+struct Node : public ChunkInfo
+{
+	enum Type {
+		TYPE_MESH,TYPE_GROUP,TYPE_LIGHT,TYPE_CAMERA,TYPE_BONE
+	};
+
+	virtual ~Node() {}
+	Node(Type type) : type(type), unit_scale(1.f){}
+
+	Type type;
+
+	// used during resolving
+	typedef std::deque<const Node*> ChildList;
+	mutable ChildList temp_children;
+
+	// unique name
+	std::string name;
+
+	// local mesh transformation
+	aiMatrix4x4 transform;
+
+	// scaling for this node to get to the metric system
+	float unit_scale;
+};
+
+// ------------------
+/** COB Mesh data structure */
+struct Mesh : public Node
+{
+	using ChunkInfo::operator=;
+	enum DrawFlags {
+		SOLID = 0x1,
+		TRANS = 0x2,
+		WIRED = 0x4,
+		BBOX  = 0x8,
+		HIDE  = 0x10
+	};
+
+	Mesh() 
+		: Node(TYPE_MESH)
+		, draw_flags(SOLID) 
+	{}
+
+	// vertex elements
+	std::vector<aiVector2D> texture_coords;
+	std::vector<aiVector3D> vertex_positions;
+
+	// face data
+	std::vector<Face> faces;
+
+	// misc. drawing flags
+	unsigned int draw_flags;
+
+	// used during resolving
+	typedef std::deque<Face*> FaceRefList;
+	typedef std::map< unsigned int,FaceRefList > TempMap;
+	TempMap temp_map;
+};
+
+// ------------------
+/** COB Group data structure */
+struct Group : public Node
+{
+	using ChunkInfo::operator=;
+	Group() : Node(TYPE_GROUP) {}
+};
+
+// ------------------
+/** COB Bone data structure */
+struct Bone : public Node
+{
+	using ChunkInfo::operator=;
+	Bone() : Node(TYPE_BONE) {}
+};
+
+// ------------------
+/** COB Light data structure */
+struct Light : public Node
+{
+	enum LightType {
+		SPOT,LOCAL,INFINITE
+	};
+
+	using ChunkInfo::operator=;
+	Light() : Node(TYPE_LIGHT),angle(),inner_angle(),ltype(SPOT) {}
+
+	aiColor3D color;
+	float angle,inner_angle;
+
+	LightType ltype;
+};
+
+// ------------------
+/** COB Camera data structure */
+struct Camera : public Node
+{
+	using ChunkInfo::operator=;
+	Camera() : Node(TYPE_CAMERA) {}
+};
+
+// ------------------
+/** COB Material data structure */
+struct Material : ChunkInfo
+{
+	using ChunkInfo::operator=;
+	enum Shader {
+		FLAT,PHONG,METAL
+	};
+
+	Material() : alpha(),exp(),ior(),ka(),ks(1.f),matnum(0xffffffff),shader(FLAT) {}
+	std::string type;
+
+	aiColor3D rgb;
+	float alpha, exp, ior,ka,ks;
+
+	unsigned int matnum;
+	Shader shader; 
+};
+
+// ------------------
+/** Embedded bitmap, for instance for the thumbnail image */
+struct Bitmap : ChunkInfo
+{
+	Bitmap() : orig_size() {}
+	struct BitmapHeader 
+	{
+	};
+
+	BitmapHeader head;
+	size_t orig_size;
+	std::vector<char> buff_zipped;
+};
+
+typedef std::deque< boost::shared_ptr<Node> > NodeList;
+typedef std::vector< Material > MaterialList;
+
+// ------------------
+/** Represents a master COB scene, even if we loaded just a single COB file */
+struct Scene
+{
+	NodeList nodes;
+	MaterialList materials;
+
+	// becomes *0 later
+	Bitmap thumbnail;
+};
+
+	} // end COB
+} // end Assimp
+
+#endif

+ 7 - 2
code/Importer.cpp

@@ -164,6 +164,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef AI_BUILD_NO_MS3D_IMPORTER
 #ifndef AI_BUILD_NO_MS3D_IMPORTER
 #	include "MS3DLoader.h"
 #	include "MS3DLoader.h"
 #endif
 #endif
+#ifndef AI_BUILD_NO_COB_IMPORTER
+#	include "COBLoader.h"
+#endif
 
 
 // .......................................................................................
 // .......................................................................................
 // PostProcess-Steps
 // PostProcess-Steps
@@ -278,7 +281,7 @@ Importer::Importer()
 	// Add an instance of each worker class here
 	// Add an instance of each worker class here
 	// (register_new_importers_here)
 	// (register_new_importers_here)
 	// ----------------------------------------------------------------------------
 	// ----------------------------------------------------------------------------
-	pimpl->mImporter.reserve(25);
+	pimpl->mImporter.reserve(64);
 #if (!defined AI_BUILD_NO_X_IMPORTER)
 #if (!defined AI_BUILD_NO_X_IMPORTER)
 	pimpl->mImporter.push_back( new XFileImporter());
 	pimpl->mImporter.push_back( new XFileImporter());
 #endif
 #endif
@@ -372,7 +375,9 @@ Importer::Importer()
 #if (!defined AI_BUILD_NO_MS3D_IMPORTER)
 #if (!defined AI_BUILD_NO_MS3D_IMPORTER)
 	pimpl->mImporter.push_back( new MS3DImporter());
 	pimpl->mImporter.push_back( new MS3DImporter());
 #endif
 #endif
-
+#if (!defined AI_BUILD_NO_COB_IMPORTER)
+	pimpl->mImporter.push_back( new COBImporter());
+#endif
 
 
 	// ----------------------------------------------------------------------------
 	// ----------------------------------------------------------------------------
 	// Add an instance of each post processing step here in the order 
 	// Add an instance of each post processing step here in the order 

+ 217 - 0
code/LineSplitter.h

@@ -0,0 +1,217 @@
+/*
+Open Asset Import Library (ASSIMP)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2008, ASSIMP Development Team
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, 
+with or without modification, are permitted provided that the 
+following conditions are met:
+
+* Redistributions of source code must retain the above
+  copyright notice, this list of conditions and the
+  following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the
+  following disclaimer in the documentation and/or other
+  materials provided with the distribution.
+
+* Neither the name of the ASSIMP team, nor the names of its
+  contributors may be used to endorse or promote products
+  derived from this software without specific prior
+  written permission of the ASSIMP Development Team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+*/
+
+/** @file  LineSplitter.h
+ *  @brief LineSplitter, a helper class to iterate through all lines
+ *    of a file easily. Works with StreamReader.
+ */
+#ifndef INCLUDED_LINE_SPLITTER_H
+#define INCLUDED_LINE_SPLITTER_H
+
+#include <stdexcept>
+
+#include "StreamReader.h"
+#include "ParsingUtils.h"
+
+namespace Assimp {
+
+// ------------------------------------------------------------------------------------------------
+/** Usage:
+@code
+for(LineSplitter splitter(stream);splitter;++splitter) {
+
+	if (*splitter == "hi!") {
+	   ...
+	}
+    else if (splitter->substr(0,5) == "hello") {
+	   ...
+	   // access the third token in the line (tokens are space-separated)
+	   if (strtol(splitter[2]) > 5) { .. }
+	}
+
+	std::cout << "Current line is: " << splitter.get_index() << std::endl;
+}
+@endcode */
+// ------------------------------------------------------------------------------------------------
+class LineSplitter
+{
+public:
+
+	typedef size_t line_idx;
+
+public:
+
+	// -----------------------------------------
+	/** construct from existing stream reader */
+	LineSplitter(StreamReaderLE& stream)
+		: stream(stream)
+		, swallow()
+	{
+		cur.reserve(1024);
+		operator++();
+
+		idx = 0;
+	}
+
+public:
+
+	// -----------------------------------------
+	/** pseudo-iterator increment */
+	LineSplitter& operator++() {
+		if(swallow) {
+			swallow = false;
+			return *this;
+		}
+		
+		if (!*this) {
+			throw std::logic_error("End of file, no more lines to be retrieved.");
+		}
+
+		char s;
+
+		cur.clear(); // I will kill you if you deallocate.
+		while(stream.GetRemainingSize() && (s = stream.GetI1(),1)) {
+			if (s == '\n' || s == '\r') {
+					while (stream.GetRemainingSize() && ((s = stream.GetI1()) == ' ' || s == '\r' || s == '\n'));
+					if (stream.GetRemainingSize()) {
+						stream.IncPtr(-1);
+					}
+					break;
+			}
+			cur += s;
+		}
+
+		++idx;
+		return *this;
+	}
+
+	// -----------------------------------------
+	/** get a pointer to the beginning of a particular token */
+	const char* operator[] (size_t idx) const {
+		const char* s = operator->()->c_str();
+
+		SkipSpaces(&s);
+		for(size_t i = 0; i < idx; ++i) {
+
+			for(;!IsSpace(*s); ++s) {
+				if(IsLineEnd(*s)) {
+					throw std::range_error("Token index out of range, EOL reached");
+				}
+			}
+			SkipSpaces(&s);
+		}
+		return s;
+	}
+
+	// -----------------------------------------
+	/** extract the start positions of N tokens from the current line*/
+	template <size_t N>
+	void get_tokens(const char* (&tokens)[N]) const {
+		const char* s = operator->()->c_str();
+
+		SkipSpaces(&s);
+		for(size_t i = 0; i < N; ++i) {
+			if(IsLineEnd(*s)) {
+				throw std::range_error("Token count out of range, EOL reached");
+			}
+			tokens[i] = s;
+
+			for(;*s && !IsSpace(*s); ++s);
+			SkipSpaces(&s);
+		}
+	}
+
+	// -----------------------------------------
+	/** member access */
+	const std::string* operator -> () const {
+		return &cur;
+	}
+
+	const std::string& operator* () const {
+		return cur;
+	}
+
+	// -----------------------------------------
+	/** boolean context */
+	operator bool() const {
+		return stream.GetRemainingSize()>0;
+	}
+
+	// -----------------------------------------
+	/** line indices are zero-based, empty lines are included */
+	operator line_idx() const {
+		return idx;
+	}
+
+	line_idx get_index() const {
+		return idx;
+	}
+
+	// -----------------------------------------
+	/** access the underlying stream object */
+	StreamReaderLE& get_stream() {
+		return stream;
+	}
+
+	// -----------------------------------------
+	/** !strcmp((*this)->substr(0,strlen(check)),check) */
+	bool match_start(const char* check) {
+		const size_t len = strlen(check);
+		
+		return len <= cur.length() && std::equal(check,check+len,cur.begin());
+	}
+
+
+	// -----------------------------------------
+	/** swallow the next call to ++, return the previous value. */
+	void swallow_next_increment() {
+		swallow = true;
+	}
+
+private:
+
+	line_idx idx;
+	std::string cur;
+	StreamReaderLE& stream;
+	bool swallow;
+};
+
+}
+#endif // INCLUDED_LINE_SPLITTER_H

+ 1 - 1
code/StreamReader.h

@@ -178,7 +178,7 @@ public:
 
 
 	// ---------------------------------------------------------------------
 	// ---------------------------------------------------------------------
 	/** Increase the file pointer (relative seeking)  */
 	/** Increase the file pointer (relative seeking)  */
-	void IncPtr(unsigned int plus)	{
+	void IncPtr(int plus)	{
 		current += plus;
 		current += plus;
 		if (current > end) {
 		if (current > end) {
 			throw DeadlyImportError("End of file was reached");
 			throw DeadlyImportError("End of file was reached");

+ 1 - 1
code/TinyFormatter.h

@@ -92,7 +92,7 @@ public:
 
 
 public:
 public:
 
 
-	operator string () {
+	operator string () const {
 		return underlying.str();
 		return underlying.str();
 	}
 	}
 
 

+ 17 - 1
code/fast_atof.h

@@ -274,7 +274,6 @@ inline const char* fast_atof_move( const char* c, float& out)
 	return c;
 	return c;
 }
 }
 
 
-
 // ------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------
 // The same but more human.
 // The same but more human.
 inline float fast_atof(const char* c)
 inline float fast_atof(const char* c)
@@ -284,6 +283,23 @@ inline float fast_atof(const char* c)
 	return ret;
 	return ret;
 }
 }
 
 
+
+inline float fast_atof( const char* c, const char** cout)
+{
+	float ret;
+	*cout = fast_atof_move(c, ret);
+
+	return ret;
+}
+
+inline float fast_atof( const char** inout)
+{
+	float ret;
+	*inout = fast_atof_move(*inout, ret);
+
+	return ret;
+}
+
 } // end of namespace Assimp
 } // end of namespace Assimp
 
 
 #endif
 #endif

+ 1 - 0
include/aiColor4D.h

@@ -59,6 +59,7 @@ struct aiColor4D
 	aiColor4D () : r(0.0f), g(0.0f), b(0.0f), a(0.0f) {}
 	aiColor4D () : r(0.0f), g(0.0f), b(0.0f), a(0.0f) {}
 	aiColor4D (float _r, float _g, float _b, float _a) 
 	aiColor4D (float _r, float _g, float _b, float _a) 
 		: r(_r), g(_g), b(_b), a(_a) {}
 		: r(_r), g(_g), b(_b), a(_a) {}
+	aiColor4D (float _r) : r(_r), g(_r), b(_r), a(_r) {}
 	aiColor4D (const aiColor4D& o) 
 	aiColor4D (const aiColor4D& o) 
 		: r(o.r), g(o.g), b(o.b), a(o.a) {}
 		: r(o.r), g(o.g), b(o.b), a(o.a) {}
 
 

+ 1 - 0
include/aiTypes.h

@@ -153,6 +153,7 @@ struct aiColor3D
 #ifdef __cplusplus
 #ifdef __cplusplus
 	aiColor3D () : r(0.0f), g(0.0f), b(0.0f) {}
 	aiColor3D () : r(0.0f), g(0.0f), b(0.0f) {}
 	aiColor3D (float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
 	aiColor3D (float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
+	aiColor3D (float _r) : r(_r), g(_r), b(_r) {}
 	aiColor3D (const aiColor3D& o) : r(o.r), g(o.g), b(o.b) {}
 	aiColor3D (const aiColor3D& o) : r(o.r), g(o.g), b(o.b) {}
 	
 	
 	/** Component-wise comparison */
 	/** Component-wise comparison */

BIN
test/models/COB/molecule.cob


Разлика између датотеке није приказан због своје велике величине
+ 6 - 0
test/models/COB/molecule_ascii.cob


BIN
test/models/COB/spider_4_3.cob


+ 3627 - 0
test/models/COB/spider_4_3_ascii.cob

@@ -0,0 +1,3627 @@
+Caligari V00.01ALH             
+PolH V0.06 Id 211536116 Parent 0 Size 00092450
+Name NoName,1
+center 0 0 0
+x axis 1 0 0
+y axis 0 1 0
+z axis 0 0 1
+Transform
+1 0 0 0
+0 1 0 0
+0 0 1 0
+0 0 0 1
+World Vertices 762
+0.766146 0.680483 0.284519
+1.655401 1.111567 0.520398
+0.907128 0.646165 0.795193
+1.313948 0.554956 1.458532
+1.856645 0.887426 1.218116
+2.339231 0.936288 0.769292
+0.451615 0.391451 0.543683
+0.382212 -0.020684 0.746682
+0.681458 0.234029 1.066846
+0.681458 -0.275398 1.066846
+1.313948 -0.679062 1.458532
+1.253999 -0.062053 1.623241
+1.981021 0.300615 1.649329
+1.981021 -0.424722 1.649329
+2.550832 -0.062053 1.502915
+2.583668 0.524757 1.244204
+3.114895 -0.062053 1.350339
+2.972891 -0.062053 0.343318
+2.831748 0.524757 0.562609
+2.583668 -0.648863 1.244204
+2.339231 -1.060395 0.769292
+2.831748 -0.648863 0.562609
+1.856645 -1.011532 1.218116
+0.907128 -0.687534 0.795193
+0.766146 -0.721851 0.284519
+1.655401 -1.235674 0.520398
+1.042427 -0.687534 -0.167513
+1.996854 -0.679062 -0.417736
+2.258047 -1.011532 0.115273
+2.630503 -0.424722 -0.135108
+2.056803 -0.062053 -0.582445
+1.996854 0.554956 -0.417736
+2.630503 0.300615 -0.135108
+0.900377 -0.275398 -0.490845
+0.524475 -0.020684 -0.265567
+0.900377 0.234029 -0.490845
+0.535235 0.391451 -0.051302
+1.042427 0.646165 -0.167513
+2.258047 0.887426 0.115273
+0.309564 -0.020684 0.220351
+0.451615 -0.432820 0.543683
+0.535235 -0.432820 -0.051302
+-1.013416 0.803828 0.066608
+-0.438125 0.541163 0.151739
+-0.631551 0.764486 0.547108
+-0.291320 0.284506 0.603558
+-0.060684 0.437810 0.322711
+0.253932 0.460341 -0.073124
+-1.138573 0.472478 0.589594
+-1.137030 0.000000 0.727819
+-0.753356 0.292008 0.784499
+-0.753356 -0.292008 0.784499
+-0.291320 -0.284506 0.603558
+-0.265545 0.000000 0.682884
+0.369308 0.167229 0.364459
+0.369308 -0.167229 0.364459
+0.662828 0.000000 0.143676
+0.581242 0.389086 0.026050
+0.700781 0.000000 -0.218314
+0.457304 0.000000 -0.488862
+0.460438 0.389086 -0.345746
+0.581242 -0.389086 0.026050
+0.253932 -0.460341 -0.073124
+0.460438 -0.389086 -0.345746
+-0.060684 -0.437810 0.322711
+-0.631551 -0.764486 0.547108
+-1.013416 -0.803828 0.066608
+-0.438125 -0.541163 0.151739
+-0.903297 -0.764486 -0.289242
+-0.584930 -0.284506 -0.300080
+-0.233263 -0.437810 -0.208435
+-0.584930 0.284506 -0.300080
+-1.418457 0.000000 -0.138327
+-1.338460 0.472478 -0.025593
+-0.903297 0.764486 -0.289242
+-0.233263 0.437810 -0.208435
+-1.376651 0.000000 0.469136
+-1.138573 -0.472478 0.589594
+-1.338460 -0.472478 -0.025593
+-0.964388 -0.470329 -0.045835
+-1.230263 -1.223898 0.403520
+-1.575499 -1.696975 1.256863
+-1.615599 -1.845137 1.236253
+-2.094317 -2.855290 0.653648
+-2.660793 -3.776623 -1.200285
+-2.906007 -3.903219 -1.556237
+-1.017831 -0.351024 0.004914
+-1.232261 -1.145156 0.457925
+-1.590448 -1.669669 1.318229
+-1.678477 -1.863228 1.306131
+-2.173273 -2.901780 0.681377
+-2.706306 -3.775590 -1.136756
+-2.920253 -3.899432 -1.534378
+-1.154815 -0.312854 0.018352
+-1.303237 -1.081824 0.468678
+-1.636777 -1.636377 1.331761
+-1.764490 -1.823814 1.320705
+-2.263256 -2.869378 0.685542
+-2.735109 -3.742669 -1.123315
+-2.932034 -3.883127 -1.530038
+-1.272189 -0.384565 -0.015639
+-1.389744 -1.081592 0.427683
+-1.679600 -1.622170 1.287271
+-1.808867 -1.756572 1.269002
+-2.296507 -2.782482 0.663007
+-2.725511 -3.702651 -1.170079
+-2.932478 -3.866581 -1.546482
+-1.281568 -0.512152 -0.071463
+-1.426641 -1.144634 0.365809
+-1.686670 -1.637745 1.218260
+-1.778190 -1.712136 1.189953
+-2.247988 -2.706529 0.630741
+-2.684741 -3.685669 -1.241837
+-2.921253 -3.862256 -1.571330
+-1.175889 -0.599544 -0.107085
+-1.386143 -1.223479 0.329648
+-1.652663 -1.671374 1.176695
+-1.695561 -1.723969 1.143086
+-2.154233 -2.698711 0.613040
+-2.643498 -3.704512 -1.284553
+-2.906811 -3.873407 -1.585869
+-1.034731 -0.580930 -0.095679
+-1.298746 -1.258755 0.346431
+-1.603187 -1.697733 1.193876
+-1.623202 -1.783161 1.163691
+-2.085844 -2.764916 0.623236
+-2.632840 -3.744989 -1.266060
+-2.900025 -3.891637 -1.579153
+-2.916979 -3.882807 -1.557641
+-1.128773 -0.458771 -0.044633
+-1.017698 0.488881 -0.032670
+-1.317050 1.294574 0.420700
+-1.526310 1.673322 1.226081
+-1.577267 1.819272 1.235398
+-2.072943 2.213083 0.474666
+-2.838396 2.591279 -1.229057
+-3.086113 2.794081 -1.545862
+-1.054016 0.365147 0.022430
+-1.324158 1.203249 0.448508
+-1.554071 1.628527 1.270326
+-1.658703 1.813423 1.285377
+-2.161622 2.246180 0.488976
+-2.881531 2.582325 -1.164499
+-3.099803 2.787534 -1.524302
+-1.184355 0.308787 0.037844
+-1.386909 1.136856 0.419897
+-1.597825 1.590944 1.259791
+-1.739812 1.768143 1.262242
+-2.244519 2.210517 0.457031
+-2.912222 2.549601 -1.155484
+-3.112612 2.771560 -1.522239
+-1.310567 0.362245 0.001966
+-1.458049 1.145392 0.356413
+-1.624625 1.588875 1.202410
+-1.759516 1.717527 1.183414
+-2.259210 2.132949 0.402887
+-2.907359 2.517750 -1.208798
+-3.114895 2.758189 -1.541222
+-1.337611 0.485262 -0.058188
+-1.484010 1.222427 0.305859
+-1.614290 1.623878 1.141392
+-1.702977 1.699690 1.108251
+-2.194634 2.071888 0.367314
+-2.870606 2.510755 -1.284297
+-3.104932 2.757492 -1.566960
+-1.245123 0.585205 -0.097321
+-1.445241 1.309955 0.306304
+-1.574602 1.669594 1.122686
+-1.612771 1.728064 1.093353
+-2.099415 2.073312 0.377099
+-2.829635 2.533885 -1.325127
+-3.090227 2.769990 -1.580069
+-1.102749 0.586816 -0.085965
+-1.370937 1.342063 0.357414
+-1.535446 1.691598 1.160377
+-1.556825 1.781284 1.149940
+-2.045259 2.136150 0.424876
+-2.815300 2.569721 -1.300544
+-3.081852 2.786274 -1.570680
+-3.098632 2.775017 -1.550191
+-1.178874 0.454621 -0.030272
+-0.627824 -0.379043 -0.032670
+-0.733861 -1.198839 0.420700
+-0.835425 -1.722300 1.226081
+-0.806580 -1.874175 1.235398
+-0.908545 -2.863121 0.267821
+-0.972894 -3.304943 -1.243616
+-1.076676 -3.525398 -1.622411
+-0.704272 -0.275192 0.022430
+-0.785680 -1.123303 0.448508
+-0.881864 -1.697387 1.270326
+-0.880030 -1.909828 1.285377
+-0.968795 -2.936123 0.282131
+-1.006375 -3.340990 -1.182885
+-1.089436 -3.534324 -1.601137
+-0.846026 -0.266810 0.037844
+-0.873220 -1.097180 0.419897
+-0.938548 -1.686716 1.259791
+-0.972913 -1.911169 1.262242
+-1.058417 -2.946686 0.250187
+-1.049571 -3.337220 -1.168255
+-1.109021 -3.530566 -1.596056
+-0.946343 -0.360211 0.001966
+-0.930561 -1.140143 0.356413
+-0.962792 -1.698324 1.202410
+-1.015284 -1.877186 1.183414
+-1.109924 -2.886856 0.196043
+-1.069953 -3.296477 -1.210740
+-1.120681 -3.516955 -1.610994
+-0.929682 -0.485059 -0.058188
+-0.914527 -1.219838 0.305859
+-0.936340 -1.723470 1.141392
+-0.975239 -1.833469 1.108251
+-1.084530 -2.801688 0.160470
+-1.052176 -3.249437 -1.278350
+-1.115638 -3.503742 -1.634704
+-0.808589 -0.547342 -0.097321
+-0.837188 -1.276254 0.306304
+-0.879110 -1.743217 1.122686
+-0.882931 -1.812938 1.093353
+-1.001356 -2.755311 0.170255
+-1.009624 -3.231524 -1.320172
+-1.097689 -3.500874 -1.649329
+-0.674250 -0.500161 -0.085965
+-0.756784 -1.266909 0.357414
+-0.834199 -1.742695 1.160377
+-0.807871 -1.831055 1.149940
+-0.923037 -2.782653 0.218032
+-0.974341 -3.256226 -1.304714
+-1.080349 -3.510513 -1.643859
+-1.098497 -3.517481 -1.622642
+-0.790998 -0.401975 -0.030272
+-0.614051 0.300803 -0.009824
+-0.712241 1.127192 0.433227
+-0.897681 1.658402 1.218335
+-0.855414 1.806430 1.235248
+-0.710753 2.348053 0.814132
+-0.440545 3.160259 -1.287360
+-0.453719 3.545088 -1.521005
+-0.709183 0.205512 0.029352
+-0.775598 1.057486 0.450292
+-0.953412 1.638479 1.253435
+-0.932361 1.849565 1.272431
+-0.764732 2.426953 0.819145
+-0.480171 3.169330 -1.220608
+-0.468992 3.545227 -1.499515
+-0.851559 0.211993 0.019900
+-0.859056 1.040657 0.406524
+-1.008198 1.633792 1.233077
+-1.019176 1.860608 1.233630
+-0.845875 2.446826 0.772400
+-0.525406 3.166777 -1.214174
+-0.489443 3.543005 -1.498937
+-0.933966 0.315369 -0.031063
+-0.899771 1.089378 0.334881
+-1.020784 1.647871 1.172592
+-1.050486 1.831240 1.148066
+-0.893078 2.392708 0.709098
+-0.542185 3.154524 -1.272899
+-0.499670 3.540097 -1.519705
+-0.894350 0.437791 -0.085160
+-0.867084 1.166961 0.289312
+-0.981692 1.670114 1.117526
+-1.002712 1.783576 1.080167
+-0.870797 2.305352 0.676905
+-0.517877 3.141793 -1.352567
+-0.491974 3.538694 -1.546181
+-0.762543 0.487076 -0.101655
+-0.785607 1.214984 0.304130
+-0.920360 1.683771 1.109345
+-0.911831 1.753510 1.081064
+-0.795808 2.250535 0.700063
+-0.470782 3.138176 -1.393183
+-0.472149 3.539850 -1.558426
+-0.637798 0.426110 -0.068128
+-0.716696 1.197285 0.368179
+-0.882972 1.678557 1.154210
+-0.846277 1.763681 1.150082
+-0.724583 2.269540 0.761136
+-0.436367 3.146393 -1.364164
+-0.455124 3.542697 -1.547222
+-0.475866 3.542093 -1.527286
+-0.771921 0.340665 -0.035225
+-0.253797 0.214561 -0.045835
+0.103584 0.929287 0.403520
+0.204066 1.506257 1.256863
+0.282789 1.638025 1.236253
+0.676887 2.684097 0.653648
+0.870213 3.711051 -1.200285
+0.933725 3.979607 -1.556237
+-0.376741 0.170128 0.004914
+0.045554 0.876026 0.457925
+0.174039 1.498042 1.318229
+0.252124 1.695822 1.306131
+0.655481 2.773188 0.681377
+0.858199 3.754962 -1.136756
+0.926604 3.992514 -1.534378
+-0.499356 0.242150 0.018352
+-0.049308 0.883088 0.468678
+0.117908 1.508241 1.331761
+0.164022 1.730315 1.320705
+0.569666 2.815407 0.685542
+0.819289 3.774946 -1.123315
+0.907933 4.000000 -1.530038
+-0.529306 0.376396 -0.015639
+-0.109567 0.945155 0.427683
+0.077941 1.529177 1.287271
+0.084825 1.715526 1.269002
+0.484060 2.778963 0.663007
+0.782781 3.755951 -1.170079
+0.891771 3.996428 -1.546482
+-0.444043 0.471773 -0.071463
+-0.089849 1.015489 0.365809
+0.084233 1.545081 1.218260
+0.074171 1.662592 1.189953
+0.463129 2.691300 0.630741
+0.776167 3.712284 -1.241837
+0.890291 3.984491 -1.571330
+-0.307767 0.456462 -0.107085
+-0.005001 1.041127 0.329648
+0.132047 1.543980 1.176695
+0.140081 1.611374 1.143086
+0.522632 2.618428 0.613040
+0.804428 3.676825 -1.284553
+0.904605 3.973175 -1.585869
+-0.223100 0.341991 -0.095679
+0.081085 1.002764 0.346431
+0.185377 1.526700 1.193876
+0.232926 1.600441 1.163691
+0.617763 2.615223 0.623236
+0.846281 3.676276 -1.266060
+0.923934 3.971001 -1.579153
+0.911266 3.985315 -1.557641
+-0.376302 0.324781 -0.044633
+-0.253797 -0.214561 -0.045835
+0.103584 -0.929287 0.403520
+0.204066 -1.506257 1.256863
+0.282789 -1.638024 1.236253
+0.676887 -2.684097 0.653648
+0.870213 -3.711051 -1.200285
+0.933725 -3.979607 -1.556237
+-0.376741 -0.170128 0.004914
+0.045554 -0.876026 0.457925
+0.174039 -1.498041 1.318229
+0.252124 -1.695822 1.306131
+0.655481 -2.773188 0.681377
+0.858199 -3.754962 -1.136756
+0.926604 -3.992514 -1.534378
+-0.499356 -0.242150 0.018352
+-0.049308 -0.883088 0.468678
+0.117908 -1.508241 1.331761
+0.164022 -1.730315 1.320705
+0.569666 -2.815407 0.685542
+0.819289 -3.774946 -1.123315
+0.907933 -4.000000 -1.530038
+-0.529306 -0.376397 -0.015639
+-0.109567 -0.945155 0.427683
+0.077941 -1.529177 1.287271
+0.084825 -1.715526 1.269002
+0.484060 -2.778963 0.663007
+0.782781 -3.755951 -1.170079
+0.891771 -3.996428 -1.546482
+-0.444043 -0.471773 -0.071463
+-0.089849 -1.015489 0.365809
+0.084233 -1.545081 1.218260
+0.074171 -1.662592 1.189953
+0.463129 -2.691300 0.630741
+0.776167 -3.712284 -1.241837
+0.890291 -3.984491 -1.571330
+-0.307767 -0.456462 -0.107085
+-0.005001 -1.041127 0.329648
+0.132047 -1.543979 1.176695
+0.140081 -1.611374 1.143086
+0.522632 -2.618427 0.613040
+0.804428 -3.676825 -1.284553
+0.904605 -3.973175 -1.585869
+-0.223100 -0.341991 -0.095679
+0.081085 -1.002764 0.346431
+0.185377 -1.526700 1.193876
+0.232926 -1.600441 1.163691
+0.617763 -2.615223 0.623236
+0.846281 -3.676276 -1.266060
+0.923934 -3.971001 -1.579153
+0.911266 -3.985315 -1.557641
+-0.376302 -0.324781 -0.044633
+0.254596 0.172017 -0.203340
+0.599097 0.871928 0.326091
+0.790359 1.282756 1.179089
+0.895302 1.394673 1.200220
+1.332892 2.383628 0.331257
+1.512451 2.948164 -1.129171
+1.541262 3.228386 -1.480601
+0.134732 0.118958 -0.153513
+0.515124 0.832623 0.349921
+0.737774 1.281594 1.223455
+0.851906 1.458227 1.257154
+1.320483 2.475455 0.355297
+1.503159 2.989863 -1.063723
+1.535171 3.240416 -1.457945
+0.010076 0.184984 -0.131074
+0.427043 0.859716 0.324000
+0.684049 1.303568 1.215172
+0.773848 1.510727 1.239410
+1.250076 2.534936 0.329428
+1.464530 3.007919 -1.047115
+1.516571 3.247036 -1.452140
+-0.025503 0.320378 -0.152919
+0.401182 0.932807 0.267848
+0.669640 1.332134 1.160477
+0.719906 1.512637 1.160348
+1.174691 2.517280 0.273131
+1.425654 2.988739 -1.091849
+1.499470 3.243264 -1.467557
+0.054785 0.423181 -0.202600
+0.457012 0.996856 0.223749
+0.705398 1.345779 1.100557
+0.730700 1.462517 1.079503
+1.151094 2.435785 0.228796
+1.415802 2.946763 -1.164243
+1.496745 3.231941 -1.492587
+0.190484 0.415984 -0.242705
+0.552495 1.003632 0.224908
+0.764395 1.334228 1.080534
+0.798102 1.398111 1.057754
+1.197054 2.351813 0.229809
+1.442396 2.913601 -1.209781
+1.510447 3.221589 -1.508381
+0.279407 0.304206 -0.243034
+0.615729 0.948034 0.270455
+0.802205 1.306180 1.115484
+0.871357 1.367918 1.111479
+1.277961 2.328603 0.275409
+1.485407 2.914224 -1.194173
+1.530259 3.220009 -1.503047
+1.518561 3.233232 -1.480323
+0.128368 0.277101 -0.189883
+0.199438 -0.144437 -0.203340
+0.543939 -0.844349 0.326091
+0.735200 -1.255177 1.179089
+0.840144 -1.367094 1.200220
+1.277733 -2.356050 0.331257
+1.457292 -2.920585 -1.129171
+1.486104 -3.200807 -1.480601
+0.079574 -0.091378 -0.153513
+0.459966 -0.805043 0.349921
+0.682616 -1.254015 1.223455
+0.796747 -1.430648 1.257154
+1.265324 -2.447876 0.355297
+1.448001 -2.962284 -1.063723
+1.480012 -3.212837 -1.457945
+-0.045083 -0.157405 -0.131074
+0.371885 -0.832137 0.324000
+0.628890 -1.275990 1.215172
+0.718689 -1.483148 1.239410
+1.194918 -2.507357 0.329428
+1.409371 -2.980340 -1.047115
+1.461412 -3.219458 -1.452140
+-0.080662 -0.292799 -0.152919
+0.346023 -0.905228 0.267848
+0.614482 -1.304555 1.160477
+0.664747 -1.485057 1.160348
+1.119533 -2.489701 0.273131
+1.370495 -2.961160 -1.091849
+1.444311 -3.215685 -1.467557
+-0.000373 -0.395602 -0.202600
+0.401854 -0.969277 0.223749
+0.650239 -1.318200 1.100557
+0.675542 -1.434938 1.079503
+1.095935 -2.408206 0.228796
+1.360644 -2.919185 -1.164243
+1.441586 -3.204362 -1.492587
+0.135325 -0.388405 -0.242705
+0.497337 -0.976053 0.224908
+0.709237 -1.306649 1.080534
+0.742944 -1.370532 1.057754
+1.141895 -2.324234 0.229809
+1.387238 -2.886023 -1.209781
+1.455288 -3.194010 -1.508381
+0.224249 -0.276626 -0.243034
+0.560570 -0.920455 0.270455
+0.747047 -1.278601 1.115484
+0.816199 -1.340339 1.111479
+1.222802 -2.301024 0.275409
+1.430249 -2.886646 -1.194173
+1.475101 -3.192430 -1.503047
+1.463403 -3.205654 -1.480323
+0.073210 -0.249522 -0.189883
+-2.044177 0.405290 -0.393859
+-1.928270 0.255226 0.249315
+-1.825895 0.173241 0.360119
+-2.044177 0.405290 -0.393859
+-1.964459 0.327821 0.278563
+-1.823871 0.262815 0.436649
+-2.044177 0.405290 -0.393859
+-2.059240 0.350344 0.289045
+-1.869800 0.269480 0.565534
+-2.044177 0.405290 -0.393859
+-2.141237 0.305836 0.272870
+-1.929093 0.188218 0.649726
+-2.044177 0.405290 -0.393859
+-2.148711 0.227811 0.242217
+-1.957105 0.080220 0.625826
+-2.044177 0.405290 -0.393859
+-2.076031 0.175025 0.220167
+-1.932741 0.026811 0.511829
+-2.044177 0.405290 -0.393859
+-1.977924 0.187225 0.223327
+-1.874349 0.068210 0.393579
+-1.887549 0.152714 0.506180
+-2.044177 0.405290 -0.393859
+-2.042185 0.828595 0.146647
+-1.751140 0.490709 0.434782
+-1.690046 0.288253 0.597851
+-2.042185 0.828595 0.146647
+-1.677769 0.494724 0.372043
+-1.578235 0.290569 0.523094
+-2.042185 0.828595 0.146647
+-1.610792 0.552543 0.353843
+-1.459397 0.361776 0.521173
+-2.042185 0.828595 0.146647
+-1.600651 0.620626 0.393889
+-1.423018 0.448254 0.593532
+-2.042185 0.828595 0.146647
+-1.654973 0.647707 0.462025
+-1.496495 0.484885 0.685687
+-2.042185 0.828595 0.146647
+-1.732860 0.613395 0.506941
+-1.624494 0.444081 0.728241
+-2.042185 0.828595 0.146647
+-1.775658 0.543522 0.494818
+-1.710631 0.356573 0.689150
+-1.568903 0.382055 0.619818
+-2.042185 0.828595 0.146647
+-1.515773 0.002298 1.187214
+-1.515773 0.002298 0.194362
+-1.391667 0.217257 0.260870
+-1.515773 0.250511 0.260870
+-1.590238 0.217257 0.384977
+-1.681090 0.126405 0.336713
+-1.714344 0.002298 0.336713
+-1.085856 0.002298 0.442575
+-1.161840 0.410311 0.442575
+-1.300815 0.374617 0.442575
+-1.515773 0.489080 0.539102
+-1.730732 0.374617 0.442575
+-1.888092 0.217257 0.442575
+-1.937417 0.002298 0.409480
+-0.820777 0.002298 0.869546
+-0.905672 0.411127 0.869546
+-1.087376 0.569084 0.869546
+-1.515773 0.498724 0.690788
+-1.822320 0.370554 0.655329
+-1.954668 0.150289 0.655329
+-2.028746 0.002298 0.608051
+-0.887285 0.002298 1.003234
+-0.963269 0.382218 1.003234
+-1.120630 0.519014 1.003234
+-1.515773 0.432215 0.939001
+-1.776119 0.322712 0.903542
+-1.890735 0.131957 0.903542
+-1.945691 0.002298 0.939001
+-1.068990 0.002298 1.101103
+-1.102244 0.110185 1.101103
+-1.211482 0.382218 1.101103
+-1.515773 0.250511 1.120705
+-1.639879 0.217257 1.120705
+-1.730732 0.126405 1.120705
+-1.763986 0.002298 1.120705
+-1.828830 0.308443 0.834594
+-1.840920 0.283655 0.862173
+-1.859056 0.246472 0.869068
+-1.877191 0.209291 0.848384
+-1.886257 0.190699 0.800120
+-1.898347 0.165911 0.772540
+-1.901368 0.159714 0.724277
+-1.886257 0.190699 0.703593
+-1.862077 0.240275 0.696698
+-1.831853 0.302246 0.731172
+-1.822786 0.320837 0.786330
+-1.835347 0.274306 0.848914
+-1.842342 0.249915 0.844194
+-1.849634 0.224481 0.830049
+-1.851632 0.217521 0.800321
+-1.855076 0.205509 0.766424
+-1.861866 0.181822 0.734879
+-1.860467 0.186705 0.720924
+-1.849925 0.223467 0.721298
+-1.835890 0.272417 0.748863
+-1.828249 0.299062 0.790559
+-1.829451 0.294871 0.827351
+0.457304 0.000000 -0.488862
+0.460438 0.389086 -0.345746
+0.460438 -0.389086 -0.345746
+-0.903297 -0.764486 -0.289242
+-0.584930 -0.284506 -0.300080
+-0.233263 -0.437810 -0.208435
+0.090069 -0.167229 -0.494952
+-0.610705 0.000000 -0.379406
+-0.584930 0.284506 -0.300080
+0.090069 0.167229 -0.494952
+-1.141375 -0.292008 -0.409700
+-1.418457 0.000000 -0.138327
+-1.141375 0.292008 -0.409700
+-1.338460 0.472478 -0.025593
+-0.903297 0.764486 -0.289242
+-0.233263 0.437810 -0.208435
+-1.338460 -0.472478 -0.025593
+-1.515773 0.000460 1.187214
+-1.515773 0.000460 0.194362
+-1.391667 -0.214499 0.260870
+-1.515773 -0.247753 0.260870
+-1.590238 -0.214499 0.384977
+-1.681090 -0.123647 0.336713
+-1.714344 0.000460 0.336713
+-1.085856 0.000460 0.442575
+-1.161840 -0.407553 0.442575
+-1.300815 -0.371860 0.442575
+-1.515773 -0.486322 0.539102
+-1.730732 -0.371860 0.442575
+-1.888092 -0.214499 0.442575
+-1.937417 0.000460 0.409480
+-0.820777 0.000460 0.869546
+-0.905672 -0.408369 0.869546
+-1.087376 -0.566326 0.869546
+-1.515773 -0.495966 0.690788
+-1.822320 -0.367796 0.655329
+-1.954668 -0.147531 0.655329
+-2.028746 0.000460 0.608051
+-0.887285 0.000460 1.003234
+-0.963269 -0.379460 1.003234
+-1.120630 -0.516256 1.003234
+-1.515773 -0.429457 0.939001
+-1.776119 -0.319954 0.903542
+-1.890735 -0.129199 0.903542
+-1.945691 0.000460 0.939001
+-1.068990 0.000460 1.101103
+-1.102244 -0.107427 1.101103
+-1.211482 -0.379460 1.101103
+-1.515773 -0.247753 1.120705
+-1.639879 -0.214499 1.120705
+-1.730732 -0.123647 1.120705
+-1.763986 0.000460 1.120705
+-1.828830 -0.305685 0.834594
+-1.840920 -0.280897 0.862173
+-1.859056 -0.243714 0.869068
+-1.877191 -0.206533 0.848384
+-1.886257 -0.187942 0.800120
+-1.898347 -0.163153 0.772540
+-1.901368 -0.156956 0.724277
+-1.886257 -0.187942 0.703593
+-1.862077 -0.237518 0.696698
+-1.831853 -0.299488 0.731172
+-1.822786 -0.318079 0.786330
+-1.835347 -0.271548 0.848914
+-1.842342 -0.247157 0.844194
+-1.849634 -0.221723 0.830049
+-1.851632 -0.214763 0.800321
+-1.855076 -0.202751 0.766424
+-1.861866 -0.179064 0.734879
+-1.860467 -0.183947 0.720924
+-1.849925 -0.220709 0.721298
+-1.835890 -0.269659 0.748863
+-1.828249 -0.296305 0.790559
+-1.829451 -0.292113 0.827351
+-2.036655 -0.418328 -0.397620
+-1.920747 -0.268264 0.245554
+-1.818374 -0.186279 0.356358
+-2.036655 -0.418328 -0.397620
+-1.956937 -0.340858 0.274802
+-1.816350 -0.275852 0.432888
+-2.036655 -0.418328 -0.397620
+-2.051718 -0.363382 0.285284
+-1.862278 -0.282517 0.561774
+-2.036655 -0.418328 -0.397620
+-2.133715 -0.318873 0.269109
+-1.921571 -0.201255 0.645966
+-2.036655 -0.418328 -0.397620
+-2.141189 -0.240848 0.238457
+-1.949582 -0.093257 0.622065
+-2.036655 -0.418328 -0.397620
+-2.068509 -0.188062 0.216406
+-1.925218 -0.039849 0.508068
+-2.036655 -0.418328 -0.397620
+-1.970402 -0.200263 0.219567
+-1.866827 -0.081247 0.389819
+-1.880028 -0.165751 0.502419
+-2.036655 -0.418328 -0.397620
+-2.042185 -0.773436 0.148903
+-1.751140 -0.435551 0.437038
+-1.690046 -0.233094 0.600108
+-2.042185 -0.773436 0.148903
+-1.677769 -0.439566 0.374299
+-1.578235 -0.235411 0.525351
+-2.042185 -0.773436 0.148903
+-1.610792 -0.497384 0.356099
+-1.459397 -0.306618 0.523429
+-2.042185 -0.773436 0.148903
+-1.600651 -0.565468 0.396146
+-1.423018 -0.393096 0.595789
+-2.042185 -0.773436 0.148903
+-1.654973 -0.592549 0.464281
+-1.496495 -0.429726 0.687944
+-2.042185 -0.773436 0.148903
+-1.732860 -0.558236 0.509198
+-1.624494 -0.388922 0.730498
+-2.042185 -0.773436 0.148903
+-1.775658 -0.488364 0.497074
+-1.710631 -0.301414 0.691406
+-1.568903 -0.326897 0.622075
+-2.042185 -0.773436 0.148903
+-1.750357 0.337030 0.828857
+-1.712011 0.319710 0.822553
+-1.741939 0.308654 0.859300
+-1.790363 0.316971 0.846754
+-1.828352 0.274189 0.848854
+-1.787783 0.271717 0.871053
+-1.832032 0.223009 0.853326
+-1.821248 0.177171 0.840037
+-1.816858 0.144767 0.758879
+-1.825276 0.146936 0.800439
+-1.857784 0.181133 0.812886
+-1.872164 0.202947 0.780055
+-1.855204 0.162086 0.765183
+-1.857784 0.207340 0.740883
+-1.821248 0.221758 0.717537
+-1.825276 0.173143 0.728435
+-1.783608 0.267106 0.721864
+-1.745967 0.304626 0.747698
+-1.832032 0.265413 0.736821
+-1.828352 0.301745 0.773145
+-1.787783 0.314121 0.754550
+-1.790363 0.333168 0.802253
+-1.741939 0.334861 0.787296
+-1.836207 0.296231 0.814007
+-1.861960 0.238159 0.818069
+-1.861960 0.254356 0.773568
+-1.750357 -0.325999 0.817825
+-1.712011 -0.308679 0.811521
+-1.741939 -0.297622 0.848268
+-1.790363 -0.305939 0.835722
+-1.828352 -0.263158 0.837822
+-1.787783 -0.260685 0.860022
+-1.832032 -0.211977 0.842294
+-1.821248 -0.166140 0.829005
+-1.816858 -0.133735 0.747847
+-1.825276 -0.135904 0.789408
+-1.857784 -0.170101 0.801854
+-1.872164 -0.191915 0.769023
+-1.855204 -0.151055 0.754151
+-1.857784 -0.196308 0.729851
+-1.821248 -0.210726 0.706505
+-1.825276 -0.162111 0.717404
+-1.783608 -0.256074 0.710832
+-1.745967 -0.293594 0.736666
+-1.832032 -0.254381 0.725790
+-1.828352 -0.290714 0.762114
+-1.787783 -0.303089 0.743518
+-1.790363 -0.322136 0.791222
+-1.741939 -0.323829 0.776265
+-1.836207 -0.285199 0.802975
+-1.861960 -0.227127 0.807037
+-1.861960 -0.243324 0.762536
+Texture Vertices 1
+0.000000 0.000000
+Faces 1368
+Face verts 3 flags 0 mat 1
+<0,0> <1,0> <2,0> 
+Face verts 3 flags 0 mat 1
+<3,0> <2,0> <4,0> 
+Face verts 3 flags 0 mat 1
+<5,0> <4,0> <1,0> 
+Face verts 3 flags 0 mat 1
+<2,0> <1,0> <4,0> 
+Face verts 3 flags 0 mat 1
+<0,0> <2,0> <6,0> 
+Face verts 3 flags 0 mat 1
+<7,0> <6,0> <8,0> 
+Face verts 3 flags 0 mat 1
+<3,0> <8,0> <2,0> 
+Face verts 3 flags 0 mat 1
+<6,0> <2,0> <8,0> 
+Face verts 3 flags 0 mat 1
+<7,0> <8,0> <9,0> 
+Face verts 3 flags 0 mat 1
+<10,0> <9,0> <11,0> 
+Face verts 3 flags 0 mat 1
+<3,0> <11,0> <8,0> 
+Face verts 3 flags 0 mat 1
+<9,0> <8,0> <11,0> 
+Face verts 3 flags 0 mat 1
+<3,0> <12,0> <11,0> 
+Face verts 3 flags 0 mat 1
+<10,0> <11,0> <13,0> 
+Face verts 3 flags 0 mat 1
+<14,0> <13,0> <12,0> 
+Face verts 3 flags 0 mat 1
+<11,0> <12,0> <13,0> 
+Face verts 3 flags 0 mat 1
+<3,0> <4,0> <12,0> 
+Face verts 3 flags 0 mat 1
+<14,0> <12,0> <15,0> 
+Face verts 3 flags 0 mat 1
+<5,0> <15,0> <4,0> 
+Face verts 3 flags 0 mat 1
+<12,0> <4,0> <15,0> 
+Face verts 3 flags 0 mat 1
+<14,0> <15,0> <16,0> 
+Face verts 3 flags 0 mat 1
+<17,0> <16,0> <18,0> 
+Face verts 3 flags 0 mat 1
+<5,0> <18,0> <15,0> 
+Face verts 3 flags 0 mat 1
+<16,0> <15,0> <18,0> 
+Face verts 3 flags 0 mat 1
+<14,0> <16,0> <19,0> 
+Face verts 3 flags 0 mat 1
+<20,0> <19,0> <21,0> 
+Face verts 3 flags 0 mat 1
+<17,0> <21,0> <16,0> 
+Face verts 3 flags 0 mat 1
+<19,0> <16,0> <21,0> 
+Face verts 3 flags 0 mat 1
+<10,0> <13,0> <22,0> 
+Face verts 3 flags 0 mat 1
+<20,0> <22,0> <19,0> 
+Face verts 3 flags 0 mat 1
+<14,0> <19,0> <13,0> 
+Face verts 3 flags 0 mat 1
+<22,0> <13,0> <19,0> 
+Face verts 3 flags 0 mat 1
+<10,0> <22,0> <23,0> 
+Face verts 3 flags 0 mat 1
+<24,0> <23,0> <25,0> 
+Face verts 3 flags 0 mat 1
+<20,0> <25,0> <22,0> 
+Face verts 3 flags 0 mat 1
+<23,0> <22,0> <25,0> 
+Face verts 3 flags 0 mat 1
+<24,0> <25,0> <26,0> 
+Face verts 3 flags 0 mat 1
+<27,0> <26,0> <28,0> 
+Face verts 3 flags 0 mat 1
+<20,0> <28,0> <25,0> 
+Face verts 3 flags 0 mat 1
+<26,0> <25,0> <28,0> 
+Face verts 3 flags 0 mat 1
+<27,0> <28,0> <29,0> 
+Face verts 3 flags 0 mat 1
+<17,0> <29,0> <21,0> 
+Face verts 3 flags 0 mat 1
+<20,0> <21,0> <28,0> 
+Face verts 3 flags 0 mat 1
+<29,0> <28,0> <21,0> 
+Face verts 3 flags 0 mat 1
+<27,0> <29,0> <30,0> 
+Face verts 3 flags 0 mat 1
+<31,0> <30,0> <32,0> 
+Face verts 3 flags 0 mat 1
+<17,0> <32,0> <29,0> 
+Face verts 3 flags 0 mat 1
+<30,0> <29,0> <32,0> 
+Face verts 3 flags 0 mat 1
+<27,0> <30,0> <33,0> 
+Face verts 3 flags 0 mat 1
+<34,0> <33,0> <35,0> 
+Face verts 3 flags 0 mat 1
+<31,0> <35,0> <30,0> 
+Face verts 3 flags 0 mat 1
+<33,0> <30,0> <35,0> 
+Face verts 3 flags 0 mat 1
+<34,0> <35,0> <36,0> 
+Face verts 3 flags 0 mat 1
+<0,0> <36,0> <37,0> 
+Face verts 3 flags 0 mat 1
+<31,0> <37,0> <35,0> 
+Face verts 3 flags 0 mat 1
+<36,0> <35,0> <37,0> 
+Face verts 3 flags 0 mat 1
+<0,0> <37,0> <1,0> 
+Face verts 3 flags 0 mat 1
+<5,0> <1,0> <38,0> 
+Face verts 3 flags 0 mat 1
+<31,0> <38,0> <37,0> 
+Face verts 3 flags 0 mat 1
+<1,0> <37,0> <38,0> 
+Face verts 3 flags 0 mat 1
+<31,0> <32,0> <38,0> 
+Face verts 3 flags 0 mat 1
+<5,0> <38,0> <18,0> 
+Face verts 3 flags 0 mat 1
+<17,0> <18,0> <32,0> 
+Face verts 3 flags 0 mat 1
+<38,0> <32,0> <18,0> 
+Face verts 3 flags 0 mat 1
+<7,0> <39,0> <6,0> 
+Face verts 3 flags 0 mat 1
+<0,0> <6,0> <36,0> 
+Face verts 3 flags 0 mat 1
+<34,0> <36,0> <39,0> 
+Face verts 3 flags 0 mat 1
+<6,0> <39,0> <36,0> 
+Face verts 3 flags 0 mat 1
+<7,0> <40,0> <39,0> 
+Face verts 3 flags 0 mat 1
+<34,0> <39,0> <41,0> 
+Face verts 3 flags 0 mat 1
+<24,0> <41,0> <40,0> 
+Face verts 3 flags 0 mat 1
+<39,0> <40,0> <41,0> 
+Face verts 3 flags 0 mat 1
+<7,0> <9,0> <40,0> 
+Face verts 3 flags 0 mat 1
+<24,0> <40,0> <23,0> 
+Face verts 3 flags 0 mat 1
+<10,0> <23,0> <9,0> 
+Face verts 3 flags 0 mat 1
+<40,0> <9,0> <23,0> 
+Face verts 3 flags 0 mat 1
+<27,0> <33,0> <26,0> 
+Face verts 3 flags 0 mat 1
+<24,0> <26,0> <41,0> 
+Face verts 3 flags 0 mat 1
+<34,0> <41,0> <33,0> 
+Face verts 3 flags 0 mat 1
+<26,0> <33,0> <41,0> 
+Face verts 3 flags 0 mat 2
+<42,0> <43,0> <44,0> 
+Face verts 3 flags 0 mat 2
+<45,0> <44,0> <46,0> 
+Face verts 3 flags 0 mat 2
+<47,0> <46,0> <43,0> 
+Face verts 3 flags 0 mat 2
+<44,0> <43,0> <46,0> 
+Face verts 3 flags 0 mat 2
+<42,0> <44,0> <48,0> 
+Face verts 3 flags 0 mat 2
+<49,0> <48,0> <50,0> 
+Face verts 3 flags 0 mat 2
+<45,0> <50,0> <44,0> 
+Face verts 3 flags 0 mat 2
+<48,0> <44,0> <50,0> 
+Face verts 3 flags 0 mat 2
+<49,0> <50,0> <51,0> 
+Face verts 3 flags 0 mat 2
+<52,0> <51,0> <53,0> 
+Face verts 3 flags 0 mat 2
+<45,0> <53,0> <50,0> 
+Face verts 3 flags 0 mat 2
+<51,0> <50,0> <53,0> 
+Face verts 3 flags 0 mat 2
+<45,0> <54,0> <53,0> 
+Face verts 3 flags 0 mat 2
+<52,0> <53,0> <55,0> 
+Face verts 3 flags 0 mat 2
+<56,0> <55,0> <54,0> 
+Face verts 3 flags 0 mat 2
+<53,0> <54,0> <55,0> 
+Face verts 3 flags 0 mat 2
+<45,0> <46,0> <54,0> 
+Face verts 3 flags 0 mat 2
+<56,0> <54,0> <57,0> 
+Face verts 3 flags 0 mat 2
+<47,0> <57,0> <46,0> 
+Face verts 3 flags 0 mat 2
+<54,0> <46,0> <57,0> 
+Face verts 3 flags 0 mat 2
+<56,0> <57,0> <58,0> 
+Face verts 3 flags 0 mat 2
+<59,0> <58,0> <60,0> 
+Face verts 3 flags 0 mat 2
+<47,0> <60,0> <57,0> 
+Face verts 3 flags 0 mat 2
+<58,0> <57,0> <60,0> 
+Face verts 3 flags 0 mat 2
+<56,0> <58,0> <61,0> 
+Face verts 3 flags 0 mat 2
+<62,0> <61,0> <63,0> 
+Face verts 3 flags 0 mat 2
+<59,0> <63,0> <58,0> 
+Face verts 3 flags 0 mat 2
+<61,0> <58,0> <63,0> 
+Face verts 3 flags 0 mat 2
+<52,0> <55,0> <64,0> 
+Face verts 3 flags 0 mat 2
+<62,0> <64,0> <61,0> 
+Face verts 3 flags 0 mat 2
+<56,0> <61,0> <55,0> 
+Face verts 3 flags 0 mat 2
+<64,0> <55,0> <61,0> 
+Face verts 3 flags 0 mat 2
+<52,0> <64,0> <65,0> 
+Face verts 3 flags 0 mat 2
+<66,0> <65,0> <67,0> 
+Face verts 3 flags 0 mat 2
+<62,0> <67,0> <64,0> 
+Face verts 3 flags 0 mat 2
+<65,0> <64,0> <67,0> 
+Face verts 3 flags 0 mat 2
+<66,0> <67,0> <68,0> 
+Face verts 3 flags 0 mat 2
+<69,0> <68,0> <70,0> 
+Face verts 3 flags 0 mat 2
+<62,0> <70,0> <67,0> 
+Face verts 3 flags 0 mat 2
+<68,0> <67,0> <70,0> 
+Face verts 3 flags 0 mat 2
+<62,0> <63,0> <70,0> 
+Face verts 3 flags 0 mat 2
+<42,0> <73,0> <74,0> 
+Face verts 3 flags 0 mat 2
+<42,0> <74,0> <43,0> 
+Face verts 3 flags 0 mat 2
+<47,0> <43,0> <75,0> 
+Face verts 3 flags 0 mat 2
+<71,0> <75,0> <74,0> 
+Face verts 3 flags 0 mat 2
+<43,0> <74,0> <75,0> 
+Face verts 3 flags 0 mat 2
+<47,0> <75,0> <60,0> 
+Face verts 3 flags 0 mat 2
+<49,0> <76,0> <48,0> 
+Face verts 3 flags 0 mat 2
+<42,0> <48,0> <73,0> 
+Face verts 3 flags 0 mat 2
+<72,0> <73,0> <76,0> 
+Face verts 3 flags 0 mat 2
+<48,0> <76,0> <73,0> 
+Face verts 3 flags 0 mat 2
+<49,0> <77,0> <76,0> 
+Face verts 3 flags 0 mat 2
+<72,0> <76,0> <78,0> 
+Face verts 3 flags 0 mat 2
+<66,0> <78,0> <77,0> 
+Face verts 3 flags 0 mat 2
+<76,0> <77,0> <78,0> 
+Face verts 3 flags 0 mat 2
+<49,0> <51,0> <77,0> 
+Face verts 3 flags 0 mat 2
+<66,0> <77,0> <65,0> 
+Face verts 3 flags 0 mat 2
+<52,0> <65,0> <51,0> 
+Face verts 3 flags 0 mat 2
+<77,0> <51,0> <65,0> 
+Face verts 3 flags 0 mat 2
+<66,0> <68,0> <78,0> 
+Face verts 3 flags 0 mat 3
+<79,0> <86,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<85,0> <128,0> <92,0> 
+Face verts 3 flags 0 mat 3
+<79,0> <80,0> <87,0> 
+Face verts 3 flags 0 mat 3
+<79,0> <87,0> <86,0> 
+Face verts 3 flags 0 mat 3
+<80,0> <81,0> <87,0> 
+Face verts 3 flags 0 mat 3
+<81,0> <88,0> <87,0> 
+Face verts 3 flags 0 mat 3
+<81,0> <82,0> <89,0> 
+Face verts 3 flags 0 mat 3
+<81,0> <89,0> <88,0> 
+Face verts 3 flags 0 mat 3
+<82,0> <83,0> <89,0> 
+Face verts 3 flags 0 mat 3
+<83,0> <90,0> <89,0> 
+Face verts 3 flags 0 mat 3
+<83,0> <84,0> <91,0> 
+Face verts 3 flags 0 mat 3
+<83,0> <91,0> <90,0> 
+Face verts 3 flags 0 mat 3
+<84,0> <85,0> <91,0> 
+Face verts 3 flags 0 mat 3
+<85,0> <92,0> <91,0> 
+Face verts 3 flags 0 mat 3
+<86,0> <93,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<92,0> <128,0> <99,0> 
+Face verts 3 flags 0 mat 3
+<86,0> <87,0> <93,0> 
+Face verts 3 flags 0 mat 3
+<87,0> <94,0> <93,0> 
+Face verts 3 flags 0 mat 3
+<87,0> <88,0> <95,0> 
+Face verts 3 flags 0 mat 3
+<87,0> <95,0> <94,0> 
+Face verts 3 flags 0 mat 3
+<88,0> <89,0> <95,0> 
+Face verts 3 flags 0 mat 3
+<89,0> <96,0> <95,0> 
+Face verts 3 flags 0 mat 3
+<89,0> <90,0> <97,0> 
+Face verts 3 flags 0 mat 3
+<89,0> <97,0> <96,0> 
+Face verts 3 flags 0 mat 3
+<90,0> <91,0> <97,0> 
+Face verts 3 flags 0 mat 3
+<91,0> <98,0> <97,0> 
+Face verts 3 flags 0 mat 3
+<91,0> <92,0> <99,0> 
+Face verts 3 flags 0 mat 3
+<91,0> <99,0> <98,0> 
+Face verts 3 flags 0 mat 3
+<93,0> <100,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<99,0> <128,0> <106,0> 
+Face verts 3 flags 0 mat 3
+<93,0> <94,0> <101,0> 
+Face verts 3 flags 0 mat 3
+<93,0> <101,0> <100,0> 
+Face verts 3 flags 0 mat 3
+<94,0> <95,0> <101,0> 
+Face verts 3 flags 0 mat 3
+<95,0> <102,0> <101,0> 
+Face verts 3 flags 0 mat 3
+<95,0> <96,0> <103,0> 
+Face verts 3 flags 0 mat 3
+<95,0> <103,0> <102,0> 
+Face verts 3 flags 0 mat 3
+<96,0> <97,0> <103,0> 
+Face verts 3 flags 0 mat 3
+<97,0> <104,0> <103,0> 
+Face verts 3 flags 0 mat 3
+<97,0> <98,0> <105,0> 
+Face verts 3 flags 0 mat 3
+<97,0> <105,0> <104,0> 
+Face verts 3 flags 0 mat 3
+<98,0> <99,0> <105,0> 
+Face verts 3 flags 0 mat 3
+<99,0> <106,0> <105,0> 
+Face verts 3 flags 0 mat 3
+<100,0> <107,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<106,0> <128,0> <113,0> 
+Face verts 3 flags 0 mat 3
+<100,0> <101,0> <107,0> 
+Face verts 3 flags 0 mat 3
+<101,0> <108,0> <107,0> 
+Face verts 3 flags 0 mat 3
+<101,0> <102,0> <109,0> 
+Face verts 3 flags 0 mat 3
+<101,0> <109,0> <108,0> 
+Face verts 3 flags 0 mat 3
+<102,0> <103,0> <109,0> 
+Face verts 3 flags 0 mat 3
+<103,0> <110,0> <109,0> 
+Face verts 3 flags 0 mat 3
+<103,0> <104,0> <111,0> 
+Face verts 3 flags 0 mat 3
+<103,0> <111,0> <110,0> 
+Face verts 3 flags 0 mat 3
+<104,0> <105,0> <111,0> 
+Face verts 3 flags 0 mat 3
+<105,0> <112,0> <111,0> 
+Face verts 3 flags 0 mat 3
+<105,0> <106,0> <113,0> 
+Face verts 3 flags 0 mat 3
+<105,0> <113,0> <112,0> 
+Face verts 3 flags 0 mat 3
+<107,0> <114,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<113,0> <128,0> <120,0> 
+Face verts 3 flags 0 mat 3
+<107,0> <108,0> <115,0> 
+Face verts 3 flags 0 mat 3
+<107,0> <115,0> <114,0> 
+Face verts 3 flags 0 mat 3
+<108,0> <109,0> <115,0> 
+Face verts 3 flags 0 mat 3
+<109,0> <116,0> <115,0> 
+Face verts 3 flags 0 mat 3
+<109,0> <110,0> <117,0> 
+Face verts 3 flags 0 mat 3
+<109,0> <117,0> <116,0> 
+Face verts 3 flags 0 mat 3
+<110,0> <111,0> <117,0> 
+Face verts 3 flags 0 mat 3
+<111,0> <118,0> <117,0> 
+Face verts 3 flags 0 mat 3
+<111,0> <112,0> <119,0> 
+Face verts 3 flags 0 mat 3
+<111,0> <119,0> <118,0> 
+Face verts 3 flags 0 mat 3
+<112,0> <113,0> <119,0> 
+Face verts 3 flags 0 mat 3
+<113,0> <120,0> <119,0> 
+Face verts 3 flags 0 mat 3
+<114,0> <121,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<120,0> <128,0> <127,0> 
+Face verts 3 flags 0 mat 3
+<114,0> <115,0> <121,0> 
+Face verts 3 flags 0 mat 3
+<115,0> <122,0> <121,0> 
+Face verts 3 flags 0 mat 3
+<115,0> <116,0> <123,0> 
+Face verts 3 flags 0 mat 3
+<115,0> <123,0> <122,0> 
+Face verts 3 flags 0 mat 3
+<116,0> <117,0> <123,0> 
+Face verts 3 flags 0 mat 3
+<117,0> <124,0> <123,0> 
+Face verts 3 flags 0 mat 3
+<117,0> <118,0> <125,0> 
+Face verts 3 flags 0 mat 3
+<117,0> <125,0> <124,0> 
+Face verts 3 flags 0 mat 3
+<118,0> <119,0> <125,0> 
+Face verts 3 flags 0 mat 3
+<119,0> <126,0> <125,0> 
+Face verts 3 flags 0 mat 3
+<119,0> <120,0> <127,0> 
+Face verts 3 flags 0 mat 3
+<119,0> <127,0> <126,0> 
+Face verts 3 flags 0 mat 3
+<121,0> <79,0> <129,0> 
+Face verts 3 flags 0 mat 3
+<127,0> <128,0> <85,0> 
+Face verts 3 flags 0 mat 3
+<121,0> <122,0> <80,0> 
+Face verts 3 flags 0 mat 3
+<121,0> <80,0> <79,0> 
+Face verts 3 flags 0 mat 3
+<122,0> <123,0> <80,0> 
+Face verts 3 flags 0 mat 3
+<123,0> <81,0> <80,0> 
+Face verts 3 flags 0 mat 3
+<123,0> <124,0> <82,0> 
+Face verts 3 flags 0 mat 3
+<123,0> <82,0> <81,0> 
+Face verts 3 flags 0 mat 3
+<124,0> <125,0> <82,0> 
+Face verts 3 flags 0 mat 3
+<125,0> <83,0> <82,0> 
+Face verts 3 flags 0 mat 3
+<125,0> <126,0> <84,0> 
+Face verts 3 flags 0 mat 3
+<125,0> <84,0> <83,0> 
+Face verts 3 flags 0 mat 3
+<126,0> <127,0> <84,0> 
+Face verts 3 flags 0 mat 3
+<127,0> <85,0> <84,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <137,0> <130,0> 
+Face verts 3 flags 0 mat 3
+<143,0> <179,0> <136,0> 
+Face verts 3 flags 0 mat 3
+<138,0> <131,0> <130,0> 
+Face verts 3 flags 0 mat 3
+<137,0> <138,0> <130,0> 
+Face verts 3 flags 0 mat 3
+<138,0> <132,0> <131,0> 
+Face verts 3 flags 0 mat 3
+<138,0> <139,0> <132,0> 
+Face verts 3 flags 0 mat 3
+<140,0> <133,0> <132,0> 
+Face verts 3 flags 0 mat 3
+<139,0> <140,0> <132,0> 
+Face verts 3 flags 0 mat 3
+<140,0> <134,0> <133,0> 
+Face verts 3 flags 0 mat 3
+<140,0> <141,0> <134,0> 
+Face verts 3 flags 0 mat 3
+<142,0> <135,0> <134,0> 
+Face verts 3 flags 0 mat 3
+<141,0> <142,0> <134,0> 
+Face verts 3 flags 0 mat 3
+<142,0> <136,0> <135,0> 
+Face verts 3 flags 0 mat 3
+<142,0> <143,0> <136,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <144,0> <137,0> 
+Face verts 3 flags 0 mat 3
+<150,0> <179,0> <143,0> 
+Face verts 3 flags 0 mat 3
+<144,0> <138,0> <137,0> 
+Face verts 3 flags 0 mat 3
+<144,0> <145,0> <138,0> 
+Face verts 3 flags 0 mat 3
+<146,0> <139,0> <138,0> 
+Face verts 3 flags 0 mat 3
+<145,0> <146,0> <138,0> 
+Face verts 3 flags 0 mat 3
+<146,0> <140,0> <139,0> 
+Face verts 3 flags 0 mat 3
+<146,0> <147,0> <140,0> 
+Face verts 3 flags 0 mat 3
+<148,0> <141,0> <140,0> 
+Face verts 3 flags 0 mat 3
+<147,0> <148,0> <140,0> 
+Face verts 3 flags 0 mat 3
+<148,0> <142,0> <141,0> 
+Face verts 3 flags 0 mat 3
+<148,0> <149,0> <142,0> 
+Face verts 3 flags 0 mat 3
+<150,0> <143,0> <142,0> 
+Face verts 3 flags 0 mat 3
+<149,0> <150,0> <142,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <151,0> <144,0> 
+Face verts 3 flags 0 mat 3
+<157,0> <179,0> <150,0> 
+Face verts 3 flags 0 mat 3
+<152,0> <145,0> <144,0> 
+Face verts 3 flags 0 mat 3
+<151,0> <152,0> <144,0> 
+Face verts 3 flags 0 mat 3
+<152,0> <146,0> <145,0> 
+Face verts 3 flags 0 mat 3
+<152,0> <153,0> <146,0> 
+Face verts 3 flags 0 mat 3
+<154,0> <147,0> <146,0> 
+Face verts 3 flags 0 mat 3
+<153,0> <154,0> <146,0> 
+Face verts 3 flags 0 mat 3
+<154,0> <148,0> <147,0> 
+Face verts 3 flags 0 mat 3
+<154,0> <155,0> <148,0> 
+Face verts 3 flags 0 mat 3
+<156,0> <149,0> <148,0> 
+Face verts 3 flags 0 mat 3
+<155,0> <156,0> <148,0> 
+Face verts 3 flags 0 mat 3
+<156,0> <150,0> <149,0> 
+Face verts 3 flags 0 mat 3
+<156,0> <157,0> <150,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <158,0> <151,0> 
+Face verts 3 flags 0 mat 3
+<164,0> <179,0> <157,0> 
+Face verts 3 flags 0 mat 3
+<158,0> <152,0> <151,0> 
+Face verts 3 flags 0 mat 3
+<158,0> <159,0> <152,0> 
+Face verts 3 flags 0 mat 3
+<160,0> <153,0> <152,0> 
+Face verts 3 flags 0 mat 3
+<159,0> <160,0> <152,0> 
+Face verts 3 flags 0 mat 3
+<160,0> <154,0> <153,0> 
+Face verts 3 flags 0 mat 3
+<160,0> <161,0> <154,0> 
+Face verts 3 flags 0 mat 3
+<162,0> <155,0> <154,0> 
+Face verts 3 flags 0 mat 3
+<161,0> <162,0> <154,0> 
+Face verts 3 flags 0 mat 3
+<162,0> <156,0> <155,0> 
+Face verts 3 flags 0 mat 3
+<162,0> <163,0> <156,0> 
+Face verts 3 flags 0 mat 3
+<164,0> <157,0> <156,0> 
+Face verts 3 flags 0 mat 3
+<163,0> <164,0> <156,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <165,0> <158,0> 
+Face verts 3 flags 0 mat 3
+<171,0> <179,0> <164,0> 
+Face verts 3 flags 0 mat 3
+<166,0> <159,0> <158,0> 
+Face verts 3 flags 0 mat 3
+<165,0> <166,0> <158,0> 
+Face verts 3 flags 0 mat 3
+<166,0> <160,0> <159,0> 
+Face verts 3 flags 0 mat 3
+<166,0> <167,0> <160,0> 
+Face verts 3 flags 0 mat 3
+<168,0> <161,0> <160,0> 
+Face verts 3 flags 0 mat 3
+<167,0> <168,0> <160,0> 
+Face verts 3 flags 0 mat 3
+<168,0> <162,0> <161,0> 
+Face verts 3 flags 0 mat 3
+<168,0> <169,0> <162,0> 
+Face verts 3 flags 0 mat 3
+<170,0> <163,0> <162,0> 
+Face verts 3 flags 0 mat 3
+<169,0> <170,0> <162,0> 
+Face verts 3 flags 0 mat 3
+<170,0> <164,0> <163,0> 
+Face verts 3 flags 0 mat 3
+<170,0> <171,0> <164,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <172,0> <165,0> 
+Face verts 3 flags 0 mat 3
+<178,0> <179,0> <171,0> 
+Face verts 3 flags 0 mat 3
+<172,0> <166,0> <165,0> 
+Face verts 3 flags 0 mat 3
+<172,0> <173,0> <166,0> 
+Face verts 3 flags 0 mat 3
+<174,0> <167,0> <166,0> 
+Face verts 3 flags 0 mat 3
+<173,0> <174,0> <166,0> 
+Face verts 3 flags 0 mat 3
+<174,0> <168,0> <167,0> 
+Face verts 3 flags 0 mat 3
+<174,0> <175,0> <168,0> 
+Face verts 3 flags 0 mat 3
+<176,0> <169,0> <168,0> 
+Face verts 3 flags 0 mat 3
+<175,0> <176,0> <168,0> 
+Face verts 3 flags 0 mat 3
+<176,0> <170,0> <169,0> 
+Face verts 3 flags 0 mat 3
+<176,0> <177,0> <170,0> 
+Face verts 3 flags 0 mat 3
+<178,0> <171,0> <170,0> 
+Face verts 3 flags 0 mat 3
+<177,0> <178,0> <170,0> 
+Face verts 3 flags 0 mat 3
+<180,0> <130,0> <172,0> 
+Face verts 3 flags 0 mat 3
+<136,0> <179,0> <178,0> 
+Face verts 3 flags 0 mat 3
+<131,0> <173,0> <172,0> 
+Face verts 3 flags 0 mat 3
+<130,0> <131,0> <172,0> 
+Face verts 3 flags 0 mat 3
+<131,0> <174,0> <173,0> 
+Face verts 3 flags 0 mat 3
+<131,0> <132,0> <174,0> 
+Face verts 3 flags 0 mat 3
+<133,0> <175,0> <174,0> 
+Face verts 3 flags 0 mat 3
+<132,0> <133,0> <174,0> 
+Face verts 3 flags 0 mat 3
+<133,0> <176,0> <175,0> 
+Face verts 3 flags 0 mat 3
+<133,0> <134,0> <176,0> 
+Face verts 3 flags 0 mat 3
+<135,0> <177,0> <176,0> 
+Face verts 3 flags 0 mat 3
+<134,0> <135,0> <176,0> 
+Face verts 3 flags 0 mat 3
+<135,0> <178,0> <177,0> 
+Face verts 3 flags 0 mat 3
+<135,0> <136,0> <178,0> 
+Face verts 3 flags 0 mat 3
+<181,0> <188,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<187,0> <230,0> <194,0> 
+Face verts 3 flags 0 mat 3
+<181,0> <182,0> <189,0> 
+Face verts 3 flags 0 mat 3
+<181,0> <189,0> <188,0> 
+Face verts 3 flags 0 mat 3
+<182,0> <183,0> <189,0> 
+Face verts 3 flags 0 mat 3
+<183,0> <190,0> <189,0> 
+Face verts 3 flags 0 mat 3
+<183,0> <184,0> <191,0> 
+Face verts 3 flags 0 mat 3
+<183,0> <191,0> <190,0> 
+Face verts 3 flags 0 mat 3
+<184,0> <185,0> <191,0> 
+Face verts 3 flags 0 mat 3
+<185,0> <192,0> <191,0> 
+Face verts 3 flags 0 mat 3
+<185,0> <186,0> <193,0> 
+Face verts 3 flags 0 mat 3
+<185,0> <193,0> <192,0> 
+Face verts 3 flags 0 mat 3
+<186,0> <187,0> <193,0> 
+Face verts 3 flags 0 mat 3
+<187,0> <194,0> <193,0> 
+Face verts 3 flags 0 mat 3
+<188,0> <195,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<194,0> <230,0> <201,0> 
+Face verts 3 flags 0 mat 3
+<188,0> <189,0> <195,0> 
+Face verts 3 flags 0 mat 3
+<189,0> <196,0> <195,0> 
+Face verts 3 flags 0 mat 3
+<189,0> <190,0> <197,0> 
+Face verts 3 flags 0 mat 3
+<189,0> <197,0> <196,0> 
+Face verts 3 flags 0 mat 3
+<190,0> <191,0> <197,0> 
+Face verts 3 flags 0 mat 3
+<191,0> <198,0> <197,0> 
+Face verts 3 flags 0 mat 3
+<191,0> <192,0> <199,0> 
+Face verts 3 flags 0 mat 3
+<191,0> <199,0> <198,0> 
+Face verts 3 flags 0 mat 3
+<192,0> <193,0> <199,0> 
+Face verts 3 flags 0 mat 3
+<193,0> <200,0> <199,0> 
+Face verts 3 flags 0 mat 3
+<193,0> <194,0> <201,0> 
+Face verts 3 flags 0 mat 3
+<193,0> <201,0> <200,0> 
+Face verts 3 flags 0 mat 3
+<195,0> <202,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<201,0> <230,0> <208,0> 
+Face verts 3 flags 0 mat 3
+<195,0> <196,0> <203,0> 
+Face verts 3 flags 0 mat 3
+<195,0> <203,0> <202,0> 
+Face verts 3 flags 0 mat 3
+<196,0> <197,0> <203,0> 
+Face verts 3 flags 0 mat 3
+<197,0> <204,0> <203,0> 
+Face verts 3 flags 0 mat 3
+<197,0> <198,0> <205,0> 
+Face verts 3 flags 0 mat 3
+<197,0> <205,0> <204,0> 
+Face verts 3 flags 0 mat 3
+<198,0> <199,0> <205,0> 
+Face verts 3 flags 0 mat 3
+<199,0> <206,0> <205,0> 
+Face verts 3 flags 0 mat 3
+<199,0> <200,0> <207,0> 
+Face verts 3 flags 0 mat 3
+<199,0> <207,0> <206,0> 
+Face verts 3 flags 0 mat 3
+<200,0> <201,0> <207,0> 
+Face verts 3 flags 0 mat 3
+<201,0> <208,0> <207,0> 
+Face verts 3 flags 0 mat 3
+<202,0> <209,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<208,0> <230,0> <215,0> 
+Face verts 3 flags 0 mat 3
+<202,0> <203,0> <209,0> 
+Face verts 3 flags 0 mat 3
+<203,0> <210,0> <209,0> 
+Face verts 3 flags 0 mat 3
+<203,0> <204,0> <211,0> 
+Face verts 3 flags 0 mat 3
+<203,0> <211,0> <210,0> 
+Face verts 3 flags 0 mat 3
+<204,0> <205,0> <211,0> 
+Face verts 3 flags 0 mat 3
+<205,0> <212,0> <211,0> 
+Face verts 3 flags 0 mat 3
+<205,0> <206,0> <213,0> 
+Face verts 3 flags 0 mat 3
+<205,0> <213,0> <212,0> 
+Face verts 3 flags 0 mat 3
+<206,0> <207,0> <213,0> 
+Face verts 3 flags 0 mat 3
+<207,0> <214,0> <213,0> 
+Face verts 3 flags 0 mat 3
+<207,0> <208,0> <215,0> 
+Face verts 3 flags 0 mat 3
+<207,0> <215,0> <214,0> 
+Face verts 3 flags 0 mat 3
+<209,0> <216,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<215,0> <230,0> <222,0> 
+Face verts 3 flags 0 mat 3
+<209,0> <210,0> <217,0> 
+Face verts 3 flags 0 mat 3
+<209,0> <217,0> <216,0> 
+Face verts 3 flags 0 mat 3
+<210,0> <211,0> <217,0> 
+Face verts 3 flags 0 mat 3
+<211,0> <218,0> <217,0> 
+Face verts 3 flags 0 mat 3
+<211,0> <212,0> <219,0> 
+Face verts 3 flags 0 mat 3
+<211,0> <219,0> <218,0> 
+Face verts 3 flags 0 mat 3
+<212,0> <213,0> <219,0> 
+Face verts 3 flags 0 mat 3
+<213,0> <220,0> <219,0> 
+Face verts 3 flags 0 mat 3
+<213,0> <214,0> <221,0> 
+Face verts 3 flags 0 mat 3
+<213,0> <221,0> <220,0> 
+Face verts 3 flags 0 mat 3
+<214,0> <215,0> <221,0> 
+Face verts 3 flags 0 mat 3
+<215,0> <222,0> <221,0> 
+Face verts 3 flags 0 mat 3
+<216,0> <223,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<222,0> <230,0> <229,0> 
+Face verts 3 flags 0 mat 3
+<216,0> <217,0> <223,0> 
+Face verts 3 flags 0 mat 3
+<217,0> <224,0> <223,0> 
+Face verts 3 flags 0 mat 3
+<217,0> <218,0> <225,0> 
+Face verts 3 flags 0 mat 3
+<217,0> <225,0> <224,0> 
+Face verts 3 flags 0 mat 3
+<218,0> <219,0> <225,0> 
+Face verts 3 flags 0 mat 3
+<219,0> <226,0> <225,0> 
+Face verts 3 flags 0 mat 3
+<219,0> <220,0> <227,0> 
+Face verts 3 flags 0 mat 3
+<219,0> <227,0> <226,0> 
+Face verts 3 flags 0 mat 3
+<220,0> <221,0> <227,0> 
+Face verts 3 flags 0 mat 3
+<221,0> <228,0> <227,0> 
+Face verts 3 flags 0 mat 3
+<221,0> <222,0> <229,0> 
+Face verts 3 flags 0 mat 3
+<221,0> <229,0> <228,0> 
+Face verts 3 flags 0 mat 3
+<223,0> <181,0> <231,0> 
+Face verts 3 flags 0 mat 3
+<229,0> <230,0> <187,0> 
+Face verts 3 flags 0 mat 3
+<223,0> <224,0> <182,0> 
+Face verts 3 flags 0 mat 3
+<223,0> <182,0> <181,0> 
+Face verts 3 flags 0 mat 3
+<224,0> <225,0> <182,0> 
+Face verts 3 flags 0 mat 3
+<225,0> <183,0> <182,0> 
+Face verts 3 flags 0 mat 3
+<225,0> <226,0> <184,0> 
+Face verts 3 flags 0 mat 3
+<225,0> <184,0> <183,0> 
+Face verts 3 flags 0 mat 3
+<226,0> <227,0> <184,0> 
+Face verts 3 flags 0 mat 3
+<227,0> <185,0> <184,0> 
+Face verts 3 flags 0 mat 3
+<227,0> <228,0> <186,0> 
+Face verts 3 flags 0 mat 3
+<227,0> <186,0> <185,0> 
+Face verts 3 flags 0 mat 3
+<228,0> <229,0> <186,0> 
+Face verts 3 flags 0 mat 3
+<229,0> <187,0> <186,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <239,0> <232,0> 
+Face verts 3 flags 0 mat 3
+<245,0> <281,0> <238,0> 
+Face verts 3 flags 0 mat 3
+<240,0> <233,0> <232,0> 
+Face verts 3 flags 0 mat 3
+<239,0> <240,0> <232,0> 
+Face verts 3 flags 0 mat 3
+<240,0> <234,0> <233,0> 
+Face verts 3 flags 0 mat 3
+<240,0> <241,0> <234,0> 
+Face verts 3 flags 0 mat 3
+<242,0> <235,0> <234,0> 
+Face verts 3 flags 0 mat 3
+<241,0> <242,0> <234,0> 
+Face verts 3 flags 0 mat 3
+<242,0> <236,0> <235,0> 
+Face verts 3 flags 0 mat 3
+<242,0> <243,0> <236,0> 
+Face verts 3 flags 0 mat 3
+<244,0> <237,0> <236,0> 
+Face verts 3 flags 0 mat 3
+<243,0> <244,0> <236,0> 
+Face verts 3 flags 0 mat 3
+<244,0> <238,0> <237,0> 
+Face verts 3 flags 0 mat 3
+<244,0> <245,0> <238,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <246,0> <239,0> 
+Face verts 3 flags 0 mat 3
+<252,0> <281,0> <245,0> 
+Face verts 3 flags 0 mat 3
+<246,0> <240,0> <239,0> 
+Face verts 3 flags 0 mat 3
+<246,0> <247,0> <240,0> 
+Face verts 3 flags 0 mat 3
+<248,0> <241,0> <240,0> 
+Face verts 3 flags 0 mat 3
+<247,0> <248,0> <240,0> 
+Face verts 3 flags 0 mat 3
+<248,0> <242,0> <241,0> 
+Face verts 3 flags 0 mat 3
+<248,0> <249,0> <242,0> 
+Face verts 3 flags 0 mat 3
+<250,0> <243,0> <242,0> 
+Face verts 3 flags 0 mat 3
+<249,0> <250,0> <242,0> 
+Face verts 3 flags 0 mat 3
+<250,0> <244,0> <243,0> 
+Face verts 3 flags 0 mat 3
+<250,0> <251,0> <244,0> 
+Face verts 3 flags 0 mat 3
+<252,0> <245,0> <244,0> 
+Face verts 3 flags 0 mat 3
+<251,0> <252,0> <244,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <253,0> <246,0> 
+Face verts 3 flags 0 mat 3
+<259,0> <281,0> <252,0> 
+Face verts 3 flags 0 mat 3
+<254,0> <247,0> <246,0> 
+Face verts 3 flags 0 mat 3
+<253,0> <254,0> <246,0> 
+Face verts 3 flags 0 mat 3
+<254,0> <248,0> <247,0> 
+Face verts 3 flags 0 mat 3
+<254,0> <255,0> <248,0> 
+Face verts 3 flags 0 mat 3
+<256,0> <249,0> <248,0> 
+Face verts 3 flags 0 mat 3
+<255,0> <256,0> <248,0> 
+Face verts 3 flags 0 mat 3
+<256,0> <250,0> <249,0> 
+Face verts 3 flags 0 mat 3
+<256,0> <257,0> <250,0> 
+Face verts 3 flags 0 mat 3
+<258,0> <251,0> <250,0> 
+Face verts 3 flags 0 mat 3
+<257,0> <258,0> <250,0> 
+Face verts 3 flags 0 mat 3
+<258,0> <252,0> <251,0> 
+Face verts 3 flags 0 mat 3
+<258,0> <259,0> <252,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <260,0> <253,0> 
+Face verts 3 flags 0 mat 3
+<266,0> <281,0> <259,0> 
+Face verts 3 flags 0 mat 3
+<260,0> <254,0> <253,0> 
+Face verts 3 flags 0 mat 3
+<260,0> <261,0> <254,0> 
+Face verts 3 flags 0 mat 3
+<262,0> <255,0> <254,0> 
+Face verts 3 flags 0 mat 3
+<261,0> <262,0> <254,0> 
+Face verts 3 flags 0 mat 3
+<262,0> <256,0> <255,0> 
+Face verts 3 flags 0 mat 3
+<262,0> <263,0> <256,0> 
+Face verts 3 flags 0 mat 3
+<264,0> <257,0> <256,0> 
+Face verts 3 flags 0 mat 3
+<263,0> <264,0> <256,0> 
+Face verts 3 flags 0 mat 3
+<264,0> <258,0> <257,0> 
+Face verts 3 flags 0 mat 3
+<264,0> <265,0> <258,0> 
+Face verts 3 flags 0 mat 3
+<266,0> <259,0> <258,0> 
+Face verts 3 flags 0 mat 3
+<265,0> <266,0> <258,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <267,0> <260,0> 
+Face verts 3 flags 0 mat 3
+<273,0> <281,0> <266,0> 
+Face verts 3 flags 0 mat 3
+<268,0> <261,0> <260,0> 
+Face verts 3 flags 0 mat 3
+<267,0> <268,0> <260,0> 
+Face verts 3 flags 0 mat 3
+<268,0> <262,0> <261,0> 
+Face verts 3 flags 0 mat 3
+<268,0> <269,0> <262,0> 
+Face verts 3 flags 0 mat 3
+<270,0> <263,0> <262,0> 
+Face verts 3 flags 0 mat 3
+<269,0> <270,0> <262,0> 
+Face verts 3 flags 0 mat 3
+<270,0> <264,0> <263,0> 
+Face verts 3 flags 0 mat 3
+<270,0> <271,0> <264,0> 
+Face verts 3 flags 0 mat 3
+<272,0> <265,0> <264,0> 
+Face verts 3 flags 0 mat 3
+<271,0> <272,0> <264,0> 
+Face verts 3 flags 0 mat 3
+<272,0> <266,0> <265,0> 
+Face verts 3 flags 0 mat 3
+<272,0> <273,0> <266,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <274,0> <267,0> 
+Face verts 3 flags 0 mat 3
+<280,0> <281,0> <273,0> 
+Face verts 3 flags 0 mat 3
+<274,0> <268,0> <267,0> 
+Face verts 3 flags 0 mat 3
+<274,0> <275,0> <268,0> 
+Face verts 3 flags 0 mat 3
+<276,0> <269,0> <268,0> 
+Face verts 3 flags 0 mat 3
+<275,0> <276,0> <268,0> 
+Face verts 3 flags 0 mat 3
+<276,0> <270,0> <269,0> 
+Face verts 3 flags 0 mat 3
+<276,0> <277,0> <270,0> 
+Face verts 3 flags 0 mat 3
+<278,0> <271,0> <270,0> 
+Face verts 3 flags 0 mat 3
+<277,0> <278,0> <270,0> 
+Face verts 3 flags 0 mat 3
+<278,0> <272,0> <271,0> 
+Face verts 3 flags 0 mat 3
+<278,0> <279,0> <272,0> 
+Face verts 3 flags 0 mat 3
+<280,0> <273,0> <272,0> 
+Face verts 3 flags 0 mat 3
+<279,0> <280,0> <272,0> 
+Face verts 3 flags 0 mat 3
+<282,0> <232,0> <274,0> 
+Face verts 3 flags 0 mat 3
+<238,0> <281,0> <280,0> 
+Face verts 3 flags 0 mat 3
+<233,0> <275,0> <274,0> 
+Face verts 3 flags 0 mat 3
+<232,0> <233,0> <274,0> 
+Face verts 3 flags 0 mat 3
+<233,0> <276,0> <275,0> 
+Face verts 3 flags 0 mat 3
+<233,0> <234,0> <276,0> 
+Face verts 3 flags 0 mat 3
+<235,0> <277,0> <276,0> 
+Face verts 3 flags 0 mat 3
+<234,0> <235,0> <276,0> 
+Face verts 3 flags 0 mat 3
+<235,0> <278,0> <277,0> 
+Face verts 3 flags 0 mat 3
+<235,0> <236,0> <278,0> 
+Face verts 3 flags 0 mat 3
+<237,0> <279,0> <278,0> 
+Face verts 3 flags 0 mat 3
+<236,0> <237,0> <278,0> 
+Face verts 3 flags 0 mat 3
+<237,0> <280,0> <279,0> 
+Face verts 3 flags 0 mat 3
+<237,0> <238,0> <280,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <290,0> <283,0> 
+Face verts 3 flags 0 mat 3
+<296,0> <332,0> <289,0> 
+Face verts 3 flags 0 mat 3
+<291,0> <284,0> <283,0> 
+Face verts 3 flags 0 mat 3
+<290,0> <291,0> <283,0> 
+Face verts 3 flags 0 mat 3
+<291,0> <285,0> <284,0> 
+Face verts 3 flags 0 mat 3
+<291,0> <292,0> <285,0> 
+Face verts 3 flags 0 mat 3
+<293,0> <286,0> <285,0> 
+Face verts 3 flags 0 mat 3
+<292,0> <293,0> <285,0> 
+Face verts 3 flags 0 mat 3
+<293,0> <287,0> <286,0> 
+Face verts 3 flags 0 mat 3
+<293,0> <294,0> <287,0> 
+Face verts 3 flags 0 mat 3
+<295,0> <288,0> <287,0> 
+Face verts 3 flags 0 mat 3
+<294,0> <295,0> <287,0> 
+Face verts 3 flags 0 mat 3
+<295,0> <289,0> <288,0> 
+Face verts 3 flags 0 mat 3
+<295,0> <296,0> <289,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <297,0> <290,0> 
+Face verts 3 flags 0 mat 3
+<303,0> <332,0> <296,0> 
+Face verts 3 flags 0 mat 3
+<297,0> <291,0> <290,0> 
+Face verts 3 flags 0 mat 3
+<297,0> <298,0> <291,0> 
+Face verts 3 flags 0 mat 3
+<299,0> <292,0> <291,0> 
+Face verts 3 flags 0 mat 3
+<298,0> <299,0> <291,0> 
+Face verts 3 flags 0 mat 3
+<299,0> <293,0> <292,0> 
+Face verts 3 flags 0 mat 3
+<299,0> <300,0> <293,0> 
+Face verts 3 flags 0 mat 3
+<301,0> <294,0> <293,0> 
+Face verts 3 flags 0 mat 3
+<300,0> <301,0> <293,0> 
+Face verts 3 flags 0 mat 3
+<301,0> <295,0> <294,0> 
+Face verts 3 flags 0 mat 3
+<301,0> <302,0> <295,0> 
+Face verts 3 flags 0 mat 3
+<303,0> <296,0> <295,0> 
+Face verts 3 flags 0 mat 3
+<302,0> <303,0> <295,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <304,0> <297,0> 
+Face verts 3 flags 0 mat 3
+<310,0> <332,0> <303,0> 
+Face verts 3 flags 0 mat 3
+<305,0> <298,0> <297,0> 
+Face verts 3 flags 0 mat 3
+<304,0> <305,0> <297,0> 
+Face verts 3 flags 0 mat 3
+<305,0> <299,0> <298,0> 
+Face verts 3 flags 0 mat 3
+<305,0> <306,0> <299,0> 
+Face verts 3 flags 0 mat 3
+<307,0> <300,0> <299,0> 
+Face verts 3 flags 0 mat 3
+<306,0> <307,0> <299,0> 
+Face verts 3 flags 0 mat 3
+<307,0> <301,0> <300,0> 
+Face verts 3 flags 0 mat 3
+<307,0> <308,0> <301,0> 
+Face verts 3 flags 0 mat 3
+<309,0> <302,0> <301,0> 
+Face verts 3 flags 0 mat 3
+<308,0> <309,0> <301,0> 
+Face verts 3 flags 0 mat 3
+<309,0> <303,0> <302,0> 
+Face verts 3 flags 0 mat 3
+<309,0> <310,0> <303,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <311,0> <304,0> 
+Face verts 3 flags 0 mat 3
+<317,0> <332,0> <310,0> 
+Face verts 3 flags 0 mat 3
+<311,0> <305,0> <304,0> 
+Face verts 3 flags 0 mat 3
+<311,0> <312,0> <305,0> 
+Face verts 3 flags 0 mat 3
+<313,0> <306,0> <305,0> 
+Face verts 3 flags 0 mat 3
+<312,0> <313,0> <305,0> 
+Face verts 3 flags 0 mat 3
+<313,0> <307,0> <306,0> 
+Face verts 3 flags 0 mat 3
+<313,0> <314,0> <307,0> 
+Face verts 3 flags 0 mat 3
+<315,0> <308,0> <307,0> 
+Face verts 3 flags 0 mat 3
+<314,0> <315,0> <307,0> 
+Face verts 3 flags 0 mat 3
+<315,0> <309,0> <308,0> 
+Face verts 3 flags 0 mat 3
+<315,0> <316,0> <309,0> 
+Face verts 3 flags 0 mat 3
+<317,0> <310,0> <309,0> 
+Face verts 3 flags 0 mat 3
+<316,0> <317,0> <309,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <318,0> <311,0> 
+Face verts 3 flags 0 mat 3
+<324,0> <332,0> <317,0> 
+Face verts 3 flags 0 mat 3
+<319,0> <312,0> <311,0> 
+Face verts 3 flags 0 mat 3
+<318,0> <319,0> <311,0> 
+Face verts 3 flags 0 mat 3
+<319,0> <313,0> <312,0> 
+Face verts 3 flags 0 mat 3
+<319,0> <320,0> <313,0> 
+Face verts 3 flags 0 mat 3
+<321,0> <314,0> <313,0> 
+Face verts 3 flags 0 mat 3
+<320,0> <321,0> <313,0> 
+Face verts 3 flags 0 mat 3
+<321,0> <315,0> <314,0> 
+Face verts 3 flags 0 mat 3
+<321,0> <322,0> <315,0> 
+Face verts 3 flags 0 mat 3
+<323,0> <316,0> <315,0> 
+Face verts 3 flags 0 mat 3
+<322,0> <323,0> <315,0> 
+Face verts 3 flags 0 mat 3
+<323,0> <317,0> <316,0> 
+Face verts 3 flags 0 mat 3
+<323,0> <324,0> <317,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <325,0> <318,0> 
+Face verts 3 flags 0 mat 3
+<331,0> <332,0> <324,0> 
+Face verts 3 flags 0 mat 3
+<325,0> <319,0> <318,0> 
+Face verts 3 flags 0 mat 3
+<325,0> <326,0> <319,0> 
+Face verts 3 flags 0 mat 3
+<327,0> <320,0> <319,0> 
+Face verts 3 flags 0 mat 3
+<326,0> <327,0> <319,0> 
+Face verts 3 flags 0 mat 3
+<327,0> <321,0> <320,0> 
+Face verts 3 flags 0 mat 3
+<327,0> <328,0> <321,0> 
+Face verts 3 flags 0 mat 3
+<329,0> <322,0> <321,0> 
+Face verts 3 flags 0 mat 3
+<328,0> <329,0> <321,0> 
+Face verts 3 flags 0 mat 3
+<329,0> <323,0> <322,0> 
+Face verts 3 flags 0 mat 3
+<329,0> <330,0> <323,0> 
+Face verts 3 flags 0 mat 3
+<331,0> <324,0> <323,0> 
+Face verts 3 flags 0 mat 3
+<330,0> <331,0> <323,0> 
+Face verts 3 flags 0 mat 3
+<333,0> <283,0> <325,0> 
+Face verts 3 flags 0 mat 3
+<289,0> <332,0> <331,0> 
+Face verts 3 flags 0 mat 3
+<284,0> <326,0> <325,0> 
+Face verts 3 flags 0 mat 3
+<283,0> <284,0> <325,0> 
+Face verts 3 flags 0 mat 3
+<284,0> <327,0> <326,0> 
+Face verts 3 flags 0 mat 3
+<284,0> <285,0> <327,0> 
+Face verts 3 flags 0 mat 3
+<286,0> <328,0> <327,0> 
+Face verts 3 flags 0 mat 3
+<285,0> <286,0> <327,0> 
+Face verts 3 flags 0 mat 3
+<286,0> <329,0> <328,0> 
+Face verts 3 flags 0 mat 3
+<286,0> <287,0> <329,0> 
+Face verts 3 flags 0 mat 3
+<288,0> <330,0> <329,0> 
+Face verts 3 flags 0 mat 3
+<287,0> <288,0> <329,0> 
+Face verts 3 flags 0 mat 3
+<288,0> <331,0> <330,0> 
+Face verts 3 flags 0 mat 3
+<288,0> <289,0> <331,0> 
+Face verts 3 flags 0 mat 3
+<334,0> <341,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<340,0> <383,0> <347,0> 
+Face verts 3 flags 0 mat 3
+<334,0> <335,0> <342,0> 
+Face verts 3 flags 0 mat 3
+<334,0> <342,0> <341,0> 
+Face verts 3 flags 0 mat 3
+<335,0> <336,0> <342,0> 
+Face verts 3 flags 0 mat 3
+<336,0> <343,0> <342,0> 
+Face verts 3 flags 0 mat 3
+<336,0> <337,0> <344,0> 
+Face verts 3 flags 0 mat 3
+<336,0> <344,0> <343,0> 
+Face verts 3 flags 0 mat 3
+<337,0> <338,0> <344,0> 
+Face verts 3 flags 0 mat 3
+<338,0> <345,0> <344,0> 
+Face verts 3 flags 0 mat 3
+<338,0> <339,0> <346,0> 
+Face verts 3 flags 0 mat 3
+<338,0> <346,0> <345,0> 
+Face verts 3 flags 0 mat 3
+<339,0> <340,0> <346,0> 
+Face verts 3 flags 0 mat 3
+<340,0> <347,0> <346,0> 
+Face verts 3 flags 0 mat 3
+<341,0> <348,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<347,0> <383,0> <354,0> 
+Face verts 3 flags 0 mat 3
+<341,0> <342,0> <348,0> 
+Face verts 3 flags 0 mat 3
+<342,0> <349,0> <348,0> 
+Face verts 3 flags 0 mat 3
+<342,0> <343,0> <350,0> 
+Face verts 3 flags 0 mat 3
+<342,0> <350,0> <349,0> 
+Face verts 3 flags 0 mat 3
+<343,0> <344,0> <350,0> 
+Face verts 3 flags 0 mat 3
+<344,0> <351,0> <350,0> 
+Face verts 3 flags 0 mat 3
+<344,0> <345,0> <352,0> 
+Face verts 3 flags 0 mat 3
+<344,0> <352,0> <351,0> 
+Face verts 3 flags 0 mat 3
+<345,0> <346,0> <352,0> 
+Face verts 3 flags 0 mat 3
+<346,0> <353,0> <352,0> 
+Face verts 3 flags 0 mat 3
+<346,0> <347,0> <354,0> 
+Face verts 3 flags 0 mat 3
+<346,0> <354,0> <353,0> 
+Face verts 3 flags 0 mat 3
+<348,0> <355,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<354,0> <383,0> <361,0> 
+Face verts 3 flags 0 mat 3
+<348,0> <349,0> <356,0> 
+Face verts 3 flags 0 mat 3
+<348,0> <356,0> <355,0> 
+Face verts 3 flags 0 mat 3
+<349,0> <350,0> <356,0> 
+Face verts 3 flags 0 mat 3
+<350,0> <357,0> <356,0> 
+Face verts 3 flags 0 mat 3
+<350,0> <351,0> <358,0> 
+Face verts 3 flags 0 mat 3
+<350,0> <358,0> <357,0> 
+Face verts 3 flags 0 mat 3
+<351,0> <352,0> <358,0> 
+Face verts 3 flags 0 mat 3
+<352,0> <359,0> <358,0> 
+Face verts 3 flags 0 mat 3
+<352,0> <353,0> <360,0> 
+Face verts 3 flags 0 mat 3
+<352,0> <360,0> <359,0> 
+Face verts 3 flags 0 mat 3
+<353,0> <354,0> <360,0> 
+Face verts 3 flags 0 mat 3
+<354,0> <361,0> <360,0> 
+Face verts 3 flags 0 mat 3
+<355,0> <362,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<361,0> <383,0> <368,0> 
+Face verts 3 flags 0 mat 3
+<355,0> <356,0> <362,0> 
+Face verts 3 flags 0 mat 3
+<356,0> <363,0> <362,0> 
+Face verts 3 flags 0 mat 3
+<356,0> <357,0> <364,0> 
+Face verts 3 flags 0 mat 3
+<356,0> <364,0> <363,0> 
+Face verts 3 flags 0 mat 3
+<357,0> <358,0> <364,0> 
+Face verts 3 flags 0 mat 3
+<358,0> <365,0> <364,0> 
+Face verts 3 flags 0 mat 3
+<358,0> <359,0> <366,0> 
+Face verts 3 flags 0 mat 3
+<358,0> <366,0> <365,0> 
+Face verts 3 flags 0 mat 3
+<359,0> <360,0> <366,0> 
+Face verts 3 flags 0 mat 3
+<360,0> <367,0> <366,0> 
+Face verts 3 flags 0 mat 3
+<360,0> <361,0> <368,0> 
+Face verts 3 flags 0 mat 3
+<360,0> <368,0> <367,0> 
+Face verts 3 flags 0 mat 3
+<362,0> <369,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<368,0> <383,0> <375,0> 
+Face verts 3 flags 0 mat 3
+<362,0> <363,0> <370,0> 
+Face verts 3 flags 0 mat 3
+<362,0> <370,0> <369,0> 
+Face verts 3 flags 0 mat 3
+<363,0> <364,0> <370,0> 
+Face verts 3 flags 0 mat 3
+<364,0> <371,0> <370,0> 
+Face verts 3 flags 0 mat 3
+<364,0> <365,0> <372,0> 
+Face verts 3 flags 0 mat 3
+<364,0> <372,0> <371,0> 
+Face verts 3 flags 0 mat 3
+<365,0> <366,0> <372,0> 
+Face verts 3 flags 0 mat 3
+<366,0> <373,0> <372,0> 
+Face verts 3 flags 0 mat 3
+<366,0> <367,0> <374,0> 
+Face verts 3 flags 0 mat 3
+<366,0> <374,0> <373,0> 
+Face verts 3 flags 0 mat 3
+<367,0> <368,0> <374,0> 
+Face verts 3 flags 0 mat 3
+<368,0> <375,0> <374,0> 
+Face verts 3 flags 0 mat 3
+<369,0> <376,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<375,0> <383,0> <382,0> 
+Face verts 3 flags 0 mat 3
+<369,0> <370,0> <376,0> 
+Face verts 3 flags 0 mat 3
+<370,0> <377,0> <376,0> 
+Face verts 3 flags 0 mat 3
+<370,0> <371,0> <378,0> 
+Face verts 3 flags 0 mat 3
+<370,0> <378,0> <377,0> 
+Face verts 3 flags 0 mat 3
+<371,0> <372,0> <378,0> 
+Face verts 3 flags 0 mat 3
+<372,0> <379,0> <378,0> 
+Face verts 3 flags 0 mat 3
+<372,0> <373,0> <380,0> 
+Face verts 3 flags 0 mat 3
+<372,0> <380,0> <379,0> 
+Face verts 3 flags 0 mat 3
+<373,0> <374,0> <380,0> 
+Face verts 3 flags 0 mat 3
+<374,0> <381,0> <380,0> 
+Face verts 3 flags 0 mat 3
+<374,0> <375,0> <382,0> 
+Face verts 3 flags 0 mat 3
+<374,0> <382,0> <381,0> 
+Face verts 3 flags 0 mat 3
+<376,0> <334,0> <384,0> 
+Face verts 3 flags 0 mat 3
+<382,0> <383,0> <340,0> 
+Face verts 3 flags 0 mat 3
+<376,0> <377,0> <335,0> 
+Face verts 3 flags 0 mat 3
+<376,0> <335,0> <334,0> 
+Face verts 3 flags 0 mat 3
+<377,0> <378,0> <335,0> 
+Face verts 3 flags 0 mat 3
+<378,0> <336,0> <335,0> 
+Face verts 3 flags 0 mat 3
+<378,0> <379,0> <337,0> 
+Face verts 3 flags 0 mat 3
+<378,0> <337,0> <336,0> 
+Face verts 3 flags 0 mat 3
+<379,0> <380,0> <337,0> 
+Face verts 3 flags 0 mat 3
+<380,0> <338,0> <337,0> 
+Face verts 3 flags 0 mat 3
+<380,0> <381,0> <339,0> 
+Face verts 3 flags 0 mat 3
+<380,0> <339,0> <338,0> 
+Face verts 3 flags 0 mat 3
+<381,0> <382,0> <339,0> 
+Face verts 3 flags 0 mat 3
+<382,0> <340,0> <339,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <392,0> <385,0> 
+Face verts 3 flags 0 mat 3
+<398,0> <434,0> <391,0> 
+Face verts 3 flags 0 mat 3
+<393,0> <386,0> <385,0> 
+Face verts 3 flags 0 mat 3
+<392,0> <393,0> <385,0> 
+Face verts 3 flags 0 mat 3
+<393,0> <387,0> <386,0> 
+Face verts 3 flags 0 mat 3
+<393,0> <394,0> <387,0> 
+Face verts 3 flags 0 mat 3
+<395,0> <388,0> <387,0> 
+Face verts 3 flags 0 mat 3
+<394,0> <395,0> <387,0> 
+Face verts 3 flags 0 mat 3
+<395,0> <389,0> <388,0> 
+Face verts 3 flags 0 mat 3
+<395,0> <396,0> <389,0> 
+Face verts 3 flags 0 mat 3
+<397,0> <390,0> <389,0> 
+Face verts 3 flags 0 mat 3
+<396,0> <397,0> <389,0> 
+Face verts 3 flags 0 mat 3
+<397,0> <391,0> <390,0> 
+Face verts 3 flags 0 mat 3
+<397,0> <398,0> <391,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <399,0> <392,0> 
+Face verts 3 flags 0 mat 3
+<405,0> <434,0> <398,0> 
+Face verts 3 flags 0 mat 3
+<399,0> <393,0> <392,0> 
+Face verts 3 flags 0 mat 3
+<399,0> <400,0> <393,0> 
+Face verts 3 flags 0 mat 3
+<401,0> <394,0> <393,0> 
+Face verts 3 flags 0 mat 3
+<400,0> <401,0> <393,0> 
+Face verts 3 flags 0 mat 3
+<401,0> <395,0> <394,0> 
+Face verts 3 flags 0 mat 3
+<401,0> <402,0> <395,0> 
+Face verts 3 flags 0 mat 3
+<403,0> <396,0> <395,0> 
+Face verts 3 flags 0 mat 3
+<402,0> <403,0> <395,0> 
+Face verts 3 flags 0 mat 3
+<403,0> <397,0> <396,0> 
+Face verts 3 flags 0 mat 3
+<403,0> <404,0> <397,0> 
+Face verts 3 flags 0 mat 3
+<405,0> <398,0> <397,0> 
+Face verts 3 flags 0 mat 3
+<404,0> <405,0> <397,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <406,0> <399,0> 
+Face verts 3 flags 0 mat 3
+<412,0> <434,0> <405,0> 
+Face verts 3 flags 0 mat 3
+<407,0> <400,0> <399,0> 
+Face verts 3 flags 0 mat 3
+<406,0> <407,0> <399,0> 
+Face verts 3 flags 0 mat 3
+<407,0> <401,0> <400,0> 
+Face verts 3 flags 0 mat 3
+<407,0> <408,0> <401,0> 
+Face verts 3 flags 0 mat 3
+<409,0> <402,0> <401,0> 
+Face verts 3 flags 0 mat 3
+<408,0> <409,0> <401,0> 
+Face verts 3 flags 0 mat 3
+<409,0> <403,0> <402,0> 
+Face verts 3 flags 0 mat 3
+<409,0> <410,0> <403,0> 
+Face verts 3 flags 0 mat 3
+<411,0> <404,0> <403,0> 
+Face verts 3 flags 0 mat 3
+<410,0> <411,0> <403,0> 
+Face verts 3 flags 0 mat 3
+<411,0> <405,0> <404,0> 
+Face verts 3 flags 0 mat 3
+<411,0> <412,0> <405,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <413,0> <406,0> 
+Face verts 3 flags 0 mat 3
+<419,0> <434,0> <412,0> 
+Face verts 3 flags 0 mat 3
+<413,0> <407,0> <406,0> 
+Face verts 3 flags 0 mat 3
+<413,0> <414,0> <407,0> 
+Face verts 3 flags 0 mat 3
+<415,0> <408,0> <407,0> 
+Face verts 3 flags 0 mat 3
+<414,0> <415,0> <407,0> 
+Face verts 3 flags 0 mat 3
+<415,0> <409,0> <408,0> 
+Face verts 3 flags 0 mat 3
+<415,0> <416,0> <409,0> 
+Face verts 3 flags 0 mat 3
+<417,0> <410,0> <409,0> 
+Face verts 3 flags 0 mat 3
+<416,0> <417,0> <409,0> 
+Face verts 3 flags 0 mat 3
+<417,0> <411,0> <410,0> 
+Face verts 3 flags 0 mat 3
+<417,0> <418,0> <411,0> 
+Face verts 3 flags 0 mat 3
+<419,0> <412,0> <411,0> 
+Face verts 3 flags 0 mat 3
+<418,0> <419,0> <411,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <420,0> <413,0> 
+Face verts 3 flags 0 mat 3
+<426,0> <434,0> <419,0> 
+Face verts 3 flags 0 mat 3
+<421,0> <414,0> <413,0> 
+Face verts 3 flags 0 mat 3
+<420,0> <421,0> <413,0> 
+Face verts 3 flags 0 mat 3
+<421,0> <415,0> <414,0> 
+Face verts 3 flags 0 mat 3
+<421,0> <422,0> <415,0> 
+Face verts 3 flags 0 mat 3
+<423,0> <416,0> <415,0> 
+Face verts 3 flags 0 mat 3
+<422,0> <423,0> <415,0> 
+Face verts 3 flags 0 mat 3
+<423,0> <417,0> <416,0> 
+Face verts 3 flags 0 mat 3
+<423,0> <424,0> <417,0> 
+Face verts 3 flags 0 mat 3
+<425,0> <418,0> <417,0> 
+Face verts 3 flags 0 mat 3
+<424,0> <425,0> <417,0> 
+Face verts 3 flags 0 mat 3
+<425,0> <419,0> <418,0> 
+Face verts 3 flags 0 mat 3
+<425,0> <426,0> <419,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <427,0> <420,0> 
+Face verts 3 flags 0 mat 3
+<433,0> <434,0> <426,0> 
+Face verts 3 flags 0 mat 3
+<427,0> <421,0> <420,0> 
+Face verts 3 flags 0 mat 3
+<427,0> <428,0> <421,0> 
+Face verts 3 flags 0 mat 3
+<429,0> <422,0> <421,0> 
+Face verts 3 flags 0 mat 3
+<428,0> <429,0> <421,0> 
+Face verts 3 flags 0 mat 3
+<429,0> <423,0> <422,0> 
+Face verts 3 flags 0 mat 3
+<429,0> <430,0> <423,0> 
+Face verts 3 flags 0 mat 3
+<431,0> <424,0> <423,0> 
+Face verts 3 flags 0 mat 3
+<430,0> <431,0> <423,0> 
+Face verts 3 flags 0 mat 3
+<431,0> <425,0> <424,0> 
+Face verts 3 flags 0 mat 3
+<431,0> <432,0> <425,0> 
+Face verts 3 flags 0 mat 3
+<433,0> <426,0> <425,0> 
+Face verts 3 flags 0 mat 3
+<432,0> <433,0> <425,0> 
+Face verts 3 flags 0 mat 3
+<435,0> <385,0> <427,0> 
+Face verts 3 flags 0 mat 3
+<391,0> <434,0> <433,0> 
+Face verts 3 flags 0 mat 3
+<386,0> <428,0> <427,0> 
+Face verts 3 flags 0 mat 3
+<385,0> <386,0> <427,0> 
+Face verts 3 flags 0 mat 3
+<386,0> <429,0> <428,0> 
+Face verts 3 flags 0 mat 3
+<386,0> <387,0> <429,0> 
+Face verts 3 flags 0 mat 3
+<388,0> <430,0> <429,0> 
+Face verts 3 flags 0 mat 3
+<387,0> <388,0> <429,0> 
+Face verts 3 flags 0 mat 3
+<388,0> <431,0> <430,0> 
+Face verts 3 flags 0 mat 3
+<388,0> <389,0> <431,0> 
+Face verts 3 flags 0 mat 3
+<390,0> <432,0> <431,0> 
+Face verts 3 flags 0 mat 3
+<389,0> <390,0> <431,0> 
+Face verts 3 flags 0 mat 3
+<390,0> <433,0> <432,0> 
+Face verts 3 flags 0 mat 3
+<390,0> <391,0> <433,0> 
+Face verts 3 flags 0 mat 3
+<436,0> <443,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<442,0> <485,0> <449,0> 
+Face verts 3 flags 0 mat 3
+<436,0> <437,0> <444,0> 
+Face verts 3 flags 0 mat 3
+<436,0> <444,0> <443,0> 
+Face verts 3 flags 0 mat 3
+<437,0> <438,0> <444,0> 
+Face verts 3 flags 0 mat 3
+<438,0> <445,0> <444,0> 
+Face verts 3 flags 0 mat 3
+<438,0> <439,0> <446,0> 
+Face verts 3 flags 0 mat 3
+<438,0> <446,0> <445,0> 
+Face verts 3 flags 0 mat 3
+<439,0> <440,0> <446,0> 
+Face verts 3 flags 0 mat 3
+<440,0> <447,0> <446,0> 
+Face verts 3 flags 0 mat 3
+<440,0> <441,0> <448,0> 
+Face verts 3 flags 0 mat 3
+<440,0> <448,0> <447,0> 
+Face verts 3 flags 0 mat 3
+<441,0> <442,0> <448,0> 
+Face verts 3 flags 0 mat 3
+<442,0> <449,0> <448,0> 
+Face verts 3 flags 0 mat 3
+<443,0> <450,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<449,0> <485,0> <456,0> 
+Face verts 3 flags 0 mat 3
+<443,0> <444,0> <450,0> 
+Face verts 3 flags 0 mat 3
+<444,0> <451,0> <450,0> 
+Face verts 3 flags 0 mat 3
+<444,0> <445,0> <452,0> 
+Face verts 3 flags 0 mat 3
+<444,0> <452,0> <451,0> 
+Face verts 3 flags 0 mat 3
+<445,0> <446,0> <452,0> 
+Face verts 3 flags 0 mat 3
+<446,0> <453,0> <452,0> 
+Face verts 3 flags 0 mat 3
+<446,0> <447,0> <454,0> 
+Face verts 3 flags 0 mat 3
+<446,0> <454,0> <453,0> 
+Face verts 3 flags 0 mat 3
+<447,0> <448,0> <454,0> 
+Face verts 3 flags 0 mat 3
+<448,0> <455,0> <454,0> 
+Face verts 3 flags 0 mat 3
+<448,0> <449,0> <456,0> 
+Face verts 3 flags 0 mat 3
+<448,0> <456,0> <455,0> 
+Face verts 3 flags 0 mat 3
+<450,0> <457,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<456,0> <485,0> <463,0> 
+Face verts 3 flags 0 mat 3
+<450,0> <451,0> <458,0> 
+Face verts 3 flags 0 mat 3
+<450,0> <458,0> <457,0> 
+Face verts 3 flags 0 mat 3
+<451,0> <452,0> <458,0> 
+Face verts 3 flags 0 mat 3
+<452,0> <459,0> <458,0> 
+Face verts 3 flags 0 mat 3
+<452,0> <453,0> <460,0> 
+Face verts 3 flags 0 mat 3
+<452,0> <460,0> <459,0> 
+Face verts 3 flags 0 mat 3
+<453,0> <454,0> <460,0> 
+Face verts 3 flags 0 mat 3
+<454,0> <461,0> <460,0> 
+Face verts 3 flags 0 mat 3
+<454,0> <455,0> <462,0> 
+Face verts 3 flags 0 mat 3
+<454,0> <462,0> <461,0> 
+Face verts 3 flags 0 mat 3
+<455,0> <456,0> <462,0> 
+Face verts 3 flags 0 mat 3
+<456,0> <463,0> <462,0> 
+Face verts 3 flags 0 mat 3
+<457,0> <464,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<463,0> <485,0> <470,0> 
+Face verts 3 flags 0 mat 3
+<457,0> <458,0> <464,0> 
+Face verts 3 flags 0 mat 3
+<458,0> <465,0> <464,0> 
+Face verts 3 flags 0 mat 3
+<458,0> <459,0> <466,0> 
+Face verts 3 flags 0 mat 3
+<458,0> <466,0> <465,0> 
+Face verts 3 flags 0 mat 3
+<459,0> <460,0> <466,0> 
+Face verts 3 flags 0 mat 3
+<460,0> <467,0> <466,0> 
+Face verts 3 flags 0 mat 3
+<460,0> <461,0> <468,0> 
+Face verts 3 flags 0 mat 3
+<460,0> <468,0> <467,0> 
+Face verts 3 flags 0 mat 3
+<461,0> <462,0> <468,0> 
+Face verts 3 flags 0 mat 3
+<462,0> <469,0> <468,0> 
+Face verts 3 flags 0 mat 3
+<462,0> <463,0> <470,0> 
+Face verts 3 flags 0 mat 3
+<462,0> <470,0> <469,0> 
+Face verts 3 flags 0 mat 3
+<464,0> <471,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<470,0> <485,0> <477,0> 
+Face verts 3 flags 0 mat 3
+<464,0> <465,0> <472,0> 
+Face verts 3 flags 0 mat 3
+<464,0> <472,0> <471,0> 
+Face verts 3 flags 0 mat 3
+<465,0> <466,0> <472,0> 
+Face verts 3 flags 0 mat 3
+<466,0> <473,0> <472,0> 
+Face verts 3 flags 0 mat 3
+<466,0> <467,0> <474,0> 
+Face verts 3 flags 0 mat 3
+<466,0> <474,0> <473,0> 
+Face verts 3 flags 0 mat 3
+<467,0> <468,0> <474,0> 
+Face verts 3 flags 0 mat 3
+<468,0> <475,0> <474,0> 
+Face verts 3 flags 0 mat 3
+<468,0> <469,0> <476,0> 
+Face verts 3 flags 0 mat 3
+<468,0> <476,0> <475,0> 
+Face verts 3 flags 0 mat 3
+<469,0> <470,0> <476,0> 
+Face verts 3 flags 0 mat 3
+<470,0> <477,0> <476,0> 
+Face verts 3 flags 0 mat 3
+<471,0> <478,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<477,0> <485,0> <484,0> 
+Face verts 3 flags 0 mat 3
+<471,0> <472,0> <478,0> 
+Face verts 3 flags 0 mat 3
+<472,0> <479,0> <478,0> 
+Face verts 3 flags 0 mat 3
+<472,0> <473,0> <480,0> 
+Face verts 3 flags 0 mat 3
+<472,0> <480,0> <479,0> 
+Face verts 3 flags 0 mat 3
+<473,0> <474,0> <480,0> 
+Face verts 3 flags 0 mat 3
+<474,0> <481,0> <480,0> 
+Face verts 3 flags 0 mat 3
+<474,0> <475,0> <482,0> 
+Face verts 3 flags 0 mat 3
+<474,0> <482,0> <481,0> 
+Face verts 3 flags 0 mat 3
+<475,0> <476,0> <482,0> 
+Face verts 3 flags 0 mat 3
+<476,0> <483,0> <482,0> 
+Face verts 3 flags 0 mat 3
+<476,0> <477,0> <484,0> 
+Face verts 3 flags 0 mat 3
+<476,0> <484,0> <483,0> 
+Face verts 3 flags 0 mat 3
+<478,0> <436,0> <486,0> 
+Face verts 3 flags 0 mat 3
+<484,0> <485,0> <442,0> 
+Face verts 3 flags 0 mat 3
+<478,0> <479,0> <437,0> 
+Face verts 3 flags 0 mat 3
+<478,0> <437,0> <436,0> 
+Face verts 3 flags 0 mat 3
+<479,0> <480,0> <437,0> 
+Face verts 3 flags 0 mat 3
+<480,0> <438,0> <437,0> 
+Face verts 3 flags 0 mat 3
+<480,0> <481,0> <439,0> 
+Face verts 3 flags 0 mat 3
+<480,0> <439,0> <438,0> 
+Face verts 3 flags 0 mat 3
+<481,0> <482,0> <439,0> 
+Face verts 3 flags 0 mat 3
+<482,0> <440,0> <439,0> 
+Face verts 3 flags 0 mat 3
+<482,0> <483,0> <441,0> 
+Face verts 3 flags 0 mat 3
+<482,0> <441,0> <440,0> 
+Face verts 3 flags 0 mat 3
+<483,0> <484,0> <441,0> 
+Face verts 3 flags 0 mat 3
+<484,0> <442,0> <441,0> 
+Face verts 3 flags 0 mat 3
+<487,0> <490,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<489,0> <508,0> <492,0> 
+Face verts 3 flags 0 mat 3
+<487,0> <488,0> <491,0> 
+Face verts 3 flags 0 mat 3
+<487,0> <491,0> <490,0> 
+Face verts 3 flags 0 mat 3
+<488,0> <489,0> <491,0> 
+Face verts 3 flags 0 mat 3
+<489,0> <492,0> <491,0> 
+Face verts 3 flags 0 mat 3
+<490,0> <493,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<492,0> <508,0> <495,0> 
+Face verts 3 flags 0 mat 3
+<490,0> <491,0> <493,0> 
+Face verts 3 flags 0 mat 3
+<491,0> <494,0> <493,0> 
+Face verts 3 flags 0 mat 3
+<491,0> <492,0> <495,0> 
+Face verts 3 flags 0 mat 3
+<491,0> <495,0> <494,0> 
+Face verts 3 flags 0 mat 3
+<493,0> <496,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<495,0> <508,0> <498,0> 
+Face verts 3 flags 0 mat 3
+<493,0> <494,0> <497,0> 
+Face verts 3 flags 0 mat 3
+<493,0> <497,0> <496,0> 
+Face verts 3 flags 0 mat 3
+<494,0> <495,0> <497,0> 
+Face verts 3 flags 0 mat 3
+<495,0> <498,0> <497,0> 
+Face verts 3 flags 0 mat 3
+<496,0> <499,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<498,0> <508,0> <501,0> 
+Face verts 3 flags 0 mat 3
+<496,0> <497,0> <499,0> 
+Face verts 3 flags 0 mat 3
+<497,0> <500,0> <499,0> 
+Face verts 3 flags 0 mat 3
+<497,0> <498,0> <501,0> 
+Face verts 3 flags 0 mat 3
+<497,0> <501,0> <500,0> 
+Face verts 3 flags 0 mat 3
+<499,0> <502,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<501,0> <508,0> <504,0> 
+Face verts 3 flags 0 mat 3
+<499,0> <500,0> <503,0> 
+Face verts 3 flags 0 mat 3
+<499,0> <503,0> <502,0> 
+Face verts 3 flags 0 mat 3
+<500,0> <501,0> <503,0> 
+Face verts 3 flags 0 mat 3
+<501,0> <504,0> <503,0> 
+Face verts 3 flags 0 mat 3
+<502,0> <505,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<504,0> <508,0> <507,0> 
+Face verts 3 flags 0 mat 3
+<502,0> <503,0> <505,0> 
+Face verts 3 flags 0 mat 3
+<503,0> <506,0> <505,0> 
+Face verts 3 flags 0 mat 3
+<503,0> <504,0> <507,0> 
+Face verts 3 flags 0 mat 3
+<503,0> <507,0> <506,0> 
+Face verts 3 flags 0 mat 3
+<505,0> <487,0> <509,0> 
+Face verts 3 flags 0 mat 3
+<507,0> <508,0> <489,0> 
+Face verts 3 flags 0 mat 3
+<505,0> <506,0> <488,0> 
+Face verts 3 flags 0 mat 3
+<505,0> <488,0> <487,0> 
+Face verts 3 flags 0 mat 3
+<506,0> <507,0> <488,0> 
+Face verts 3 flags 0 mat 3
+<507,0> <489,0> <488,0> 
+Face verts 3 flags 0 mat 3
+<510,0> <513,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<512,0> <531,0> <515,0> 
+Face verts 3 flags 0 mat 3
+<510,0> <511,0> <514,0> 
+Face verts 3 flags 0 mat 3
+<510,0> <514,0> <513,0> 
+Face verts 3 flags 0 mat 3
+<511,0> <512,0> <514,0> 
+Face verts 3 flags 0 mat 3
+<512,0> <515,0> <514,0> 
+Face verts 3 flags 0 mat 3
+<513,0> <516,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<515,0> <531,0> <518,0> 
+Face verts 3 flags 0 mat 3
+<513,0> <514,0> <516,0> 
+Face verts 3 flags 0 mat 3
+<514,0> <517,0> <516,0> 
+Face verts 3 flags 0 mat 3
+<514,0> <515,0> <518,0> 
+Face verts 3 flags 0 mat 3
+<514,0> <518,0> <517,0> 
+Face verts 3 flags 0 mat 3
+<516,0> <519,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<518,0> <531,0> <521,0> 
+Face verts 3 flags 0 mat 3
+<516,0> <517,0> <520,0> 
+Face verts 3 flags 0 mat 3
+<516,0> <520,0> <519,0> 
+Face verts 3 flags 0 mat 3
+<517,0> <518,0> <520,0> 
+Face verts 3 flags 0 mat 3
+<518,0> <521,0> <520,0> 
+Face verts 3 flags 0 mat 3
+<519,0> <522,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<521,0> <531,0> <524,0> 
+Face verts 3 flags 0 mat 3
+<519,0> <520,0> <522,0> 
+Face verts 3 flags 0 mat 3
+<520,0> <523,0> <522,0> 
+Face verts 3 flags 0 mat 3
+<520,0> <521,0> <524,0> 
+Face verts 3 flags 0 mat 3
+<520,0> <524,0> <523,0> 
+Face verts 3 flags 0 mat 3
+<522,0> <525,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<524,0> <531,0> <527,0> 
+Face verts 3 flags 0 mat 3
+<522,0> <523,0> <526,0> 
+Face verts 3 flags 0 mat 3
+<522,0> <526,0> <525,0> 
+Face verts 3 flags 0 mat 3
+<523,0> <524,0> <526,0> 
+Face verts 3 flags 0 mat 3
+<524,0> <527,0> <526,0> 
+Face verts 3 flags 0 mat 3
+<525,0> <528,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<527,0> <531,0> <530,0> 
+Face verts 3 flags 0 mat 3
+<525,0> <526,0> <528,0> 
+Face verts 3 flags 0 mat 3
+<526,0> <529,0> <528,0> 
+Face verts 3 flags 0 mat 3
+<526,0> <527,0> <530,0> 
+Face verts 3 flags 0 mat 3
+<526,0> <530,0> <529,0> 
+Face verts 3 flags 0 mat 3
+<528,0> <510,0> <532,0> 
+Face verts 3 flags 0 mat 3
+<530,0> <531,0> <512,0> 
+Face verts 3 flags 0 mat 3
+<528,0> <529,0> <511,0> 
+Face verts 3 flags 0 mat 3
+<528,0> <511,0> <510,0> 
+Face verts 3 flags 0 mat 3
+<529,0> <530,0> <511,0> 
+Face verts 3 flags 0 mat 3
+<530,0> <512,0> <511,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <562,0> <561,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <563,0> <562,0> 
+Face verts 3 flags 0 mat 2
+<534,0> <535,0> <536,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <564,0> <563,0> 
+Face verts 3 flags 0 mat 2
+<534,0> <536,0> <537,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <565,0> <564,0> 
+Face verts 3 flags 0 mat 2
+<534,0> <537,0> <538,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <566,0> <565,0> 
+Face verts 3 flags 0 mat 2
+<534,0> <538,0> <539,0> 
+Face verts 3 flags 0 mat 2
+<533,0> <567,0> <566,0> 
+Face verts 3 flags 0 mat 2
+<541,0> <542,0> <535,0> 
+Face verts 3 flags 0 mat 2
+<535,0> <542,0> <543,0> 
+Face verts 3 flags 0 mat 2
+<535,0> <543,0> <536,0> 
+Face verts 3 flags 0 mat 2
+<536,0> <543,0> <537,0> 
+Face verts 3 flags 0 mat 2
+<543,0> <544,0> <537,0> 
+Face verts 3 flags 0 mat 2
+<537,0> <544,0> <545,0> 
+Face verts 3 flags 0 mat 2
+<537,0> <545,0> <538,0> 
+Face verts 3 flags 0 mat 2
+<538,0> <545,0> <539,0> 
+Face verts 3 flags 0 mat 2
+<545,0> <546,0> <539,0> 
+Face verts 3 flags 0 mat 2
+<540,0> <547,0> <541,0> 
+Face verts 3 flags 0 mat 2
+<547,0> <548,0> <541,0> 
+Face verts 3 flags 0 mat 2
+<541,0> <548,0> <549,0> 
+Face verts 3 flags 0 mat 2
+<541,0> <549,0> <542,0> 
+Face verts 3 flags 0 mat 2
+<542,0> <549,0> <543,0> 
+Face verts 3 flags 0 mat 2
+<549,0> <550,0> <543,0> 
+Face verts 3 flags 0 mat 2
+<543,0> <550,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<543,0> <551,0> <544,0> 
+Face verts 3 flags 0 mat 2
+<544,0> <551,0> <545,0> 
+Face verts 3 flags 0 mat 2
+<551,0> <552,0> <545,0> 
+Face verts 3 flags 0 mat 2
+<545,0> <552,0> <553,0> 
+Face verts 3 flags 0 mat 2
+<545,0> <553,0> <546,0> 
+Face verts 3 flags 0 mat 2
+<547,0> <554,0> <555,0> 
+Face verts 3 flags 0 mat 2
+<547,0> <555,0> <548,0> 
+Face verts 3 flags 0 mat 2
+<548,0> <555,0> <549,0> 
+Face verts 3 flags 0 mat 2
+<555,0> <556,0> <549,0> 
+Face verts 3 flags 0 mat 2
+<549,0> <556,0> <557,0> 
+Face verts 3 flags 0 mat 2
+<549,0> <557,0> <550,0> 
+Face verts 3 flags 0 mat 2
+<550,0> <557,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<557,0> <558,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<552,0> <559,0> <553,0> 
+Face verts 3 flags 0 mat 2
+<559,0> <560,0> <553,0> 
+Face verts 3 flags 0 mat 2
+<554,0> <561,0> <555,0> 
+Face verts 3 flags 0 mat 2
+<561,0> <562,0> <555,0> 
+Face verts 3 flags 0 mat 2
+<555,0> <562,0> <563,0> 
+Face verts 3 flags 0 mat 2
+<555,0> <563,0> <556,0> 
+Face verts 3 flags 0 mat 2
+<556,0> <563,0> <557,0> 
+Face verts 3 flags 0 mat 2
+<563,0> <564,0> <557,0> 
+Face verts 3 flags 0 mat 2
+<557,0> <564,0> <565,0> 
+Face verts 3 flags 0 mat 2
+<557,0> <565,0> <558,0> 
+Face verts 3 flags 0 mat 2
+<558,0> <565,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<565,0> <566,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<559,0> <566,0> <567,0> 
+Face verts 3 flags 0 mat 2
+<559,0> <567,0> <560,0> 
+Face verts 3 flags 0 mat 2
+<574,0> <584,0> <585,0> 
+Face verts 3 flags 0 mat 2
+<552,0> <575,0> <585,0> 
+Face verts 3 flags 0 mat 2
+<585,0> <574,0> <552,0> 
+Face verts 3 flags 0 mat 2
+<576,0> <575,0> <552,0> 
+Face verts 3 flags 0 mat 2
+<575,0> <576,0> <586,0> 
+Face verts 3 flags 0 mat 2
+<586,0> <585,0> <575,0> 
+Face verts 3 flags 0 mat 2
+<587,0> <586,0> <576,0> 
+Face verts 3 flags 0 mat 2
+<576,0> <577,0> <587,0> 
+Face verts 3 flags 0 mat 2
+<588,0> <587,0> <578,0> 
+Face verts 3 flags 0 mat 2
+<577,0> <578,0> <587,0> 
+Face verts 3 flags 0 mat 2
+<589,0> <588,0> <568,0> 
+Face verts 3 flags 0 mat 2
+<588,0> <578,0> <568,0> 
+Face verts 3 flags 0 mat 2
+<568,0> <579,0> <589,0> 
+Face verts 3 flags 0 mat 2
+<568,0> <569,0> <579,0> 
+Face verts 3 flags 0 mat 2
+<569,0> <570,0> <579,0> 
+Face verts 3 flags 0 mat 2
+<580,0> <579,0> <570,0> 
+Face verts 3 flags 0 mat 2
+<570,0> <571,0> <580,0> 
+Face verts 3 flags 0 mat 2
+<581,0> <580,0> <571,0> 
+Face verts 3 flags 0 mat 2
+<582,0> <581,0> <571,0> 
+Face verts 3 flags 0 mat 2
+<571,0> <572,0> <582,0> 
+Face verts 3 flags 0 mat 2
+<583,0> <582,0> <572,0> 
+Face verts 3 flags 0 mat 2
+<572,0> <573,0> <583,0> 
+Face verts 3 flags 0 mat 2
+<584,0> <583,0> <573,0> 
+Face verts 3 flags 0 mat 2
+<573,0> <574,0> <584,0> 
+Face verts 3 flags 0 mat 2
+<574,0> <559,0> <552,0> 
+Face verts 3 flags 0 mat 2
+<574,0> <573,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<573,0> <572,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<572,0> <571,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<571,0> <570,0> <559,0> 
+Face verts 3 flags 0 mat 2
+<558,0> <559,0> <570,0> 
+Face verts 3 flags 0 mat 2
+<570,0> <569,0> <558,0> 
+Face verts 3 flags 0 mat 2
+<569,0> <568,0> <558,0> 
+Face verts 3 flags 0 mat 2
+<576,0> <552,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<577,0> <576,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<578,0> <577,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<551,0> <558,0> <568,0> 
+Face verts 3 flags 0 mat 2
+<578,0> <568,0> <551,0> 
+Face verts 3 flags 0 mat 2
+<594,0> <595,0> <596,0> 
+Face verts 3 flags 0 mat 2
+<590,0> <596,0> <592,0> 
+Face verts 3 flags 0 mat 2
+<596,0> <595,0> <592,0> 
+Face verts 3 flags 0 mat 2
+<594,0> <596,0> <597,0> 
+Face verts 3 flags 0 mat 2
+<598,0> <597,0> <599,0> 
+Face verts 3 flags 0 mat 2
+<590,0> <599,0> <596,0> 
+Face verts 3 flags 0 mat 2
+<597,0> <596,0> <599,0> 
+Face verts 3 flags 0 mat 2
+<594,0> <597,0> <600,0> 
+Face verts 3 flags 0 mat 2
+<601,0> <600,0> <602,0> 
+Face verts 3 flags 0 mat 2
+<598,0> <602,0> <597,0> 
+Face verts 3 flags 0 mat 2
+<600,0> <597,0> <602,0> 
+Face verts 3 flags 0 mat 2
+<601,0> <602,0> <603,0> 
+Face verts 3 flags 0 mat 2
+<598,0> <604,0> <602,0> 
+Face verts 3 flags 0 mat 2
+<603,0> <602,0> <604,0> 
+Face verts 3 flags 0 mat 2
+<598,0> <599,0> <605,0> 
+Face verts 3 flags 0 mat 2
+<590,0> <591,0> <599,0> 
+Face verts 3 flags 0 mat 2
+<605,0> <599,0> <591,0> 
+Face verts 3 flags 0 mat 2
+<594,0> <600,0> <593,0> 
+Face verts 3 flags 0 mat 2
+<601,0> <606,0> <600,0> 
+Face verts 3 flags 0 mat 2
+<593,0> <600,0> <606,0> 
+Face verts 3 flags 0 mat 2
+<635,0> <636,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<636,0> <637,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<610,0> <609,0> <608,0> 
+Face verts 3 flags 0 mat 2
+<637,0> <638,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<611,0> <610,0> <608,0> 
+Face verts 3 flags 0 mat 2
+<638,0> <639,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<612,0> <611,0> <608,0> 
+Face verts 3 flags 0 mat 2
+<639,0> <640,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<613,0> <612,0> <608,0> 
+Face verts 3 flags 0 mat 2
+<640,0> <641,0> <607,0> 
+Face verts 3 flags 0 mat 2
+<609,0> <616,0> <615,0> 
+Face verts 3 flags 0 mat 2
+<617,0> <616,0> <609,0> 
+Face verts 3 flags 0 mat 2
+<610,0> <617,0> <609,0> 
+Face verts 3 flags 0 mat 2
+<611,0> <617,0> <610,0> 
+Face verts 3 flags 0 mat 2
+<611,0> <618,0> <617,0> 
+Face verts 3 flags 0 mat 2
+<619,0> <618,0> <611,0> 
+Face verts 3 flags 0 mat 2
+<612,0> <619,0> <611,0> 
+Face verts 3 flags 0 mat 2
+<613,0> <619,0> <612,0> 
+Face verts 3 flags 0 mat 2
+<613,0> <620,0> <619,0> 
+Face verts 3 flags 0 mat 2
+<615,0> <621,0> <614,0> 
+Face verts 3 flags 0 mat 2
+<615,0> <622,0> <621,0> 
+Face verts 3 flags 0 mat 2
+<623,0> <622,0> <615,0> 
+Face verts 3 flags 0 mat 2
+<616,0> <623,0> <615,0> 
+Face verts 3 flags 0 mat 2
+<617,0> <623,0> <616,0> 
+Face verts 3 flags 0 mat 2
+<617,0> <624,0> <623,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <624,0> <617,0> 
+Face verts 3 flags 0 mat 2
+<618,0> <625,0> <617,0> 
+Face verts 3 flags 0 mat 2
+<619,0> <625,0> <618,0> 
+Face verts 3 flags 0 mat 2
+<619,0> <626,0> <625,0> 
+Face verts 3 flags 0 mat 2
+<627,0> <626,0> <619,0> 
+Face verts 3 flags 0 mat 2
+<620,0> <627,0> <619,0> 
+Face verts 3 flags 0 mat 2
+<629,0> <628,0> <621,0> 
+Face verts 3 flags 0 mat 2
+<622,0> <629,0> <621,0> 
+Face verts 3 flags 0 mat 2
+<623,0> <629,0> <622,0> 
+Face verts 3 flags 0 mat 2
+<623,0> <630,0> <629,0> 
+Face verts 3 flags 0 mat 2
+<631,0> <630,0> <623,0> 
+Face verts 3 flags 0 mat 2
+<624,0> <631,0> <623,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <631,0> <624,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <632,0> <631,0> 
+Face verts 3 flags 0 mat 2
+<627,0> <633,0> <626,0> 
+Face verts 3 flags 0 mat 2
+<627,0> <634,0> <633,0> 
+Face verts 3 flags 0 mat 2
+<629,0> <635,0> <628,0> 
+Face verts 3 flags 0 mat 2
+<629,0> <636,0> <635,0> 
+Face verts 3 flags 0 mat 2
+<637,0> <636,0> <629,0> 
+Face verts 3 flags 0 mat 2
+<630,0> <637,0> <629,0> 
+Face verts 3 flags 0 mat 2
+<631,0> <637,0> <630,0> 
+Face verts 3 flags 0 mat 2
+<631,0> <638,0> <637,0> 
+Face verts 3 flags 0 mat 2
+<639,0> <638,0> <631,0> 
+Face verts 3 flags 0 mat 2
+<632,0> <639,0> <631,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <639,0> <632,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <640,0> <639,0> 
+Face verts 3 flags 0 mat 2
+<641,0> <640,0> <633,0> 
+Face verts 3 flags 0 mat 2
+<634,0> <641,0> <633,0> 
+Face verts 3 flags 0 mat 2
+<659,0> <658,0> <648,0> 
+Face verts 3 flags 0 mat 2
+<659,0> <649,0> <626,0> 
+Face verts 3 flags 0 mat 2
+<626,0> <648,0> <659,0> 
+Face verts 3 flags 0 mat 2
+<626,0> <649,0> <650,0> 
+Face verts 3 flags 0 mat 2
+<660,0> <650,0> <649,0> 
+Face verts 3 flags 0 mat 2
+<649,0> <659,0> <660,0> 
+Face verts 3 flags 0 mat 2
+<650,0> <660,0> <661,0> 
+Face verts 3 flags 0 mat 2
+<661,0> <651,0> <650,0> 
+Face verts 3 flags 0 mat 2
+<652,0> <661,0> <662,0> 
+Face verts 3 flags 0 mat 2
+<661,0> <652,0> <651,0> 
+Face verts 3 flags 0 mat 2
+<642,0> <662,0> <663,0> 
+Face verts 3 flags 0 mat 2
+<642,0> <652,0> <662,0> 
+Face verts 3 flags 0 mat 2
+<663,0> <653,0> <642,0> 
+Face verts 3 flags 0 mat 2
+<653,0> <643,0> <642,0> 
+Face verts 3 flags 0 mat 2
+<653,0> <644,0> <643,0> 
+Face verts 3 flags 0 mat 2
+<644,0> <653,0> <654,0> 
+Face verts 3 flags 0 mat 2
+<654,0> <645,0> <644,0> 
+Face verts 3 flags 0 mat 2
+<645,0> <654,0> <655,0> 
+Face verts 3 flags 0 mat 2
+<645,0> <655,0> <656,0> 
+Face verts 3 flags 0 mat 2
+<656,0> <646,0> <645,0> 
+Face verts 3 flags 0 mat 2
+<646,0> <656,0> <657,0> 
+Face verts 3 flags 0 mat 2
+<657,0> <647,0> <646,0> 
+Face verts 3 flags 0 mat 2
+<647,0> <657,0> <658,0> 
+Face verts 3 flags 0 mat 2
+<658,0> <648,0> <647,0> 
+Face verts 3 flags 0 mat 2
+<626,0> <633,0> <648,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <647,0> <648,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <646,0> <647,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <645,0> <646,0> 
+Face verts 3 flags 0 mat 2
+<633,0> <644,0> <645,0> 
+Face verts 3 flags 0 mat 2
+<644,0> <633,0> <632,0> 
+Face verts 3 flags 0 mat 2
+<632,0> <643,0> <644,0> 
+Face verts 3 flags 0 mat 2
+<632,0> <642,0> <643,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <626,0> <650,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <650,0> <651,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <651,0> <652,0> 
+Face verts 3 flags 0 mat 2
+<642,0> <632,0> <625,0> 
+Face verts 3 flags 0 mat 2
+<625,0> <642,0> <652,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <667,0> <664,0> 
+Face verts 3 flags 0 mat 3
+<669,0> <685,0> <666,0> 
+Face verts 3 flags 0 mat 3
+<668,0> <665,0> <664,0> 
+Face verts 3 flags 0 mat 3
+<667,0> <668,0> <664,0> 
+Face verts 3 flags 0 mat 3
+<668,0> <666,0> <665,0> 
+Face verts 3 flags 0 mat 3
+<668,0> <669,0> <666,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <670,0> <667,0> 
+Face verts 3 flags 0 mat 3
+<672,0> <685,0> <669,0> 
+Face verts 3 flags 0 mat 3
+<670,0> <668,0> <667,0> 
+Face verts 3 flags 0 mat 3
+<670,0> <671,0> <668,0> 
+Face verts 3 flags 0 mat 3
+<672,0> <669,0> <668,0> 
+Face verts 3 flags 0 mat 3
+<671,0> <672,0> <668,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <673,0> <670,0> 
+Face verts 3 flags 0 mat 3
+<675,0> <685,0> <672,0> 
+Face verts 3 flags 0 mat 3
+<674,0> <671,0> <670,0> 
+Face verts 3 flags 0 mat 3
+<673,0> <674,0> <670,0> 
+Face verts 3 flags 0 mat 3
+<674,0> <672,0> <671,0> 
+Face verts 3 flags 0 mat 3
+<674,0> <675,0> <672,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <676,0> <673,0> 
+Face verts 3 flags 0 mat 3
+<678,0> <685,0> <675,0> 
+Face verts 3 flags 0 mat 3
+<676,0> <674,0> <673,0> 
+Face verts 3 flags 0 mat 3
+<676,0> <677,0> <674,0> 
+Face verts 3 flags 0 mat 3
+<678,0> <675,0> <674,0> 
+Face verts 3 flags 0 mat 3
+<677,0> <678,0> <674,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <679,0> <676,0> 
+Face verts 3 flags 0 mat 3
+<681,0> <685,0> <678,0> 
+Face verts 3 flags 0 mat 3
+<680,0> <677,0> <676,0> 
+Face verts 3 flags 0 mat 3
+<679,0> <680,0> <676,0> 
+Face verts 3 flags 0 mat 3
+<680,0> <678,0> <677,0> 
+Face verts 3 flags 0 mat 3
+<680,0> <681,0> <678,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <682,0> <679,0> 
+Face verts 3 flags 0 mat 3
+<684,0> <685,0> <681,0> 
+Face verts 3 flags 0 mat 3
+<682,0> <680,0> <679,0> 
+Face verts 3 flags 0 mat 3
+<682,0> <683,0> <680,0> 
+Face verts 3 flags 0 mat 3
+<684,0> <681,0> <680,0> 
+Face verts 3 flags 0 mat 3
+<683,0> <684,0> <680,0> 
+Face verts 3 flags 0 mat 3
+<686,0> <664,0> <682,0> 
+Face verts 3 flags 0 mat 3
+<666,0> <685,0> <684,0> 
+Face verts 3 flags 0 mat 3
+<665,0> <683,0> <682,0> 
+Face verts 3 flags 0 mat 3
+<664,0> <665,0> <682,0> 
+Face verts 3 flags 0 mat 3
+<665,0> <684,0> <683,0> 
+Face verts 3 flags 0 mat 3
+<665,0> <666,0> <684,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <690,0> <687,0> 
+Face verts 3 flags 0 mat 3
+<692,0> <708,0> <689,0> 
+Face verts 3 flags 0 mat 3
+<691,0> <688,0> <687,0> 
+Face verts 3 flags 0 mat 3
+<690,0> <691,0> <687,0> 
+Face verts 3 flags 0 mat 3
+<691,0> <689,0> <688,0> 
+Face verts 3 flags 0 mat 3
+<691,0> <692,0> <689,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <693,0> <690,0> 
+Face verts 3 flags 0 mat 3
+<695,0> <708,0> <692,0> 
+Face verts 3 flags 0 mat 3
+<693,0> <691,0> <690,0> 
+Face verts 3 flags 0 mat 3
+<693,0> <694,0> <691,0> 
+Face verts 3 flags 0 mat 3
+<695,0> <692,0> <691,0> 
+Face verts 3 flags 0 mat 3
+<694,0> <695,0> <691,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <696,0> <693,0> 
+Face verts 3 flags 0 mat 3
+<698,0> <708,0> <695,0> 
+Face verts 3 flags 0 mat 3
+<697,0> <694,0> <693,0> 
+Face verts 3 flags 0 mat 3
+<696,0> <697,0> <693,0> 
+Face verts 3 flags 0 mat 3
+<697,0> <695,0> <694,0> 
+Face verts 3 flags 0 mat 3
+<697,0> <698,0> <695,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <699,0> <696,0> 
+Face verts 3 flags 0 mat 3
+<701,0> <708,0> <698,0> 
+Face verts 3 flags 0 mat 3
+<699,0> <697,0> <696,0> 
+Face verts 3 flags 0 mat 3
+<699,0> <700,0> <697,0> 
+Face verts 3 flags 0 mat 3
+<701,0> <698,0> <697,0> 
+Face verts 3 flags 0 mat 3
+<700,0> <701,0> <697,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <702,0> <699,0> 
+Face verts 3 flags 0 mat 3
+<704,0> <708,0> <701,0> 
+Face verts 3 flags 0 mat 3
+<703,0> <700,0> <699,0> 
+Face verts 3 flags 0 mat 3
+<702,0> <703,0> <699,0> 
+Face verts 3 flags 0 mat 3
+<703,0> <701,0> <700,0> 
+Face verts 3 flags 0 mat 3
+<703,0> <704,0> <701,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <705,0> <702,0> 
+Face verts 3 flags 0 mat 3
+<707,0> <708,0> <704,0> 
+Face verts 3 flags 0 mat 3
+<705,0> <703,0> <702,0> 
+Face verts 3 flags 0 mat 3
+<705,0> <706,0> <703,0> 
+Face verts 3 flags 0 mat 3
+<707,0> <704,0> <703,0> 
+Face verts 3 flags 0 mat 3
+<706,0> <707,0> <703,0> 
+Face verts 3 flags 0 mat 3
+<709,0> <687,0> <705,0> 
+Face verts 3 flags 0 mat 3
+<689,0> <708,0> <707,0> 
+Face verts 3 flags 0 mat 3
+<688,0> <706,0> <705,0> 
+Face verts 3 flags 0 mat 3
+<687,0> <688,0> <705,0> 
+Face verts 3 flags 0 mat 3
+<688,0> <707,0> <706,0> 
+Face verts 3 flags 0 mat 3
+<688,0> <689,0> <707,0> 
+Face verts 3 flags 0 mat 0
+<710,0> <711,0> <712,0> 
+Face verts 3 flags 0 mat 0
+<710,0> <712,0> <713,0> 
+Face verts 3 flags 0 mat 0
+<714,0> <713,0> <715,0> 
+Face verts 3 flags 0 mat 0
+<713,0> <712,0> <715,0> 
+Face verts 3 flags 0 mat 0
+<714,0> <715,0> <716,0> 
+Face verts 3 flags 0 mat 0
+<717,0> <719,0> <720,0> 
+Face verts 3 flags 0 mat 0
+<721,0> <720,0> <722,0> 
+Face verts 3 flags 0 mat 0
+<718,0> <722,0> <719,0> 
+Face verts 3 flags 0 mat 0
+<720,0> <719,0> <722,0> 
+Face verts 3 flags 0 mat 0
+<721,0> <722,0> <723,0> 
+Face verts 3 flags 0 mat 0
+<724,0> <723,0> <725,0> 
+Face verts 3 flags 0 mat 0
+<718,0> <725,0> <722,0> 
+Face verts 3 flags 0 mat 0
+<723,0> <722,0> <725,0> 
+Face verts 3 flags 0 mat 0
+<724,0> <726,0> <728,0> 
+Face verts 3 flags 0 mat 0
+<729,0> <728,0> <730,0> 
+Face verts 3 flags 0 mat 0
+<727,0> <730,0> <726,0> 
+Face verts 3 flags 0 mat 0
+<728,0> <726,0> <730,0> 
+Face verts 3 flags 0 mat 0
+<729,0> <730,0> <731,0> 
+Face verts 3 flags 0 mat 0
+<710,0> <731,0> <732,0> 
+Face verts 3 flags 0 mat 0
+<727,0> <732,0> <730,0> 
+Face verts 3 flags 0 mat 0
+<731,0> <730,0> <732,0> 
+Face verts 3 flags 0 mat 0
+<710,0> <732,0> <711,0> 
+Face verts 3 flags 0 mat 0
+<714,0> <733,0> <713,0> 
+Face verts 3 flags 0 mat 0
+<710,0> <713,0> <731,0> 
+Face verts 3 flags 0 mat 0
+<729,0> <731,0> <733,0> 
+Face verts 3 flags 0 mat 0
+<713,0> <733,0> <731,0> 
+Face verts 3 flags 0 mat 0
+<714,0> <734,0> <733,0> 
+Face verts 3 flags 0 mat 0
+<729,0> <733,0> <735,0> 
+Face verts 3 flags 0 mat 0
+<721,0> <735,0> <734,0> 
+Face verts 3 flags 0 mat 0
+<733,0> <734,0> <735,0> 
+Face verts 3 flags 0 mat 0
+<714,0> <716,0> <734,0> 
+Face verts 3 flags 0 mat 0
+<721,0> <734,0> <720,0> 
+Face verts 3 flags 0 mat 0
+<717,0> <720,0> <716,0> 
+Face verts 3 flags 0 mat 0
+<734,0> <716,0> <720,0> 
+Face verts 3 flags 0 mat 0
+<724,0> <728,0> <723,0> 
+Face verts 3 flags 0 mat 0
+<721,0> <723,0> <735,0> 
+Face verts 3 flags 0 mat 0
+<729,0> <735,0> <728,0> 
+Face verts 3 flags 0 mat 0
+<723,0> <728,0> <735,0> 
+Face verts 3 flags 0 mat 0
+<738,0> <737,0> <736,0> 
+Face verts 3 flags 0 mat 0
+<739,0> <738,0> <736,0> 
+Face verts 3 flags 0 mat 0
+<741,0> <739,0> <740,0> 
+Face verts 3 flags 0 mat 0
+<741,0> <738,0> <739,0> 
+Face verts 3 flags 0 mat 0
+<742,0> <741,0> <740,0> 
+Face verts 3 flags 0 mat 0
+<746,0> <745,0> <743,0> 
+Face verts 3 flags 0 mat 0
+<748,0> <746,0> <747,0> 
+Face verts 3 flags 0 mat 0
+<745,0> <748,0> <744,0> 
+Face verts 3 flags 0 mat 0
+<748,0> <745,0> <746,0> 
+Face verts 3 flags 0 mat 0
+<749,0> <748,0> <747,0> 
+Face verts 3 flags 0 mat 0
+<751,0> <749,0> <750,0> 
+Face verts 3 flags 0 mat 0
+<748,0> <751,0> <744,0> 
+Face verts 3 flags 0 mat 0
+<751,0> <748,0> <749,0> 
+Face verts 3 flags 0 mat 0
+<754,0> <752,0> <750,0> 
+Face verts 3 flags 0 mat 0
+<756,0> <754,0> <755,0> 
+Face verts 3 flags 0 mat 0
+<752,0> <756,0> <753,0> 
+Face verts 3 flags 0 mat 0
+<756,0> <752,0> <754,0> 
+Face verts 3 flags 0 mat 0
+<757,0> <756,0> <755,0> 
+Face verts 3 flags 0 mat 0
+<758,0> <757,0> <736,0> 
+Face verts 3 flags 0 mat 0
+<756,0> <758,0> <753,0> 
+Face verts 3 flags 0 mat 0
+<758,0> <756,0> <757,0> 
+Face verts 3 flags 0 mat 0
+<737,0> <758,0> <736,0> 
+Face verts 3 flags 0 mat 0
+<739,0> <759,0> <740,0> 
+Face verts 3 flags 0 mat 0
+<757,0> <739,0> <736,0> 
+Face verts 3 flags 0 mat 0
+<759,0> <757,0> <755,0> 
+Face verts 3 flags 0 mat 0
+<757,0> <759,0> <739,0> 
+Face verts 3 flags 0 mat 0
+<759,0> <760,0> <740,0> 
+Face verts 3 flags 0 mat 0
+<761,0> <759,0> <755,0> 
+Face verts 3 flags 0 mat 0
+<760,0> <761,0> <747,0> 
+Face verts 3 flags 0 mat 0
+<761,0> <760,0> <759,0> 
+Face verts 3 flags 0 mat 0
+<760,0> <742,0> <740,0> 
+Face verts 3 flags 0 mat 0
+<746,0> <760,0> <747,0> 
+Face verts 3 flags 0 mat 0
+<742,0> <746,0> <743,0> 
+Face verts 3 flags 0 mat 0
+<746,0> <742,0> <760,0> 
+Face verts 3 flags 0 mat 0
+<749,0> <754,0> <750,0> 
+Face verts 3 flags 0 mat 0
+<761,0> <749,0> <747,0> 
+Face verts 3 flags 0 mat 0
+<754,0> <761,0> <755,0> 
+Face verts 3 flags 0 mat 0
+<761,0> <754,0> <749,0> 
+DrawFlags 0
+Radiosity Quality: 0
+Unit V0.01 Id 211536117 Parent 211536116 Size 00000009
+Units 2
+Mat1 V0.06 Id 211570668 Parent 211536116 Size 00000094
+mat# 1
+shader: phong  facet: auto40
+rgb 0.8,0.8,0.8
+alpha 1  ka 0.25  ks 0.4  exp 0.1  ior 1
+ShBx V0.02 Id 211570669 Parent 211570668 Size 00000575
+Shader class: color
+Shader name: "plain color" (plain)
+Number of parameters: 1
+colour: color (204, 204, 204)
+Shader class: transparency
+Shader name: "none" (none)
+Number of parameters: 0
+Shader class: reflectance
+Shader name: "caligari phong" (caligari phong)
+Number of parameters: 8
+ambient factor: float 0.25
+diffuse factor: float 0.6
+specular factor: float 0.4
+exponent: float 4.65
+specular colour: color (255, 255, 255)
+transmission factor: float 0
+mirror factor: float 0
+refraction: float 1
+Shader class: displacement
+Shader name: "none" (none)
+Number of parameters: 0
+Mat1 V0.06 Id 211468204 Parent 211536116 Size 00000094
+mat# 2
+shader: phong  facet: auto40
+rgb 0.6,0.6,0.6
+alpha 1  ka 0.25  ks 0.4  exp 0.1  ior 1
+ShBx V0.02 Id 211468205 Parent 211468204 Size 00000575
+Shader class: color
+Shader name: "plain color" (plain)
+Number of parameters: 1
+colour: color (153, 153, 153)
+Shader class: transparency
+Shader name: "none" (none)
+Number of parameters: 0
+Shader class: reflectance
+Shader name: "caligari phong" (caligari phong)
+Number of parameters: 8
+ambient factor: float 0.25
+diffuse factor: float 0.6
+specular factor: float 0.4
+exponent: float 4.65
+specular colour: color (255, 255, 255)
+transmission factor: float 0
+mirror factor: float 0
+refraction: float 1
+Shader class: displacement
+Shader name: "none" (none)
+Number of parameters: 0
+Mat1 V0.06 Id 211469148 Parent 211536116 Size 00000094
+mat# 3
+shader: phong  facet: auto40
+rgb 0.4,0.4,0.4
+alpha 1  ka 0.25  ks 0.4  exp 0.1  ior 1
+ShBx V0.02 Id 211469149 Parent 211469148 Size 00000575
+Shader class: color
+Shader name: "plain color" (plain)
+Number of parameters: 1
+colour: color (102, 102, 102)
+Shader class: transparency
+Shader name: "none" (none)
+Number of parameters: 0
+Shader class: reflectance
+Shader name: "caligari phong" (caligari phong)
+Number of parameters: 8
+ambient factor: float 0.25
+diffuse factor: float 0.6
+specular factor: float 0.4
+exponent: float 4.65
+specular colour: color (255, 255, 255)
+transmission factor: float 0
+mirror factor: float 0
+refraction: float 1
+Shader class: displacement
+Shader name: "none" (none)
+Number of parameters: 0
+Mat1 V0.06 Id 211470092 Parent 211536116 Size 00000094
+mat# 0
+shader: phong  facet: auto40
+rgb 0.2,0.2,0.2
+alpha 1  ka 0.25  ks 0.4  exp 0.1  ior 1
+ShBx V0.02 Id 211470093 Parent 211470092 Size 00000572
+Shader class: color
+Shader name: "plain color" (plain)
+Number of parameters: 1
+colour: color (51, 51, 51)
+Shader class: transparency
+Shader name: "none" (none)
+Number of parameters: 0
+Shader class: reflectance
+Shader name: "caligari phong" (caligari phong)
+Number of parameters: 8
+ambient factor: float 0.25
+diffuse factor: float 0.6
+specular factor: float 0.4
+exponent: float 4.65
+specular colour: color (255, 255, 255)
+transmission factor: float 0
+mirror factor: float 0
+refraction: float 1
+Shader class: displacement
+Shader name: "none" (none)
+Number of parameters: 0
+END  V1.00 Id 0 Parent 0 Size        0

BIN
test/models/COB/spider_6_6.cob


Разлика између датотеке није приказан због своје велике величине
+ 6 - 0
test/models/COB/spider_6_6_ascii.cob


+ 3 - 0
test/other/streamload.py

@@ -31,6 +31,9 @@ def process_dir(thisdir):
                 res += process_dir(fullpath) 
                 res += process_dir(fullpath) 
             continue
             continue
 
 
+        # import twice, importing the same file again introduces extra risk
+        # to crash due to garbage data lying around in the importer.
+        command.append(fullpath)
         command.append(fullpath)
         command.append(fullpath)
 
 
     if len(command)>2:
     if len(command)>2:

+ 62 - 42
workspaces/vc8/assimp.vcproj

@@ -1149,46 +1149,6 @@
 					>
 					>
 				</File>
 				</File>
 			</Filter>
 			</Filter>
-			<Filter
-				Name="BoostWorkaround"
-				>
-				<File
-					RelativePath="..\..\include\BoostWorkaround\boost\foreach.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\include\BoostWorkaround\boost\format.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\include\BoostWorkaround\boost\scoped_array.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\include\BoostWorkaround\boost\scoped_ptr.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\include\BoostWorkaround\boost\static_assert.hpp"
-					>
-				</File>
-				<Filter
-					Name="tuple"
-					>
-					<File
-						RelativePath="..\..\include\BoostWorkaround\boost\tuple\tuple.hpp"
-						>
-					</File>
-				</Filter>
-				<Filter
-					Name="math"
-					>
-					<File
-						RelativePath="..\..\include\BoostWorkaround\boost\math\common_factor_rt.hpp"
-						>
-					</File>
-				</Filter>
-			</Filter>
 			<Filter
 			<Filter
 				Name="C"
 				Name="C"
 				>
 				>
@@ -1503,6 +1463,10 @@
 				<Filter
 				<Filter
 					Name="lwo"
 					Name="lwo"
 					>
 					>
+					<File
+						RelativePath="..\..\code\IFF.h"
+						>
+					</File>
 					<File
 					<File
 						RelativePath="..\..\code\LWOBLoader.cpp"
 						RelativePath="..\..\code\LWOBLoader.cpp"
 						>
 						>
@@ -2000,6 +1964,22 @@
 						>
 						>
 					</File>
 					</File>
 				</Filter>
 				</Filter>
+				<Filter
+					Name="cob"
+					>
+					<File
+						RelativePath="..\..\code\COBLoader.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\..\code\COBLoader.h"
+						>
+					</File>
+					<File
+						RelativePath="..\..\code\COBScene.h"
+						>
+					</File>
+				</Filter>
 			</Filter>
 			</Filter>
 			<Filter
 			<Filter
 				Name="process"
 				Name="process"
@@ -3557,11 +3537,11 @@
 					>
 					>
 				</File>
 				</File>
 				<File
 				<File
-					RelativePath="..\..\code\IFF.h"
+					RelativePath="..\..\code\Importer.cpp"
 					>
 					>
 				</File>
 				</File>
 				<File
 				<File
-					RelativePath="..\..\code\Importer.cpp"
+					RelativePath="..\..\code\LineSplitter.h"
 					>
 					>
 				</File>
 				</File>
 				<File
 				<File
@@ -3668,6 +3648,10 @@
 					RelativePath="..\..\code\TargetAnimation.h"
 					RelativePath="..\..\code\TargetAnimation.h"
 					>
 					>
 				</File>
 				</File>
+				<File
+					RelativePath="..\..\code\TinyFormatter.h"
+					>
+				</File>
 				<File
 				<File
 					RelativePath="..\..\code\VertexTriangleAdjacency.cpp"
 					RelativePath="..\..\code\VertexTriangleAdjacency.cpp"
 					>
 					>
@@ -3677,6 +3661,42 @@
 					>
 					>
 				</File>
 				</File>
 			</Filter>
 			</Filter>
+			<Filter
+				Name="noboost"
+				>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\math\common_factor_rt.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\foreach.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\format.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\scoped_array.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\scoped_ptr.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\shared_ptr.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\static_assert.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\tuple\tuple.hpp"
+					>
+				</File>
+			</Filter>
 		</Filter>
 		</Filter>
 		<Filter
 		<Filter
 			Name="doc"
 			Name="doc"

+ 28 - 4
workspaces/vc9/assimp.vcproj

@@ -1139,6 +1139,10 @@
 					RelativePath="..\..\code\BoostWorkaround\boost\scoped_ptr.hpp"
 					RelativePath="..\..\code\BoostWorkaround\boost\scoped_ptr.hpp"
 					>
 					>
 				</File>
 				</File>
+				<File
+					RelativePath="..\..\code\BoostWorkaround\boost\shared_ptr.hpp"
+					>
+				</File>
 				<File
 				<File
 					RelativePath="..\..\code\BoostWorkaround\boost\static_assert.hpp"
 					RelativePath="..\..\code\BoostWorkaround\boost\static_assert.hpp"
 					>
 					>
@@ -1739,10 +1743,6 @@
 						>
 						>
 					</File>
 					</File>
 				</Filter>
 				</Filter>
-				<Filter
-					Name="vrml97"
-					>
-				</Filter>
 				<Filter
 				<Filter
 					Name="off"
 					Name="off"
 					>
 					>
@@ -1971,6 +1971,22 @@
 						>
 						>
 					</File>
 					</File>
 				</Filter>
 				</Filter>
+				<Filter
+					Name="cob"
+					>
+					<File
+						RelativePath="..\..\code\COBLoader.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\..\code\COBLoader.h"
+						>
+					</File>
+					<File
+						RelativePath="..\..\code\COBScene.h"
+						>
+					</File>
+				</Filter>
 			</Filter>
 			</Filter>
 			<Filter
 			<Filter
 				Name="process"
 				Name="process"
@@ -2347,6 +2363,10 @@
 					RelativePath="..\..\code\Importer.cpp"
 					RelativePath="..\..\code\Importer.cpp"
 					>
 					>
 				</File>
 				</File>
+				<File
+					RelativePath="..\..\code\LineSplitter.h"
+					>
+				</File>
 				<File
 				<File
 					RelativePath="..\..\code\MaterialSystem.cpp"
 					RelativePath="..\..\code\MaterialSystem.cpp"
 					>
 					>
@@ -2435,6 +2455,10 @@
 					RelativePath="..\..\code\TargetAnimation.h"
 					RelativePath="..\..\code\TargetAnimation.h"
 					>
 					>
 				</File>
 				</File>
+				<File
+					RelativePath="..\..\code\TinyFormatter.h"
+					>
+				</File>
 				<File
 				<File
 					RelativePath="..\..\code\VertexTriangleAdjacency.cpp"
 					RelativePath="..\..\code\VertexTriangleAdjacency.cpp"
 					>
 					>

Неке датотеке нису приказане због велике количине промена