From 08fe2e7d2096ad1fe28573d28ca44636eca33ddc Mon Sep 17 00:00:00 2001 From: aramis_acg Date: Thu, 16 Feb 2012 02:11:29 +0000 Subject: [PATCH] + add Ply exporter. git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1169 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- code/CMakeLists.txt | 2 + code/Exporter.cpp | 7 + code/PlyExporter.cpp | 247 ++++ code/PlyExporter.h | 85 ++ workspaces/vc9/assimp.vcproj | 2608 +++++++++++++++++----------------- 5 files changed, 1651 insertions(+), 1298 deletions(-) create mode 100644 code/PlyExporter.cpp create mode 100644 code/PlyExporter.h diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 184967c90..82afc5234 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -337,6 +337,8 @@ SET( Ply_SRCS PlyLoader.h PlyParser.cpp PlyParser.h + PlyExporter.cpp + PlyExporter.h ) SOURCE_GROUP( Ply FILES ${Ply_SRCS}) diff --git a/code/Exporter.cpp b/code/Exporter.cpp index d441cb87b..7d0f0e895 100644 --- a/code/Exporter.cpp +++ b/code/Exporter.cpp @@ -73,6 +73,7 @@ void GetPostProcessingStepInstanceList(std::vector< BaseProcess* >& out); void ExportSceneCollada(const char*,IOSystem*, const aiScene*); void ExportSceneObj(const char*,IOSystem*, const aiScene*); void ExportSceneSTL(const char*,IOSystem*, const aiScene*); +void ExportScenePly(const char*,IOSystem*, const aiScene*); void ExportScene3DS(const char*, IOSystem*, const aiScene*) {} // ------------------------------------------------------------------------------------------------ @@ -93,6 +94,12 @@ Exporter::ExportFormatEntry gExporters[] = ), #endif +#ifndef ASSIMP_BUILD_NO_PLY_EXPORTER + Exporter::ExportFormatEntry( "ply", "Stanford Polygon Library", "ply" , &ExportScenePly, + aiProcess_PreTransformVertices + ), +#endif + //#ifndef ASSIMP_BUILD_NO_3DS_EXPORTER // ExportFormatEntry( "3ds", "Autodesk 3DS (legacy format)", "3ds" , &ExportScene3DS), //#endif diff --git a/code/PlyExporter.cpp b/code/PlyExporter.cpp new file mode 100644 index 000000000..df06175d2 --- /dev/null +++ b/code/PlyExporter.cpp @@ -0,0 +1,247 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2012, assimp team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +#include "AssimpPCH.h" + +#if !defined(ASSIMP_BUILD_NO_EXPORT) && !defined(ASSIMP_BUILD_NO_PLY_EXPORTER) + +#include "PlyExporter.h" +#include "../include/assimp/version.h" + +using namespace Assimp; +namespace Assimp { + +// ------------------------------------------------------------------------------------------------ +// Worker function for exporting a scene to PLY. Prototyped and registered in Exporter.cpp +void ExportScenePly(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene) +{ + // invoke the exporter + PlyExporter exporter(pFile, pScene); + + // we're still here - export successfully completed. Write the file. + boost::scoped_ptr outfile (pIOSystem->Open(pFile,"wt")); + outfile->Write( exporter.mOutput.str().c_str(), static_cast(exporter.mOutput.tellp()),1); +} + +} // end of namespace Assimp + +#define PLY_EXPORT_HAS_NORMALS 0x1 +#define PLY_EXPORT_HAS_TANGENTS_BITANGENTS 0x2 +#define PLY_EXPORT_HAS_TEXCOORDS 0x4 +#define PLY_EXPORT_HAS_COLORS (PLY_EXPORT_HAS_TEXCOORDS << AI_MAX_NUMBER_OF_TEXTURECOORDS) + +// ------------------------------------------------------------------------------------------------ +PlyExporter :: PlyExporter(const char* _filename, const aiScene* pScene) +: filename(_filename) +, pScene(pScene) +, endl("\n") +{ + // make sure that all formatting happens using the standard, C locale and not the user's current locale + const std::locale& l = std::locale("C"); + mOutput.imbue(l); + + unsigned int faces = 0u, vertices = 0u, components = 0u; + for (unsigned int i = 0; i < pScene->mNumMeshes; ++i) { + const aiMesh& m = *pScene->mMeshes[i]; + faces += m.mNumFaces; + vertices += m.mNumVertices; + + if (m.HasNormals()) { + components |= PLY_EXPORT_HAS_NORMALS; + } + if (m.HasTangentsAndBitangents()) { + components |= PLY_EXPORT_HAS_TANGENTS_BITANGENTS; + } + for (unsigned int t = 0; m.HasTextureCoords(t); ++t) { + components |= PLY_EXPORT_HAS_TEXCOORDS << t; + } + for (unsigned int t = 0; m.HasVertexColors(t); ++t) { + components |= PLY_EXPORT_HAS_COLORS << t; + } + } + + mOutput << "ply" << endl; + mOutput << "format ascii 1.0" << endl; + mOutput << "Created by Open Asset Import Library - http://assimp.sf.net (v" + << aiGetVersionMajor() << '.' << aiGetVersionMinor() << '.' + << aiGetVersionRevision() << ")" << endl; + + mOutput << "element vertex " << vertices << endl; + mOutput << "property float x" << endl; + mOutput << "property float y" << endl; + mOutput << "property float z" << endl; + + if(components & PLY_EXPORT_HAS_NORMALS) { + mOutput << "property float nx" << endl; + mOutput << "property float ny" << endl; + mOutput << "property float nz" << endl; + } + + // write texcoords first, just in case an importer does not support tangents + // bitangents and just skips over the rest of the line upon encountering + // unknown fields (Ply leaves pretty much every vertex component open, + // but in reality most importers only know about vertex positions, normals + // and texture coordinates). + for (unsigned int n = PLY_EXPORT_HAS_TEXCOORDS, c = 0; (components & n) && c != AI_MAX_NUMBER_OF_TEXTURECOORDS; n <<= 1, ++c) { + if (!c) { + mOutput << "property float s" << endl; + mOutput << "property float t" << endl; + } + else { + mOutput << "property float s" << c << endl; + mOutput << "property float t" << c << endl; + } + } + + for (unsigned int n = PLY_EXPORT_HAS_COLORS, c = 0; (components & n) && c != AI_MAX_NUMBER_OF_COLOR_SETS; n <<= 1, ++c) { + if (!c) { + mOutput << "property float r" << endl; + mOutput << "property float g" << endl; + mOutput << "property float b" << endl; + mOutput << "property float a" << endl; + } + else { + mOutput << "property float r" << c << endl; + mOutput << "property float g" << c << endl; + mOutput << "property float b" << c << endl; + mOutput << "property float a" << c << endl; + } + } + + if(components & PLY_EXPORT_HAS_TANGENTS_BITANGENTS) { + mOutput << "property float tx" << endl; + mOutput << "property float ty" << endl; + mOutput << "property float tz" << endl; + mOutput << "property float bx" << endl; + mOutput << "property float by" << endl; + mOutput << "property float bz" << endl; + } + + mOutput << "element face " << faces << endl; + mOutput << "property list uint uint vertex_indices" << endl; + mOutput << "end_header" << endl; + + for (unsigned int i = 0; i < pScene->mNumMeshes; ++i) { + WriteMeshVerts(pScene->mMeshes[i],components); + } + for (unsigned int i = 0, ofs = 0; i < pScene->mNumMeshes; ++i) { + WriteMeshIndices(pScene->mMeshes[i],ofs); + ofs += pScene->mMeshes[i]->mNumVertices; + } +} + +// ------------------------------------------------------------------------------------------------ +void PlyExporter :: WriteMeshVerts(const aiMesh* m, unsigned int components) +{ + for (unsigned int i = 0; i < m->mNumVertices; ++i) { + mOutput << + m->mVertices[i].x << " " << + m->mVertices[i].y << " " << + m->mVertices[i].z + ; + if(components & PLY_EXPORT_HAS_NORMALS) { + if (m->HasNormals()) { + mOutput << + " " << m->mNormals[i].x << + " " << m->mNormals[i].y << + " " << m->mNormals[i].z; + } + else { + mOutput << " 0.0 0.0 0.0"; + } + } + + for (unsigned int n = PLY_EXPORT_HAS_TEXCOORDS, c = 0; (components & n) && c != AI_MAX_NUMBER_OF_TEXTURECOORDS; n <<= 1, ++c) { + if (m->HasTextureCoords(c)) { + mOutput << + " " << m->mTextureCoords[c][i].x << + " " << m->mTextureCoords[c][i].y; + } + else { + mOutput << " -1.0 -1.0"; + } + } + + for (unsigned int n = PLY_EXPORT_HAS_COLORS, c = 0; (components & n) && c != AI_MAX_NUMBER_OF_COLOR_SETS; n <<= 1, ++c) { + if (m->HasVertexColors(c)) { + mOutput << + " " << m->mColors[c][i].r << + " " << m->mColors[c][i].g << + " " << m->mColors[c][i].b << + " " << m->mColors[c][i].a; + } + else { + mOutput << " -1.0 -1.0 -1.0 -1.0"; + } + } + + if(components & PLY_EXPORT_HAS_TANGENTS_BITANGENTS) { + if (m->HasTangentsAndBitangents()) { + mOutput << + " " << m->mTangents[i].x << + " " << m->mTangents[i].y << + " " << m->mTangents[i].z << + " " << m->mBitangents[i].x << + " " << m->mBitangents[i].y << + " " << m->mBitangents[i].z + ; + } + else { + mOutput << " 0.0 0.0 0.0 0.0 0.0 0.0"; + } + } + + mOutput << endl; + } +} + +// ------------------------------------------------------------------------------------------------ +void PlyExporter :: WriteMeshIndices(const aiMesh* m, unsigned int offset) +{ + for (unsigned int i = 0; i < m->mNumFaces; ++i) { + const aiFace& f = m->mFaces[i]; + mOutput << f.mNumIndices << " "; + for(unsigned int c = 0; c < f.mNumIndices; ++c) { + mOutput << (f.mIndices[c] + offset) << (c == f.mNumIndices-1 ? endl : " "); + } + } +} + +#endif diff --git a/code/PlyExporter.h b/code/PlyExporter.h new file mode 100644 index 000000000..a0a0e9091 --- /dev/null +++ b/code/PlyExporter.h @@ -0,0 +1,85 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2012, assimp team +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +/** @file PlyExporter.h + * Declares the exporter class to write a scene to a Polygon Library (ply) + */ +#ifndef AI_PLYEXPORTER_H_INC +#define AI_PLYEXPORTER_H_INC + +#include + +struct aiScene; +struct aiNode; + +namespace Assimp +{ + +// ------------------------------------------------------------------------------------------------ +/** Helper class to export a given scene to a Stanford Ply file. */ +// ------------------------------------------------------------------------------------------------ +class PlyExporter +{ +public: + /// Constructor for a specific scene to export + PlyExporter(const char* filename, const aiScene* pScene); + +public: + + /// public stringstreams to write all output into + std::ostringstream mOutput; + +private: + + void WriteMeshVerts(const aiMesh* m, unsigned int components); + void WriteMeshIndices(const aiMesh* m, unsigned int ofs); + +private: + + const std::string filename; + const aiScene* const pScene; + + // obviously, this endl() doesn't flush() the stream + const std::string endl; +}; + +} + +#endif diff --git a/workspaces/vc9/assimp.vcproj b/workspaces/vc9/assimp.vcproj index 1e24aa78b..885dee43c 100644 --- a/workspaces/vc9/assimp.vcproj +++ b/workspaces/vc9/assimp.vcproj @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2191,14 +2183,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2223,6 +2207,22 @@ UsePrecompiledHeader="0" /> + + + + + + @@ -2357,14 +2357,6 @@ PrecompiledHeaderThrough="AssimpPCH.h" /> - - - @@ -2392,14 +2384,6 @@ PrecompiledHeaderThrough="AssimpPCH.h" /> - - - @@ -2427,6 +2411,22 @@ PrecompiledHeaderThrough="AssimpPCH.h" /> + + + + + + @@ -2734,14 +2734,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2750,14 +2742,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2766,14 +2750,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2782,14 +2758,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2798,14 +2766,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2814,14 +2774,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2831,7 +2783,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -2894,14 +2886,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2910,14 +2894,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2926,14 +2902,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2942,14 +2910,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2958,14 +2918,6 @@ UsePrecompiledHeader="0" /> - - - @@ -2975,7 +2927,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3026,14 +3018,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3042,14 +3026,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3058,14 +3034,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3074,14 +3042,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3090,14 +3050,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3107,7 +3059,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3166,14 +3158,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3182,14 +3166,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3198,14 +3174,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3214,14 +3182,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3230,14 +3190,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3247,7 +3199,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3306,14 +3298,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3322,14 +3306,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3338,14 +3314,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3354,14 +3322,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3370,14 +3330,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3387,7 +3339,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3442,14 +3434,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3458,14 +3442,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3474,14 +3450,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3490,14 +3458,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3506,14 +3466,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3523,7 +3475,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3578,14 +3570,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3594,14 +3578,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3610,14 +3586,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3626,14 +3594,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3642,14 +3602,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3659,7 +3611,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3714,14 +3706,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3730,14 +3714,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3746,14 +3722,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3762,14 +3730,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3778,14 +3738,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3795,7 +3747,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -3862,14 +3854,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3878,14 +3862,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3894,14 +3870,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3910,14 +3878,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3926,14 +3886,6 @@ UsePrecompiledHeader="0" /> - - - @@ -3943,7 +3895,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4002,14 +3994,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4018,14 +4002,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4034,14 +4010,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4050,14 +4018,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4066,14 +4026,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4083,7 +4035,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4142,14 +4134,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4158,14 +4142,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4174,14 +4150,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4190,14 +4158,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4206,14 +4166,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4223,7 +4175,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4278,14 +4270,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4294,14 +4278,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4310,14 +4286,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4326,14 +4294,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4342,14 +4302,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4359,7 +4311,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4418,14 +4410,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4434,14 +4418,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4450,14 +4426,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4466,14 +4434,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4482,14 +4442,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4499,7 +4451,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4554,14 +4546,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4570,14 +4554,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4586,14 +4562,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4602,14 +4570,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4618,14 +4578,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4635,7 +4587,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4690,14 +4682,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4706,14 +4690,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4722,14 +4698,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4738,14 +4706,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4754,14 +4714,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4771,7 +4723,7 @@ /> + + + + + + + + + + + + + + + + + + - - - @@ -4834,14 +4826,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4850,14 +4834,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4866,14 +4842,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4882,14 +4850,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4898,14 +4858,6 @@ UsePrecompiledHeader="0" /> - - - @@ -4915,7 +4867,7 @@ /> + + + + + + + + + + + + + + + + + + + + + + + +