Drop XML implementation, related code and dependent features
This commit is contained in:
		@@ -4,8 +4,7 @@ This tutorial show how to create a more complex application with the engine.
 | 
			
		||||
We construct a simple mesh viewer using the user interface API and the
 | 
			
		||||
scene management of Irrlicht. The tutorial show how to create and use Buttons,
 | 
			
		||||
Windows, Toolbars, Menus, ComboBoxes, Tabcontrols, Editboxes, Images,
 | 
			
		||||
MessageBoxes, SkyBoxes, and how to parse XML files with the integrated XML
 | 
			
		||||
reader of the engine.
 | 
			
		||||
MessageBoxes, SkyBoxes.
 | 
			
		||||
 | 
			
		||||
We start like in most other tutorials: Include all necessary header files, add
 | 
			
		||||
a comment to let the engine be linked with the correct .lib file in Visual
 | 
			
		||||
@@ -766,55 +765,6 @@ int main(int argc, char* argv[])
 | 
			
		||||
	// add our media directory as "search path"
 | 
			
		||||
	Device->getFileSystem()->addFileArchive(getExampleMediaPath());
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	The next step is to read the configuration file. It is stored in the xml
 | 
			
		||||
	format and looks a little bit like this:
 | 
			
		||||
 | 
			
		||||
	@verbatim
 | 
			
		||||
	<?xml version="1.0"?>
 | 
			
		||||
	<config>
 | 
			
		||||
		<startUpModel file="some filename" />
 | 
			
		||||
		<messageText caption="Irrlicht Engine Mesh Viewer">
 | 
			
		||||
			Hello!
 | 
			
		||||
		</messageText>
 | 
			
		||||
	</config>
 | 
			
		||||
	@endverbatim
 | 
			
		||||
 | 
			
		||||
	We need the data stored in there to be written into the global variables
 | 
			
		||||
	StartUpModelFile, MessageText and Caption. This is now done using the
 | 
			
		||||
	Irrlicht Engine integrated XML parser:
 | 
			
		||||
	*/
 | 
			
		||||
 | 
			
		||||
	// read configuration from xml file
 | 
			
		||||
 | 
			
		||||
	io::IXMLReader* xml = Device->getFileSystem()->createXMLReader( L"config.xml");
 | 
			
		||||
 | 
			
		||||
	while(xml && xml->read())
 | 
			
		||||
	{
 | 
			
		||||
		switch(xml->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_TEXT:
 | 
			
		||||
			// in this xml file, the only text which occurs is the
 | 
			
		||||
			// messageText
 | 
			
		||||
			MessageText = xml->getNodeData();
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			{
 | 
			
		||||
				if (core::stringw("startUpModel") == xml->getNodeName())
 | 
			
		||||
					StartUpModelFile = xml->getAttributeValue(L"file");
 | 
			
		||||
				else
 | 
			
		||||
				if (core::stringw("messageText") == xml->getNodeName())
 | 
			
		||||
					Caption = xml->getAttributeValue(L"caption");
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (xml)
 | 
			
		||||
		xml->drop(); // don't forget to delete the xml reader
 | 
			
		||||
 | 
			
		||||
	// We can pass a model to load per command line parameter
 | 
			
		||||
	if (argc > 1)
 | 
			
		||||
		StartUpModelFile = argv[1];
 | 
			
		||||
 
 | 
			
		||||
@@ -1,54 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 | 
			
		||||
<CodeBlocks_project_file>
 | 
			
		||||
	<FileVersion major="1" minor="6" />
 | 
			
		||||
	<Project>
 | 
			
		||||
		<Option title="Irrlicht Example 15 Load .irr File" />
 | 
			
		||||
		<Option pch_mode="0" />
 | 
			
		||||
		<Option compiler="gcc" />
 | 
			
		||||
		<Build>
 | 
			
		||||
			<Target title="Windows">
 | 
			
		||||
				<Option platforms="Windows;" />
 | 
			
		||||
				<Option output="../../bin/Win32-gcc/LoadIrrFile" prefix_auto="0" extension_auto="1" />
 | 
			
		||||
				<Option type="1" />
 | 
			
		||||
				<Option compiler="gcc" />
 | 
			
		||||
				<Compiler>
 | 
			
		||||
					<Add option="-g" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add directory="../../lib/Win32-gcc" />
 | 
			
		||||
				</Linker>
 | 
			
		||||
			</Target>
 | 
			
		||||
			<Target title="Linux">
 | 
			
		||||
				<Option platforms="Unix;" />
 | 
			
		||||
				<Option output="../../bin/Linux/LoadIrrFile" prefix_auto="0" extension_auto="0" />
 | 
			
		||||
				<Option type="1" />
 | 
			
		||||
				<Option compiler="gcc" />
 | 
			
		||||
				<Compiler>
 | 
			
		||||
					<Add option="-g" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add library="Xxf86vm" />
 | 
			
		||||
					<Add library="X11" />
 | 
			
		||||
					<Add library="GL" />
 | 
			
		||||
					<Add directory="../../lib/Linux" />
 | 
			
		||||
				</Linker>
 | 
			
		||||
			</Target>
 | 
			
		||||
		</Build>
 | 
			
		||||
		<VirtualTargets>
 | 
			
		||||
			<Add alias="All" targets="Windows;Linux;" />
 | 
			
		||||
		</VirtualTargets>
 | 
			
		||||
		<Compiler>
 | 
			
		||||
			<Add option="-g" />
 | 
			
		||||
			<Add directory="../../include" />
 | 
			
		||||
		</Compiler>
 | 
			
		||||
		<Linker>
 | 
			
		||||
			<Add library="Irrlicht" />
 | 
			
		||||
		</Linker>
 | 
			
		||||
		<Unit filename="main.cpp" />
 | 
			
		||||
		<Extensions>
 | 
			
		||||
			<code_completion />
 | 
			
		||||
			<debugger />
 | 
			
		||||
			<envvars />
 | 
			
		||||
		</Extensions>
 | 
			
		||||
	</Project>
 | 
			
		||||
</CodeBlocks_project_file>
 | 
			
		||||
@@ -1,162 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="15.LoadIrrFile"
 | 
			
		||||
	ProjectGUID="{1AD3DB5E-D751-42D5-8F3E-7C3010539F5C}"
 | 
			
		||||
	SccProjectName=""
 | 
			
		||||
	SccLocalPath="">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory=".\Debug"
 | 
			
		||||
			IntermediateDirectory=".\Debug"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="0"
 | 
			
		||||
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="5"
 | 
			
		||||
				UsePrecompiledHeader="2"
 | 
			
		||||
				PrecompiledHeaderFile=".\Debug/LoadIrrFile.pch"
 | 
			
		||||
				AssemblerListingLocation=".\Debug/"
 | 
			
		||||
				ObjectFile=".\Debug/"
 | 
			
		||||
				ProgramDataBaseFileName=".\Debug/"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
				CompileAs="0"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe"
 | 
			
		||||
				LinkIncremental="0"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile=".\Debug/LoadIrrFile.pdb"
 | 
			
		||||
				SubSystem="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
				TypeLibraryName=".\Debug/LoadIrrFile.tlb"
 | 
			
		||||
				HeaderFileName=""/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="_DEBUG"
 | 
			
		||||
				Culture="3079"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory=".\Release"
 | 
			
		||||
			IntermediateDirectory=".\Release"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			UseOfMFC="0"
 | 
			
		||||
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="2"
 | 
			
		||||
				InlineFunctionExpansion="1"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 | 
			
		||||
				StringPooling="TRUE"
 | 
			
		||||
				RuntimeLibrary="4"
 | 
			
		||||
				EnableFunctionLevelLinking="TRUE"
 | 
			
		||||
				UsePrecompiledHeader="2"
 | 
			
		||||
				PrecompiledHeaderFile=".\Release/LoadIrrFile.pch"
 | 
			
		||||
				AssemblerListingLocation=".\Release/"
 | 
			
		||||
				ObjectFile=".\Release/"
 | 
			
		||||
				ProgramDataBaseFileName=".\Release/"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				CompileAs="0"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe"
 | 
			
		||||
				LinkIncremental="0"
 | 
			
		||||
				SuppressStartupBanner="TRUE"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
 | 
			
		||||
				ProgramDatabaseFile=".\Release/LoadIrrFile.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
				TypeLibraryName=".\Release/LoadIrrFile.tlb"
 | 
			
		||||
				HeaderFileName=""/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="NDEBUG"
 | 
			
		||||
				Culture="3079"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<File
 | 
			
		||||
			RelativePath="main.cpp">
 | 
			
		||||
			<FileConfiguration
 | 
			
		||||
				Name="Debug|Win32">
 | 
			
		||||
				<Tool
 | 
			
		||||
					Name="VCCLCompilerTool"
 | 
			
		||||
					Optimization="0"
 | 
			
		||||
					AdditionalIncludeDirectories=""
 | 
			
		||||
					PreprocessorDefinitions=""
 | 
			
		||||
					BasicRuntimeChecks="3"/>
 | 
			
		||||
			</FileConfiguration>
 | 
			
		||||
			<FileConfiguration
 | 
			
		||||
				Name="Release|Win32">
 | 
			
		||||
				<Tool
 | 
			
		||||
					Name="VCCLCompilerTool"
 | 
			
		||||
					Optimization="2"
 | 
			
		||||
					AdditionalIncludeDirectories=""
 | 
			
		||||
					PreprocessorDefinitions=""/>
 | 
			
		||||
			</FileConfiguration>
 | 
			
		||||
		</File>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
@@ -1,324 +0,0 @@
 | 
			
		||||
// !$*UTF8*$!
 | 
			
		||||
{
 | 
			
		||||
	archiveVersion = 1;
 | 
			
		||||
	classes = {
 | 
			
		||||
	};
 | 
			
		||||
	objectVersion = 46;
 | 
			
		||||
	objects = {
 | 
			
		||||
 | 
			
		||||
/* Begin PBXBuildFile section */
 | 
			
		||||
		5E34CC751B7F8EEF00F212E8 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34CC741B7F8EEF00F212E8 /* main.cpp */; };
 | 
			
		||||
		5E8570B61B7F9A3200B267D2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B01B7F99F500B267D2 /* Cocoa.framework */; };
 | 
			
		||||
		5E8570B71B7F9A3200B267D2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B41B7F9A0700B267D2 /* IOKit.framework */; };
 | 
			
		||||
		5E8570B81B7F9A3200B267D2 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B21B7F99FE00B267D2 /* OpenGL.framework */; };
 | 
			
		||||
		5E8570BF1B7F9D3A00B267D2 /* media in Resources */ = {isa = PBXBuildFile; fileRef = 5E8570BE1B7F9D3A00B267D2 /* media */; };
 | 
			
		||||
		5E8571181B7FBE8D00B267D2 /* libIrrlicht.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E34CC781B7F90A000F212E8 /* libIrrlicht.a */; };
 | 
			
		||||
/* End PBXBuildFile section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFileReference section */
 | 
			
		||||
		5E34CC511B7F8E6E00F212E8 /* 15.LoadIrrFile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 15.LoadIrrFile.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		5E34CC741B7F8EEF00F212E8 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
 | 
			
		||||
		5E34CC781B7F90A000F212E8 /* libIrrlicht.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libIrrlicht.a; path = ../../lib/OSX/libIrrlicht.a; sourceTree = "<group>"; };
 | 
			
		||||
		5E8570B01B7F99F500B267D2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570B21B7F99FE00B267D2 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570B41B7F9A0700B267D2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570BE1B7F9D3A00B267D2 /* media */ = {isa = PBXFileReference; lastKnownFileType = folder; name = media; path = ../../media; sourceTree = "<group>"; };
 | 
			
		||||
/* End PBXFileReference section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFrameworksBuildPhase section */
 | 
			
		||||
		5E34CC4E1B7F8E6E00F212E8 /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E8570B61B7F9A3200B267D2 /* Cocoa.framework in Frameworks */,
 | 
			
		||||
				5E8570B71B7F9A3200B267D2 /* IOKit.framework in Frameworks */,
 | 
			
		||||
				5E8570B81B7F9A3200B267D2 /* OpenGL.framework in Frameworks */,
 | 
			
		||||
				5E8571181B7FBE8D00B267D2 /* libIrrlicht.a in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXFrameworksBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXGroup section */
 | 
			
		||||
		5E34C6D81B7F4A0C00F212E8 = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E34CC741B7F8EEF00F212E8 /* main.cpp */,
 | 
			
		||||
				5E34CC761B7F905600F212E8 /* Libraries */,
 | 
			
		||||
				5E34CC521B7F8E6E00F212E8 /* Products */,
 | 
			
		||||
				5E34CC771B7F906D00F212E8 /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC521B7F8E6E00F212E8 /* Products */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E34CC511B7F8E6E00F212E8 /* 15.LoadIrrFile.app */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC761B7F905600F212E8 /* Libraries */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E8570B01B7F99F500B267D2 /* Cocoa.framework */,
 | 
			
		||||
				5E8570B41B7F9A0700B267D2 /* IOKit.framework */,
 | 
			
		||||
				5E8570B21B7F99FE00B267D2 /* OpenGL.framework */,
 | 
			
		||||
				5E34CC781B7F90A000F212E8 /* libIrrlicht.a */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Libraries;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC771B7F906D00F212E8 /* Resources */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E8570BE1B7F9D3A00B267D2 /* media */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Resources;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXNativeTarget section */
 | 
			
		||||
		5E34CC501B7F8E6E00F212E8 /* 15.LoadIrrFile */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = 5E34CC701B7F8E6E00F212E8 /* Build configuration list for PBXNativeTarget "15.LoadIrrFile" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				5E34CC4D1B7F8E6E00F212E8 /* Sources */,
 | 
			
		||||
				5E34CC4E1B7F8E6E00F212E8 /* Frameworks */,
 | 
			
		||||
				5E34CC4F1B7F8E6E00F212E8 /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
			);
 | 
			
		||||
			name = 15.LoadIrrFile;
 | 
			
		||||
			productName = 01.HelloWorld;
 | 
			
		||||
			productReference = 5E34CC511B7F8E6E00F212E8 /* 15.LoadIrrFile.app */;
 | 
			
		||||
			productType = "com.apple.product-type.application";
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXNativeTarget section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXProject section */
 | 
			
		||||
		5E34C6D91B7F4A0C00F212E8 /* Project object */ = {
 | 
			
		||||
			isa = PBXProject;
 | 
			
		||||
			attributes = {
 | 
			
		||||
				LastUpgradeCheck = 0830;
 | 
			
		||||
				TargetAttributes = {
 | 
			
		||||
					5E34CC501B7F8E6E00F212E8 = {
 | 
			
		||||
						CreatedOnToolsVersion = 6.1;
 | 
			
		||||
					};
 | 
			
		||||
				};
 | 
			
		||||
			};
 | 
			
		||||
			buildConfigurationList = 5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "LoadIrrFile" */;
 | 
			
		||||
			compatibilityVersion = "Xcode 3.2";
 | 
			
		||||
			developmentRegion = English;
 | 
			
		||||
			hasScannedForEncodings = 0;
 | 
			
		||||
			knownRegions = (
 | 
			
		||||
				en,
 | 
			
		||||
				Base,
 | 
			
		||||
			);
 | 
			
		||||
			mainGroup = 5E34C6D81B7F4A0C00F212E8;
 | 
			
		||||
			productRefGroup = 5E34CC521B7F8E6E00F212E8 /* Products */;
 | 
			
		||||
			projectDirPath = "";
 | 
			
		||||
			projectRoot = "";
 | 
			
		||||
			targets = (
 | 
			
		||||
				5E34CC501B7F8E6E00F212E8 /* 15.LoadIrrFile */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXResourcesBuildPhase section */
 | 
			
		||||
		5E34CC4F1B7F8E6E00F212E8 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E8570BF1B7F9D3A00B267D2 /* media in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXResourcesBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXSourcesBuildPhase section */
 | 
			
		||||
		5E34CC4D1B7F8E6E00F212E8 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E34CC751B7F8EEF00F212E8 /* main.cpp in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXSourcesBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCBuildConfiguration section */
 | 
			
		||||
		5E34C6DD1B7F4A0C00F212E8 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 | 
			
		||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				ENABLE_TESTABILITY = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = c11;
 | 
			
		||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				MACOSX_DEPLOYMENT_TARGET = 10.9;
 | 
			
		||||
				ONLY_ACTIVE_ARCH = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		5E34C6DE1B7F4A0C00F212E8 /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 | 
			
		||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = c11;
 | 
			
		||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				MACOSX_DEPLOYMENT_TARGET = 10.9;
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC6C1B7F8E6E00F212E8 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				CODE_SIGN_IDENTITY = "-";
 | 
			
		||||
				COMBINE_HIDPI_IMAGES = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = NO;
 | 
			
		||||
				DEPLOYMENT_LOCATION = YES;
 | 
			
		||||
				DSTROOT = "$(SRCROOT)/../../bin/OSX";
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_DYNAMIC_NO_PIC = NO;
 | 
			
		||||
				GCC_OPTIMIZATION_LEVEL = 0;
 | 
			
		||||
				GCC_PREPROCESSOR_DEFINITIONS = (
 | 
			
		||||
					"DEBUG=1",
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
				);
 | 
			
		||||
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				HEADER_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
 | 
			
		||||
					"$(SRCROOT)/../../include",
 | 
			
		||||
				);
 | 
			
		||||
				INFOPLIST_FILE = "$(SRCROOT)/../../media/info_osx.plist";
 | 
			
		||||
				INSTALL_PATH = /;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX";
 | 
			
		||||
				MTL_ENABLE_DEBUG_INFO = YES;
 | 
			
		||||
				ONLY_ACTIVE_ARCH = YES;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC6D1B7F8E6E00F212E8 /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				CODE_SIGN_IDENTITY = "-";
 | 
			
		||||
				COMBINE_HIDPI_IMAGES = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = YES;
 | 
			
		||||
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
			
		||||
				DEPLOYMENT_LOCATION = YES;
 | 
			
		||||
				DSTROOT = "$(SRCROOT)/../../bin/OSX";
 | 
			
		||||
				ENABLE_NS_ASSERTIONS = NO;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				HEADER_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
 | 
			
		||||
					"$(SRCROOT)/../../include",
 | 
			
		||||
				);
 | 
			
		||||
				INFOPLIST_FILE = "$(SRCROOT)/../../media/info_osx.plist";
 | 
			
		||||
				INSTALL_PATH = /;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX";
 | 
			
		||||
				MTL_ENABLE_DEBUG_INFO = NO;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
/* End XCBuildConfiguration section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCConfigurationList section */
 | 
			
		||||
		5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "LoadIrrFile" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				5E34C6DD1B7F4A0C00F212E8 /* Debug */,
 | 
			
		||||
				5E34C6DE1B7F4A0C00F212E8 /* Release */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC701B7F8E6E00F212E8 /* Build configuration list for PBXNativeTarget "15.LoadIrrFile" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				5E34CC6C1B7F8E6E00F212E8 /* Debug */,
 | 
			
		||||
				5E34CC6D1B7F8E6E00F212E8 /* Release */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
/* End XCConfigurationList section */
 | 
			
		||||
	};
 | 
			
		||||
	rootObject = 5E34C6D91B7F4A0C00F212E8 /* Project object */;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<Scheme
 | 
			
		||||
   LastUpgradeVersion = "0830"
 | 
			
		||||
   version = "1.3">
 | 
			
		||||
   <BuildAction
 | 
			
		||||
      parallelizeBuildables = "YES"
 | 
			
		||||
      buildImplicitDependencies = "YES">
 | 
			
		||||
      <BuildActionEntries>
 | 
			
		||||
         <BuildActionEntry
 | 
			
		||||
            buildForTesting = "YES"
 | 
			
		||||
            buildForRunning = "YES"
 | 
			
		||||
            buildForProfiling = "YES"
 | 
			
		||||
            buildForArchiving = "YES"
 | 
			
		||||
            buildForAnalyzing = "YES">
 | 
			
		||||
            <BuildableReference
 | 
			
		||||
               BuildableIdentifier = "primary"
 | 
			
		||||
               BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
               BuildableName = "15.LoadIrrFile.app"
 | 
			
		||||
               BlueprintName = "15.LoadIrrFile"
 | 
			
		||||
               ReferencedContainer = "container:LoadIrrFile.xcodeproj">
 | 
			
		||||
            </BuildableReference>
 | 
			
		||||
         </BuildActionEntry>
 | 
			
		||||
      </BuildActionEntries>
 | 
			
		||||
   </BuildAction>
 | 
			
		||||
   <TestAction
 | 
			
		||||
      buildConfiguration = "Debug"
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES">
 | 
			
		||||
      <Testables>
 | 
			
		||||
      </Testables>
 | 
			
		||||
      <MacroExpansion>
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "15.LoadIrrFile.app"
 | 
			
		||||
            BlueprintName = "15.LoadIrrFile"
 | 
			
		||||
            ReferencedContainer = "container:LoadIrrFile.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </MacroExpansion>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </TestAction>
 | 
			
		||||
   <LaunchAction
 | 
			
		||||
      buildConfiguration = "Debug"
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      launchStyle = "0"
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      ignoresPersistentStateOnLaunch = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES"
 | 
			
		||||
      debugServiceExtension = "internal"
 | 
			
		||||
      allowLocationSimulation = "YES">
 | 
			
		||||
      <BuildableProductRunnable
 | 
			
		||||
         runnableDebuggingMode = "0">
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "15.LoadIrrFile.app"
 | 
			
		||||
            BlueprintName = "15.LoadIrrFile"
 | 
			
		||||
            ReferencedContainer = "container:LoadIrrFile.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </LaunchAction>
 | 
			
		||||
   <ProfileAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      savedToolIdentifier = ""
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES">
 | 
			
		||||
      <BuildableProductRunnable
 | 
			
		||||
         runnableDebuggingMode = "0">
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "15.LoadIrrFile.app"
 | 
			
		||||
            BlueprintName = "15.LoadIrrFile"
 | 
			
		||||
            ReferencedContainer = "container:LoadIrrFile.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
   </ProfileAction>
 | 
			
		||||
   <AnalyzeAction
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
   </AnalyzeAction>
 | 
			
		||||
   <ArchiveAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      revealArchiveInOrganizer = "YES">
 | 
			
		||||
   </ArchiveAction>
 | 
			
		||||
</Scheme>
 | 
			
		||||
@@ -1,235 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>15.LoadIrrFile</ProjectName>
 | 
			
		||||
    <ProjectGuid>{78C9F424-523C-49AC-94B7-823AA4A26BF9}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>LoadIrrFile</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp">
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,235 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>15.LoadIrrFile</ProjectName>
 | 
			
		||||
    <ProjectGuid>{78C9F424-523C-49AC-94B7-823AA4A26BF9}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>LoadIrrFile</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp">
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,235 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>15.LoadIrrFile</ProjectName>
 | 
			
		||||
    <ProjectGuid>{78C9F424-523C-49AC-94B7-823AA4A26BF9}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>LoadIrrFile</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp">
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,235 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>15.LoadIrrFile</ProjectName>
 | 
			
		||||
    <ProjectGuid>{78C9F424-523C-49AC-94B7-823AA4A26BF9}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>LoadIrrFile</RootNamespace>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <UseOfMfc>false</UseOfMfc>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Debug/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win32-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <Midl>
 | 
			
		||||
      <TypeLibraryName>.\Release/LoadIrrFile.tlb</TypeLibraryName>
 | 
			
		||||
      <HeaderFileName>
 | 
			
		||||
      </HeaderFileName>
 | 
			
		||||
    </Midl>
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>MaxSpeed</Optimization>
 | 
			
		||||
      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <StringPooling>true</StringPooling>
 | 
			
		||||
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 | 
			
		||||
      <FunctionLevelLinking>true</FunctionLevelLinking>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <ResourceCompile>
 | 
			
		||||
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <Culture>0x0c07</Culture>
 | 
			
		||||
    </ResourceCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <OutputFile>..\..\bin\Win64-VisualStudio\15.LoadIrrFile.exe</OutputFile>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp">
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
 | 
			
		||||
      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,56 +0,0 @@
 | 
			
		||||
# Makefile for Irrlicht Examples
 | 
			
		||||
# It's usually sufficient to change just the target name and source file list
 | 
			
		||||
# and be sure that CXX is set to a valid compiler
 | 
			
		||||
 | 
			
		||||
# Name of the executable created (.exe will be added automatically if necessary)
 | 
			
		||||
Target := 15.LoadIrrFile
 | 
			
		||||
# List of source files, separated by spaces
 | 
			
		||||
Sources := main.cpp
 | 
			
		||||
# Path to Irrlicht directory, should contain include/ and lib/
 | 
			
		||||
IrrlichtHome := ../..
 | 
			
		||||
# Path for the executable. Note that Irrlicht.dll should usually also be there for win32 systems
 | 
			
		||||
BinPath = ../../bin/$(SYSTEM)
 | 
			
		||||
 | 
			
		||||
# general compiler settings (might need to be set when compiling the lib, too)
 | 
			
		||||
CPPFLAGS += -I$(IrrlichtHome)/include -I/usr/X11R6/include
 | 
			
		||||
ifndef NDEBUG
 | 
			
		||||
CXXFLAGS += -g -Wall
 | 
			
		||||
else
 | 
			
		||||
CXXFLAGS += -O3
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#default target is Linux
 | 
			
		||||
all: all_linux
 | 
			
		||||
 | 
			
		||||
# target specific settings
 | 
			
		||||
all_linux all_win32 static_win32: LDFLAGS += -L$(IrrlichtHome)/lib/$(SYSTEM) -lIrrlicht
 | 
			
		||||
all_linux: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lEGL -lGLESv1_CM -lGLESv2 -lXxf86vm -lXext -lX11 -lXcursor
 | 
			
		||||
all_linux clean_linux: SYSTEM=Linux
 | 
			
		||||
all_win32 clean_win32 static_win32: SYSTEM=Win32-gcc
 | 
			
		||||
all_win32 clean_win32 static_win32: SUF=.exe
 | 
			
		||||
static_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
 | 
			
		||||
all_win32: LDFLAGS += -lopengl32 -lEGL -lGLESv1_CM -lGLESv2 -lm
 | 
			
		||||
static_win32: LDFLAGS += -lgdi32 -lwinspool -lcomdlg32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32 -lEGL -lGLESv1_CM -lGLESv2
 | 
			
		||||
# name of the binary - only valid for targets which set SYSTEM
 | 
			
		||||
DESTPATH = $(BinPath)/$(Target)$(SUF)
 | 
			
		||||
 | 
			
		||||
all_linux all_win32 static_win32:
 | 
			
		||||
	$(warning Building...)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
 | 
			
		||||
 | 
			
		||||
clean: clean_linux clean_win32
 | 
			
		||||
	$(warning Cleaning...)
 | 
			
		||||
 | 
			
		||||
clean_linux clean_win32:
 | 
			
		||||
	@$(RM) $(DESTPATH)
 | 
			
		||||
 | 
			
		||||
.PHONY: all all_win32 static_win32 clean clean_linux clean_win32
 | 
			
		||||
 | 
			
		||||
#multilib handling
 | 
			
		||||
ifeq ($(HOSTTYPE), x86_64)
 | 
			
		||||
LIBSELECT=64
 | 
			
		||||
endif
 | 
			
		||||
#solaris real-time features
 | 
			
		||||
ifeq ($(HOSTTYPE), sun4)
 | 
			
		||||
LDFLAGS += -lrt
 | 
			
		||||
endif
 | 
			
		||||
@@ -1,181 +0,0 @@
 | 
			
		||||
/** Example 015 Loading Scenes from .irr Files
 | 
			
		||||
 | 
			
		||||
Since version 1.1, Irrlicht is able to save and load
 | 
			
		||||
the full scene graph into an .irr file, an xml based
 | 
			
		||||
format. There is an editor available to edit
 | 
			
		||||
those files, named irrEdit (http://www.ambiera.com/irredit)
 | 
			
		||||
which can also be used as world and particle editor.
 | 
			
		||||
This tutorial shows how to use .irr files.
 | 
			
		||||
 | 
			
		||||
Lets start: Create an Irrlicht device and setup the window.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <irrlicht.h>
 | 
			
		||||
#include "driverChoice.h"
 | 
			
		||||
#include "exampleHelper.h"
 | 
			
		||||
 | 
			
		||||
using namespace irr;
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#pragma comment(lib, "Irrlicht.lib")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int main(int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
	// ask user for driver
 | 
			
		||||
	video::E_DRIVER_TYPE driverType=driverChoiceConsole();
 | 
			
		||||
	if (driverType==video::EDT_COUNT)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	// create device and exit if creation failed
 | 
			
		||||
 | 
			
		||||
	IrrlichtDevice* device =
 | 
			
		||||
		createDevice(driverType, core::dimension2d<u32>(640, 480));
 | 
			
		||||
 | 
			
		||||
	if (device == 0)
 | 
			
		||||
		return 1; // could not create selected driver.
 | 
			
		||||
 | 
			
		||||
	device->setWindowCaption(L"Load .irr file example");
 | 
			
		||||
 | 
			
		||||
	video::IVideoDriver* driver = device->getVideoDriver();
 | 
			
		||||
	scene::ISceneManager* smgr = device->getSceneManager();
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	Now load our .irr file.
 | 
			
		||||
	.irr files can store the whole scene graph including animators,
 | 
			
		||||
	materials and particle systems. And there is also the possibility to
 | 
			
		||||
	store arbitrary user data for every scene node in that file. To keep
 | 
			
		||||
	this example simple, we are simply loading the scene here. See the
 | 
			
		||||
	documentation at ISceneManager::loadScene and ISceneManager::saveScene
 | 
			
		||||
	for more information. So to load and display a complicated huge scene,
 | 
			
		||||
	we only need a single call to loadScene().
 | 
			
		||||
	*/
 | 
			
		||||
 | 
			
		||||
	// load the scene
 | 
			
		||||
	/* You might have to work around some minor problems in current .irr loader:
 | 
			
		||||
	- It can't load meshes relative to the .irr file, but only relative to the working directory. 
 | 
			
		||||
	  So you might have to change your working directory to the path where the .irr file is in.
 | 
			
		||||
	- When passing a custom parent node to loadScene then irr_scene attributes will be passed to that.
 | 
			
		||||
	  Usually not a problem, but for example AmbientLight will not change that way unless you create a custom 
 | 
			
		||||
	  SceneNode type which can interpret those attributes.
 | 
			
		||||
	*/
 | 
			
		||||
	if (argc>1)
 | 
			
		||||
		smgr->loadScene(argv[1]);
 | 
			
		||||
	else
 | 
			
		||||
		smgr->loadScene(getExampleMediaPath() + "example.irr");
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	Now we'll create a camera, and give it a collision response animator
 | 
			
		||||
	that's built from the mesh nodes in the scene we just loaded.
 | 
			
		||||
	*/
 | 
			
		||||
	scene::ICameraSceneNode * camera = smgr->addCameraSceneNodeFPS(0, 50.f, 0.1f);
 | 
			
		||||
 | 
			
		||||
	// Create a meta triangle selector to hold several triangle selectors.
 | 
			
		||||
	scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	Now we will find all the nodes in the scene and create triangle
 | 
			
		||||
	selectors for all suitable nodes.  Typically, you would want to make a
 | 
			
		||||
	more informed decision about which nodes to performs collision checks
 | 
			
		||||
	on; you could capture that information in the node name or Id.
 | 
			
		||||
	*/
 | 
			
		||||
	core::array<scene::ISceneNode *> nodes;
 | 
			
		||||
	smgr->getSceneNodesFromType(scene::ESNT_ANY, nodes); // Find all nodes
 | 
			
		||||
 | 
			
		||||
	for (u32 i=0; i < nodes.size(); ++i)
 | 
			
		||||
	{
 | 
			
		||||
		scene::ISceneNode * node = nodes[i];
 | 
			
		||||
		scene::ITriangleSelector * selector = 0;
 | 
			
		||||
 | 
			
		||||
		switch(node->getType())
 | 
			
		||||
		{
 | 
			
		||||
		case scene::ESNT_CUBE:
 | 
			
		||||
		case scene::ESNT_ANIMATED_MESH:
 | 
			
		||||
			// Because the selector won't animate with the mesh,
 | 
			
		||||
			// and is only being used for camera collision, we'll just use an approximate
 | 
			
		||||
			// bounding box instead of ((scene::IAnimatedMeshSceneNode*)node)->getMesh(0)
 | 
			
		||||
			selector = smgr->createTriangleSelectorFromBoundingBox(node);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
		case scene::ESNT_MESH:
 | 
			
		||||
		case scene::ESNT_SPHERE: // Derived from IMeshSceneNode
 | 
			
		||||
			selector = smgr->createTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case scene::ESNT_TERRAIN:
 | 
			
		||||
			selector = smgr->createTerrainTriangleSelector((scene::ITerrainSceneNode*)node);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case scene::ESNT_OCTREE:
 | 
			
		||||
			selector = smgr->createOctreeTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			// Don't create a selector for this node type
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(selector)
 | 
			
		||||
		{
 | 
			
		||||
			// Add it to the meta selector, which will take a reference to it
 | 
			
		||||
			meta->addTriangleSelector(selector);
 | 
			
		||||
			// And drop my reference to it, so that the meta selector owns it.
 | 
			
		||||
			selector->drop();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	Now that the mesh scene nodes have had triangle selectors created and added
 | 
			
		||||
	to the meta selector, create a collision response animator from that meta selector.
 | 
			
		||||
	*/
 | 
			
		||||
	scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
 | 
			
		||||
		meta, camera, core::vector3df(5,5,5),
 | 
			
		||||
		core::vector3df(0,0,0));
 | 
			
		||||
	meta->drop(); // I'm done with the meta selector now
 | 
			
		||||
 | 
			
		||||
	camera->addAnimator(anim);
 | 
			
		||||
	anim->drop(); // I'm done with the animator now
 | 
			
		||||
 | 
			
		||||
	// And set the camera position so that it doesn't start off stuck in the geometry
 | 
			
		||||
	camera->setPosition(core::vector3df(0.f, 20.f, 0.f));
 | 
			
		||||
 | 
			
		||||
	// Point the camera at the cube node, by finding the first node of type ESNT_CUBE
 | 
			
		||||
	scene::ISceneNode * cube = smgr->getSceneNodeFromType(scene::ESNT_CUBE);
 | 
			
		||||
	if(cube)
 | 
			
		||||
		camera->setTarget(cube->getAbsolutePosition());
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	That's it. Draw everything and finish as usual.
 | 
			
		||||
	*/
 | 
			
		||||
 | 
			
		||||
	int lastFPS = -1;
 | 
			
		||||
 | 
			
		||||
	while(device->run())
 | 
			
		||||
	if (device->isWindowActive())
 | 
			
		||||
	{
 | 
			
		||||
		driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0,200,200,200));
 | 
			
		||||
		smgr->drawAll();
 | 
			
		||||
		driver->endScene();
 | 
			
		||||
 | 
			
		||||
		int fps = driver->getFPS();
 | 
			
		||||
 | 
			
		||||
		if (lastFPS != fps)
 | 
			
		||||
		{
 | 
			
		||||
			core::stringw str = L"Load Irrlicht File example - Irrlicht Engine [";
 | 
			
		||||
			str += driver->getName();
 | 
			
		||||
			str += "] FPS:";
 | 
			
		||||
			str += fps;
 | 
			
		||||
 | 
			
		||||
			device->setWindowCaption(str.c_str());
 | 
			
		||||
			lastFPS = fps;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	device->drop();
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
**/
 | 
			
		||||
@@ -1,129 +0,0 @@
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<title>Irrlicht Engine Tutorial</title>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
 | 
			
		||||
<br>
 | 
			
		||||
<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center">
 | 
			
		||||
  <tr> 
 | 
			
		||||
    <td bgcolor="#666699" width="10"><b><a href="http://irrlicht.sourceforge.net" target="_blank"><img src="../../media/irrlichtlogo.jpg" width="88" height="31" border="0"></a></b></td>
 | 
			
		||||
    <td bgcolor="#666699" width="100%"> <div align="center"><b><font color="#FFFFFF"></font></b></div>
 | 
			
		||||
      <b><font color="#FFFFFF">Tutorial 15. Load .irr File</font></b></td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr bgcolor="#eeeeff"> 
 | 
			
		||||
    <td height="90" colspan="2"> <div align="left"> 
 | 
			
		||||
        <p>Since version 1.1, Irrlicht is able to save and load the full scene 
 | 
			
		||||
          graph into an .irr file, an xml based format. There is also an editor 
 | 
			
		||||
          available to edit those files, named irrEdit on <a href="http://www.ambiera.com/irredit" target="_blank">http://www.ambiera.com/irredit</a>, 
 | 
			
		||||
          which can also be used as world and particle editor. This tutorial shows 
 | 
			
		||||
          how to use .irr files.</p>
 | 
			
		||||
        <p align="center"><img src="../../media/015shot.jpg" width="256" height="200"><br>
 | 
			
		||||
        </p>
 | 
			
		||||
      </div></td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
<br>
 | 
			
		||||
<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center">
 | 
			
		||||
  <tr> 
 | 
			
		||||
    <td bgcolor="#666699"> <div align="center"><b><font color="#000000"></font></b></div>
 | 
			
		||||
      <font color="#FFFFFF"><b>Lets start!</b></font></td>
 | 
			
		||||
  </tr>
 | 
			
		||||
  <tr> 
 | 
			
		||||
    <td height="90" bgcolor="#eeeeff" valign="top"> <div align="left"> 
 | 
			
		||||
        <p>Lets start: Create an Irrlicht device and setup the window.</p>
 | 
			
		||||
        <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | 
			
		||||
          <tr> 
 | 
			
		||||
            <td> <pre>#include <irrlicht.h>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace irr;
 | 
			
		||||
 | 
			
		||||
#pragma comment(lib, "Irrlicht.lib")
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
	// ask user for driver
 | 
			
		||||
 | 
			
		||||
	video::E_DRIVER_TYPE driverType;
 | 
			
		||||
 | 
			
		||||
	printf("Please select the driver you want for this example:\n"\
 | 
			
		||||
		" (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
 | 
			
		||||
		" (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
 | 
			
		||||
		" (f) NullDevice\n (otherKey) exit\n\n");
 | 
			
		||||
 | 
			
		||||
	char i;
 | 
			
		||||
	std::cin >> i;
 | 
			
		||||
 | 
			
		||||
	switch(i)
 | 
			
		||||
	{
 | 
			
		||||
		case 'a': driverType = video::EDT_DIRECT3D9;break;
 | 
			
		||||
		case 'b': driverType = video::EDT_DIRECT3D8;break;
 | 
			
		||||
		case 'c': driverType = video::EDT_OPENGL;   break;
 | 
			
		||||
		case 'd': driverType = video::EDT_SOFTWARE; break;
 | 
			
		||||
		case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
 | 
			
		||||
		case 'f': driverType = video::EDT_NULL;     break;
 | 
			
		||||
		default: return 1;
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
	// create device and exit if creation failed
 | 
			
		||||
 | 
			
		||||
	IrrlichtDevice* device =
 | 
			
		||||
		createDevice(driverType, core::dimension2d<s32>(640, 480));
 | 
			
		||||
 | 
			
		||||
	if (device == 0)
 | 
			
		||||
		return 1; // could not create selected driver.
 | 
			
		||||
 | 
			
		||||
	device->setWindowCaption(L"Load .irr file example");
 | 
			
		||||
 | 
			
		||||
	video::IVideoDriver* driver = device->getVideoDriver();
 | 
			
		||||
	scene::ISceneManager* smgr = device->getSceneManager();
 | 
			
		||||
</pre></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        </table>
 | 
			
		||||
        <p>Now load our .irr file. .irr files can store the whole scene graph 
 | 
			
		||||
          including animators, materials and particle systems. And there is also 
 | 
			
		||||
          the possibility to store arbitrary user data for every scene node in 
 | 
			
		||||
          that file. To keep this example simple, we are simply loading the scene 
 | 
			
		||||
          here. See the documentation at ISceneManager::loadScene and ISceneManager::saveScene 
 | 
			
		||||
          for more information. So to load and display a complicated huge scene, 
 | 
			
		||||
          we only need a single call to loadScene().</p>
 | 
			
		||||
        <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | 
			
		||||
          <tr> 
 | 
			
		||||
            <td><pre>// load the scene<br>smgr->loadScene("../../media/example.irr"); </pre></td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        </table>
 | 
			
		||||
        <p>That was it already. Now add a camera and draw the scene.</p>
 | 
			
		||||
        <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | 
			
		||||
          <tr> 
 | 
			
		||||
            <td> <pre>	// add a user controlled camera
 | 
			
		||||
 | 
			
		||||
	smgr->addCameraSceneNodeFPS();
 | 
			
		||||
 | 
			
		||||
	// and draw everything.
 | 
			
		||||
	
 | 
			
		||||
	while(device->run())
 | 
			
		||||
	if (device->isWindowActive())
 | 
			
		||||
	{
 | 
			
		||||
		driver->beginScene(true, true, video::SColor(0,200,200,200));
 | 
			
		||||
		smgr->drawAll();
 | 
			
		||||
		driver->endScene();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	device->drop();
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
</pre> </td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        </table>
 | 
			
		||||
        
 | 
			
		||||
      </div>
 | 
			
		||||
      <p> </p>
 | 
			
		||||
      </td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</table>
 | 
			
		||||
<p> </p>
 | 
			
		||||
<p> </p>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -1,56 +0,0 @@
 | 
			
		||||
# Makefile for Irrlicht Examples
 | 
			
		||||
# It's usually sufficient to change just the target name and source file list
 | 
			
		||||
# and be sure that CXX is set to a valid compiler
 | 
			
		||||
 | 
			
		||||
# Name of the executable created (.exe will be added automatically if necessary)
 | 
			
		||||
Target := 25.XmlHandling
 | 
			
		||||
# List of source files, separated by spaces
 | 
			
		||||
Sources := main.cpp
 | 
			
		||||
# Path to Irrlicht directory, should contain include/ and lib/
 | 
			
		||||
IrrlichtHome := ../..
 | 
			
		||||
# Path for the executable. Note that Irrlicht.dll should usually also be there for win32 systems
 | 
			
		||||
BinPath = ../../bin/$(SYSTEM)
 | 
			
		||||
 | 
			
		||||
# general compiler settings (might need to be set when compiling the lib, too)
 | 
			
		||||
CPPFLAGS += -I$(IrrlichtHome)/include -I/usr/X11R6/include
 | 
			
		||||
ifndef NDEBUG
 | 
			
		||||
CXXFLAGS += -g -Wall
 | 
			
		||||
else
 | 
			
		||||
CXXFLAGS += -O3
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#default target is Linux
 | 
			
		||||
all: all_linux
 | 
			
		||||
 | 
			
		||||
# target specific settings
 | 
			
		||||
all_linux all_win32 static_win32: LDFLAGS += -L$(IrrlichtHome)/lib/$(SYSTEM) -lIrrlicht
 | 
			
		||||
all_linux: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lEGL -lGLESv1_CM -lGLESv2 -lXxf86vm -lXext -lX11 -lXcursor
 | 
			
		||||
all_linux clean_linux: SYSTEM=Linux
 | 
			
		||||
all_win32 clean_win32 static_win32: SYSTEM=Win32-gcc
 | 
			
		||||
all_win32 clean_win32 static_win32: SUF=.exe
 | 
			
		||||
static_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
 | 
			
		||||
all_win32: LDFLAGS += -lopengl32 -lEGL -lGLESv1_CM -lGLESv2 -lm
 | 
			
		||||
static_win32: LDFLAGS += -lgdi32 -lwinspool -lcomdlg32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32 -lEGL -lGLESv1_CM -lGLESv2
 | 
			
		||||
# name of the binary - only valid for targets which set SYSTEM
 | 
			
		||||
DESTPATH = $(BinPath)/$(Target)$(SUF)
 | 
			
		||||
 | 
			
		||||
all_linux all_win32 static_win32:
 | 
			
		||||
	$(warning Building...)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
 | 
			
		||||
 | 
			
		||||
clean: clean_linux clean_win32
 | 
			
		||||
	$(warning Cleaning...)
 | 
			
		||||
 | 
			
		||||
clean_linux clean_win32:
 | 
			
		||||
	@$(RM) $(DESTPATH)
 | 
			
		||||
 | 
			
		||||
.PHONY: all all_win32 static_win32 clean clean_linux clean_win32
 | 
			
		||||
 | 
			
		||||
#multilib handling
 | 
			
		||||
ifeq ($(HOSTTYPE), x86_64)
 | 
			
		||||
LIBSELECT=64
 | 
			
		||||
endif
 | 
			
		||||
#solaris real-time features
 | 
			
		||||
ifeq ($(HOSTTYPE), sun4)
 | 
			
		||||
LDFLAGS += -lrt
 | 
			
		||||
endif
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 | 
			
		||||
<CodeBlocks_project_file>
 | 
			
		||||
	<FileVersion major="1" minor="6" />
 | 
			
		||||
	<Project>
 | 
			
		||||
		<Option title="Irrlicht Example 25 Xml handling" />
 | 
			
		||||
		<Option pch_mode="0" />
 | 
			
		||||
		<Option compiler="gcc" />
 | 
			
		||||
		<Build>
 | 
			
		||||
			<Target title="Linux">
 | 
			
		||||
				<Option platforms="Unix;" />
 | 
			
		||||
				<Option output="../../bin/Linux/XmlHandling" prefix_auto="0" extension_auto="0" />
 | 
			
		||||
				<Option type="1" />
 | 
			
		||||
				<Option compiler="gcc" />
 | 
			
		||||
				<Compiler>
 | 
			
		||||
					<Add option="-g" />
 | 
			
		||||
					<Add option="-D_IRR_STATIC_LIB_" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add library="Xxf86vm" />
 | 
			
		||||
					<Add library="X11" />
 | 
			
		||||
					<Add library="GL" />
 | 
			
		||||
					<Add directory="../../lib/Linux" />
 | 
			
		||||
				</Linker>
 | 
			
		||||
			</Target>
 | 
			
		||||
			<Target title="Windows">
 | 
			
		||||
				<Option platforms="Windows;" />
 | 
			
		||||
				<Option output="../../bin/Win32-gcc/XmlHandling" prefix_auto="0" extension_auto="1" />
 | 
			
		||||
				<Option type="1" />
 | 
			
		||||
				<Option compiler="gcc" />
 | 
			
		||||
				<Compiler>
 | 
			
		||||
					<Add option="-g" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add directory="../../lib/Win32-gcc" />
 | 
			
		||||
				</Linker>
 | 
			
		||||
			</Target>
 | 
			
		||||
		</Build>
 | 
			
		||||
		<VirtualTargets>
 | 
			
		||||
			<Add alias="All" targets="Windows;Linux;" />
 | 
			
		||||
		</VirtualTargets>
 | 
			
		||||
		<Compiler>
 | 
			
		||||
			<Add option="-g" />
 | 
			
		||||
			<Add directory="../../include" />
 | 
			
		||||
		</Compiler>
 | 
			
		||||
		<Linker>
 | 
			
		||||
			<Add library="Irrlicht" />
 | 
			
		||||
		</Linker>
 | 
			
		||||
		<Unit filename="main.cpp" />
 | 
			
		||||
		<Extensions>
 | 
			
		||||
			<code_completion />
 | 
			
		||||
			<debugger />
 | 
			
		||||
			<envvars />
 | 
			
		||||
		</Extensions>
 | 
			
		||||
	</Project>
 | 
			
		||||
</CodeBlocks_project_file>
 | 
			
		||||
@@ -1,195 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="9,00"
 | 
			
		||||
	Name="25.XmlHandling"
 | 
			
		||||
	ProjectGUID="{8FDA260E-EF27-4f8c-8720-7AF707DD0D9E}"
 | 
			
		||||
	Keyword="Win32Proj"
 | 
			
		||||
	TargetFrameworkVersion="131072"
 | 
			
		||||
	>
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"
 | 
			
		||||
		/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<ToolFiles>
 | 
			
		||||
	</ToolFiles>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="Debug"
 | 
			
		||||
			IntermediateDirectory="Debug"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="_IRR_STATIC_LIB_;WIN32;_DEBUG;_WINDOWS"
 | 
			
		||||
				MinimalRebuild="true"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="1"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="4"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
 | 
			
		||||
				GenerateDebugInformation="true"
 | 
			
		||||
				ProgramDatabaseFile="$(OutDir)/XmlHandling.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				RandomizedBaseAddress="1"
 | 
			
		||||
				DataExecutionPrevention="0"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="Release"
 | 
			
		||||
			IntermediateDirectory="Release"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			WholeProgramOptimization="1"
 | 
			
		||||
			>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				AdditionalOptions="/QIfist /Oa"
 | 
			
		||||
				Optimization="3"
 | 
			
		||||
				InlineFunctionExpansion="2"
 | 
			
		||||
				EnableIntrinsicFunctions="true"
 | 
			
		||||
				FavorSizeOrSpeed="1"
 | 
			
		||||
				OmitFramePointers="true"
 | 
			
		||||
				AdditionalIncludeDirectories="..\..\include"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
 | 
			
		||||
				RuntimeLibrary="0"
 | 
			
		||||
				BufferSecurityCheck="false"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="true"
 | 
			
		||||
				DebugInformationFormat="0"
 | 
			
		||||
				CallingConvention="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				SuppressStartupBanner="true"
 | 
			
		||||
				AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
 | 
			
		||||
				GenerateDebugInformation="false"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				RandomizedBaseAddress="1"
 | 
			
		||||
				DataExecutionPrevention="0"
 | 
			
		||||
				TargetMachine="1"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCALinkTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManifestTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXDCMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCBscMakeTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCFxCopTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAppVerifierTool"
 | 
			
		||||
			/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"
 | 
			
		||||
			/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<File
 | 
			
		||||
			RelativePath=".\main.cpp"
 | 
			
		||||
			>
 | 
			
		||||
		</File>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
@@ -1,324 +0,0 @@
 | 
			
		||||
// !$*UTF8*$!
 | 
			
		||||
{
 | 
			
		||||
	archiveVersion = 1;
 | 
			
		||||
	classes = {
 | 
			
		||||
	};
 | 
			
		||||
	objectVersion = 46;
 | 
			
		||||
	objects = {
 | 
			
		||||
 | 
			
		||||
/* Begin PBXBuildFile section */
 | 
			
		||||
		5E34CC751B7F8EEF00F212E8 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E34CC741B7F8EEF00F212E8 /* main.cpp */; };
 | 
			
		||||
		5E8570B61B7F9A3200B267D2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B01B7F99F500B267D2 /* Cocoa.framework */; };
 | 
			
		||||
		5E8570B71B7F9A3200B267D2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B41B7F9A0700B267D2 /* IOKit.framework */; };
 | 
			
		||||
		5E8570B81B7F9A3200B267D2 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E8570B21B7F99FE00B267D2 /* OpenGL.framework */; };
 | 
			
		||||
		5E8570BF1B7F9D3A00B267D2 /* media in Resources */ = {isa = PBXBuildFile; fileRef = 5E8570BE1B7F9D3A00B267D2 /* media */; };
 | 
			
		||||
		5E8571181B7FBE8D00B267D2 /* libIrrlicht.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E34CC781B7F90A000F212E8 /* libIrrlicht.a */; };
 | 
			
		||||
/* End PBXBuildFile section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFileReference section */
 | 
			
		||||
		5E34CC511B7F8E6E00F212E8 /* 25.XmlHandling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 25.XmlHandling.app; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
			
		||||
		5E34CC741B7F8EEF00F212E8 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
 | 
			
		||||
		5E34CC781B7F90A000F212E8 /* libIrrlicht.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libIrrlicht.a; path = ../../lib/OSX/libIrrlicht.a; sourceTree = "<group>"; };
 | 
			
		||||
		5E8570B01B7F99F500B267D2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570B21B7F99FE00B267D2 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570B41B7F9A0700B267D2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
 | 
			
		||||
		5E8570BE1B7F9D3A00B267D2 /* media */ = {isa = PBXFileReference; lastKnownFileType = folder; name = media; path = ../../media; sourceTree = "<group>"; };
 | 
			
		||||
/* End PBXFileReference section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXFrameworksBuildPhase section */
 | 
			
		||||
		5E34CC4E1B7F8E6E00F212E8 /* Frameworks */ = {
 | 
			
		||||
			isa = PBXFrameworksBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E8570B61B7F9A3200B267D2 /* Cocoa.framework in Frameworks */,
 | 
			
		||||
				5E8570B71B7F9A3200B267D2 /* IOKit.framework in Frameworks */,
 | 
			
		||||
				5E8570B81B7F9A3200B267D2 /* OpenGL.framework in Frameworks */,
 | 
			
		||||
				5E8571181B7FBE8D00B267D2 /* libIrrlicht.a in Frameworks */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXFrameworksBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXGroup section */
 | 
			
		||||
		5E34C6D81B7F4A0C00F212E8 = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E34CC741B7F8EEF00F212E8 /* main.cpp */,
 | 
			
		||||
				5E34CC761B7F905600F212E8 /* Libraries */,
 | 
			
		||||
				5E34CC521B7F8E6E00F212E8 /* Products */,
 | 
			
		||||
				5E34CC771B7F906D00F212E8 /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC521B7F8E6E00F212E8 /* Products */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E34CC511B7F8E6E00F212E8 /* 25.XmlHandling.app */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Products;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC761B7F905600F212E8 /* Libraries */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E8570B01B7F99F500B267D2 /* Cocoa.framework */,
 | 
			
		||||
				5E8570B41B7F9A0700B267D2 /* IOKit.framework */,
 | 
			
		||||
				5E8570B21B7F99FE00B267D2 /* OpenGL.framework */,
 | 
			
		||||
				5E34CC781B7F90A000F212E8 /* libIrrlicht.a */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Libraries;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC771B7F906D00F212E8 /* Resources */ = {
 | 
			
		||||
			isa = PBXGroup;
 | 
			
		||||
			children = (
 | 
			
		||||
				5E8570BE1B7F9D3A00B267D2 /* media */,
 | 
			
		||||
			);
 | 
			
		||||
			name = Resources;
 | 
			
		||||
			sourceTree = "<group>";
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXGroup section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXNativeTarget section */
 | 
			
		||||
		5E34CC501B7F8E6E00F212E8 /* 25.XmlHandling */ = {
 | 
			
		||||
			isa = PBXNativeTarget;
 | 
			
		||||
			buildConfigurationList = 5E34CC701B7F8E6E00F212E8 /* Build configuration list for PBXNativeTarget "25.XmlHandling" */;
 | 
			
		||||
			buildPhases = (
 | 
			
		||||
				5E34CC4D1B7F8E6E00F212E8 /* Sources */,
 | 
			
		||||
				5E34CC4E1B7F8E6E00F212E8 /* Frameworks */,
 | 
			
		||||
				5E34CC4F1B7F8E6E00F212E8 /* Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			buildRules = (
 | 
			
		||||
			);
 | 
			
		||||
			dependencies = (
 | 
			
		||||
			);
 | 
			
		||||
			name = 25.XmlHandling;
 | 
			
		||||
			productName = 01.HelloWorld;
 | 
			
		||||
			productReference = 5E34CC511B7F8E6E00F212E8 /* 25.XmlHandling.app */;
 | 
			
		||||
			productType = "com.apple.product-type.application";
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXNativeTarget section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXProject section */
 | 
			
		||||
		5E34C6D91B7F4A0C00F212E8 /* Project object */ = {
 | 
			
		||||
			isa = PBXProject;
 | 
			
		||||
			attributes = {
 | 
			
		||||
				LastUpgradeCheck = 0830;
 | 
			
		||||
				TargetAttributes = {
 | 
			
		||||
					5E34CC501B7F8E6E00F212E8 = {
 | 
			
		||||
						CreatedOnToolsVersion = 6.1;
 | 
			
		||||
					};
 | 
			
		||||
				};
 | 
			
		||||
			};
 | 
			
		||||
			buildConfigurationList = 5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "XmlHandling" */;
 | 
			
		||||
			compatibilityVersion = "Xcode 3.2";
 | 
			
		||||
			developmentRegion = English;
 | 
			
		||||
			hasScannedForEncodings = 0;
 | 
			
		||||
			knownRegions = (
 | 
			
		||||
				en,
 | 
			
		||||
				Base,
 | 
			
		||||
			);
 | 
			
		||||
			mainGroup = 5E34C6D81B7F4A0C00F212E8;
 | 
			
		||||
			productRefGroup = 5E34CC521B7F8E6E00F212E8 /* Products */;
 | 
			
		||||
			projectDirPath = "";
 | 
			
		||||
			projectRoot = "";
 | 
			
		||||
			targets = (
 | 
			
		||||
				5E34CC501B7F8E6E00F212E8 /* 25.XmlHandling */,
 | 
			
		||||
			);
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXProject section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXResourcesBuildPhase section */
 | 
			
		||||
		5E34CC4F1B7F8E6E00F212E8 /* Resources */ = {
 | 
			
		||||
			isa = PBXResourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E8570BF1B7F9D3A00B267D2 /* media in Resources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXResourcesBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin PBXSourcesBuildPhase section */
 | 
			
		||||
		5E34CC4D1B7F8E6E00F212E8 /* Sources */ = {
 | 
			
		||||
			isa = PBXSourcesBuildPhase;
 | 
			
		||||
			buildActionMask = 2147483647;
 | 
			
		||||
			files = (
 | 
			
		||||
				5E34CC751B7F8EEF00F212E8 /* main.cpp in Sources */,
 | 
			
		||||
			);
 | 
			
		||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
			
		||||
		};
 | 
			
		||||
/* End PBXSourcesBuildPhase section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCBuildConfiguration section */
 | 
			
		||||
		5E34C6DD1B7F4A0C00F212E8 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 | 
			
		||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				ENABLE_TESTABILITY = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = c11;
 | 
			
		||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				MACOSX_DEPLOYMENT_TARGET = 10.9;
 | 
			
		||||
				ONLY_ACTIVE_ARCH = YES;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		5E34C6DE1B7F4A0C00F212E8 /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 | 
			
		||||
				CLANG_CXX_LIBRARY = "libc++";
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INFINITE_RECURSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_C_LANGUAGE_STANDARD = c11;
 | 
			
		||||
				GCC_NO_COMMON_BLOCKS = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				MACOSX_DEPLOYMENT_TARGET = 10.9;
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC6C1B7F8E6E00F212E8 /* Debug */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				CODE_SIGN_IDENTITY = "-";
 | 
			
		||||
				COMBINE_HIDPI_IMAGES = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = NO;
 | 
			
		||||
				DEPLOYMENT_LOCATION = YES;
 | 
			
		||||
				DSTROOT = "$(SRCROOT)/../../bin/OSX";
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_DYNAMIC_NO_PIC = NO;
 | 
			
		||||
				GCC_OPTIMIZATION_LEVEL = 0;
 | 
			
		||||
				GCC_PREPROCESSOR_DEFINITIONS = (
 | 
			
		||||
					"DEBUG=1",
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
				);
 | 
			
		||||
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				HEADER_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
 | 
			
		||||
					"$(SRCROOT)/../../include",
 | 
			
		||||
				);
 | 
			
		||||
				INFOPLIST_FILE = "$(SRCROOT)/../../media/info_osx.plist";
 | 
			
		||||
				INSTALL_PATH = /;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX";
 | 
			
		||||
				MTL_ENABLE_DEBUG_INFO = YES;
 | 
			
		||||
				ONLY_ACTIVE_ARCH = YES;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
			};
 | 
			
		||||
			name = Debug;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC6D1B7F8E6E00F212E8 /* Release */ = {
 | 
			
		||||
			isa = XCBuildConfiguration;
 | 
			
		||||
			buildSettings = {
 | 
			
		||||
				ALWAYS_SEARCH_USER_PATHS = NO;
 | 
			
		||||
				CLANG_WARN_BOOL_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_CONSTANT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_EMPTY_BODY = YES;
 | 
			
		||||
				CLANG_WARN_ENUM_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_INT_CONVERSION = YES;
 | 
			
		||||
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
 | 
			
		||||
				CLANG_WARN_UNREACHABLE_CODE = YES;
 | 
			
		||||
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 | 
			
		||||
				CODE_SIGN_IDENTITY = "-";
 | 
			
		||||
				COMBINE_HIDPI_IMAGES = YES;
 | 
			
		||||
				COPY_PHASE_STRIP = YES;
 | 
			
		||||
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 | 
			
		||||
				DEPLOYMENT_LOCATION = YES;
 | 
			
		||||
				DSTROOT = "$(SRCROOT)/../../bin/OSX";
 | 
			
		||||
				ENABLE_NS_ASSERTIONS = NO;
 | 
			
		||||
				ENABLE_STRICT_OBJC_MSGSEND = YES;
 | 
			
		||||
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 | 
			
		||||
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
 | 
			
		||||
				GCC_WARN_UNDECLARED_SELECTOR = YES;
 | 
			
		||||
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 | 
			
		||||
				GCC_WARN_UNUSED_FUNCTION = YES;
 | 
			
		||||
				GCC_WARN_UNUSED_VARIABLE = YES;
 | 
			
		||||
				HEADER_SEARCH_PATHS = (
 | 
			
		||||
					"$(inherited)",
 | 
			
		||||
					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
 | 
			
		||||
					"$(SRCROOT)/../../include",
 | 
			
		||||
				);
 | 
			
		||||
				INFOPLIST_FILE = "$(SRCROOT)/../../media/info_osx.plist";
 | 
			
		||||
				INSTALL_PATH = /;
 | 
			
		||||
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
 | 
			
		||||
				LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../../lib/OSX";
 | 
			
		||||
				MTL_ENABLE_DEBUG_INFO = NO;
 | 
			
		||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
			
		||||
				SDKROOT = macosx;
 | 
			
		||||
			};
 | 
			
		||||
			name = Release;
 | 
			
		||||
		};
 | 
			
		||||
/* End XCBuildConfiguration section */
 | 
			
		||||
 | 
			
		||||
/* Begin XCConfigurationList section */
 | 
			
		||||
		5E34C6DC1B7F4A0C00F212E8 /* Build configuration list for PBXProject "XmlHandling" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				5E34C6DD1B7F4A0C00F212E8 /* Debug */,
 | 
			
		||||
				5E34C6DE1B7F4A0C00F212E8 /* Release */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
		5E34CC701B7F8E6E00F212E8 /* Build configuration list for PBXNativeTarget "25.XmlHandling" */ = {
 | 
			
		||||
			isa = XCConfigurationList;
 | 
			
		||||
			buildConfigurations = (
 | 
			
		||||
				5E34CC6C1B7F8E6E00F212E8 /* Debug */,
 | 
			
		||||
				5E34CC6D1B7F8E6E00F212E8 /* Release */,
 | 
			
		||||
			);
 | 
			
		||||
			defaultConfigurationIsVisible = 0;
 | 
			
		||||
			defaultConfigurationName = Release;
 | 
			
		||||
		};
 | 
			
		||||
/* End XCConfigurationList section */
 | 
			
		||||
	};
 | 
			
		||||
	rootObject = 5E34C6D91B7F4A0C00F212E8 /* Project object */;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<Scheme
 | 
			
		||||
   LastUpgradeVersion = "0830"
 | 
			
		||||
   version = "1.3">
 | 
			
		||||
   <BuildAction
 | 
			
		||||
      parallelizeBuildables = "YES"
 | 
			
		||||
      buildImplicitDependencies = "YES">
 | 
			
		||||
      <BuildActionEntries>
 | 
			
		||||
         <BuildActionEntry
 | 
			
		||||
            buildForTesting = "YES"
 | 
			
		||||
            buildForRunning = "YES"
 | 
			
		||||
            buildForProfiling = "YES"
 | 
			
		||||
            buildForArchiving = "YES"
 | 
			
		||||
            buildForAnalyzing = "YES">
 | 
			
		||||
            <BuildableReference
 | 
			
		||||
               BuildableIdentifier = "primary"
 | 
			
		||||
               BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
               BuildableName = "25.XmlHandling.app"
 | 
			
		||||
               BlueprintName = "25.XmlHandling"
 | 
			
		||||
               ReferencedContainer = "container:XmlHandling.xcodeproj">
 | 
			
		||||
            </BuildableReference>
 | 
			
		||||
         </BuildActionEntry>
 | 
			
		||||
      </BuildActionEntries>
 | 
			
		||||
   </BuildAction>
 | 
			
		||||
   <TestAction
 | 
			
		||||
      buildConfiguration = "Debug"
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES">
 | 
			
		||||
      <Testables>
 | 
			
		||||
      </Testables>
 | 
			
		||||
      <MacroExpansion>
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "25.XmlHandling.app"
 | 
			
		||||
            BlueprintName = "25.XmlHandling"
 | 
			
		||||
            ReferencedContainer = "container:XmlHandling.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </MacroExpansion>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </TestAction>
 | 
			
		||||
   <LaunchAction
 | 
			
		||||
      buildConfiguration = "Debug"
 | 
			
		||||
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
 | 
			
		||||
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
 | 
			
		||||
      launchStyle = "0"
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      ignoresPersistentStateOnLaunch = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES"
 | 
			
		||||
      debugServiceExtension = "internal"
 | 
			
		||||
      allowLocationSimulation = "YES">
 | 
			
		||||
      <BuildableProductRunnable
 | 
			
		||||
         runnableDebuggingMode = "0">
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "25.XmlHandling.app"
 | 
			
		||||
            BlueprintName = "25.XmlHandling"
 | 
			
		||||
            ReferencedContainer = "container:XmlHandling.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
      <AdditionalOptions>
 | 
			
		||||
      </AdditionalOptions>
 | 
			
		||||
   </LaunchAction>
 | 
			
		||||
   <ProfileAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      shouldUseLaunchSchemeArgsEnv = "YES"
 | 
			
		||||
      savedToolIdentifier = ""
 | 
			
		||||
      useCustomWorkingDirectory = "NO"
 | 
			
		||||
      debugDocumentVersioning = "YES">
 | 
			
		||||
      <BuildableProductRunnable
 | 
			
		||||
         runnableDebuggingMode = "0">
 | 
			
		||||
         <BuildableReference
 | 
			
		||||
            BuildableIdentifier = "primary"
 | 
			
		||||
            BlueprintIdentifier = "5E34CC501B7F8E6E00F212E8"
 | 
			
		||||
            BuildableName = "25.XmlHandling.app"
 | 
			
		||||
            BlueprintName = "25.XmlHandling"
 | 
			
		||||
            ReferencedContainer = "container:XmlHandling.xcodeproj">
 | 
			
		||||
         </BuildableReference>
 | 
			
		||||
      </BuildableProductRunnable>
 | 
			
		||||
   </ProfileAction>
 | 
			
		||||
   <AnalyzeAction
 | 
			
		||||
      buildConfiguration = "Debug">
 | 
			
		||||
   </AnalyzeAction>
 | 
			
		||||
   <ArchiveAction
 | 
			
		||||
      buildConfiguration = "Release"
 | 
			
		||||
      revealArchiveInOrganizer = "YES">
 | 
			
		||||
   </ArchiveAction>
 | 
			
		||||
</Scheme>
 | 
			
		||||
@@ -1,182 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>25.XmlHandling</ProjectName>
 | 
			
		||||
    <ProjectGuid>{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>25.XmlHandling</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,182 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>25.XmlHandling</ProjectName>
 | 
			
		||||
    <ProjectGuid>{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>25.XmlHandling</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,182 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>25.XmlHandling</ProjectName>
 | 
			
		||||
    <ProjectGuid>{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>25.XmlHandling</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>Windows7.1SDK</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,182 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <ItemGroup Label="ProjectConfigurations">
 | 
			
		||||
    <ProjectConfiguration Include="Debug|Win32">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Debug|x64">
 | 
			
		||||
      <Configuration>Debug</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|Win32">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>Win32</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
    <ProjectConfiguration Include="Release|x64">
 | 
			
		||||
      <Configuration>Release</Configuration>
 | 
			
		||||
      <Platform>x64</Platform>
 | 
			
		||||
    </ProjectConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <PropertyGroup Label="Globals">
 | 
			
		||||
    <ProjectName>25.XmlHandling</ProjectName>
 | 
			
		||||
    <ProjectGuid>{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}</ProjectGuid>
 | 
			
		||||
    <RootNamespace>25.XmlHandling</RootNamespace>
 | 
			
		||||
    <Keyword>Win32Proj</Keyword>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 | 
			
		||||
    <ConfigurationType>Application</ConfigurationType>
 | 
			
		||||
    <CharacterSet>MultiByte</CharacterSet>
 | 
			
		||||
    <PlatformToolset>v140</PlatformToolset>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 | 
			
		||||
  <ImportGroup Label="ExtensionSettings">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 | 
			
		||||
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 | 
			
		||||
    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
  <PropertyGroup Label="UserMacros" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\bin\Win32-VisualStudio\</OutDir>
 | 
			
		||||
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\bin\Win64-VisualStudio\</OutDir>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
 | 
			
		||||
    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <MinimalRebuild>true</MinimalRebuild>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <Optimization>Disabled</Optimization>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 | 
			
		||||
      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>true</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 | 
			
		||||
    <ClCompile>
 | 
			
		||||
      <IntrinsicFunctions>true</IntrinsicFunctions>
 | 
			
		||||
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
 | 
			
		||||
      <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 | 
			
		||||
      <PreprocessorDefinitions>WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 | 
			
		||||
      <ExceptionHandling>false</ExceptionHandling>
 | 
			
		||||
      <PrecompiledHeader>
 | 
			
		||||
      </PrecompiledHeader>
 | 
			
		||||
      <WarningLevel>Level3</WarningLevel>
 | 
			
		||||
      <DebugInformationFormat>
 | 
			
		||||
      </DebugInformationFormat>
 | 
			
		||||
      <CallingConvention>Cdecl</CallingConvention>
 | 
			
		||||
    </ClCompile>
 | 
			
		||||
    <Link>
 | 
			
		||||
      <AdditionalLibraryDirectories>..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
 | 
			
		||||
      <GenerateDebugInformation>false</GenerateDebugInformation>
 | 
			
		||||
      <SubSystem>Console</SubSystem>
 | 
			
		||||
      <OptimizeReferences>true</OptimizeReferences>
 | 
			
		||||
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 | 
			
		||||
      <DataExecutionPrevention>
 | 
			
		||||
      </DataExecutionPrevention>
 | 
			
		||||
    </Link>
 | 
			
		||||
  </ItemDefinitionGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ClCompile Include="main.cpp" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 | 
			
		||||
  <ImportGroup Label="ExtensionTargets">
 | 
			
		||||
  </ImportGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
@@ -1,510 +0,0 @@
 | 
			
		||||
/** Example 025 Xml Handling
 | 
			
		||||
 | 
			
		||||
Demonstrates loading and saving of configurations via XML
 | 
			
		||||
 | 
			
		||||
@author Y.M. Bosman	\<yoran.bosman@gmail.com\>
 | 
			
		||||
 | 
			
		||||
This demo features a fully usable system for configuration handling. The code
 | 
			
		||||
can easily be integrated into own apps.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <irrlicht.h>
 | 
			
		||||
#include "exampleHelper.h"
 | 
			
		||||
 | 
			
		||||
using namespace irr;
 | 
			
		||||
using namespace core;
 | 
			
		||||
using namespace scene;
 | 
			
		||||
using namespace video;
 | 
			
		||||
using namespace io;
 | 
			
		||||
using namespace gui;
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
#pragma comment(lib, "Irrlicht.lib")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* SettingManager class.
 | 
			
		||||
 | 
			
		||||
This class loads and writes the settings and manages the options.
 | 
			
		||||
 | 
			
		||||
The class makes use of irrMap which is a an associative arrays using a
 | 
			
		||||
red-black tree it allows easy mapping of a key to a value, along the way there
 | 
			
		||||
is some information on how to use it.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
class SettingManager
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	// Construct setting managers and set default settings
 | 
			
		||||
	SettingManager(const stringw& settings_file): SettingsFile(settings_file), NullDevice(0)
 | 
			
		||||
	{
 | 
			
		||||
		// Irrlicht null device, we want to load settings before we actually created our device, therefore, nulldevice
 | 
			
		||||
		NullDevice = irr::createDevice(irr::video::EDT_NULL);
 | 
			
		||||
 | 
			
		||||
		//DriverOptions is an irrlicht map,
 | 
			
		||||
		//we can insert values in the map in two ways by calling insert(key,value) or by using the [key] operator
 | 
			
		||||
		//the [] operator overrides values if they already exist
 | 
			
		||||
		DriverOptions.insert(L"Software", EDT_SOFTWARE);
 | 
			
		||||
		DriverOptions.insert(L"OpenGL", EDT_OPENGL);
 | 
			
		||||
		DriverOptions.insert(L"Direct3D9", EDT_DIRECT3D9);
 | 
			
		||||
 | 
			
		||||
		//some resolution options
 | 
			
		||||
		ResolutionOptions.insert(L"640x480", dimension2du(640,480));
 | 
			
		||||
		ResolutionOptions.insert(L"800x600", dimension2du(800,600));
 | 
			
		||||
		ResolutionOptions.insert(L"1024x768", dimension2du(1024,768));
 | 
			
		||||
 | 
			
		||||
		//our preferred defaults
 | 
			
		||||
		SettingMap.insert(L"driver", L"Direct3D9");
 | 
			
		||||
		SettingMap.insert(L"resolution", L"640x480");
 | 
			
		||||
		SettingMap.insert(L"fullscreen", L"0"); //0 is false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Destructor, you could store settings automatically on exit of your
 | 
			
		||||
	// application if you wanted to in our case we simply drop the
 | 
			
		||||
	// nulldevice
 | 
			
		||||
	~SettingManager()
 | 
			
		||||
	{
 | 
			
		||||
		if (NullDevice)
 | 
			
		||||
		{
 | 
			
		||||
			NullDevice->closeDevice();
 | 
			
		||||
			NullDevice->drop();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	Load xml from disk, overwrite default settings
 | 
			
		||||
	The xml we are trying to load has the following structure
 | 
			
		||||
	settings nested in sections nested in the root node, like so
 | 
			
		||||
	<pre>
 | 
			
		||||
		<?xml version="1.0"?>
 | 
			
		||||
		<mygame>
 | 
			
		||||
			<video>
 | 
			
		||||
				<setting name="driver" value="Direct3D9" />
 | 
			
		||||
				<setting name="fullscreen" value="0" />
 | 
			
		||||
				<setting name="resolution" value="1024x768" />
 | 
			
		||||
			</video>
 | 
			
		||||
		</mygame>
 | 
			
		||||
	</pre>
 | 
			
		||||
	*/
 | 
			
		||||
	bool load()
 | 
			
		||||
	{
 | 
			
		||||
		//if not able to create device don't attempt to load
 | 
			
		||||
		if (!NullDevice)
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		irr::io::IXMLReader* xml = NullDevice->getFileSystem()->createXMLReader(SettingsFile);	//create xml reader
 | 
			
		||||
		if (!xml)
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		const stringw settingTag(L"setting"); //we'll be looking for this tag in the xml
 | 
			
		||||
		stringw currentSection; //keep track of our current section
 | 
			
		||||
		const stringw videoTag(L"video"); //constant for videotag
 | 
			
		||||
 | 
			
		||||
		//while there is more to read
 | 
			
		||||
		while (xml->read())
 | 
			
		||||
		{
 | 
			
		||||
			//check the node type
 | 
			
		||||
			switch (xml->getNodeType())
 | 
			
		||||
			{
 | 
			
		||||
				//we found a new element
 | 
			
		||||
				case irr::io::EXN_ELEMENT:
 | 
			
		||||
				{
 | 
			
		||||
					//we currently are in the empty or mygame section and find the video tag so we set our current section to video
 | 
			
		||||
					if (currentSection.empty() && videoTag.equals_ignore_case(xml->getNodeName()))
 | 
			
		||||
					{
 | 
			
		||||
						currentSection = videoTag;
 | 
			
		||||
					}
 | 
			
		||||
					//we are in the video section and we find a setting to parse
 | 
			
		||||
					else if (currentSection.equals_ignore_case(videoTag) && settingTag.equals_ignore_case(xml->getNodeName() ))
 | 
			
		||||
					{
 | 
			
		||||
						//read in the key
 | 
			
		||||
						stringw key = xml->getAttributeValueSafe(L"name");
 | 
			
		||||
						//if there actually is a key to set
 | 
			
		||||
						if (!key.empty())
 | 
			
		||||
						{
 | 
			
		||||
							//set the setting in the map to the value,
 | 
			
		||||
							//the [] operator overrides values if they already exist or inserts a new key value
 | 
			
		||||
							//pair into the settings map if it was not defined yet
 | 
			
		||||
							SettingMap[key] = xml->getAttributeValueSafe(L"value");
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					//..
 | 
			
		||||
					// You can add your own sections and tags to read in here
 | 
			
		||||
					//..
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
				//we found the end of an element
 | 
			
		||||
				case irr::io::EXN_ELEMENT_END:
 | 
			
		||||
					//we were at the end of the video section so we reset our tag
 | 
			
		||||
					currentSection=L"";
 | 
			
		||||
				break;
 | 
			
		||||
				default:
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// don't forget to delete the xml reader
 | 
			
		||||
		xml->drop();
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Save the xml to disk. We use the nulldevice.
 | 
			
		||||
	bool save()
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
		//if not able to create device don't attempt to save
 | 
			
		||||
		if (!NullDevice)
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		//create xml writer
 | 
			
		||||
		irr::io::IXMLWriter* xwriter = NullDevice->getFileSystem()->createXMLWriter( SettingsFile );
 | 
			
		||||
		if (!xwriter)
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		//write out the obligatory xml header. Each xml-file needs to have exactly one of those.
 | 
			
		||||
		xwriter->writeXMLHeader();
 | 
			
		||||
 | 
			
		||||
		//start element	mygame, you replace the label "mygame" with anything you want
 | 
			
		||||
		xwriter->writeElement(L"mygame");
 | 
			
		||||
		xwriter->writeLineBreak();					//new line
 | 
			
		||||
 | 
			
		||||
		//start section with video settings
 | 
			
		||||
		xwriter->writeElement(L"video");
 | 
			
		||||
		xwriter->writeLineBreak();					//new line
 | 
			
		||||
 | 
			
		||||
		// getIterator gets us a pointer to the first node of the settings map
 | 
			
		||||
		// every iteration we increase the iterator which gives us the next map node
 | 
			
		||||
		// until we reach the end we write settings one by one by using the nodes key and value functions
 | 
			
		||||
		map<stringw, stringw>::Iterator i = SettingMap.getIterator();
 | 
			
		||||
		for(; !i.atEnd(); i++)
 | 
			
		||||
		{
 | 
			
		||||
			//write element as <setting name="key" value="x" />
 | 
			
		||||
			//the second parameter indicates this is an empty element with no children, just attributes
 | 
			
		||||
			xwriter->writeElement(L"setting",true, L"name", i->getKey().c_str(), L"value",i->getValue().c_str() );
 | 
			
		||||
			xwriter->writeLineBreak();
 | 
			
		||||
		}
 | 
			
		||||
		xwriter->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
		//close video section
 | 
			
		||||
		xwriter->writeClosingTag(L"video");
 | 
			
		||||
		xwriter->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
		//..
 | 
			
		||||
		// You can add writing sound settings, savegame information etc
 | 
			
		||||
		//..
 | 
			
		||||
 | 
			
		||||
		//close mygame section
 | 
			
		||||
		xwriter->writeClosingTag(L"mygame");
 | 
			
		||||
 | 
			
		||||
		//delete xml writer
 | 
			
		||||
		xwriter->drop();
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Set setting in our manager
 | 
			
		||||
	void setSetting(const stringw& name, const stringw& value)
 | 
			
		||||
	{
 | 
			
		||||
		SettingMap[name]=value;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// set setting overload to quickly assign integers to our setting map
 | 
			
		||||
	void setSetting(const stringw& name, s32 value)
 | 
			
		||||
	{
 | 
			
		||||
		SettingMap[name]=stringw(value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Get setting as string
 | 
			
		||||
	stringw getSetting(const stringw& key) const
 | 
			
		||||
	{
 | 
			
		||||
		//the find function or irrmap returns a pointer to a map Node
 | 
			
		||||
		//if the key can be found, otherwise it returns null
 | 
			
		||||
		//the map node has the function getValue and getKey, as we already know the key, we return node->getValue()
 | 
			
		||||
		map<stringw, stringw>::Node* n = SettingMap.find(key);
 | 
			
		||||
		if (n)
 | 
			
		||||
			return n->getValue();
 | 
			
		||||
		else
 | 
			
		||||
			return L"";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//
 | 
			
		||||
	bool getSettingAsBoolean(const stringw& key ) const
 | 
			
		||||
	{
 | 
			
		||||
		stringw s = getSetting(key);
 | 
			
		||||
		if (s.empty())
 | 
			
		||||
			return false;
 | 
			
		||||
		return s.equals_ignore_case(L"1");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//
 | 
			
		||||
	s32 getSettingAsInteger(const stringw& key) const
 | 
			
		||||
	{
 | 
			
		||||
		//we implicitly cast to string instead of stringw because strtol10 does not accept wide strings
 | 
			
		||||
		const stringc s = getSetting(key);
 | 
			
		||||
		if (s.empty())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return strtol10(s.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	map<stringw, s32> DriverOptions; //available options for driver config
 | 
			
		||||
	map<stringw, dimension2du> ResolutionOptions; //available options for resolution config
 | 
			
		||||
private:
 | 
			
		||||
	SettingManager(const SettingManager& other); // defined but not implemented
 | 
			
		||||
	SettingManager& operator=(const SettingManager& other); // defined but not implemented
 | 
			
		||||
 | 
			
		||||
	map<stringw, stringw> SettingMap; //current config
 | 
			
		||||
 | 
			
		||||
	stringw SettingsFile; // location of the xml, usually the
 | 
			
		||||
	irr::IrrlichtDevice* NullDevice;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Application context for global variables
 | 
			
		||||
*/
 | 
			
		||||
struct SAppContext
 | 
			
		||||
{
 | 
			
		||||
	SAppContext()
 | 
			
		||||
		: Device(0),Gui(0), Driver(0), Settings(0), ShouldQuit(false),
 | 
			
		||||
		ButtonSave(0), ButtonExit(0), ListboxDriver(0),
 | 
			
		||||
		ListboxResolution(0), CheckboxFullscreen(0)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	~SAppContext()
 | 
			
		||||
	{
 | 
			
		||||
		if (Settings)
 | 
			
		||||
			delete Settings;
 | 
			
		||||
 | 
			
		||||
		if (Device)
 | 
			
		||||
		{
 | 
			
		||||
			Device->closeDevice();
 | 
			
		||||
			Device->drop();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	IrrlichtDevice* Device;
 | 
			
		||||
	IGUIEnvironment* Gui;
 | 
			
		||||
	IVideoDriver* Driver;
 | 
			
		||||
	SettingManager* Settings;
 | 
			
		||||
	bool ShouldQuit;
 | 
			
		||||
 | 
			
		||||
	//settings dialog
 | 
			
		||||
	IGUIButton* ButtonSave;
 | 
			
		||||
	IGUIButton* ButtonExit;
 | 
			
		||||
	IGUIListBox* ListboxDriver;
 | 
			
		||||
	IGUIListBox* ListboxResolution;
 | 
			
		||||
	IGUICheckBox* CheckboxFullscreen;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	A typical event receiver.
 | 
			
		||||
*/
 | 
			
		||||
class MyEventReceiver : public IEventReceiver
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	MyEventReceiver(SAppContext & a) : App(a) { }
 | 
			
		||||
 | 
			
		||||
	virtual bool OnEvent(const SEvent& event)
 | 
			
		||||
	{
 | 
			
		||||
		if (event.EventType == EET_GUI_EVENT )
 | 
			
		||||
		{
 | 
			
		||||
			switch ( event.GUIEvent.EventType )
 | 
			
		||||
			{
 | 
			
		||||
				//handle button click events
 | 
			
		||||
				case EGET_BUTTON_CLICKED:
 | 
			
		||||
				{
 | 
			
		||||
					//Our save button was called so we obtain the settings from our dialog and save them
 | 
			
		||||
					if ( event.GUIEvent.Caller == App.ButtonSave )
 | 
			
		||||
					{
 | 
			
		||||
						//if there is a selection write it
 | 
			
		||||
						if ( App.ListboxDriver->getSelected() != -1)
 | 
			
		||||
							App.Settings->setSetting(L"driver",	App.ListboxDriver->getListItem(App.ListboxDriver->getSelected()));
 | 
			
		||||
 | 
			
		||||
						//if there is a selection write it
 | 
			
		||||
						if ( App.ListboxResolution->getSelected() != -1)
 | 
			
		||||
							App.Settings->setSetting(L"resolution", App.ListboxResolution->getListItem(App.ListboxResolution->getSelected()));
 | 
			
		||||
 | 
			
		||||
						App.Settings->setSetting(L"fullscreen",	App.CheckboxFullscreen->isChecked());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
						if (App.Settings->save())
 | 
			
		||||
						{
 | 
			
		||||
							App.Gui->addMessageBox(L"settings save",L"settings saved, please restart for settings to change effect","",true);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					// cancel/exit button clicked, tell the application to exit
 | 
			
		||||
					else if ( event.GUIEvent.Caller == App.ButtonExit)
 | 
			
		||||
					{
 | 
			
		||||
						App.ShouldQuit = true;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
				default:
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	SAppContext & App;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
Function to create a video settings dialog
 | 
			
		||||
This dialog shows the current settings from the configuration xml and allows them to be changed
 | 
			
		||||
*/
 | 
			
		||||
void createSettingsDialog(SAppContext& app)
 | 
			
		||||
{
 | 
			
		||||
	// first get rid of alpha in gui
 | 
			
		||||
	for (irr::s32 i=0; i<irr::gui::EGDC_COUNT ; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		irr::video::SColor col = app.Gui->getSkin()->getColor((irr::gui::EGUI_DEFAULT_COLOR)i);
 | 
			
		||||
		col.setAlpha(255);
 | 
			
		||||
		app.Gui->getSkin()->setColor((irr::gui::EGUI_DEFAULT_COLOR)i, col);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//create video settings windows
 | 
			
		||||
	gui::IGUIWindow* windowSettings = app.Gui->addWindow(rect<s32>(10,10,400,400),true,L"Videosettings");
 | 
			
		||||
	app.Gui->addStaticText (L"Select your desired video settings", rect< s32 >(10,20, 200, 40), false, true, windowSettings);
 | 
			
		||||
 | 
			
		||||
	// add listbox for driver choice
 | 
			
		||||
	app.Gui->addStaticText (L"Driver", rect< s32 >(10,50, 200, 60), false, true, windowSettings);
 | 
			
		||||
	app.ListboxDriver = app.Gui->addListBox(rect<s32>(10,60,220,120), windowSettings, 1,true);
 | 
			
		||||
 | 
			
		||||
	//add all available options to the driver choice listbox
 | 
			
		||||
	map<stringw, s32>::Iterator i = app.Settings->DriverOptions.getIterator();
 | 
			
		||||
	for(; !i.atEnd(); i++)
 | 
			
		||||
		app.ListboxDriver->addItem(i->getKey().c_str());
 | 
			
		||||
 | 
			
		||||
	//set currently selected driver
 | 
			
		||||
	app.ListboxDriver->setSelected(app.Settings->getSetting("driver").c_str());
 | 
			
		||||
 | 
			
		||||
	// add listbox for resolution choice
 | 
			
		||||
	app.Gui->addStaticText (L"Resolution", rect< s32 >(10,130, 200, 140), false, true, windowSettings);
 | 
			
		||||
	app.ListboxResolution = app.Gui->addListBox(rect<s32>(10,140,220,200), windowSettings, 1,true);
 | 
			
		||||
 | 
			
		||||
	//add all available options to the resolution listbox
 | 
			
		||||
	map<stringw, dimension2du>::Iterator ri = app.Settings->ResolutionOptions.getIterator();
 | 
			
		||||
	for(; !ri.atEnd(); ri++)
 | 
			
		||||
		app.ListboxResolution->addItem(ri->getKey().c_str());
 | 
			
		||||
 | 
			
		||||
	//set currently selected resolution
 | 
			
		||||
	app.ListboxResolution->setSelected(app.Settings->getSetting("resolution").c_str());
 | 
			
		||||
 | 
			
		||||
	//add checkbox to toggle fullscreen, initially set to loaded setting
 | 
			
		||||
	app.CheckboxFullscreen = app.Gui->addCheckBox(
 | 
			
		||||
			app.Settings->getSettingAsBoolean("fullscreen"),
 | 
			
		||||
			rect<s32>(10,220,220,240), windowSettings, -1,
 | 
			
		||||
			L"Fullscreen");
 | 
			
		||||
 | 
			
		||||
	//last but not least add save button
 | 
			
		||||
	app.ButtonSave = app.Gui->addButton(
 | 
			
		||||
			rect<s32>(80,250,150,270), windowSettings, 2,
 | 
			
		||||
			L"Save video settings");
 | 
			
		||||
 | 
			
		||||
	//exit/cancel button
 | 
			
		||||
	app.ButtonExit = app.Gui->addButton(
 | 
			
		||||
			rect<s32>(160,250,240,270), windowSettings, 2,
 | 
			
		||||
			L"Cancel and exit");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
The main function. Creates all objects and does the XML handling.
 | 
			
		||||
*/
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
	//create new application context
 | 
			
		||||
	SAppContext app;
 | 
			
		||||
 | 
			
		||||
	//create device creation parameters that can get overwritten by our settings file
 | 
			
		||||
	SIrrlichtCreationParameters param;
 | 
			
		||||
	param.DriverType = EDT_SOFTWARE;
 | 
			
		||||
	param.WindowSize.set(640,480);
 | 
			
		||||
 | 
			
		||||
	// Try to load config.
 | 
			
		||||
	// I leave it as an exercise of the reader to store the configuration in the local application data folder,
 | 
			
		||||
	// the only logical place to store config data for games. For all other operating systems I redirect to your manuals
 | 
			
		||||
	app.Settings = new SettingManager(getExampleMediaPath() + "settings.xml");
 | 
			
		||||
	if ( !app.Settings->load() )
 | 
			
		||||
	{
 | 
			
		||||
		// ...
 | 
			
		||||
		// Here add your own exception handling, for now we continue because there are defaults set in SettingManager constructor
 | 
			
		||||
		// ...
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		//settings xml loaded from disk,
 | 
			
		||||
 | 
			
		||||
		//map driversetting to driver type and test if the setting is valid
 | 
			
		||||
		//the DriverOptions map contains string representations mapped to to irrlicht E_DRIVER_TYPE enum
 | 
			
		||||
		//e.g "direct3d9" will become 4
 | 
			
		||||
		//see DriverOptions in the settingmanager class for details
 | 
			
		||||
		map<stringw, s32>::Node* driver = app.Settings->DriverOptions.find( app.Settings->getSetting("driver") );
 | 
			
		||||
 | 
			
		||||
		if (driver)
 | 
			
		||||
		{
 | 
			
		||||
			if ( irr::IrrlichtDevice::isDriverSupported( static_cast<E_DRIVER_TYPE>( driver->getValue() )))
 | 
			
		||||
			{
 | 
			
		||||
				// selected driver is supported, so we use it.
 | 
			
		||||
				param.DriverType = static_cast<E_DRIVER_TYPE>( driver->getValue());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//map resolution setting to dimension in a similar way as demonstrated above
 | 
			
		||||
		map<stringw, dimension2du>::Node* res = app.Settings->ResolutionOptions.find( app.Settings->getSetting("resolution") );
 | 
			
		||||
		if (res)
 | 
			
		||||
		{
 | 
			
		||||
			param.WindowSize = res->getValue();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//get fullscreen setting from config
 | 
			
		||||
		param.Fullscreen = app.Settings->getSettingAsBoolean("fullscreen");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//create the irrlicht device using the settings
 | 
			
		||||
	app.Device = createDeviceEx(param);
 | 
			
		||||
	if (app.Device == 0)
 | 
			
		||||
	{
 | 
			
		||||
		// You can add your own exception handling on driver failure
 | 
			
		||||
		exit(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	app.Device->setWindowCaption(L"Xmlhandling - Irrlicht engine tutorial");
 | 
			
		||||
	app.Driver	= app.Device->getVideoDriver();
 | 
			
		||||
	app.Gui		= app.Device->getGUIEnvironment();
 | 
			
		||||
 | 
			
		||||
	createSettingsDialog(app);
 | 
			
		||||
 | 
			
		||||
	//set event receiver so we can respond to gui events
 | 
			
		||||
	MyEventReceiver receiver(app);
 | 
			
		||||
	app.Device->setEventReceiver(&receiver);
 | 
			
		||||
 | 
			
		||||
	//enter main loop
 | 
			
		||||
	while (!app.ShouldQuit && app.Device->run())
 | 
			
		||||
	{
 | 
			
		||||
		if (app.Device->isWindowActive())
 | 
			
		||||
		{
 | 
			
		||||
			app.Driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, SColor(0,200,200,200));
 | 
			
		||||
			app.Gui->drawAll();
 | 
			
		||||
			app.Driver->endScene();
 | 
			
		||||
		}
 | 
			
		||||
		app.Device->sleep(10);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//app destroys device in destructor
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
**/
 | 
			
		||||
@@ -13,7 +13,6 @@ set(IRREXAMPLES
 | 
			
		||||
	11.PerPixelLighting
 | 
			
		||||
	12.TerrainRendering
 | 
			
		||||
	13.RenderToTexture
 | 
			
		||||
	15.LoadIrrFile
 | 
			
		||||
	16.Quake3MapShader
 | 
			
		||||
	18.SplitScreen
 | 
			
		||||
	19.MouseAndJoystick
 | 
			
		||||
@@ -22,7 +21,6 @@ set(IRREXAMPLES
 | 
			
		||||
	22.MaterialViewer
 | 
			
		||||
	23.SMeshHandling
 | 
			
		||||
	24.CursorControl
 | 
			
		||||
	25.XmlHandling
 | 
			
		||||
	26.OcclusionQuery
 | 
			
		||||
	27.PostProcessing
 | 
			
		||||
	28.CubeMapping
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,6 @@
 | 
			
		||||
#include "line3d.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "irrArray.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "EAttributes.h"
 | 
			
		||||
#include "path.h"
 | 
			
		||||
 | 
			
		||||
@@ -76,20 +74,6 @@ public:
 | 
			
		||||
	//! Removes all attributes
 | 
			
		||||
	virtual void clear() = 0;
 | 
			
		||||
 | 
			
		||||
	//! Reads attributes from a xml file.
 | 
			
		||||
	//! \param reader The XML reader to read from
 | 
			
		||||
	//! \param readCurrentElementOnly If set to true, reading only works if current element has the name 'attributes' or
 | 
			
		||||
	//! the name specified using elementName.
 | 
			
		||||
	//! \param elementName The surrounding element name. If it is null, the default one, "attributes" will be taken.
 | 
			
		||||
	//! If set to false, the first appearing list of attributes are read.
 | 
			
		||||
	virtual bool read(io::IXMLReader* reader, bool readCurrentElementOnly=false, const wchar_t* elementName=0) = 0;
 | 
			
		||||
 | 
			
		||||
	//! Write these attributes into a xml file
 | 
			
		||||
	//! \param writer: The XML writer to write to
 | 
			
		||||
	//! \param writeXMLHeader: Writes a header to the XML file, required if at the beginning of the file
 | 
			
		||||
	//! \param elementName: The surrounding element name. If it is null, the default one, "attributes" will be taken.
 | 
			
		||||
	virtual bool write(io::IXMLWriter* writer, bool writeXMLHeader=false, const wchar_t* elementName=0) = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,456 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
#define __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IMeshWriter.h"
 | 
			
		||||
#include "ISceneNode.h"
 | 
			
		||||
#include "IAnimatedMesh.h"
 | 
			
		||||
#include "SMaterial.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	class IWriteFile;
 | 
			
		||||
} // end namespace io
 | 
			
		||||
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
	//! Lighting models - more or less the way Collada categorizes materials
 | 
			
		||||
	enum E_COLLADA_TECHNIQUE_FX
 | 
			
		||||
	{
 | 
			
		||||
		//! Blinn-phong which is default for opengl and dx fixed function pipelines.
 | 
			
		||||
		//! But several well-known renderers don't support it and prefer phong.
 | 
			
		||||
		ECTF_BLINN,
 | 
			
		||||
		//! Phong shading, default in many external renderers.
 | 
			
		||||
		ECTF_PHONG,
 | 
			
		||||
		//! diffuse shaded surface that is independent of lighting.
 | 
			
		||||
		ECTF_LAMBERT,
 | 
			
		||||
		// constantly shaded surface that is independent of lighting.
 | 
			
		||||
		ECTF_CONSTANT
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! How to interpret the opacity in collada
 | 
			
		||||
	enum E_COLLADA_TRANSPARENT_FX
 | 
			
		||||
	{
 | 
			
		||||
		//! default - only alpha channel of color or texture is used.
 | 
			
		||||
		ECOF_A_ONE = 0,
 | 
			
		||||
 | 
			
		||||
		//! Alpha values for each RGB channel of color or texture are used.
 | 
			
		||||
		ECOF_RGB_ZERO = 1
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Color names collada uses in it's color samplers
 | 
			
		||||
	enum E_COLLADA_COLOR_SAMPLER
 | 
			
		||||
	{
 | 
			
		||||
		ECCS_DIFFUSE,
 | 
			
		||||
		ECCS_AMBIENT,
 | 
			
		||||
		ECCS_EMISSIVE,
 | 
			
		||||
		ECCS_SPECULAR,
 | 
			
		||||
		ECCS_TRANSPARENT,
 | 
			
		||||
		ECCS_REFLECTIVE
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Irrlicht colors which can be mapped to E_COLLADA_COLOR_SAMPLER values
 | 
			
		||||
	enum E_COLLADA_IRR_COLOR
 | 
			
		||||
	{
 | 
			
		||||
		//! Don't write this element at all
 | 
			
		||||
		ECIC_NONE,
 | 
			
		||||
 | 
			
		||||
		//! Check IColladaMeshWriterProperties for custom color
 | 
			
		||||
		ECIC_CUSTOM,
 | 
			
		||||
 | 
			
		||||
		//! Use SMaterial::DiffuseColor
 | 
			
		||||
		ECIC_DIFFUSE,
 | 
			
		||||
 | 
			
		||||
		//! Use SMaterial::AmbientColor
 | 
			
		||||
		ECIC_AMBIENT,
 | 
			
		||||
 | 
			
		||||
		//! Use SMaterial::EmissiveColor
 | 
			
		||||
		ECIC_EMISSIVE,
 | 
			
		||||
 | 
			
		||||
		//! Use SMaterial::SpecularColor
 | 
			
		||||
		ECIC_SPECULAR
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Control when geometry elements are created
 | 
			
		||||
	enum E_COLLADA_GEOMETRY_WRITING
 | 
			
		||||
	{
 | 
			
		||||
		//! Default - write each mesh exactly once to collada. Optimal but will not work with many tools.
 | 
			
		||||
		ECGI_PER_MESH,
 | 
			
		||||
 | 
			
		||||
		//! Write each mesh as often as it's used with different materials-names in the scene.
 | 
			
		||||
		//! Material names which are used here are created on export, so using the IColladaMeshWriterNames
 | 
			
		||||
		//! interface you have some control over how many geometries are written.
 | 
			
		||||
		ECGI_PER_MESH_AND_MATERIAL
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Callback interface for properties which can be used to influence collada writing
 | 
			
		||||
	class IColladaMeshWriterProperties  : public virtual IReferenceCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		virtual ~IColladaMeshWriterProperties () {}
 | 
			
		||||
 | 
			
		||||
		//! Which lighting model should be used in the technique (FX) section when exporting effects (materials)
 | 
			
		||||
		virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Which texture index should be used when writing the texture of the given sampler color.
 | 
			
		||||
		/** \return the index to the texture-layer or -1 if that texture should never be exported
 | 
			
		||||
			Note: for ECCS_TRANSPARENT by default the alpha channel is used, if you want to use RGB you have to set
 | 
			
		||||
			also the ECOF_RGB_ZERO flag in getTransparentFx.  */
 | 
			
		||||
		virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return which color from Irrlicht should be used for the color requested by collada
 | 
			
		||||
		/** Note that collada allows exporting either texture or color, not both.
 | 
			
		||||
			So color mapping is only checked if we have no valid texture already.
 | 
			
		||||
			By default we try to return best fits when possible. For example ECCS_DIFFUSE is mapped to ECIC_DIFFUSE.
 | 
			
		||||
			When ECIC_CUSTOM is returned then the result of getCustomColor will be used. */
 | 
			
		||||
		virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return custom colors for certain color types requested by collada.
 | 
			
		||||
		/** Only used when getColorMapping returns ECIC_CUSTOM for the same parameters. */
 | 
			
		||||
		virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return the transparence color interpretation.
 | 
			
		||||
		/** Not this is only about ECCS_TRANSPARENT and does not affect getTransparency. */
 | 
			
		||||
		virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Transparency value for that material.
 | 
			
		||||
		/** This value is additional to transparent settings, if both are set they will be multiplicated.
 | 
			
		||||
		\return 1.0 for fully transparent, 0.0 for not transparent and not written at all when < 0.f */
 | 
			
		||||
		virtual f32 getTransparency(const video::SMaterial& material) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Reflectivity value for that material
 | 
			
		||||
		/** The amount of perfect mirror reflection to be added to the reflected light
 | 
			
		||||
		\return 0.0 - 1.0 for reflectivity and element is not written at all when < 0.f */
 | 
			
		||||
		virtual f32 getReflectivity(const video::SMaterial& material) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return index of refraction for that material
 | 
			
		||||
		/** By default we don't write that.
 | 
			
		||||
		\return a value greater equal 0.f to write \<index_of_refraction\> when it is lesser than 0 nothing will be written */
 | 
			
		||||
		virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Should node be used in scene export? (only needed for scene-writing, ignored in mesh-writing)
 | 
			
		||||
		//! By default all visible nodes are exported.
 | 
			
		||||
		virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return the mesh for the given node. If it has no mesh or shouldn't export it's mesh
 | 
			
		||||
		//! you can return 0 in which case only the transformation matrix of the node will be used.
 | 
			
		||||
		// TODO: Function is not const because there is no const getMesh() function for several Irrlicht nodes.
 | 
			
		||||
		virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return if the node has it's own material overwriting the mesh-materials
 | 
			
		||||
		/** Usually true except for mesh-nodes which have isReadOnlyMaterials set.
 | 
			
		||||
		This is mostly important for naming (as ISceneNode::getMaterial() already returns the correct material).
 | 
			
		||||
		You have to override it when exporting custom scenenodes with own materials.
 | 
			
		||||
		\return true => The node's own material is used, false => ignore node material and use the one from the mesh */
 | 
			
		||||
		virtual bool useNodeMaterial(const scene::ISceneNode* node) const = 0;
 | 
			
		||||
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Callback interface to use custom names on collada writing.
 | 
			
		||||
	/** You can either modify names and id's written to collada or you can use
 | 
			
		||||
	this interface to just find out which names are used on writing.
 | 
			
		||||
	Names are often used later as xs:anyURI, so avoid whitespace, '#' and '%' in the names.
 | 
			
		||||
	*/
 | 
			
		||||
	class IColladaMeshWriterNames  : public virtual IReferenceCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		virtual ~IColladaMeshWriterNames () {}
 | 
			
		||||
 | 
			
		||||
		//! Return a unique name for the given mesh
 | 
			
		||||
		/** Note that names really must be unique here per mesh-pointer, so
 | 
			
		||||
		mostly it's a good idea to return the nameForMesh from
 | 
			
		||||
		IColladaMeshWriter::getDefaultNameGenerator(). Also names must follow
 | 
			
		||||
		the xs:NCName standard to be valid, you can run them through
 | 
			
		||||
		IColladaMeshWriter::toNCName to ensure that.
 | 
			
		||||
		\param mesh Pointer to the mesh which needs a name
 | 
			
		||||
		\param instance When E_COLLADA_GEOMETRY_WRITING is not ECGI_PER_MESH then
 | 
			
		||||
		several instances of the same mesh can be written and this counts them.
 | 
			
		||||
		*/
 | 
			
		||||
		virtual irr::core::stringc nameForMesh(const scene::IMesh* mesh, int instance) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return a unique name for the given node
 | 
			
		||||
		/** Note that names really must be unique here per node-pointer, so
 | 
			
		||||
		mostly it's a good idea to return the nameForNode from
 | 
			
		||||
		IColladaMeshWriter::getDefaultNameGenerator(). Also names must follow
 | 
			
		||||
		the xs:NCName standard to be valid, you can run them through
 | 
			
		||||
		IColladaMeshWriter::toNCName to ensure that.
 | 
			
		||||
		*/
 | 
			
		||||
		virtual irr::core::stringc nameForNode(const scene::ISceneNode* node) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Return a name for the material
 | 
			
		||||
		/** There is one material created in the writer for each unique name.
 | 
			
		||||
		So you can use this to control the number of materials which get written.
 | 
			
		||||
		For example Irrlicht does by default write one material for each material
 | 
			
		||||
		instanced by a node. So if you know that in your application material
 | 
			
		||||
		instances per node are identical between different nodes you can reduce
 | 
			
		||||
		the number of exported materials using that knowledge by using identical
 | 
			
		||||
		names for such shared materials.
 | 
			
		||||
		Names must follow the xs:NCName standard to be valid, you can run them
 | 
			
		||||
		through IColladaMeshWriter::toNCName to ensure that.
 | 
			
		||||
		*/
 | 
			
		||||
		virtual irr::core::stringc nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Interface for writing meshes
 | 
			
		||||
	class IColladaMeshWriter : public IMeshWriter
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		IColladaMeshWriter()
 | 
			
		||||
			: Properties(0), DefaultProperties(0), NameGenerator(0), DefaultNameGenerator(0)
 | 
			
		||||
			, WriteTextures(true), WriteDefaultScene(true), ExportSMaterialOnce(true)
 | 
			
		||||
			, AmbientLight(0.f, 0.f, 0.f, 1.f)
 | 
			
		||||
			, UnitMeter(1.f), UnitName("meter")
 | 
			
		||||
			, GeometryWriting(ECGI_PER_MESH)
 | 
			
		||||
		{
 | 
			
		||||
			ParamNamesUV[0] = "U";
 | 
			
		||||
			ParamNamesUV[1] = "V";
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~IColladaMeshWriter()
 | 
			
		||||
		{
 | 
			
		||||
			if ( Properties )
 | 
			
		||||
				Properties->drop();
 | 
			
		||||
			if ( DefaultProperties )
 | 
			
		||||
				DefaultProperties->drop();
 | 
			
		||||
			if ( NameGenerator )
 | 
			
		||||
				NameGenerator->drop();
 | 
			
		||||
			if ( DefaultNameGenerator )
 | 
			
		||||
				DefaultNameGenerator->drop();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! writes a scene starting with the given node
 | 
			
		||||
		//\param writeRoot: 0 = no, 1=yes unless root is scenemanager, 2=yes
 | 
			
		||||
		virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root, int writeRoot=1) = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		//! Set if texture information should be written
 | 
			
		||||
		virtual void setWriteTextures(bool write)
 | 
			
		||||
		{
 | 
			
		||||
			WriteTextures = write;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Get if texture information should be written
 | 
			
		||||
		virtual bool getWriteTextures() const
 | 
			
		||||
		{
 | 
			
		||||
			return WriteTextures;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Set if a default scene should be written when writing meshes.
 | 
			
		||||
		/** Many collada readers fail to read a mesh if the collada files doesn't contain a scene as well.
 | 
			
		||||
		The scene is doing an instantiation of the mesh.
 | 
			
		||||
		When using writeScene this flag is ignored (as we have scene there already)
 | 
			
		||||
		*/
 | 
			
		||||
		virtual void setWriteDefaultScene(bool write)
 | 
			
		||||
		{
 | 
			
		||||
			WriteDefaultScene = write;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Get if a default scene should be written
 | 
			
		||||
		virtual bool getWriteDefaultScene() const
 | 
			
		||||
		{
 | 
			
		||||
			return WriteDefaultScene;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Sets ambient color of the scene to write
 | 
			
		||||
		virtual void setAmbientLight(const video::SColorf &ambientColor)
 | 
			
		||||
		{
 | 
			
		||||
			AmbientLight = ambientColor;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Return ambient light of the scene which is written
 | 
			
		||||
		virtual video::SColorf getAmbientLight() const
 | 
			
		||||
		{
 | 
			
		||||
			return AmbientLight;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Set the unit distances for all elements and objects
 | 
			
		||||
		/**
 | 
			
		||||
		\param meter: Real-world meters to use per unit. Default 1 unit = 1 meter. For 1 unit = 1cm you would set to 0.01
 | 
			
		||||
		\param name: Name to use for distance unit. Default is "meter".	*/
 | 
			
		||||
		virtual void setUnit(irr::f32 meter, const irr::core::stringc& name)
 | 
			
		||||
		{
 | 
			
		||||
			UnitMeter = meter;
 | 
			
		||||
			UnitName = name;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Return real world meters to use per unit for all elements and objects
 | 
			
		||||
		virtual irr::f32 getUnitMeter() const
 | 
			
		||||
		{
 | 
			
		||||
			return UnitMeter;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Return name to use for distance units. Like p.E. "meter".
 | 
			
		||||
		virtual irr::core::stringc getUnitName() const 
 | 
			
		||||
		{
 | 
			
		||||
			return UnitName;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Control when and how often a mesh is written
 | 
			
		||||
		/** Optimally ECGI_PER_MESH would be always sufficient - writing geometry once per mesh.
 | 
			
		||||
		Unfortunately many tools (at the time of writing this nearly all of them) have trouble
 | 
			
		||||
		on import when different materials are used per node. So when you override materials
 | 
			
		||||
		per node and importing the resulting collada has materials problems in other tools try
 | 
			
		||||
		using other values here.
 | 
			
		||||
		\param writeStyle One of the E_COLLADA_GEOMETRY_WRITING settings.
 | 
			
		||||
		*/
 | 
			
		||||
		virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle)
 | 
			
		||||
		{
 | 
			
		||||
			GeometryWriting = writeStyle;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Get the current style of geometry writing.
 | 
			
		||||
		virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const
 | 
			
		||||
		{
 | 
			
		||||
			return GeometryWriting;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Make certain there is only one collada material generated per Irrlicht material
 | 
			
		||||
		/** Checks before creating a collada material-name if an identical
 | 
			
		||||
		irr:::video::SMaterial has been exported already. If so don't export it with
 | 
			
		||||
		another name. This is set by default and leads to way smaller .dae files.
 | 
			
		||||
		Note that if you need to disable this flag for some reason you can still
 | 
			
		||||
		get a similar effect using the IColladaMeshWriterNames::nameForMaterial
 | 
			
		||||
		by returning identical names for identical materials there.
 | 
			
		||||
		*/
 | 
			
		||||
		virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
 | 
			
		||||
		{
 | 
			
		||||
			ExportSMaterialOnce = exportOnce;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		virtual bool getExportSMaterialsOnlyOnce() const
 | 
			
		||||
		{
 | 
			
		||||
			return ExportSMaterialOnce;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Set properties to use by the meshwriter instead of it's default properties.
 | 
			
		||||
		/** Overloading properties with an own class allows modifying the writing process in certain ways.
 | 
			
		||||
		By default properties are set to the DefaultProperties. */
 | 
			
		||||
		virtual void setProperties(IColladaMeshWriterProperties * p)
 | 
			
		||||
		{
 | 
			
		||||
			if ( p == Properties )
 | 
			
		||||
				return;
 | 
			
		||||
			if ( p )
 | 
			
		||||
				p->grab();
 | 
			
		||||
			if ( Properties )
 | 
			
		||||
				Properties->drop();
 | 
			
		||||
			Properties = p;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Get properties which are currently used.
 | 
			
		||||
		virtual IColladaMeshWriterProperties * getProperties() const
 | 
			
		||||
		{
 | 
			
		||||
			return Properties;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Return the original default properties of the writer.
 | 
			
		||||
		/** You can use this pointer in your own properties to access and return default values. */
 | 
			
		||||
		IColladaMeshWriterProperties * getDefaultProperties() const
 | 
			
		||||
		{
 | 
			
		||||
			return DefaultProperties;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Install a generator to create custom names on export.
 | 
			
		||||
		virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator)
 | 
			
		||||
		{
 | 
			
		||||
			if ( nameGenerator == NameGenerator )
 | 
			
		||||
				return;
 | 
			
		||||
			if ( nameGenerator )
 | 
			
		||||
				nameGenerator->grab();
 | 
			
		||||
			if ( NameGenerator )
 | 
			
		||||
				NameGenerator->drop();
 | 
			
		||||
			NameGenerator = nameGenerator;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Get currently used name generator
 | 
			
		||||
		virtual IColladaMeshWriterNames * getNameGenerator() const
 | 
			
		||||
		{
 | 
			
		||||
			return NameGenerator;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Return the original default name generator of the writer.
 | 
			
		||||
		/** You can use this pointer in your own generator to access and return default values. */
 | 
			
		||||
		IColladaMeshWriterNames * getDefaultNameGenerator() const
 | 
			
		||||
		{
 | 
			
		||||
			return DefaultNameGenerator;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Restrict the characters of oldString a set of allowed characters in xs:NCName and add the prefix.
 | 
			
		||||
		/** A tool function to help when using a custom name generator to generative valid names for collada names and id's. */
 | 
			
		||||
		virtual irr::core::stringc toNCName(const irr::core::stringc& oldString, const irr::core::stringc& prefix=irr::core::stringc("_NC_")) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! After export you can find out which name had been used for writing the geometry for this node.
 | 
			
		||||
		/** The name comes from IColladaMeshWriterNames::nameForMesh, but you can't access the node there.
 | 
			
		||||
		\return Either a pointer to the name or NULL */
 | 
			
		||||
		// TODO: Function is not const because there is no const getMesh() function for several Irrlicht nodes.
 | 
			
		||||
		virtual const irr::core::stringc* findGeometryNameForNode(ISceneNode* node) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Change param name used for UV's.
 | 
			
		||||
		/** Param names for UV's have a name. By default it's "U" and "V".
 | 
			
		||||
			Usually it doesn't matter as names are optional in Collada anyway.
 | 
			
		||||
			But unfortunately some tools insist on specific names.
 | 
			
		||||
			So if "U", "V" does not work then try to export by setting this to "S", "T".
 | 
			
		||||
			One tool which insists on "S", "T" is for example SketchUp.
 | 
			
		||||
		*/
 | 
			
		||||
		void SetParamNamesUV(const core::stringc& u, const core::stringc& v)
 | 
			
		||||
		{
 | 
			
		||||
			ParamNamesUV[0] = u;
 | 
			
		||||
			ParamNamesUV[1] = v;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
		// NOTE: You usually should also call setProperties with the same parameter when using setDefaultProperties
 | 
			
		||||
		virtual void setDefaultProperties(IColladaMeshWriterProperties * p)
 | 
			
		||||
		{
 | 
			
		||||
			if ( p == DefaultProperties )
 | 
			
		||||
				return;
 | 
			
		||||
			if ( p )
 | 
			
		||||
				p->grab();
 | 
			
		||||
			if ( DefaultProperties )
 | 
			
		||||
				DefaultProperties->drop();
 | 
			
		||||
			DefaultProperties = p;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// NOTE: You usually should also call setNameGenerator with the same parameter when using setDefaultProperties
 | 
			
		||||
		virtual void setDefaultNameGenerator(IColladaMeshWriterNames * p)
 | 
			
		||||
		{
 | 
			
		||||
			if ( p == DefaultNameGenerator )
 | 
			
		||||
				return;
 | 
			
		||||
			if ( p )
 | 
			
		||||
				p->grab();
 | 
			
		||||
			if ( DefaultNameGenerator )
 | 
			
		||||
				DefaultNameGenerator->drop();
 | 
			
		||||
			DefaultNameGenerator = p;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
		irr::core::stringc ParamNamesUV[2];
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
		IColladaMeshWriterProperties * Properties;
 | 
			
		||||
		IColladaMeshWriterProperties * DefaultProperties;
 | 
			
		||||
		IColladaMeshWriterNames * NameGenerator;
 | 
			
		||||
		IColladaMeshWriterNames * DefaultNameGenerator;
 | 
			
		||||
		bool WriteTextures;
 | 
			
		||||
		bool WriteDefaultScene;
 | 
			
		||||
		bool ExportSMaterialOnce;
 | 
			
		||||
		video::SColorf AmbientLight;
 | 
			
		||||
		irr::f32 UnitMeter;
 | 
			
		||||
		irr::core::stringc UnitName;
 | 
			
		||||
		E_COLLADA_GEOMETRY_WRITING GeometryWriting;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -6,8 +6,6 @@
 | 
			
		||||
#define __I_FILE_SYSTEM_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IReferenceCounted.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "IFileArchive.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
@@ -318,70 +316,6 @@ public:
 | 
			
		||||
	\return True if file exists, and false if it does not exist or an error occurred. */
 | 
			
		||||
	virtual bool existFile(const path& filename) const =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file which returns all parsed strings as wide characters (wchar_t*).
 | 
			
		||||
	/** Use createXMLReaderUTF8() if you prefer char* instead of wchar_t*. See IIrrXMLReader for
 | 
			
		||||
	more information on how to use the parser.
 | 
			
		||||
	\return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLReader is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLReader::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLReader* createXMLReader(const path& filename) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file which returns all parsed strings as wide characters (wchar_t*).
 | 
			
		||||
	/** Use createXMLReaderUTF8() if you prefer char* instead of wchar_t*. See IIrrXMLReader for
 | 
			
		||||
	more information on how to use the parser.
 | 
			
		||||
	\return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLReader is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLReader::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLReader* createXMLReader(IReadFile* file) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file which returns all parsed strings as ASCII/UTF-8 characters (char*).
 | 
			
		||||
	/** Use createXMLReader() if you prefer wchar_t* instead of char*. See IIrrXMLReader for
 | 
			
		||||
	more information on how to use the parser.
 | 
			
		||||
	\return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLReader is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLReaderUTF8::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLReaderUTF8* createXMLReaderUTF8(const path& filename) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file which returns all parsed strings as ASCII/UTF-8 characters (char*).
 | 
			
		||||
	/** Use createXMLReader() if you prefer wchar_t* instead of char*. See IIrrXMLReader for
 | 
			
		||||
	more information on how to use the parser.
 | 
			
		||||
	\return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLReader is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLReaderUTF8::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLReaderUTF8* createXMLReaderUTF8(IReadFile* file) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file which will write ASCII/UTF-8 characters (char*).
 | 
			
		||||
	/** \return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLWriter is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLWriter::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLWriterUTF8* createXMLWriterUTF8(const path& filename) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file which will write ASCII/UTF-8 characters (char*).
 | 
			
		||||
	/** \return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLWriter is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLWriter::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLWriterUTF8* createXMLWriterUTF8(IWriteFile* file) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file.
 | 
			
		||||
	/** \return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLWriter is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLWriter::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLWriter* createXMLWriter(const path& filename) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file.
 | 
			
		||||
	/** \return 0, if file could not be opened, otherwise a pointer to the created
 | 
			
		||||
	IXMLWriter is returned. After use, the reader
 | 
			
		||||
	has to be deleted using its IXMLWriter::drop() method.
 | 
			
		||||
	See IReferenceCounted::drop() for more information. */
 | 
			
		||||
	virtual IXMLWriter* createXMLWriter(IWriteFile* file) =0;
 | 
			
		||||
 | 
			
		||||
	//! Creates a new empty collection of attributes, usable for serialization and more.
 | 
			
		||||
	/** \param driver: Video driver to be used to load textures when specified as attribute values.
 | 
			
		||||
	Can be null to prevent automatic texture loading by attributes.
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,6 @@
 | 
			
		||||
#include "EMessageBoxFlags.h"
 | 
			
		||||
#include "EFocusFlags.h"
 | 
			
		||||
#include "IEventReceiver.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "path.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
@@ -622,12 +620,6 @@ public:
 | 
			
		||||
	//! Reads attributes of the gui environment
 | 
			
		||||
	virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)=0;
 | 
			
		||||
 | 
			
		||||
	//! writes an element
 | 
			
		||||
	virtual void writeGUIElement(io::IXMLWriter* writer, IGUIElement* element) =0;
 | 
			
		||||
 | 
			
		||||
	//! reads an element
 | 
			
		||||
	virtual void readGUIElement(io::IXMLReader* reader, IGUIElement* element) =0;
 | 
			
		||||
 | 
			
		||||
	//! Find the next element which would be selected when pressing the tab-key
 | 
			
		||||
	/** If you set the focus for the result you can manually force focus-changes like they
 | 
			
		||||
	would happen otherwise by the tab-keys.
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,6 @@
 | 
			
		||||
#include "SceneParameters.h"
 | 
			
		||||
#include "IGeometryCreator.h"
 | 
			
		||||
#include "ISkinnedMesh.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
@@ -199,37 +198,6 @@ namespace scene
 | 
			
		||||
		 *      directly in Irrlicht.
 | 
			
		||||
		 *  </TR>
 | 
			
		||||
		 *  <TR>
 | 
			
		||||
		 *    <TD>COLLADA (.dae, .xml)</TD>
 | 
			
		||||
		 *    <TD>COLLADA is an open Digital Asset Exchange Schema for
 | 
			
		||||
		 *        the interactive 3D industry. There are exporters and
 | 
			
		||||
		 *        importers for this format available for most of the
 | 
			
		||||
		 *        big 3d packagesat http://collada.org. Irrlicht can
 | 
			
		||||
		 *        import COLLADA files by using the
 | 
			
		||||
		 *        ISceneManager::getMesh() method. COLLADA files need
 | 
			
		||||
		 *        not contain only one single mesh but multiple meshes
 | 
			
		||||
		 *        and a whole scene setup with lights, cameras and mesh
 | 
			
		||||
		 *        instances, this loader can set up a scene as
 | 
			
		||||
		 *        described by the COLLADA file instead of loading and
 | 
			
		||||
		 *        returning one single mesh. By default, this loader
 | 
			
		||||
		 *        behaves like the other loaders and does not create
 | 
			
		||||
		 *        instances, but it can be switched into this mode by
 | 
			
		||||
		 *        using
 | 
			
		||||
		 *        SceneManager->getParameters()->setAttribute(COLLADA_CREATE_SCENE_INSTANCES, true);
 | 
			
		||||
		 *        Created scene nodes will be named as the names of the
 | 
			
		||||
		 *        nodes in the COLLADA file. The returned mesh is just
 | 
			
		||||
		 *        a dummy object in this mode. Meshes included in the
 | 
			
		||||
		 *        scene will be added into the scene manager with the
 | 
			
		||||
		 *        following naming scheme:
 | 
			
		||||
		 *        "path/to/file/file.dea#meshname". The loading of such
 | 
			
		||||
		 *        meshes is logged. Currently, this loader is able to
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		 *        create meshes (made of only polygons), lights, and
 | 
			
		||||
		 *        cameras. Materials and animations are currently not
 | 
			
		||||
		 *        supported but this will change with future releases.
 | 
			
		||||
		 *    </TD>
 | 
			
		||||
		 *  </TR>
 | 
			
		||||
		 *  <TR>
 | 
			
		||||
		 *    <TD>Delgine DeleD (.dmf)</TD>
 | 
			
		||||
		 *    <TD>DeleD (delgine.com) is a 3D editor and level-editor
 | 
			
		||||
		 *        combined into one and is specifically designed for 3D
 | 
			
		||||
@@ -266,13 +234,6 @@ namespace scene
 | 
			
		||||
		 *        by Fabio Concas and adapted by Thomas Alten.</TD>
 | 
			
		||||
		 *  </TR>
 | 
			
		||||
		 *  <TR>
 | 
			
		||||
		 *    <TD>Irrlicht Mesh (.irrMesh)</TD>
 | 
			
		||||
		 *    <TD>This is a static mesh format written in XML, native
 | 
			
		||||
		 *      to Irrlicht and written by the irr mesh writer.
 | 
			
		||||
		 *      This format is exported by the CopperCube engine's
 | 
			
		||||
		 *      lightmapper.</TD>
 | 
			
		||||
		 *  </TR>
 | 
			
		||||
		 *  <TR>
 | 
			
		||||
		 *    <TD>LightWave (.lwo)</TD>
 | 
			
		||||
		 *    <TD>Native to NewTek's LightWave 3D, the LWO format is well
 | 
			
		||||
		 *      known and supported by many exporters. This loader will
 | 
			
		||||
@@ -1586,26 +1547,6 @@ namespace scene
 | 
			
		||||
		\return True if successful. */
 | 
			
		||||
		virtual bool saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Saves the current scene into a file.
 | 
			
		||||
		/** Scene nodes with the option isDebugObject set to true are
 | 
			
		||||
		not being saved. The scene is usually written to an .irr file,
 | 
			
		||||
		an xml based format. .irr files can Be edited with the Irrlicht
 | 
			
		||||
		Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To
 | 
			
		||||
		load .irr files again, see ISceneManager::loadScene().
 | 
			
		||||
		\param writer XMLWriter with which the scene is saved.
 | 
			
		||||
		\param currentPath Path which is used for relative file names.
 | 
			
		||||
		Usually the directory of the file written into.
 | 
			
		||||
		\param userDataSerializer If you want to save some user data
 | 
			
		||||
		for every scene node into the file, implement the
 | 
			
		||||
		ISceneUserDataSerializer interface and provide it as parameter
 | 
			
		||||
		here. Otherwise, simply specify 0 as this parameter.
 | 
			
		||||
		\param node Node which is taken as the top node of the scene.
 | 
			
		||||
		This node and all of its descendants are saved into the scene
 | 
			
		||||
		file. Pass 0 or the scene manager to save the full scene (which
 | 
			
		||||
		is also the default).
 | 
			
		||||
		\return True if successful. */
 | 
			
		||||
		virtual bool saveScene(io::IXMLWriter* writer, const io::path& currentPath, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Loads a scene. Note that the current scene is not cleared before.
 | 
			
		||||
		/** The scene is usually loaded from an .irr file, an xml based
 | 
			
		||||
		format, but other scene formats can be added to the engine via
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_XML_READER_H_INCLUDED__
 | 
			
		||||
#define __I_XML_READER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IReferenceCounted.h"
 | 
			
		||||
#include "irrXML.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	//! An xml reader for wide characters, derived from IReferenceCounted.
 | 
			
		||||
	/** This XML Parser can read any type of text files from any source
 | 
			
		||||
	Irrlicht can read. Just call IFileSystem::createXMLReader(). For more
 | 
			
		||||
	information on how to use the parser, see IIrrXMLReader */
 | 
			
		||||
	typedef IIrrXMLReader<wchar_t, IReferenceCounted> IXMLReader;
 | 
			
		||||
 | 
			
		||||
	//! An xml reader for ASCII or UTF-8 characters, derived from IReferenceCounted.
 | 
			
		||||
	/** This XML Parser can read any type of text files from any source
 | 
			
		||||
	Irrlicht can read. Just call IFileSystem::createXMLReaderUTF8(). For
 | 
			
		||||
	more information on how to use the parser, see IIrrXMLReader */
 | 
			
		||||
	typedef IIrrXMLReader<c8, IReferenceCounted> IXMLReaderUTF8;
 | 
			
		||||
 | 
			
		||||
} // end namespace io
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_XML_WRITER_H_INCLUDED__
 | 
			
		||||
#define __I_XML_WRITER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IReferenceCounted.h"
 | 
			
		||||
#include "irrXML.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	//! An xml writer for wide characters, derived from IReferenceCounted.
 | 
			
		||||
	/** Call IFileSystem::createXMLReader(). to create an IXMLWriter */
 | 
			
		||||
	typedef IIrrXMLWriter<wchar_t, IReferenceCounted> IXMLWriter;
 | 
			
		||||
 | 
			
		||||
	//! An xml writer for ASCII or UTF-8 characters, derived from IReferenceCounted.
 | 
			
		||||
	/** Call IFileSystem::createXMLReaderUtf8(). to create an IXMLWriter */
 | 
			
		||||
	typedef IIrrXMLWriter<c8, IReferenceCounted> IXMLWriterUTF8;
 | 
			
		||||
 | 
			
		||||
} // end namespace io
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -151,12 +151,6 @@
 | 
			
		||||
//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht.
 | 
			
		||||
#define _IRR_MATERIAL_MAX_TEXTURES_ 8
 | 
			
		||||
 | 
			
		||||
//! Whether to support XML and XML-based formats (irrmesh, collada...)
 | 
			
		||||
#define _IRR_COMPILE_WITH_XML_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_XML_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! Add a leak-hunter to Irrlicht which helps finding unreleased reference counted objects.
 | 
			
		||||
//! NOTE: This is slow and should only be used for debugging
 | 
			
		||||
//#define _IRR_COMPILE_WITH_LEAK_HUNTER_
 | 
			
		||||
@@ -532,11 +526,6 @@ B3D, MS3D or X meshes */
 | 
			
		||||
#endif
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_
 | 
			
		||||
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_IRR_MESH_LOADER_ if you want to load Irrlicht Engine .irrmesh files
 | 
			
		||||
#define _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
#endif
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_HALFLIFE_LOADER_ if you want to load Halflife animated files
 | 
			
		||||
#define _IRR_COMPILE_WITH_HALFLIFE_LOADER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_HALFLIFE_LOADER_
 | 
			
		||||
@@ -557,11 +546,6 @@ B3D, MS3D or X meshes */
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_3DS_LOADER_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_3DS_LOADER_
 | 
			
		||||
#endif
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_COLLADA_LOADER_ if you want to load Collada files
 | 
			
		||||
#define _IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
#endif
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_CSM_LOADER_ if you want to load Cartography Shop files
 | 
			
		||||
#define _IRR_COMPILE_WITH_CSM_LOADER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_CSM_LOADER_
 | 
			
		||||
@@ -618,16 +602,6 @@ B3D, MS3D or X meshes */
 | 
			
		||||
#undef _IRR_COMPILE_WITH_SMF_LOADER_
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_IRR_WRITER_ if you want to write static .irrMesh files
 | 
			
		||||
#define _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
#endif
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_COLLADA_WRITER_ if you want to write Collada files
 | 
			
		||||
#define _IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
#undef _IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
#endif
 | 
			
		||||
//! Define _IRR_COMPILE_WITH_STL_WRITER_ if you want to write .stl files
 | 
			
		||||
#define _IRR_COMPILE_WITH_STL_WRITER_
 | 
			
		||||
#ifdef NO_IRR_COMPILE_WITH_STL_WRITER_
 | 
			
		||||
@@ -866,14 +840,6 @@ precision will be lower but speed higher. currently X86 only
 | 
			
		||||
#undef __IRR_HAS_S64
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// These depend on XML
 | 
			
		||||
#ifndef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	#undef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
	#undef _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
	#undef _IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
	#undef _IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__BORLANDC__)
 | 
			
		||||
	#include <tchar.h>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										645
									
								
								include/irrXML.h
									
									
									
									
									
								
							
							
						
						
									
										645
									
								
								include/irrXML.h
									
									
									
									
									
								
							@@ -1,645 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRR_XML_H_INCLUDED__
 | 
			
		||||
#define __IRR_XML_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "IrrCompileConfig.h"
 | 
			
		||||
#include "irrArray.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
 | 
			
		||||
/** \mainpage irrXML 1.2 API documentation
 | 
			
		||||
 <div align="center"><img src="logobig.png" ></div>
 | 
			
		||||
 | 
			
		||||
 \section intro Introduction
 | 
			
		||||
 | 
			
		||||
  Welcome to the irrXML API documentation.
 | 
			
		||||
  Here you'll find any information you'll need to develop applications with
 | 
			
		||||
  irrXML. If you look for a tutorial on how to start, take a look at the \ref irrxmlexample,
 | 
			
		||||
  at the homepage of irrXML at <A HREF="http://www.ambiera.com/irrxml/">www.ambiera.com/irrxml/</A>
 | 
			
		||||
  or into the SDK in the directory example.
 | 
			
		||||
 | 
			
		||||
  irrXML is intended to be a high speed and easy-to-use XML Parser for C++, and
 | 
			
		||||
  this documentation is an important part of it. If you have any questions or
 | 
			
		||||
  suggestions, just send a email to the author of the engine, Nikolaus Gebhardt
 | 
			
		||||
  (niko (at) irrlicht3d.org). For more information about this parser, see \ref history.
 | 
			
		||||
 | 
			
		||||
  \section features Features
 | 
			
		||||
 | 
			
		||||
  irrXML provides forward-only, read-only
 | 
			
		||||
     access to a stream of non validated XML data. It was fully implemented by
 | 
			
		||||
	Nikolaus Gebhardt. Its current features are:
 | 
			
		||||
 | 
			
		||||
	- It it fast as lighting and has very low memory usage. It was
 | 
			
		||||
	developed with the intention of being used in 3D games, as it already has been.
 | 
			
		||||
	- irrXML is very small: It only consists of 60 KB of code and can be added easily
 | 
			
		||||
	to your existing project.
 | 
			
		||||
	- Of course, it is platform independent and works with lots of compilers.
 | 
			
		||||
	- It is able to parse ASCII, UTF-8, UTF-16 and UTF-32 text files, both in
 | 
			
		||||
	little and big endian format.
 | 
			
		||||
	- Independent of the input file format, the parser can return all strings in ASCII, UTF-8,
 | 
			
		||||
	UTF-16 and UTF-32 format.
 | 
			
		||||
	- With its optional file access abstraction it has the advantage that it can read not
 | 
			
		||||
	only from files but from any type of data (memory, network, ...). For example when
 | 
			
		||||
	used with the Irrlicht Engine, it directly reads from compressed .zip files.
 | 
			
		||||
	- Just like the Irrlicht Engine for which it was originally created, it is extremely easy
 | 
			
		||||
	to use.
 | 
			
		||||
	- It has no external dependencies, it does not even need the STL.
 | 
			
		||||
 | 
			
		||||
	Although irrXML has some strengths, it currently also has the following limitations:
 | 
			
		||||
 | 
			
		||||
	- The input xml file is not validated and assumed to be correct.
 | 
			
		||||
 | 
			
		||||
    \section irrxmlexample Example
 | 
			
		||||
 | 
			
		||||
    The following code demonstrates the basic usage of irrXML. A simple xml
 | 
			
		||||
	file like this is parsed:
 | 
			
		||||
    \code
 | 
			
		||||
	<?xml version="1.0"?>
 | 
			
		||||
	<config>
 | 
			
		||||
		<!-- This is a config file for the mesh viewer -->
 | 
			
		||||
		<model file="dwarf.dea" />
 | 
			
		||||
		<messageText caption="Irrlicht Engine Mesh Viewer">
 | 
			
		||||
		Welcome to the Mesh Viewer of the "Irrlicht Engine".
 | 
			
		||||
		</messageText>
 | 
			
		||||
	</config>
 | 
			
		||||
	\endcode
 | 
			
		||||
 | 
			
		||||
	The code for parsing this file would look like this:
 | 
			
		||||
	\code
 | 
			
		||||
	#include <irrXML.h>
 | 
			
		||||
	using namespace irr; // irrXML is located in the namespace irr::io
 | 
			
		||||
	using namespace io;
 | 
			
		||||
 | 
			
		||||
	#include <string> // we use STL strings to store data in this example
 | 
			
		||||
 | 
			
		||||
	void main()
 | 
			
		||||
	{
 | 
			
		||||
		// create the reader using one of the factory functions
 | 
			
		||||
 | 
			
		||||
		IrrXMLReader* xml = createIrrXMLReader("config.xml");
 | 
			
		||||
 | 
			
		||||
		// strings for storing the data we want to get out of the file
 | 
			
		||||
		std::string modelFile;
 | 
			
		||||
		std::string messageText;
 | 
			
		||||
		std::string caption;
 | 
			
		||||
 | 
			
		||||
		// parse the file until end reached
 | 
			
		||||
 | 
			
		||||
		while(xml && xml->read())
 | 
			
		||||
		{
 | 
			
		||||
			switch(xml->getNodeType())
 | 
			
		||||
			{
 | 
			
		||||
			case EXN_TEXT:
 | 
			
		||||
				// in this xml file, the only text which occurs is the messageText
 | 
			
		||||
				messageText = xml->getNodeData();
 | 
			
		||||
				break;
 | 
			
		||||
			case EXN_ELEMENT:
 | 
			
		||||
				{
 | 
			
		||||
					if (!strcmp("model", xml->getNodeName()))
 | 
			
		||||
						modelFile = xml->getAttributeValue("file");
 | 
			
		||||
					else
 | 
			
		||||
					if (!strcmp("messageText", xml->getNodeName()))
 | 
			
		||||
						caption = xml->getAttributeValue("caption");
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// delete the xml parser after usage
 | 
			
		||||
		delete xml;
 | 
			
		||||
	}
 | 
			
		||||
	\endcode
 | 
			
		||||
 | 
			
		||||
	\section howto How to use
 | 
			
		||||
 | 
			
		||||
	Simply add the source files in the /src directory of irrXML to your project. Done.
 | 
			
		||||
 | 
			
		||||
	\section license License
 | 
			
		||||
 | 
			
		||||
	The irrXML license is based on the zlib license. Basically, this means you can do with
 | 
			
		||||
	irrXML whatever you want:
 | 
			
		||||
 | 
			
		||||
	Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
 | 
			
		||||
	This software is provided 'as-is', without any express or implied
 | 
			
		||||
	warranty. In no event will the authors be held liable for any damages
 | 
			
		||||
	arising from the use of this software.
 | 
			
		||||
 | 
			
		||||
	Permission is granted to anyone to use this software for any purpose,
 | 
			
		||||
	including commercial applications, and to alter it and redistribute it
 | 
			
		||||
	freely, subject to the following restrictions:
 | 
			
		||||
 | 
			
		||||
	1. The origin of this software must not be misrepresented; you must not
 | 
			
		||||
		claim that you wrote the original software. If you use this software
 | 
			
		||||
		in a product, an acknowledgment in the product documentation would be
 | 
			
		||||
		appreciated but is not required.
 | 
			
		||||
 | 
			
		||||
	2. Altered source versions must be plainly marked as such, and must not be
 | 
			
		||||
		misrepresented as being the original software.
 | 
			
		||||
 | 
			
		||||
	3. This notice may not be removed or altered from any source distribution.
 | 
			
		||||
 | 
			
		||||
	\section history History
 | 
			
		||||
 | 
			
		||||
	As lots of references in this documentation and the source show, this xml
 | 
			
		||||
	parser has originally been a part of the
 | 
			
		||||
	<A HREF="http://irrlicht.sourceforge.net" >Irrlicht Engine</A>. But because
 | 
			
		||||
	the parser has become very useful with the latest release, people asked for a
 | 
			
		||||
	separate version of it, to be able to use it in non Irrlicht projects. With
 | 
			
		||||
	irrXML 1.0, this has now been done.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	//! Enumeration of all supported source text file formats
 | 
			
		||||
	enum ETEXT_FORMAT
 | 
			
		||||
	{
 | 
			
		||||
		//! ASCII, file without byte order mark, or not a text file
 | 
			
		||||
		ETF_ASCII,
 | 
			
		||||
 | 
			
		||||
		//! UTF-8 format
 | 
			
		||||
		ETF_UTF8,
 | 
			
		||||
 | 
			
		||||
		//! UTF-16 format, big endian
 | 
			
		||||
		ETF_UTF16_BE,
 | 
			
		||||
 | 
			
		||||
		//! UTF-16 format, little endian
 | 
			
		||||
		ETF_UTF16_LE,
 | 
			
		||||
 | 
			
		||||
		//! UTF-32 format, big endian
 | 
			
		||||
		ETF_UTF32_BE,
 | 
			
		||||
 | 
			
		||||
		//! UTF-32 format, little endian
 | 
			
		||||
		ETF_UTF32_LE
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Enumeration for all xml nodes which are parsed by IrrXMLReader
 | 
			
		||||
	enum EXML_NODE
 | 
			
		||||
	{
 | 
			
		||||
		//! No xml node. This is usually the node if you did not read anything yet.
 | 
			
		||||
		EXN_NONE,
 | 
			
		||||
 | 
			
		||||
		//! An xml element such as <foo>
 | 
			
		||||
		EXN_ELEMENT,
 | 
			
		||||
 | 
			
		||||
		//! End of an xml element such as </foo>
 | 
			
		||||
		EXN_ELEMENT_END,
 | 
			
		||||
 | 
			
		||||
		//! Text within an xml element: <foo> this is the text. </foo>
 | 
			
		||||
		//! Also text between 2 xml elements: </foo> this is the text. <foo>
 | 
			
		||||
		EXN_TEXT,
 | 
			
		||||
 | 
			
		||||
		//! An xml comment like <!-- I am a comment --> or a DTD definition.
 | 
			
		||||
		EXN_COMMENT,
 | 
			
		||||
 | 
			
		||||
		//! An xml cdata section like <![CDATA[ this is some CDATA ]]>
 | 
			
		||||
		EXN_CDATA,
 | 
			
		||||
 | 
			
		||||
		//! Unknown element.
 | 
			
		||||
		EXN_UNKNOWN
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Callback class for file read abstraction.
 | 
			
		||||
	/** With this, it is possible to make the xml parser read in other
 | 
			
		||||
	things than just files. The Irrlicht engine is using this for example to
 | 
			
		||||
	read xml from compressed .zip files. To make the parser read in
 | 
			
		||||
	any other data, derive a class from this interface, implement the
 | 
			
		||||
	two methods to read your data and give a pointer to an instance of
 | 
			
		||||
	your implementation when calling createIrrXMLReader(),
 | 
			
		||||
	createIrrXMLReaderUTF16() or createIrrXMLReaderUTF32() */
 | 
			
		||||
	class IFileReadCallBack
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~IFileReadCallBack() {}
 | 
			
		||||
 | 
			
		||||
		//! Reads an amount of bytes from the file.
 | 
			
		||||
		/** \param buffer: Pointer to buffer where to read bytes will be written to.
 | 
			
		||||
		\param sizeToRead: Amount of bytes to read from the file.
 | 
			
		||||
		\return Returns how much bytes were read. */
 | 
			
		||||
		virtual int read(void* buffer, int sizeToRead) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns size of file in bytes on success or -1L on failure.
 | 
			
		||||
		virtual long getSize() const = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Empty class to be used as parent class for IrrXMLReader.
 | 
			
		||||
	/** If you need another class as base class for the xml reader, you can do this by creating
 | 
			
		||||
	the reader using for example new CXMLReaderImpl<char, YourBaseClass>(yourcallback);
 | 
			
		||||
	The Irrlicht Engine for example needs IReferenceCounted as base class for every object to
 | 
			
		||||
	let it automatically reference counted, hence it replaces IXMLBase with IReferenceCounted.
 | 
			
		||||
	See irrXML.cpp on how this can be done in detail. */
 | 
			
		||||
	class IXMLBase
 | 
			
		||||
	{
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Interface providing easy read access to a XML file.
 | 
			
		||||
	/** You can create an instance of this reader using one of the factory functions
 | 
			
		||||
	createIrrXMLReader(), createIrrXMLReaderUTF16() and createIrrXMLReaderUTF32().
 | 
			
		||||
	If using the parser from the Irrlicht Engine, please use IFileSystem::createXMLReader()
 | 
			
		||||
	instead.
 | 
			
		||||
	For a detailed intro how to use the parser, see \ref irrxmlexample and \ref features.
 | 
			
		||||
 | 
			
		||||
	The typical usage of this parser looks like this:
 | 
			
		||||
	\code
 | 
			
		||||
	#include <irrXML.h>
 | 
			
		||||
	using namespace irr; // irrXML is located in the namespace irr::io
 | 
			
		||||
	using namespace io;
 | 
			
		||||
 | 
			
		||||
	void main()
 | 
			
		||||
	{
 | 
			
		||||
		// create the reader using one of the factory functions
 | 
			
		||||
		IrrXMLReader* xml = createIrrXMLReader("config.xml");
 | 
			
		||||
 | 
			
		||||
		if (xml == 0)
 | 
			
		||||
			return; // file could not be opened
 | 
			
		||||
 | 
			
		||||
		// parse the file until end reached
 | 
			
		||||
		while(xml->read())
 | 
			
		||||
		{
 | 
			
		||||
			// based on xml->getNodeType(), do something.
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// delete the xml parser after usage
 | 
			
		||||
		delete xml;
 | 
			
		||||
	}
 | 
			
		||||
	\endcode
 | 
			
		||||
	See \ref irrxmlexample for a more detailed example.
 | 
			
		||||
	*/
 | 
			
		||||
	template<class char_type, class super_class>
 | 
			
		||||
	class IIrrXMLReader : public super_class
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~IIrrXMLReader() {}
 | 
			
		||||
 | 
			
		||||
		//! Reads forward to the next xml node.
 | 
			
		||||
		/** \return Returns false, if there was no further node. */
 | 
			
		||||
		virtual bool read() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the type of the current XML node.
 | 
			
		||||
		virtual EXML_NODE getNodeType() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns attribute count of the current XML node.
 | 
			
		||||
		/** This is usually
 | 
			
		||||
		non null if the current node is EXN_ELEMENT, and the element has attributes.
 | 
			
		||||
		\return Returns amount of attributes of this xml node. */
 | 
			
		||||
		virtual unsigned int getAttributeCount() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns name of an attribute.
 | 
			
		||||
		/** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1.
 | 
			
		||||
		\return Name of the attribute, 0 if an attribute with this index does not exist. */
 | 
			
		||||
		virtual const char_type* getAttributeName(int idx) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute.
 | 
			
		||||
		/** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1.
 | 
			
		||||
		\return Value of the attribute, 0 if an attribute with this index does not exist. */
 | 
			
		||||
		virtual const char_type* getAttributeValue(int idx) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute.
 | 
			
		||||
		/** \param name: Name of the attribute.
 | 
			
		||||
		\return Value of the attribute, 0 if an attribute with this name does not exist. */
 | 
			
		||||
		virtual const char_type* getAttributeValue(const char_type* name) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute in a safe way.
 | 
			
		||||
		/** Like getAttributeValue(), but does not
 | 
			
		||||
		return 0 if the attribute does not exist. An empty string ("") is returned then.
 | 
			
		||||
		\param name: Name of the attribute.
 | 
			
		||||
		\return Value of the attribute, and "" if an attribute with this name does not exist */
 | 
			
		||||
		virtual const char_type* getAttributeValueSafe(const char_type* name) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute as integer.
 | 
			
		||||
		/** \param name Name of the attribute.
 | 
			
		||||
		\param defaultNotFound Value returned when name does not exist
 | 
			
		||||
		\return Value of the attribute as integer or value of defaultNotFound
 | 
			
		||||
		when name was not found or 0 when value could not be interpreted as integer */
 | 
			
		||||
		virtual int getAttributeValueAsInt(const char_type* name, int defaultNotFound=0) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute as integer.
 | 
			
		||||
		/** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1.
 | 
			
		||||
		\param defaultNotFound Value returned when index does not exist.
 | 
			
		||||
		\return Value of the attribute as integer or value of defaultNotFound parameter for invalid index
 | 
			
		||||
		or 0 when value could not be interpreted as integer */
 | 
			
		||||
		virtual int getAttributeValueAsInt(int idx, int defaultNotFound=0) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute as float.
 | 
			
		||||
		/** \param name: Name of the attribute.
 | 
			
		||||
		\param defaultNotFound Value returned when name does not exist.
 | 
			
		||||
		\return Value of the attribute as float or value of defaultNotFound parameter on failure
 | 
			
		||||
		or 0 when value could not be interpreted as float. */
 | 
			
		||||
		virtual float getAttributeValueAsFloat(const char_type* name, float defaultNotFound=0.f) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the value of an attribute as float.
 | 
			
		||||
		/** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1.
 | 
			
		||||
		\param defaultNotFound Value returned when index does not exist.
 | 
			
		||||
		\return Value of the attribute as float or value of defaultNotFound parameter on failure
 | 
			
		||||
		or 0 when value could not be interpreted as float. */
 | 
			
		||||
		virtual float getAttributeValueAsFloat(int idx, float defaultNotFound=0.f) const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the name of the current node.
 | 
			
		||||
		/** Only valid, if the node type is EXN_ELEMENT.
 | 
			
		||||
		\return Name of the current node or 0 if the node has no name. */
 | 
			
		||||
		virtual const char_type* getNodeName() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns data of the current node.
 | 
			
		||||
		/** Only valid if the node has some
 | 
			
		||||
		data and it is of type EXN_TEXT, EXN_COMMENT, EXN_CDATA or EXN_UNKNOWN. */
 | 
			
		||||
		virtual const char_type* getNodeData() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if an element is an empty element, like <foo />
 | 
			
		||||
		virtual bool isEmptyElement() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns format of the source xml file.
 | 
			
		||||
		/** It is not necessary to use
 | 
			
		||||
		this method because the parser will convert the input file format
 | 
			
		||||
		to the format wanted by the user when creating the parser. This
 | 
			
		||||
		method is useful to get/display additional information. */
 | 
			
		||||
		virtual ETEXT_FORMAT getSourceFormat() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns format of the strings returned by the parser.
 | 
			
		||||
		/** This will be UTF8 for example when you created a parser with
 | 
			
		||||
		IrrXMLReaderUTF8() and UTF32 when it has been created using
 | 
			
		||||
		IrrXMLReaderUTF32. It should not be necessary to call this
 | 
			
		||||
		method and only exists for informational purposes. */
 | 
			
		||||
		virtual ETEXT_FORMAT getParserFormat() const = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Interface providing methods for making it easier to write XML files.
 | 
			
		||||
	template<class char_type, class super_class>
 | 
			
		||||
	class IIrrXMLWriter : public super_class
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~IIrrXMLWriter() {}
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml 1.0 header.
 | 
			
		||||
		/** Looks like <?xml version="1.0"?>. This should always
 | 
			
		||||
		be called before writing anything other, because also the text
 | 
			
		||||
		file header for Unicode texts is written out with this method. */
 | 
			
		||||
		virtual void writeXMLHeader() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with maximal 5 attributes like "<foo />" or
 | 
			
		||||
		//! <foo optAttr="value" />.
 | 
			
		||||
		/** The element can be empty or not.
 | 
			
		||||
		\param name: Name of the element
 | 
			
		||||
		\param empty: Specifies if the element should be empty. Like
 | 
			
		||||
		"<foo />". If You set this to false, something like this is
 | 
			
		||||
		written instead: "<foo>".
 | 
			
		||||
		\param attr1Name: 1st attributes name
 | 
			
		||||
		\param attr1Value: 1st attributes value
 | 
			
		||||
		\param attr2Name: 2nd attributes name
 | 
			
		||||
		\param attr2Value: 2nd attributes value
 | 
			
		||||
		\param attr3Name: 3rd attributes name
 | 
			
		||||
		\param attr3Value: 3rd attributes value
 | 
			
		||||
		\param attr4Name: 4th attributes name
 | 
			
		||||
		\param attr4Value: 4th attributes value
 | 
			
		||||
		\param attr5Name: 5th attributes name
 | 
			
		||||
		\param attr5Value: 5th attributes value */
 | 
			
		||||
		virtual void writeElement(const char_type* name, bool empty=false,
 | 
			
		||||
			const char_type* attr1Name = 0, const char_type* attr1Value = 0,
 | 
			
		||||
			const char_type* attr2Name = 0, const char_type* attr2Value = 0,
 | 
			
		||||
			const char_type* attr3Name = 0, const char_type* attr3Value = 0,
 | 
			
		||||
			const char_type* attr4Name = 0, const char_type* attr4Value = 0,
 | 
			
		||||
			const char_type* attr5Name = 0, const char_type* attr5Value = 0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with any number of attributes
 | 
			
		||||
		virtual void writeElement(const char_type* name, bool empty,
 | 
			
		||||
				core::array<core::string<char_type> > &names, core::array<core::string<char_type> > &values) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes a comment into the xml file
 | 
			
		||||
		virtual void writeComment(const char_type* comment) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes the closing tag for an element. Like "</foo>"
 | 
			
		||||
		virtual void writeClosingTag(const char_type* name) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes a text into the file.
 | 
			
		||||
		/** All occurrences of special characters such as
 | 
			
		||||
		& (&), < (<), > (>), and " (") are automatically
 | 
			
		||||
		replaced. */
 | 
			
		||||
		virtual void writeText(const char_type* text) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Writes a line break
 | 
			
		||||
		virtual void writeLineBreak() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	template <typename T>
 | 
			
		||||
	struct xmlChar
 | 
			
		||||
	{
 | 
			
		||||
		T c;
 | 
			
		||||
		xmlChar<T>() {}
 | 
			
		||||
		xmlChar<T>(char in) : c(static_cast<T>(in)) {}
 | 
			
		||||
		xmlChar<T>(wchar_t in) : c(static_cast<T>(in)) {}
 | 
			
		||||
#if defined(__BORLANDC__)
 | 
			
		||||
		// Note - removing explicit for Borland was to get it to even compile.
 | 
			
		||||
		// There haven't been any kind of tests for that besides that.
 | 
			
		||||
		xmlChar<T>(unsigned char in) : c(static_cast<T>(in)) {}
 | 
			
		||||
		xmlChar<T>(unsigned short in) : c(static_cast<T>(in)) {}
 | 
			
		||||
		xmlChar<T>(unsigned int in) : c(static_cast<T>(in)) {}
 | 
			
		||||
		xmlChar<T>(unsigned long in) : c(static_cast<T>(in)) {}
 | 
			
		||||
#else
 | 
			
		||||
		explicit xmlChar<T>(unsigned char in) : c(static_cast<T>(in)) {}
 | 
			
		||||
 | 
			
		||||
#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)	// VS compiling without native wchar_t can't have it
 | 
			
		||||
		explicit xmlChar<T>(unsigned short in) : c(static_cast<T>(in)) {}
 | 
			
		||||
#endif
 | 
			
		||||
		explicit xmlChar<T>(unsigned int in) : c(static_cast<T>(in)) {}
 | 
			
		||||
		explicit xmlChar<T>(unsigned long in) : c(static_cast<T>(in)) {}
 | 
			
		||||
#endif
 | 
			
		||||
		operator T() const { return c; }
 | 
			
		||||
		void operator=(int t) { c=static_cast<T>(t); }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! defines the utf-16 type.
 | 
			
		||||
	/** Not using wchar_t for this because
 | 
			
		||||
	wchar_t has 16 bit on windows and 32 bit on other operating systems. */
 | 
			
		||||
	typedef xmlChar<unsigned short> char16;
 | 
			
		||||
 | 
			
		||||
	//! defines the utf-32 type.
 | 
			
		||||
	/** Not using wchar_t for this because
 | 
			
		||||
	wchar_t has 16 bit on windows and 32 bit on other operating systems. */
 | 
			
		||||
	typedef xmlChar<unsigned int> char32;
 | 
			
		||||
 | 
			
		||||
	//! A UTF-8 or ASCII character xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in 8 bit ASCII or UTF-8 by this parser.
 | 
			
		||||
	The file to read can be in any format, it will be converted to UTF-8 if it is not
 | 
			
		||||
	in this format.
 | 
			
		||||
	Create an instance of this with createIrrXMLReader();
 | 
			
		||||
	See IIrrXMLReader for description on how to use it. */
 | 
			
		||||
	typedef IIrrXMLReader<char, IXMLBase> IrrXMLReader;
 | 
			
		||||
 | 
			
		||||
	//! A UTF-16 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-16 by this parser.
 | 
			
		||||
	The file to read can be in any format, it will be converted to UTF-16 if it is not
 | 
			
		||||
	in this format.
 | 
			
		||||
	Create an instance of this with createIrrXMLReaderUTF16();
 | 
			
		||||
	See IIrrXMLReader for description on how to use it. */
 | 
			
		||||
	typedef IIrrXMLReader<char16, IXMLBase> IrrXMLReaderUTF16;
 | 
			
		||||
 | 
			
		||||
	//! A UTF-32 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-32 by this parser.
 | 
			
		||||
	The file to read can be in any format, it will be converted to UTF-32 if it is not
 | 
			
		||||
	in this format.
 | 
			
		||||
	Create an instance of this with createIrrXMLReaderUTF32();
 | 
			
		||||
	See IIrrXMLReader for description on how to use it. */
 | 
			
		||||
	typedef IIrrXMLReader<char32, IXMLBase> IrrXMLReaderUTF32;
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in 8 bit ASCII or UTF-8.
 | 
			
		||||
	The file to read can be in any format, it will be converted to UTF-8 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReaderUTF8() instead.
 | 
			
		||||
	\param filename: Name of file to be opened.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(const char* filename);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-8 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReaderUTF8() instead.
 | 
			
		||||
	\param file: Pointer to opened file, must have been opened in binary mode, e.g.
 | 
			
		||||
	using fopen("foo.bar", "wb"); The file will not be closed after it has been read.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(FILE* file);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-8 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReaderUTF8() instead.
 | 
			
		||||
	\param callback: Callback for file read abstraction. Implement your own
 | 
			
		||||
	callback to make the xml parser read in other things than just files. See
 | 
			
		||||
	IFileReadCallBack for more information about this.
 | 
			
		||||
	\param deleteCallback: if true, the callback will be deleted after the file
 | 
			
		||||
	has been read.  Otherwise the caller is responsible for cleaning it up.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(IFileReadCallBack* callback,
 | 
			
		||||
																bool deleteCallback = false);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-16 xml parser.
 | 
			
		||||
	/** This means that
 | 
			
		||||
	all character data will be returned in UTF-16. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-16 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param filename: Name of file to be opened.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(const char* filename);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-16 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-16. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-16 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param file: Pointer to opened file, must have been opened in binary mode, e.g.
 | 
			
		||||
	using fopen("foo.bar", "wb"); The file will not be closed after it has been read.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(FILE* file);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-16 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-16. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-16 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param callback: Callback for file read abstraction. Implement your own
 | 
			
		||||
	callback to make the xml parser read in other things than just files. See
 | 
			
		||||
	IFileReadCallBack for more information about this.
 | 
			
		||||
	\param deleteCallback: if true, the callback will be deleted after the file
 | 
			
		||||
	has been read.  Otherwise the caller is responsible for cleaning it up.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(IFileReadCallBack* callback,
 | 
			
		||||
																		bool deleteCallback = false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-32 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-32. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-32 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param filename: Name of file to be opened.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(const char* filename);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-32 xml parser.
 | 
			
		||||
	/** This means that all character data will be returned in UTF-32. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-32 if it is not in this format.
 | 
			
		||||
	if you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param file: Pointer to opened file, must have been opened in binary mode, e.g.
 | 
			
		||||
	using fopen("foo.bar", "wb"); The file will not be closed after it has been read.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(FILE* file);
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-32 xml parser.
 | 
			
		||||
	/** This means that
 | 
			
		||||
	all character data will be returned in UTF-32. The file to read can
 | 
			
		||||
	be in any format, it will be converted to UTF-32 if it is not in this format.
 | 
			
		||||
	If you are using the Irrlicht Engine, it is better not to use this function but
 | 
			
		||||
	IFileSystem::createXMLReader() instead.
 | 
			
		||||
	\param callback: Callback for file read abstraction. Implement your own
 | 
			
		||||
	callback to make the xml parser read in other things than just files. See
 | 
			
		||||
	IFileReadCallBack for more information about this.
 | 
			
		||||
	\param deleteCallback: if true, the callback will be deleted after the file
 | 
			
		||||
	has been read.  Otherwise the caller is responsible for cleaning it up.
 | 
			
		||||
	\return Returns a pointer to the created xml parser. This pointer should be
 | 
			
		||||
	deleted using 'delete' after no longer needed. Returns 0 if an error occurred
 | 
			
		||||
	and the file could not be opened. */
 | 
			
		||||
	IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(IFileReadCallBack* callback,
 | 
			
		||||
																		bool deleteCallback = false);
 | 
			
		||||
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
	/*! \file irrXML.h
 | 
			
		||||
	\brief Header file of the irrXML, the Irrlicht XML parser.
 | 
			
		||||
 | 
			
		||||
	This file includes everything needed for using irrXML,
 | 
			
		||||
	the XML parser of the Irrlicht Engine. To use irrXML,
 | 
			
		||||
	you only need to include this file in your project:
 | 
			
		||||
 | 
			
		||||
	\code
 | 
			
		||||
	#include <irrXML.h>
 | 
			
		||||
	\endcode
 | 
			
		||||
 | 
			
		||||
	It is also common to use the two namespaces in which irrXML is included,
 | 
			
		||||
	directly after including irrXML.h:
 | 
			
		||||
 | 
			
		||||
	\code
 | 
			
		||||
	#include <irrXML.h>
 | 
			
		||||
	using namespace irr;
 | 
			
		||||
	using namespace io;
 | 
			
		||||
	\endcode
 | 
			
		||||
	*/
 | 
			
		||||
 | 
			
		||||
} // end namespace io
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif // __IRR_XML_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +116,6 @@
 | 
			
		||||
#include "IMeshSceneNode.h"
 | 
			
		||||
#include "IMeshWriter.h"
 | 
			
		||||
#include "IOctreeSceneNode.h"
 | 
			
		||||
#include "IColladaMeshWriter.h"
 | 
			
		||||
#include "IMetaTriangleSelector.h"
 | 
			
		||||
#include "IOSOperator.h"
 | 
			
		||||
#include "IParticleSystemSceneNode.h" // also includes all emitters and attractors
 | 
			
		||||
@@ -134,7 +133,6 @@
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "irrTypes.h"
 | 
			
		||||
#include "path.h"
 | 
			
		||||
#include "irrXML.h"
 | 
			
		||||
#include "ISceneCollisionManager.h"
 | 
			
		||||
#include "ISceneLoader.h"
 | 
			
		||||
#include "ISceneManager.h"
 | 
			
		||||
@@ -159,8 +157,6 @@
 | 
			
		||||
#include "IVideoModeList.h"
 | 
			
		||||
#include "IVolumeLightSceneNode.h"
 | 
			
		||||
#include "IWriteFile.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "ILightManager.h"
 | 
			
		||||
#include "Keycodes.h"
 | 
			
		||||
#include "line2d.h"
 | 
			
		||||
@@ -375,7 +371,7 @@ namespace irr
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! This namespace provides interfaces for input/output: Reading and writing files, accessing zip archives, xml files, ...
 | 
			
		||||
	//! This namespace provides interfaces for input/output: Reading and writing files, accessing zip archives, ...
 | 
			
		||||
	namespace io
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,13 +5,8 @@
 | 
			
		||||
#include "CAttributes.h"
 | 
			
		||||
#include "CAttributeImpl.h"
 | 
			
		||||
#include "ITexture.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
 | 
			
		||||
#ifndef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	#include "CXMLReader.h"	// for noXML
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
@@ -1381,278 +1376,6 @@ void CAttributes::setAttribute(s32 index, void* userPointer)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Reads attributes from a xml file.
 | 
			
		||||
//! \param readCurrentElementOnly: If set to true, reading only works if current element has the name 'attributes'.
 | 
			
		||||
//! IF set to false, the first appearing list attributes are read.
 | 
			
		||||
bool CAttributes::read(io::IXMLReader* reader, bool readCurrentElementOnly,
 | 
			
		||||
					    const wchar_t* nonDefaultElementName)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	if (!reader)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	clear();
 | 
			
		||||
 | 
			
		||||
	core::stringw elementName = L"attributes";
 | 
			
		||||
	if (nonDefaultElementName)
 | 
			
		||||
		elementName = nonDefaultElementName;
 | 
			
		||||
 | 
			
		||||
	if (readCurrentElementOnly)
 | 
			
		||||
	{
 | 
			
		||||
		if (elementName != reader->getNodeName())
 | 
			
		||||
			return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		switch(reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			readAttributeFromXML(reader);
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if (elementName == reader->getNodeName())
 | 
			
		||||
				return true;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return false;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CAttributes::readAttributeFromXML(const io::IXMLReader* reader)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	core::stringw element = reader->getNodeName();
 | 
			
		||||
	core::stringc name = reader->getAttributeValue(L"name");
 | 
			
		||||
 | 
			
		||||
	if (element == L"enum")
 | 
			
		||||
	{
 | 
			
		||||
		addEnum(name.c_str(), 0, 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"binary")
 | 
			
		||||
	{
 | 
			
		||||
		addBinary(name.c_str(), 0, 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"color")
 | 
			
		||||
	{
 | 
			
		||||
		addColor(name.c_str(), video::SColor());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"colorf")
 | 
			
		||||
	{
 | 
			
		||||
		addColorf(name.c_str(), video::SColorf());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"float")
 | 
			
		||||
	{
 | 
			
		||||
		addFloat(name.c_str(), 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"int")
 | 
			
		||||
	{
 | 
			
		||||
		addInt(name.c_str(), 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"bool")
 | 
			
		||||
	{
 | 
			
		||||
		addBool(name.c_str(), 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"string")
 | 
			
		||||
	{
 | 
			
		||||
		addString(name.c_str(), L"");
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"texture")
 | 
			
		||||
	{
 | 
			
		||||
		addTexture(name.c_str(), 0);
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"vector3d")
 | 
			
		||||
	{
 | 
			
		||||
		addVector3d(name.c_str(), core::vector3df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"vector2d")
 | 
			
		||||
	{
 | 
			
		||||
		addVector2d(name.c_str(), core::vector2df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"position")
 | 
			
		||||
	{
 | 
			
		||||
		addPosition2d(name.c_str(), core::position2di());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"rect")
 | 
			
		||||
	{
 | 
			
		||||
		addRect(name.c_str(), core::rect<s32>());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"matrix")
 | 
			
		||||
	{
 | 
			
		||||
		addMatrix(name.c_str(), core::matrix4());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"quaternion")
 | 
			
		||||
	{
 | 
			
		||||
		addQuaternion(name.c_str(), core::quaternion());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"box3d")
 | 
			
		||||
	{
 | 
			
		||||
		addBox3d(name.c_str(), core::aabbox3df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"plane")
 | 
			
		||||
	{
 | 
			
		||||
		addPlane3d(name.c_str(), core::plane3df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"triangle")
 | 
			
		||||
	{
 | 
			
		||||
		addTriangle3d(name.c_str(), core::triangle3df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"line2d")
 | 
			
		||||
	{
 | 
			
		||||
		addLine2d(name.c_str(), core::line2df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"line3d")
 | 
			
		||||
	{
 | 
			
		||||
		addLine3d(name.c_str(), core::line3df());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"stringwarray")
 | 
			
		||||
	{
 | 
			
		||||
		core::array<core::stringw> tmpArray;
 | 
			
		||||
 | 
			
		||||
		const s32 count = reader->getAttributeValueAsInt(L"count");
 | 
			
		||||
		s32 n=0;
 | 
			
		||||
		const core::stringw tmpName(L"value");
 | 
			
		||||
		for (; n<count; ++n)
 | 
			
		||||
		{
 | 
			
		||||
			tmpArray.push_back(reader->getAttributeValue((tmpName+core::stringw(n)).c_str()));
 | 
			
		||||
		}
 | 
			
		||||
		addArray(name.c_str(),tmpArray);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"userPointer")
 | 
			
		||||
	{
 | 
			
		||||
		// It's debatable if a pointer should be set or not, but it's more likely that adding it now would wreck user-applications.
 | 
			
		||||
		// Also it probably doesn't makes sense setting this to a value when it comes from file.
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	if (element == L"dimension2d")
 | 
			
		||||
	{
 | 
			
		||||
		addDimension2d(name.c_str(), core::dimension2d<u32>());
 | 
			
		||||
		Attributes.getLast()->setString(reader->getAttributeValue(L"value"));
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Write these attributes into a xml file
 | 
			
		||||
bool CAttributes::write(io::IXMLWriter* writer, bool writeXMLHeader,
 | 
			
		||||
						const wchar_t* nonDefaultElementName)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	if (!writer)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (writeXMLHeader)
 | 
			
		||||
		writer->writeXMLHeader();
 | 
			
		||||
 | 
			
		||||
	core::stringw elementName = L"attributes";
 | 
			
		||||
	if (nonDefaultElementName)
 | 
			
		||||
		elementName = nonDefaultElementName;
 | 
			
		||||
 | 
			
		||||
	writer->writeElement(elementName.c_str(), false);
 | 
			
		||||
	writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	s32 i=0;
 | 
			
		||||
	for (; i<(s32)Attributes.size(); ++i)
 | 
			
		||||
	{
 | 
			
		||||
		if ( Attributes[i]->getType() == EAT_STRINGWARRAY )
 | 
			
		||||
		{
 | 
			
		||||
			core::array<core::stringw> arraynames, arrayvalues;
 | 
			
		||||
			core::array<core::stringw> arrayinput = Attributes[i]->getArray();
 | 
			
		||||
 | 
			
		||||
			// build arrays
 | 
			
		||||
 | 
			
		||||
			// name
 | 
			
		||||
			arraynames.push_back(core::stringw(L"name"));
 | 
			
		||||
			arrayvalues.push_back(core::stringw(Attributes[i]->Name.c_str()) );
 | 
			
		||||
 | 
			
		||||
			// count
 | 
			
		||||
			arraynames.push_back(core::stringw(L"count"));
 | 
			
		||||
			arrayvalues.push_back(core::stringw((s32)arrayinput.size()));
 | 
			
		||||
 | 
			
		||||
			// array...
 | 
			
		||||
			u32 n=0;
 | 
			
		||||
			const core::stringw tmpName(L"value");
 | 
			
		||||
			for (; n < arrayinput.size(); ++n)
 | 
			
		||||
			{
 | 
			
		||||
				arraynames.push_back((tmpName+core::stringw(n)).c_str());
 | 
			
		||||
				arrayvalues.push_back(arrayinput[n]);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// write them
 | 
			
		||||
			writer->writeElement( Attributes[i]->getTypeString(), true, arraynames, arrayvalues);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			writer->writeElement(
 | 
			
		||||
				Attributes[i]->getTypeString(), true,
 | 
			
		||||
				L"name", core::stringw(Attributes[i]->Name.c_str()).c_str(),
 | 
			
		||||
				L"value", Attributes[i]->getStringW().c_str() );
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	writer->writeClosingTag(elementName.c_str());
 | 
			
		||||
	writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return false;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace io
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -62,15 +62,6 @@ public:
 | 
			
		||||
	//! Removes all attributes
 | 
			
		||||
	virtual void clear() _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Reads attributes from a xml file.
 | 
			
		||||
	//! \param readCurrentElementOnly: If set to true, reading only works if current element has the name 'attributes'.
 | 
			
		||||
	//! IF set to false, the first appearing list attributes are read.
 | 
			
		||||
	virtual bool read(io::IXMLReader* reader, bool readCurrentElementOnly=false,
 | 
			
		||||
					const wchar_t* nonDefaultElementName = 0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Write these attributes into a xml file
 | 
			
		||||
	virtual bool write(io::IXMLWriter* writer, bool writeXMLHeader=false, const wchar_t* nonDefaultElementName=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
 | 
			
		||||
@@ -722,8 +713,6 @@ public:
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
	void readAttributeFromXML(const io::IXMLReader* reader);
 | 
			
		||||
 | 
			
		||||
	core::array<IAttribute*> Attributes;
 | 
			
		||||
 | 
			
		||||
	IAttribute* getAttributeP(const c8* attributeName) const;
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,410 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __C_COLLADA_MESH_FILE_LOADER_H_INCLUDED__
 | 
			
		||||
#define __C_COLLADA_MESH_FILE_LOADER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IMeshLoader.h"
 | 
			
		||||
#include "IFileSystem.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "SMesh.h"
 | 
			
		||||
#include "SMeshBuffer.h"
 | 
			
		||||
#include "ISceneManager.h"
 | 
			
		||||
#include "irrMap.h"
 | 
			
		||||
#include "CAttributes.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
//#define COLLADA_READER_DEBUG
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
class IColladaPrefab;
 | 
			
		||||
 | 
			
		||||
enum ECOLLADA_PARAM_NAME
 | 
			
		||||
{
 | 
			
		||||
	ECPN_COLOR = 0,
 | 
			
		||||
	ECPN_AMBIENT,
 | 
			
		||||
	ECPN_DIFFUSE,
 | 
			
		||||
	ECPN_SPECULAR,
 | 
			
		||||
	ECPN_SHININESS,
 | 
			
		||||
	ECPN_TRANSPARENCY,
 | 
			
		||||
	ECPN_YFOV,
 | 
			
		||||
	ECPN_ZNEAR,
 | 
			
		||||
	ECPN_ZFAR,
 | 
			
		||||
 | 
			
		||||
	ECPN_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ECOLLADA_PARAM_TYPE
 | 
			
		||||
{
 | 
			
		||||
	ECPT_FLOAT = 0,
 | 
			
		||||
	ECPT_FLOAT2,
 | 
			
		||||
	ECPT_FLOAT3,
 | 
			
		||||
	ECPT_FLOAT4,
 | 
			
		||||
 | 
			
		||||
	ECPT_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//! Collada Parameter
 | 
			
		||||
struct SColladaParam
 | 
			
		||||
{
 | 
			
		||||
	SColladaParam()
 | 
			
		||||
		: Name(ECPN_COUNT), Type(ECPT_COUNT)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<4; ++i) Floats[i] = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ECOLLADA_PARAM_NAME Name;
 | 
			
		||||
	ECOLLADA_PARAM_TYPE Type;
 | 
			
		||||
 | 
			
		||||
	f32 Floats[4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum ECOLLADA_INPUT_SEMANTIC
 | 
			
		||||
{
 | 
			
		||||
	ECIS_POSITION = 0,
 | 
			
		||||
	ECIS_VERTEX,
 | 
			
		||||
	ECIS_NORMAL,
 | 
			
		||||
	ECIS_TEXCOORD,
 | 
			
		||||
	ECIS_UV,
 | 
			
		||||
	ECIS_TANGENT,
 | 
			
		||||
	ECIS_IMAGE,
 | 
			
		||||
	ECIS_TEXTURE,
 | 
			
		||||
	ECIS_COLOR,
 | 
			
		||||
 | 
			
		||||
	ECIS_COUNT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//! Collada Input
 | 
			
		||||
struct SColladaInput
 | 
			
		||||
{
 | 
			
		||||
	SColladaInput()
 | 
			
		||||
		: Semantic(ECIS_COUNT), Data(0), Offset(0), Set(0), Stride(1)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ECOLLADA_INPUT_SEMANTIC Semantic;
 | 
			
		||||
	core::stringc Source;
 | 
			
		||||
	f32* Data;
 | 
			
		||||
	u32 Offset;
 | 
			
		||||
	u32 Set;
 | 
			
		||||
	u32 Stride;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//! Collada images
 | 
			
		||||
struct SColladaImage
 | 
			
		||||
{
 | 
			
		||||
	core::stringc Id;
 | 
			
		||||
	core::stringc Source;
 | 
			
		||||
	core::dimension2du Dimension;
 | 
			
		||||
	bool SourceIsFilename;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Collada texture
 | 
			
		||||
struct SColladaTexture
 | 
			
		||||
{
 | 
			
		||||
	video::ITexture* Texture;
 | 
			
		||||
	core::stringc Id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Collada material
 | 
			
		||||
struct SColladaMaterial
 | 
			
		||||
{
 | 
			
		||||
	video::SMaterial Mat;
 | 
			
		||||
	core::stringc Id;
 | 
			
		||||
	core::stringc InstanceEffectId;
 | 
			
		||||
	f32 Transparency;
 | 
			
		||||
 | 
			
		||||
	inline bool operator< (const SColladaMaterial & other) const
 | 
			
		||||
	{
 | 
			
		||||
		return Id < other.Id;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//! Collada effect (materials, shaders, and programs)
 | 
			
		||||
struct SColladaEffect
 | 
			
		||||
{
 | 
			
		||||
	core::stringc Id;
 | 
			
		||||
	f32 Transparency;
 | 
			
		||||
	core::array<core::stringc> Textures;
 | 
			
		||||
	video::SMaterial Mat;
 | 
			
		||||
	// TODO: Parameters looks somewhat lazy workaround, I think we should really read all parameters correct.
 | 
			
		||||
	io::IAttributes * Parameters;
 | 
			
		||||
 | 
			
		||||
	inline bool operator< (const SColladaEffect & other) const
 | 
			
		||||
	{
 | 
			
		||||
		return Id < other.Id;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct SNumberArray // for storing float and int arrays
 | 
			
		||||
{
 | 
			
		||||
	core::stringc Name;
 | 
			
		||||
	core::array<f32> Data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct SAccessor
 | 
			
		||||
{
 | 
			
		||||
	SAccessor()
 | 
			
		||||
		: Count(0), Offset(0), Stride(1) {}
 | 
			
		||||
	// I don't store the source of the accessor here because I assume
 | 
			
		||||
	// it to use the array of the source this accessor is located in.
 | 
			
		||||
 | 
			
		||||
	int Count;
 | 
			
		||||
	int Offset;
 | 
			
		||||
	int Stride;
 | 
			
		||||
 | 
			
		||||
	core::array<SColladaParam> Parameters; // parameters defining the accessor
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct SSource
 | 
			
		||||
{
 | 
			
		||||
	core::stringc Id;
 | 
			
		||||
	SNumberArray Array;
 | 
			
		||||
	core::array<SAccessor> Accessors;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class CScenePrefab;
 | 
			
		||||
 | 
			
		||||
//! Meshloader capable of loading COLLADA meshes and scene descriptions into Irrlicht.
 | 
			
		||||
class CColladaFileLoader : public IMeshLoader
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! Constructor
 | 
			
		||||
	CColladaFileLoader(scene::ISceneManager* smgr, io::IFileSystem* fs);
 | 
			
		||||
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~CColladaFileLoader();
 | 
			
		||||
 | 
			
		||||
	//! returns true if the file maybe is able to be loaded by this class
 | 
			
		||||
	//! based on the file extension (e.g. ".cob")
 | 
			
		||||
	virtual bool isALoadableFileExtension(const io::path& filename) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! creates/loads an animated mesh from the file.
 | 
			
		||||
	//! \return Pointer to the created mesh. Returns 0 if loading failed.
 | 
			
		||||
	//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
 | 
			
		||||
	//! See IReferenceCounted::drop() for more information.
 | 
			
		||||
	virtual IAnimatedMesh* createMesh(io::IReadFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	//! skips an (unknown) section in the collada document
 | 
			
		||||
	void skipSection(io::IXMLReaderUTF8* reader, bool reportSkipping);
 | 
			
		||||
 | 
			
		||||
	//! reads the <COLLADA> section and its content
 | 
			
		||||
	void readColladaSection(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <library> section and its content
 | 
			
		||||
	void readLibrarySection(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <visual_scene> element and stores it as a prefab
 | 
			
		||||
	void readVisualScene(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <scene> section and its content
 | 
			
		||||
	void readSceneSection(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <asset> section and its content
 | 
			
		||||
	void readAssetSection(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <node> section and its content
 | 
			
		||||
	//! if a prefab pointer is passed the nodes are created as scene prefabs children of that prefab
 | 
			
		||||
	void readNodeSection(io::IXMLReaderUTF8* reader, scene::ISceneNode* parent, CScenePrefab* p=0);
 | 
			
		||||
 | 
			
		||||
	//! reads a <lookat> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readLookAtNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <matrix> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readMatrixNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <perspective> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readPerspectiveNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <rotate> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readRotateNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <skew> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readSkewNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <boundingbox> element and its content and stores it in bbox
 | 
			
		||||
	void readBboxNode(io::IXMLReaderUTF8* reader, core::aabbox3df& bbox);
 | 
			
		||||
 | 
			
		||||
	//! reads a <scale> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readScaleNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <translate> element and its content and creates a matrix from it
 | 
			
		||||
	core::matrix4 readTranslateNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <color> element
 | 
			
		||||
	video::SColorf readColorNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <float> element
 | 
			
		||||
	f32 readFloatNode(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <instance> node
 | 
			
		||||
	void readInstanceNode(io::IXMLReaderUTF8* reader,
 | 
			
		||||
			scene::ISceneNode* parent, scene::ISceneNode** outNode,
 | 
			
		||||
			CScenePrefab* p=0, const core::stringc& type=core::stringc());
 | 
			
		||||
 | 
			
		||||
	//! creates a scene node from Prefabs (with name given in 'url')
 | 
			
		||||
	void instantiateNode(scene::ISceneNode* parent, scene::ISceneNode** outNode=0,
 | 
			
		||||
			CScenePrefab* p=0, const core::stringc& url="",
 | 
			
		||||
			const core::stringc& type=core::stringc());
 | 
			
		||||
 | 
			
		||||
	//! reads a <light> element and stores it as prefab
 | 
			
		||||
	void readLightPrefab(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <camera> element and stores it as prefab
 | 
			
		||||
	void readCameraPrefab(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <image> element and stores it in the image section
 | 
			
		||||
	void readImage(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <texture> element and stores it in the texture section
 | 
			
		||||
	void readTexture(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <material> element and stores it in the material section
 | 
			
		||||
	void readMaterial(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a <effect> element and stores it in the effects section
 | 
			
		||||
	void readEffect(io::IXMLReaderUTF8* reader, SColladaEffect * effect = 0);
 | 
			
		||||
 | 
			
		||||
	//! reads a <geometry> element and stores it as mesh if possible
 | 
			
		||||
	void readGeometry(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! parses a float from a char pointer and moves the pointer to
 | 
			
		||||
	//! the end of the parsed float
 | 
			
		||||
	inline f32 readFloat(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! parses an int from a char pointer and moves the pointer to
 | 
			
		||||
	//! the end of the parsed float
 | 
			
		||||
	inline s32 readInt(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! places pointer to next begin of a token
 | 
			
		||||
	void findNextNoneWhiteSpace(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! reads floats from inside of xml element until end of xml element
 | 
			
		||||
	void readFloatsInsideElement(io::IXMLReaderUTF8* reader, f32* floats, u32 count);
 | 
			
		||||
 | 
			
		||||
	//! reads ints from inside of xml element until end of xml element
 | 
			
		||||
	void readIntsInsideElement(io::IXMLReaderUTF8* reader, s32* ints, u32 count);
 | 
			
		||||
 | 
			
		||||
	//! clears all loaded data
 | 
			
		||||
	void clearData();
 | 
			
		||||
 | 
			
		||||
	//! parses all collada parameters inside an element and stores them in ColladaParameters
 | 
			
		||||
	void readColladaParameters(io::IXMLReaderUTF8* reader, const core::stringc& parentName);
 | 
			
		||||
 | 
			
		||||
	//! returns a collada parameter or none if not found
 | 
			
		||||
	SColladaParam* getColladaParameter(ECOLLADA_PARAM_NAME name);
 | 
			
		||||
 | 
			
		||||
	//! parses all collada inputs inside an element and stores them in Inputs. Reads
 | 
			
		||||
	//! until first tag which is not an input tag or the end of the parent is reached
 | 
			
		||||
	void readColladaInputs(io::IXMLReaderUTF8* reader, const core::stringc& parentName);
 | 
			
		||||
 | 
			
		||||
	//! reads a collada input tag and adds it to the input parameter
 | 
			
		||||
	void readColladaInput(io::IXMLReaderUTF8* reader, core::array<SColladaInput>& inputs);
 | 
			
		||||
 | 
			
		||||
	//! returns a collada input or none if not found
 | 
			
		||||
	SColladaInput* getColladaInput(ECOLLADA_INPUT_SEMANTIC input);
 | 
			
		||||
 | 
			
		||||
	//! read Collada Id, uses id or name if id is missing
 | 
			
		||||
	core::stringc readId(io::IXMLReaderUTF8* reader);
 | 
			
		||||
 | 
			
		||||
	//! changes the XML URI into an internal id
 | 
			
		||||
	void uriToId(core::stringc& str);
 | 
			
		||||
 | 
			
		||||
	//! reads a polygons section and creates a mesh from it
 | 
			
		||||
	void readPolygonSection(io::IXMLReaderUTF8* reader,
 | 
			
		||||
			core::array<SSource>& sources, scene::SMesh* mesh,
 | 
			
		||||
			const core::stringc& geometryId);
 | 
			
		||||
 | 
			
		||||
	//! finds a material, possible instancing it
 | 
			
		||||
	const SColladaMaterial * findMaterial(const core::stringc & materialName);
 | 
			
		||||
 | 
			
		||||
	//! reads and bind materials as given by the symbol->target bind mapping
 | 
			
		||||
	void readBindMaterialSection(io::IXMLReaderUTF8* reader, const core::stringc & id);
 | 
			
		||||
 | 
			
		||||
	//! create an Irrlicht texture from the SColladaImage
 | 
			
		||||
	video::ITexture* getTextureFromImage(core::stringc uri, SColladaEffect * effect);
 | 
			
		||||
 | 
			
		||||
	//! read a parameter and value
 | 
			
		||||
	void readParameter(io::IXMLReaderUTF8* reader, io::IAttributes* parameters);
 | 
			
		||||
 | 
			
		||||
	//! Flip z axis in matrix around to convert between right-handed and left-handed coordinate system.
 | 
			
		||||
	//! Note that function is symmetric (no difference if called before or after a transpose).
 | 
			
		||||
	core::matrix4 flipZAxis(const core::matrix4& m);
 | 
			
		||||
 | 
			
		||||
	//! replace escape characters with the unescaped ones
 | 
			
		||||
	void unescape(irr::core::stringc& uri);
 | 
			
		||||
 | 
			
		||||
	scene::ISceneManager* SceneManager;
 | 
			
		||||
	io::IFileSystem* FileSystem;
 | 
			
		||||
 | 
			
		||||
	scene::IAnimatedMesh* DummyMesh;
 | 
			
		||||
	core::stringc CurrentlyLoadingMesh;
 | 
			
		||||
 | 
			
		||||
	scene::IAnimatedMesh* FirstLoadedMesh;
 | 
			
		||||
	io::path FirstLoadedMeshName;
 | 
			
		||||
	s32 LoadedMeshCount;
 | 
			
		||||
	u32 Version;
 | 
			
		||||
	bool FlipAxis;
 | 
			
		||||
 | 
			
		||||
	core::array<IColladaPrefab*> Prefabs;
 | 
			
		||||
	core::array<SColladaParam> ColladaParameters;
 | 
			
		||||
	core::array<SColladaImage> Images;
 | 
			
		||||
	core::array<SColladaTexture> Textures;
 | 
			
		||||
	core::array<SColladaMaterial> Materials;
 | 
			
		||||
	core::array<SColladaInput> Inputs;
 | 
			
		||||
	core::array<SColladaEffect> Effects;
 | 
			
		||||
	//! meshbuffer reference ("geomid/matname") -> index into MeshesToBind
 | 
			
		||||
	core::map<core::stringc,u32> MaterialsToBind;
 | 
			
		||||
	//! Array of buffers for each material binding
 | 
			
		||||
	core::array< core::array<irr::scene::IMeshBuffer*> > MeshesToBind;
 | 
			
		||||
 | 
			
		||||
	bool CreateInstances;
 | 
			
		||||
 | 
			
		||||
	struct EscapeCharacterURL
 | 
			
		||||
	{
 | 
			
		||||
		EscapeCharacterURL(irr::c8 c, const irr::c8* e)
 | 
			
		||||
			: Character(c)
 | 
			
		||||
		{
 | 
			
		||||
			Escape = e;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		irr::c8 Character;		// unescaped (like ' ')
 | 
			
		||||
		irr::core::stringc Escape;	// escaped (like '%20')
 | 
			
		||||
	};
 | 
			
		||||
	irr::core::array<EscapeCharacterURL> EscapeCharsAnyURI;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! following class is for holding and createing instances of library objects,
 | 
			
		||||
//! named prefabs in this loader.
 | 
			
		||||
class IColladaPrefab : public virtual IReferenceCounted
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	//! creates an instance of this prefab
 | 
			
		||||
	virtual scene::ISceneNode* addInstance(scene::ISceneNode* parent,
 | 
			
		||||
		scene::ISceneManager* mgr) = 0;
 | 
			
		||||
 | 
			
		||||
	//! returns id of this prefab
 | 
			
		||||
	virtual const core::stringc& getId() = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace scene
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,282 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRR_C_COLLADA_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
#define __IRR_C_COLLADA_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IColladaMeshWriter.h"
 | 
			
		||||
#include "S3DVertex.h"
 | 
			
		||||
#include "irrMap.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	class IFileSystem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
	//! Callback interface for properties which can be used to influence collada writing
 | 
			
		||||
	// (Implementer note: keep namespace labels here to make it easier for users copying this one)
 | 
			
		||||
	class CColladaMeshWriterProperties  : public virtual IColladaMeshWriterProperties
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		//! Which lighting model should be used in the technique (FX) section when exporting effects (materials)
 | 
			
		||||
		virtual irr::scene::E_COLLADA_TECHNIQUE_FX getTechniqueFx(const irr::video::SMaterial& material) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Which texture index should be used when writing the texture of the given sampler color.
 | 
			
		||||
		virtual irr::s32 getTextureIdx(const irr::video::SMaterial & material, irr::scene::E_COLLADA_COLOR_SAMPLER cs) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return which color from Irrlicht should be used for the color requested by collada
 | 
			
		||||
		virtual irr::scene::E_COLLADA_IRR_COLOR getColorMapping(const irr::video::SMaterial & material, irr::scene::E_COLLADA_COLOR_SAMPLER cs) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return custom colors for certain color types requested by collada.
 | 
			
		||||
		virtual irr::video::SColor getCustomColor(const irr::video::SMaterial & material, irr::scene::E_COLLADA_COLOR_SAMPLER cs) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return the settings for transparence
 | 
			
		||||
		virtual irr::scene::E_COLLADA_TRANSPARENT_FX getTransparentFx(const irr::video::SMaterial& material) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Transparency value for that material.
 | 
			
		||||
		virtual irr::f32 getTransparency(const irr::video::SMaterial& material) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Reflectivity value for that material
 | 
			
		||||
		virtual irr::f32 getReflectivity(const irr::video::SMaterial& material) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return index of refraction for that material
 | 
			
		||||
		virtual irr::f32 getIndexOfRefraction(const irr::video::SMaterial& material) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Should node be used in scene export? By default all visible nodes are exported.
 | 
			
		||||
		virtual bool isExportable(const irr::scene::ISceneNode * node) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return the mesh for the given nod. If it has no mesh or shouldn't export it's mesh return 0.
 | 
			
		||||
		virtual irr::scene::IMesh* getMesh(irr::scene::ISceneNode * node) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Return if the node has it's own material overwriting the mesh-materials
 | 
			
		||||
		virtual bool useNodeMaterial(const scene::ISceneNode* node) const _IRR_OVERRIDE_;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	class CColladaMeshWriterNames  : public virtual IColladaMeshWriterNames
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		CColladaMeshWriterNames(IColladaMeshWriter * writer);
 | 
			
		||||
		virtual irr::core::stringc nameForMesh(const scene::IMesh* mesh, int instance) _IRR_OVERRIDE_;
 | 
			
		||||
		virtual irr::core::stringc nameForNode(const scene::ISceneNode* node) _IRR_OVERRIDE_;
 | 
			
		||||
		virtual irr::core::stringc nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) _IRR_OVERRIDE_;
 | 
			
		||||
	protected:
 | 
			
		||||
		irr::core::stringc nameForPtr(const void* ptr) const;
 | 
			
		||||
	private:
 | 
			
		||||
		IColladaMeshWriter * ColladaMeshWriter;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! class to write meshes, implementing a COLLADA (.dae, .xml) writer
 | 
			
		||||
/** This writer implementation has been originally developed for irrEdit and then
 | 
			
		||||
merged out to the Irrlicht Engine */
 | 
			
		||||
class CColladaMeshWriter : public IColladaMeshWriter
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	CColladaMeshWriter(ISceneManager * smgr, video::IVideoDriver* driver, io::IFileSystem* fs);
 | 
			
		||||
	virtual ~CColladaMeshWriter();
 | 
			
		||||
 | 
			
		||||
	//! Returns the type of the mesh writer
 | 
			
		||||
	virtual EMESH_WRITER_TYPE getType() const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! writes a scene starting with the given node
 | 
			
		||||
	virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root, int writeRoot) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! writes a mesh
 | 
			
		||||
	virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags=EMWF_NONE) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	// Restrict the characters of oldString a set of allowed characters in xs:NCName and add the prefix.
 | 
			
		||||
	virtual irr::core::stringc toNCName(const irr::core::stringc& oldString, const irr::core::stringc& prefix=irr::core::stringc("_NC_")) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! After export you can find out which name had been used for writing the geometry for this node.
 | 
			
		||||
	virtual const irr::core::stringc* findGeometryNameForNode(ISceneNode* node) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
	void reset();
 | 
			
		||||
	bool hasSecondTextureCoordinates(video::E_VERTEX_TYPE type) const;
 | 
			
		||||
	void writeUv(const irr::core::vector2df& vec);
 | 
			
		||||
	void writeVector(const irr::core::vector3df& vec);
 | 
			
		||||
	void writeColor(const irr::video::SColorf& colorf, bool writeAlpha=true);
 | 
			
		||||
	inline irr::core::stringc toString(const irr::video::ECOLOR_FORMAT format) const;
 | 
			
		||||
	inline irr::core::stringc toString(const irr::video::E_TEXTURE_CLAMP clamp) const;
 | 
			
		||||
	inline irr::core::stringc toString(const irr::scene::E_COLLADA_TRANSPARENT_FX opaque) const;
 | 
			
		||||
	inline irr::core::stringc toRef(const irr::core::stringc& source) const;
 | 
			
		||||
	bool isCamera(const scene::ISceneNode* node) const;
 | 
			
		||||
	irr::core::stringc nameForMesh(const scene::IMesh* mesh, int instance) const;
 | 
			
		||||
	irr::core::stringc nameForNode(const scene::ISceneNode* node) const;
 | 
			
		||||
	irr::core::stringc nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node);
 | 
			
		||||
	irr::core::stringc nameForMaterialSymbol(const scene::IMesh* mesh, int materialId) const;
 | 
			
		||||
	irr::core::stringc findCachedMaterialName(const irr::video::SMaterial& material) const;
 | 
			
		||||
	irr::core::stringc minTexfilterToString(bool bilinear, bool trilinear) const;
 | 
			
		||||
	irr::core::stringc magTexfilterToString(bool bilinear, bool trilinear) const;
 | 
			
		||||
	irr::core::stringc pathToURI(const irr::io::path& path) const;
 | 
			
		||||
	inline bool isXmlNameStartChar(c8 c) const;
 | 
			
		||||
	inline bool isXmlNameChar(c8 c) const;
 | 
			
		||||
	s32 getCheckedTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs);
 | 
			
		||||
	video::SColor getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs, E_COLLADA_IRR_COLOR colType);
 | 
			
		||||
	void writeAsset();
 | 
			
		||||
	void makeMeshNames(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeNodeMaterials(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeNodeEffects(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeNodeLights(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeNodeCameras(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeAllMeshGeometries();
 | 
			
		||||
	void writeSceneNode(irr::scene::ISceneNode * node);
 | 
			
		||||
	void writeMeshMaterials(scene::IMesh* mesh, irr::core::array<irr::core::stringc> * materialNamesOut=0);
 | 
			
		||||
	void writeMeshEffects(scene::IMesh* mesh);
 | 
			
		||||
	void writeMaterialEffect(const irr::core::stringc& materialname, const video::SMaterial & material);
 | 
			
		||||
	void writeMeshGeometry(const irr::core::stringc& meshname, scene::IMesh* mesh);
 | 
			
		||||
	void writeMeshInstanceGeometry(const irr::core::stringc& meshname, scene::IMesh* mesh, scene::ISceneNode* node=0);
 | 
			
		||||
	void writeMaterial(const irr::core::stringc& materialname);
 | 
			
		||||
	void writeLightInstance(const irr::core::stringc& lightName);
 | 
			
		||||
	void writeCameraInstance(const irr::core::stringc& cameraName);
 | 
			
		||||
	void writeLibraryImages();
 | 
			
		||||
	void writeColorFx(const video::SMaterial & material, const c8 * colorname, E_COLLADA_COLOR_SAMPLER cs, const c8* attr1Name=0, const c8* attr1Value=0);
 | 
			
		||||
	void writeAmbientLightElement(const video::SColorf & col);
 | 
			
		||||
	void writeColorElement(const video::SColor & col, bool writeAlpha=true);
 | 
			
		||||
	void writeColorElement(const video::SColorf & col, bool writeAlpha=true);
 | 
			
		||||
	void writeTextureSampler(s32 textureIdx);
 | 
			
		||||
	void writeFxElement(const video::SMaterial & material, E_COLLADA_TECHNIQUE_FX techFx);
 | 
			
		||||
	void writeNode(const c8 * nodeName, const c8 * content);
 | 
			
		||||
	void writeFloatElement(irr::f32 value);
 | 
			
		||||
	void writeRotateElement(const irr::core::vector3df& axis, irr::f32 angle);
 | 
			
		||||
	void writeScaleElement(const irr::core::vector3df& scale);
 | 
			
		||||
	void writeTranslateElement(const irr::core::vector3df& translate);
 | 
			
		||||
	void writeLookAtElement(const irr::core::vector3df& eyePos, const irr::core::vector3df& targetPos, const irr::core::vector3df& upVector);
 | 
			
		||||
	void writeMatrixElement(const irr::core::matrix4& matrix);
 | 
			
		||||
 | 
			
		||||
	struct SComponentGlobalStartPos
 | 
			
		||||
	{
 | 
			
		||||
		SComponentGlobalStartPos() : PosStartIndex(0),
 | 
			
		||||
				NormalStartIndex(0),
 | 
			
		||||
				TCoord0StartIndex(0),
 | 
			
		||||
				TCoord1StartIndex(0)
 | 
			
		||||
		{ }
 | 
			
		||||
 | 
			
		||||
		u32 PosStartIndex;
 | 
			
		||||
		u32 NormalStartIndex;
 | 
			
		||||
		u32 TCoord0StartIndex;
 | 
			
		||||
		u32 TCoord1StartIndex;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	io::IFileSystem* FileSystem;
 | 
			
		||||
	video::IVideoDriver* VideoDriver;
 | 
			
		||||
	io::IXMLWriterUTF8* Writer;
 | 
			
		||||
	core::array<video::ITexture*> LibraryImages;
 | 
			
		||||
	io::path Directory;
 | 
			
		||||
 | 
			
		||||
	// Helper struct for creating geometry copies for the ECGI_PER_MESH_AND_MATERIAL settings.
 | 
			
		||||
	struct SGeometryMeshMaterials
 | 
			
		||||
	{
 | 
			
		||||
		bool equals(const core::array<irr::core::stringc>& names) const
 | 
			
		||||
		{
 | 
			
		||||
			if ( names.size() != MaterialNames.size() )
 | 
			
		||||
				return false;
 | 
			
		||||
			for ( irr::u32 i=0; i<MaterialNames.size(); ++i )
 | 
			
		||||
				if ( names[i] != MaterialNames[i] )
 | 
			
		||||
					return false;
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		irr::core::stringc GeometryName;				// replacing the usual ColladaMesh::Name
 | 
			
		||||
		core::array<irr::core::stringc> MaterialNames;	// Material names exported for this instance
 | 
			
		||||
		core::array<const ISceneNode*> MaterialOwners;	// Nodes using this specific mesh-material combination
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// Check per mesh-ptr if stuff has been written for this mesh already
 | 
			
		||||
	struct SColladaMesh
 | 
			
		||||
	{
 | 
			
		||||
		SColladaMesh() : MaterialsWritten(false), EffectsWritten(false)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		SGeometryMeshMaterials * findGeometryMeshMaterials(const irr::core::array<irr::core::stringc> materialNames)
 | 
			
		||||
		{
 | 
			
		||||
			for ( irr::u32 i=0; i<GeometryMeshMaterials.size(); ++i )
 | 
			
		||||
			{
 | 
			
		||||
				if ( GeometryMeshMaterials[i].equals(materialNames) )
 | 
			
		||||
					return &(GeometryMeshMaterials[i]);
 | 
			
		||||
			}
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		const irr::core::stringc& findGeometryNameForNode(const ISceneNode* node) const
 | 
			
		||||
		{
 | 
			
		||||
			if ( GeometryMeshMaterials.size() < 2 )
 | 
			
		||||
				return Name;
 | 
			
		||||
			for ( irr::u32 i=0; i<GeometryMeshMaterials.size(); ++i )
 | 
			
		||||
			{
 | 
			
		||||
				if ( GeometryMeshMaterials[i].MaterialOwners.linear_search(node)  >= 0 )
 | 
			
		||||
					return GeometryMeshMaterials[i].GeometryName;
 | 
			
		||||
			}
 | 
			
		||||
			return Name; // (shouldn't get here usually)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		irr::core::stringc Name;
 | 
			
		||||
		bool MaterialsWritten;	// just an optimization doing that here in addition to the MaterialsWritten map
 | 
			
		||||
		bool EffectsWritten;	// just an optimization doing that here in addition to the EffectsWritten map
 | 
			
		||||
 | 
			
		||||
		core::array<SGeometryMeshMaterials> GeometryMeshMaterials;
 | 
			
		||||
	};
 | 
			
		||||
	typedef core::map<IMesh*, SColladaMesh>::Node MeshNode;
 | 
			
		||||
	core::map<IMesh*, SColladaMesh> Meshes;
 | 
			
		||||
 | 
			
		||||
	// structure for the lights library
 | 
			
		||||
	struct SColladaLight
 | 
			
		||||
	{
 | 
			
		||||
		SColladaLight()	{}
 | 
			
		||||
		irr::core::stringc Name;
 | 
			
		||||
	};
 | 
			
		||||
	typedef core::map<ISceneNode*, SColladaLight>::Node LightNode;
 | 
			
		||||
	core::map<ISceneNode*, SColladaLight> LightNodes;
 | 
			
		||||
 | 
			
		||||
	// structure for the camera library
 | 
			
		||||
	typedef core::map<ISceneNode*, irr::core::stringc>::Node CameraNode;
 | 
			
		||||
	core::map<ISceneNode*, irr::core::stringc> CameraNodes;
 | 
			
		||||
 | 
			
		||||
	// Check per name if stuff has been written already
 | 
			
		||||
	// TODO: second parameter not needed, we just don't have a core::set class yet in Irrlicht
 | 
			
		||||
	core::map<irr::core::stringc, bool> MaterialsWritten;
 | 
			
		||||
	core::map<irr::core::stringc, bool> EffectsWritten;
 | 
			
		||||
 | 
			
		||||
	// Cache material names
 | 
			
		||||
	struct MaterialName
 | 
			
		||||
	{
 | 
			
		||||
		MaterialName(const irr::video::SMaterial & material, const irr::core::stringc& name)
 | 
			
		||||
			: Material(material), Name(name)
 | 
			
		||||
		{}
 | 
			
		||||
		irr::video::SMaterial Material;
 | 
			
		||||
		irr::core::stringc Name;
 | 
			
		||||
	};
 | 
			
		||||
	irr::core::array< MaterialName > MaterialNameCache;
 | 
			
		||||
 | 
			
		||||
	irr::core::stringc WriteBuffer;	// use for writing short strings to avoid regular memory allocations
 | 
			
		||||
 | 
			
		||||
	struct EscapeCharacterURL
 | 
			
		||||
	{
 | 
			
		||||
		EscapeCharacterURL(irr::c8 c, const irr::c8* e)
 | 
			
		||||
			: Character(c)
 | 
			
		||||
		{
 | 
			
		||||
			Escape = e;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		irr::c8 Character;		// unescaped (like ' ')
 | 
			
		||||
		irr::core::stringc Escape;	// escaped (like '%20')
 | 
			
		||||
	};
 | 
			
		||||
	irr::core::array<EscapeCharacterURL> EscapeCharsAnyURI;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -14,8 +14,6 @@
 | 
			
		||||
#include "CTarReader.h"
 | 
			
		||||
#include "CWADReader.h"
 | 
			
		||||
#include "CFileList.h"
 | 
			
		||||
#include "CXMLReader.h"
 | 
			
		||||
#include "CXMLWriter.h"
 | 
			
		||||
#include "stdio.h"
 | 
			
		||||
#include "os.h"
 | 
			
		||||
#include "CAttributes.h"
 | 
			
		||||
@@ -981,133 +979,6 @@ bool CFileSystem::existFile(const io::path& filename) const
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Reader from a file.
 | 
			
		||||
IXMLReader* CFileSystem::createXMLReader(const io::path& filename)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	IReadFile* file = createAndOpenFile(filename);
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	IXMLReader* reader = createXMLReader(file);
 | 
			
		||||
	file->drop();
 | 
			
		||||
	return reader;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Reader from a file.
 | 
			
		||||
IXMLReader* CFileSystem::createXMLReader(IReadFile* file)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	return createIXMLReader(file);
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Reader from a file.
 | 
			
		||||
IXMLReaderUTF8* CFileSystem::createXMLReaderUTF8(const io::path& filename)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	IReadFile* file = createAndOpenFile(filename);
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	IXMLReaderUTF8* reader = createIXMLReaderUTF8(file);
 | 
			
		||||
	file->drop();
 | 
			
		||||
	return reader;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Reader from a file.
 | 
			
		||||
IXMLReaderUTF8* CFileSystem::createXMLReaderUTF8(IReadFile* file)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	return createIXMLReaderUTF8(file);
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Writer from a file.
 | 
			
		||||
IXMLWriter* CFileSystem::createXMLWriter(const io::path& filename)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	IWriteFile* file = createAndWriteFile(filename);
 | 
			
		||||
	IXMLWriter* writer = 0;
 | 
			
		||||
	if (file)
 | 
			
		||||
	{
 | 
			
		||||
		writer = createXMLWriter(file);
 | 
			
		||||
		file->drop();
 | 
			
		||||
	}
 | 
			
		||||
	return writer;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Writer from a file.
 | 
			
		||||
IXMLWriter* CFileSystem::createXMLWriter(IWriteFile* file)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	return createIXMLWriter(file);
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Writer from a file.
 | 
			
		||||
IXMLWriterUTF8* CFileSystem::createXMLWriterUTF8(const io::path& filename)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	IWriteFile* file = createAndWriteFile(filename);
 | 
			
		||||
	IXMLWriterUTF8* writer = 0;
 | 
			
		||||
	if (file)
 | 
			
		||||
	{
 | 
			
		||||
		writer = createXMLWriterUTF8(file);
 | 
			
		||||
		file->drop();
 | 
			
		||||
	}
 | 
			
		||||
	return writer;
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates a XML Writer from a file.
 | 
			
		||||
IXMLWriterUTF8* CFileSystem::createXMLWriterUTF8(IWriteFile* file)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	return createIXMLWriterUTF8(file);
 | 
			
		||||
#else
 | 
			
		||||
	noXML();
 | 
			
		||||
	return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! creates a filesystem which is able to open files from the ordinary file system,
 | 
			
		||||
//! and out of zipfiles, which are able to be added to the filesystem.
 | 
			
		||||
IFileSystem* createFileSystem()
 | 
			
		||||
 
 | 
			
		||||
@@ -127,30 +127,6 @@ public:
 | 
			
		||||
	//! determines if a file exists and would be able to be opened.
 | 
			
		||||
	virtual bool existFile(const io::path& filename) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file.
 | 
			
		||||
	virtual IXMLReader* createXMLReader(const io::path& filename) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file.
 | 
			
		||||
	virtual IXMLReader* createXMLReader(IReadFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file.
 | 
			
		||||
	virtual IXMLReaderUTF8* createXMLReaderUTF8(const io::path& filename) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Reader from a file.
 | 
			
		||||
	virtual IXMLReaderUTF8* createXMLReaderUTF8(IReadFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file.
 | 
			
		||||
	virtual IXMLWriter* createXMLWriter(const io::path& filename) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file.
 | 
			
		||||
	virtual IXMLWriter* createXMLWriter(IWriteFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file which will write ASCII/UTF-8 characters (char*).
 | 
			
		||||
	virtual IXMLWriterUTF8* createXMLWriterUTF8(const path& filename) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a XML Writer from a file which will write ASCII/UTF-8 characters (char*).
 | 
			
		||||
	virtual IXMLWriterUTF8* createXMLWriterUTF8(IWriteFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Creates a new empty collection of attributes, usable for serialization and more.
 | 
			
		||||
	virtual IAttributes* createEmptyAttributes(video::IVideoDriver* driver) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,6 @@
 | 
			
		||||
 | 
			
		||||
#include "CDefaultGUIElementFactory.h"
 | 
			
		||||
#include "IWriteFile.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
#include "BuiltInFont.h"
 | 
			
		||||
#include "os.h"
 | 
			
		||||
@@ -49,10 +48,6 @@ namespace irr
 | 
			
		||||
namespace gui
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
const wchar_t IRR_XML_FORMAT_GUI_ENV[]			= L"irr_gui";
 | 
			
		||||
const wchar_t IRR_XML_FORMAT_GUI_ELEMENT[]		= L"element";
 | 
			
		||||
const wchar_t IRR_XML_FORMAT_GUI_ELEMENT_ATTR_TYPE[]	= L"type";
 | 
			
		||||
 | 
			
		||||
const io::path CGUIEnvironment::DefaultFontName = "#DefaultFont";
 | 
			
		||||
 | 
			
		||||
//! constructor
 | 
			
		||||
@@ -788,22 +783,7 @@ bool CGUIEnvironment::saveGUI(const io::path& filename, IGUIElement* start)
 | 
			
		||||
//! Saves the current gui into a file.
 | 
			
		||||
bool CGUIEnvironment::saveGUI(io::IWriteFile* file, IGUIElement* start)
 | 
			
		||||
{
 | 
			
		||||
	if (!file)
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	io::IXMLWriter* writer = FileSystem->createXMLWriter(file);
 | 
			
		||||
	if (!writer)
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	writer->writeXMLHeader();
 | 
			
		||||
	writeGUIElement(writer, start ? start : this);
 | 
			
		||||
	writer->drop();
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -828,170 +808,7 @@ bool CGUIEnvironment::loadGUI(const io::path& filename, IGUIElement* parent)
 | 
			
		||||
//! Loads the gui. Note that the current gui is not cleared before.
 | 
			
		||||
bool CGUIEnvironment::loadGUI(io::IReadFile* file, IGUIElement* parent)
 | 
			
		||||
{
 | 
			
		||||
	if (!file)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("Unable to open GUI file", ELL_ERROR);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	io::IXMLReader* reader = FileSystem->createXMLReader(file);
 | 
			
		||||
	if (!reader)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("GUI is not a valid XML file", file->getFileName(), ELL_ERROR);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// read file
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		readGUIElement(reader, parent);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// finish up
 | 
			
		||||
 | 
			
		||||
	reader->drop();
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads an element
 | 
			
		||||
void CGUIEnvironment::readGUIElement(io::IXMLReader* reader, IGUIElement* node)
 | 
			
		||||
{
 | 
			
		||||
	if (!reader)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	io::EXML_NODE nodeType = reader->getNodeType();
 | 
			
		||||
 | 
			
		||||
	if (nodeType == io::EXN_NONE || nodeType == io::EXN_UNKNOWN || nodeType == io::EXN_ELEMENT_END)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	IGUIElement* deferedNode = 0;
 | 
			
		||||
	if (!wcscmp(IRR_XML_FORMAT_GUI_ENV, reader->getNodeName()))
 | 
			
		||||
	{
 | 
			
		||||
		// GuiEnvironment always must be this as it would serialize into a wrong element otherwise.
 | 
			
		||||
		// So we use the given node next time
 | 
			
		||||
		if ( node && node != this )
 | 
			
		||||
			deferedNode = node;
 | 
			
		||||
		node = this; // root
 | 
			
		||||
	}
 | 
			
		||||
	else if	(!wcscmp(IRR_XML_FORMAT_GUI_ELEMENT, reader->getNodeName()))
 | 
			
		||||
	{
 | 
			
		||||
		// find node type and create it
 | 
			
		||||
		const core::stringc attrName = reader->getAttributeValue(IRR_XML_FORMAT_GUI_ELEMENT_ATTR_TYPE);
 | 
			
		||||
 | 
			
		||||
		node = addGUIElement(attrName.c_str(), node);
 | 
			
		||||
 | 
			
		||||
		if (!node)
 | 
			
		||||
			os::Printer::log("Could not create GUI element of unknown type", attrName.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// read attributes
 | 
			
		||||
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		bool endreached = false;
 | 
			
		||||
 | 
			
		||||
		switch (reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if (!wcscmp(IRR_XML_FORMAT_GUI_ELEMENT,  reader->getNodeName()) ||
 | 
			
		||||
				!wcscmp(IRR_XML_FORMAT_GUI_ENV, reader->getNodeName()))
 | 
			
		||||
			{
 | 
			
		||||
				endreached = true;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			if (!wcscmp(L"attributes", reader->getNodeName()))
 | 
			
		||||
			{
 | 
			
		||||
				// read attributes
 | 
			
		||||
				io::IAttributes* attr = FileSystem->createEmptyAttributes(Driver);
 | 
			
		||||
				attr->read(reader, true);
 | 
			
		||||
 | 
			
		||||
				if (node)
 | 
			
		||||
					node->deserializeAttributes(attr);
 | 
			
		||||
 | 
			
		||||
				attr->drop();
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (!wcscmp(IRR_XML_FORMAT_GUI_ELEMENT, reader->getNodeName()) ||
 | 
			
		||||
				!wcscmp(IRR_XML_FORMAT_GUI_ENV, reader->getNodeName()))
 | 
			
		||||
			{
 | 
			
		||||
				if ( deferedNode )
 | 
			
		||||
					readGUIElement(reader, deferedNode);
 | 
			
		||||
				else
 | 
			
		||||
					readGUIElement(reader, node);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				os::Printer::log("Found unknown element in irrlicht GUI file",
 | 
			
		||||
						core::stringc(reader->getNodeName()).c_str());
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (endreached)
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! writes an element
 | 
			
		||||
void CGUIEnvironment::writeGUIElement(io::IXMLWriter* writer, IGUIElement* node)
 | 
			
		||||
{
 | 
			
		||||
	if (!writer || !node )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	const wchar_t* name = 0;
 | 
			
		||||
 | 
			
		||||
	// write properties
 | 
			
		||||
 | 
			
		||||
	io::IAttributes* attr = FileSystem->createEmptyAttributes();
 | 
			
		||||
	node->serializeAttributes(attr);
 | 
			
		||||
 | 
			
		||||
	// all gui elements must have at least one attribute
 | 
			
		||||
	// if they have nothing then we ignore them.
 | 
			
		||||
	if (attr->getAttributeCount() != 0)
 | 
			
		||||
	{
 | 
			
		||||
		if (node == this)
 | 
			
		||||
		{
 | 
			
		||||
			name = IRR_XML_FORMAT_GUI_ENV;
 | 
			
		||||
			writer->writeElement(name, false);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			name = IRR_XML_FORMAT_GUI_ELEMENT;
 | 
			
		||||
			writer->writeElement(name, false, IRR_XML_FORMAT_GUI_ELEMENT_ATTR_TYPE,
 | 
			
		||||
				core::stringw(node->getTypeName()).c_str());
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
		attr->write(writer);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write children
 | 
			
		||||
 | 
			
		||||
	core::list<IGUIElement*>::ConstIterator it = node->getChildren().begin();
 | 
			
		||||
	for (; it != node->getChildren().end(); ++it)
 | 
			
		||||
	{
 | 
			
		||||
		if (!(*it)->isSubElement())
 | 
			
		||||
		{
 | 
			
		||||
			writer->writeLineBreak();
 | 
			
		||||
			writeGUIElement(writer, (*it));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write closing brace if required
 | 
			
		||||
	if (attr->getAttributeCount() != 0)
 | 
			
		||||
	{
 | 
			
		||||
		writer->writeClosingTag(name);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	attr->drop();
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1460,35 +1277,7 @@ IGUIFont* CGUIEnvironment::getFont(const io::path& filename)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	IGUIFont* ifont=0;
 | 
			
		||||
	io::IXMLReader *xml = FileSystem->createXMLReader(filename );
 | 
			
		||||
	if (xml)
 | 
			
		||||
	{
 | 
			
		||||
		// this is an XML font, but we need to know what type
 | 
			
		||||
		EGUI_FONT_TYPE t = EGFT_CUSTOM;
 | 
			
		||||
 | 
			
		||||
		bool found=false;
 | 
			
		||||
		while(!found && xml->read())
 | 
			
		||||
		{
 | 
			
		||||
			if (xml->getNodeType() == io::EXN_ELEMENT)
 | 
			
		||||
			{
 | 
			
		||||
				if (core::stringw(L"font") == xml->getNodeName())
 | 
			
		||||
				{
 | 
			
		||||
					if (core::stringw(L"vector") == xml->getAttributeValue(L"type"))
 | 
			
		||||
					{
 | 
			
		||||
						t = EGFT_VECTOR;
 | 
			
		||||
						found=true;
 | 
			
		||||
					}
 | 
			
		||||
					else if (core::stringw(L"bitmap") == xml->getAttributeValue(L"type"))
 | 
			
		||||
					{
 | 
			
		||||
						t = EGFT_BITMAP;
 | 
			
		||||
						found=true;
 | 
			
		||||
					}
 | 
			
		||||
					else found=true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (t==EGFT_BITMAP)
 | 
			
		||||
#if 0
 | 
			
		||||
		{
 | 
			
		||||
			CGUIFont* font = new CGUIFont(this, filename);
 | 
			
		||||
			ifont = (IGUIFont*)font;
 | 
			
		||||
@@ -1503,17 +1292,7 @@ IGUIFont* CGUIEnvironment::getFont(const io::path& filename)
 | 
			
		||||
				ifont = 0;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if (t==EGFT_VECTOR)
 | 
			
		||||
		{
 | 
			
		||||
			// todo: vector fonts
 | 
			
		||||
			os::Printer::log("Unable to load font, XML vector fonts are not supported yet", f.NamedPath, ELL_ERROR);
 | 
			
		||||
 | 
			
		||||
			//CGUIFontVector* font = new CGUIFontVector(Driver);
 | 
			
		||||
			//ifont = (IGUIFont*)font;
 | 
			
		||||
			//if (!font->load(xml))
 | 
			
		||||
		}
 | 
			
		||||
		xml->drop();
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (!ifont)
 | 
			
		||||
 
 | 
			
		||||
@@ -254,12 +254,6 @@ public:
 | 
			
		||||
	//! Reads attributes of the environment.
 | 
			
		||||
	virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! writes an element
 | 
			
		||||
	virtual void writeGUIElement(io::IXMLWriter* writer, IGUIElement* node) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! reads an element
 | 
			
		||||
	virtual void readGUIElement(io::IXMLReader* reader, IGUIElement* node) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Find the next element which would be selected when pressing the tab-key
 | 
			
		||||
	virtual IGUIElement* getNextElement(bool reverse=false, bool group=false) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,6 @@
 | 
			
		||||
#include "os.h"
 | 
			
		||||
#include "coreutil.h"
 | 
			
		||||
#include "IGUIEnvironment.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IReadFile.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "IGUISpriteBank.h"
 | 
			
		||||
@@ -63,6 +62,7 @@ CGUIFont::~CGUIFont()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
//! loads a font file from xml
 | 
			
		||||
bool CGUIFont::load(io::IXMLReader* xml, const io::path& directory)
 | 
			
		||||
{
 | 
			
		||||
@@ -195,6 +195,7 @@ bool CGUIFont::load(io::IXMLReader* xml, const io::path& directory)
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CGUIFont::setMaxHeight()
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@
 | 
			
		||||
#include "IGUIFontBitmap.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "irrMap.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "IReadFile.h"
 | 
			
		||||
#include "irrArray.h"
 | 
			
		||||
 | 
			
		||||
@@ -45,10 +44,6 @@ public:
 | 
			
		||||
	//! loads a font from a texture file
 | 
			
		||||
	bool load(io::IReadFile* file);
 | 
			
		||||
 | 
			
		||||
	//! loads a font from an XML file
 | 
			
		||||
	//\param directory Directory in which the bitmaps can be found
 | 
			
		||||
	bool load(io::IXMLReader* xml, const io::path& directory);
 | 
			
		||||
 | 
			
		||||
	//! draws an text and clips it to the specified rectangle if wanted
 | 
			
		||||
	virtual void draw(const core::stringw& text, const core::rect<s32>& position,
 | 
			
		||||
			video::SColor color, bool hcenter=false,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,556 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#include "IrrCompileConfig.h"
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
 | 
			
		||||
#include "CIrrMeshFileLoader.h"
 | 
			
		||||
#include "os.h"
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
#include "SAnimatedMesh.h"
 | 
			
		||||
#include "fast_atof.h"
 | 
			
		||||
#include "IReadFile.h"
 | 
			
		||||
#include "IAttributes.h"
 | 
			
		||||
#include "IMeshSceneNode.h"
 | 
			
		||||
#include "CDynamicMeshBuffer.h"
 | 
			
		||||
#include "SMeshBufferLightMap.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Constructor
 | 
			
		||||
CIrrMeshFileLoader::CIrrMeshFileLoader(scene::ISceneManager* smgr,
 | 
			
		||||
		io::IFileSystem* fs)
 | 
			
		||||
	: SceneManager(smgr), FileSystem(fs)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	#ifdef _DEBUG
 | 
			
		||||
	setDebugName("CIrrMeshFileLoader");
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Returns true if the file maybe is able to be loaded by this class.
 | 
			
		||||
/** This decision should be based only on the file extension (e.g. ".cob") */
 | 
			
		||||
bool CIrrMeshFileLoader::isALoadableFileExtension(const io::path& filename) const
 | 
			
		||||
{
 | 
			
		||||
	return core::hasFileExtension ( filename, "xml", "irrmesh" );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! creates/loads an animated mesh from the file.
 | 
			
		||||
//! \return Pointer to the created mesh. Returns 0 if loading failed.
 | 
			
		||||
//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
 | 
			
		||||
//! See IReferenceCounted::drop() for more information.
 | 
			
		||||
IAnimatedMesh* CIrrMeshFileLoader::createMesh(io::IReadFile* file)
 | 
			
		||||
{
 | 
			
		||||
	io::IXMLReader* reader = FileSystem->createXMLReader(file);
 | 
			
		||||
	if (!reader)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	// read until mesh section, skip other parts
 | 
			
		||||
 | 
			
		||||
	const core::stringc meshTagName = "mesh";
 | 
			
		||||
	IAnimatedMesh* mesh = 0;
 | 
			
		||||
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT)
 | 
			
		||||
		{
 | 
			
		||||
			if (meshTagName == reader->getNodeName())
 | 
			
		||||
			{
 | 
			
		||||
				mesh = readMesh(reader);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
				skipSection(reader, true); // unknown section
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	reader->drop();
 | 
			
		||||
 | 
			
		||||
	return mesh;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads a mesh sections and creates a mesh from it
 | 
			
		||||
IAnimatedMesh* CIrrMeshFileLoader::readMesh(io::IXMLReader* reader)
 | 
			
		||||
{
 | 
			
		||||
	SAnimatedMesh* animatedmesh = new SAnimatedMesh();
 | 
			
		||||
	SMesh* mesh = new SMesh();
 | 
			
		||||
 | 
			
		||||
	animatedmesh->addMesh(mesh);
 | 
			
		||||
	mesh->drop();
 | 
			
		||||
 | 
			
		||||
	core::stringc bbSectionName = "boundingBox";
 | 
			
		||||
	core::stringc bufferSectionName = "buffer";
 | 
			
		||||
	core::stringc meshSectionName = "mesh";
 | 
			
		||||
 | 
			
		||||
	if (!reader->isEmptyElement())
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT)
 | 
			
		||||
		{
 | 
			
		||||
			const wchar_t* nodeName = reader->getNodeName();
 | 
			
		||||
			if (bbSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				// inside a bounding box, ignore it for now because
 | 
			
		||||
				// we are calculating this anyway ourselves later.
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (bufferSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				// we've got a mesh buffer
 | 
			
		||||
 | 
			
		||||
				IMeshBuffer* buffer = readMeshBuffer(reader);
 | 
			
		||||
				if (buffer)
 | 
			
		||||
				{
 | 
			
		||||
					mesh->addMeshBuffer(buffer);
 | 
			
		||||
					buffer->drop();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
				skipSection(reader, true); // unknown section
 | 
			
		||||
 | 
			
		||||
		} // end if node type is element
 | 
			
		||||
		else
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT_END)
 | 
			
		||||
		{
 | 
			
		||||
			if (meshSectionName == reader->getNodeName())
 | 
			
		||||
			{
 | 
			
		||||
				// end of mesh section reached, cancel out
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} // end while reader->read();
 | 
			
		||||
 | 
			
		||||
	mesh->recalculateBoundingBox();
 | 
			
		||||
	animatedmesh->recalculateBoundingBox();
 | 
			
		||||
 | 
			
		||||
	return animatedmesh;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads a mesh sections and creates a mesh buffer from it
 | 
			
		||||
IMeshBuffer* CIrrMeshFileLoader::readMeshBuffer(io::IXMLReader* reader)
 | 
			
		||||
{
 | 
			
		||||
	CDynamicMeshBuffer* buffer = 0;
 | 
			
		||||
 | 
			
		||||
	core::stringc verticesSectionName = "vertices";
 | 
			
		||||
	core::stringc bbSectionName = "boundingBox";
 | 
			
		||||
	core::stringc materialSectionName = "material";
 | 
			
		||||
	core::stringc indicesSectionName = "indices";
 | 
			
		||||
	core::stringc bufferSectionName = "buffer";
 | 
			
		||||
 | 
			
		||||
	bool insideVertexSection = false;
 | 
			
		||||
	bool insideIndexSection = false;
 | 
			
		||||
 | 
			
		||||
	int vertexCount = 0;
 | 
			
		||||
	int indexCount = 0;
 | 
			
		||||
 | 
			
		||||
	video::SMaterial material;
 | 
			
		||||
 | 
			
		||||
	if (!reader->isEmptyElement())
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT)
 | 
			
		||||
		{
 | 
			
		||||
			const wchar_t* nodeName = reader->getNodeName();
 | 
			
		||||
			if (bbSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				// inside a bounding box, ignore it for now because
 | 
			
		||||
				// we are calculating this anyway ourselves later.
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (materialSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				//we've got a material
 | 
			
		||||
 | 
			
		||||
				material = video::SMaterial();	// reset
 | 
			
		||||
 | 
			
		||||
				io::IAttributes* attributes = FileSystem->createEmptyAttributes(SceneManager->getVideoDriver());
 | 
			
		||||
				attributes->read(reader, true, L"material");
 | 
			
		||||
 | 
			
		||||
				SceneManager->getVideoDriver()->fillMaterialStructureFromAttributes(material, attributes);
 | 
			
		||||
				attributes->drop();
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (verticesSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				// vertices section
 | 
			
		||||
 | 
			
		||||
				const core::stringc vertexTypeName1 = "standard";
 | 
			
		||||
				const core::stringc vertexTypeName2 = "2tcoords";
 | 
			
		||||
				const core::stringc vertexTypeName3 = "tangents";
 | 
			
		||||
 | 
			
		||||
				const wchar_t* vertexType = reader->getAttributeValue(L"type");
 | 
			
		||||
				vertexCount = reader->getAttributeValueAsInt(L"vertexCount");
 | 
			
		||||
 | 
			
		||||
				insideVertexSection = true;
 | 
			
		||||
 | 
			
		||||
				video::E_INDEX_TYPE itype = (vertexCount > 65536)?irr::video::EIT_32BIT:irr::video::EIT_16BIT;
 | 
			
		||||
				if (vertexTypeName1 == vertexType)
 | 
			
		||||
				{
 | 
			
		||||
					buffer = new CDynamicMeshBuffer(irr::video::EVT_STANDARD, itype);
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				if (vertexTypeName2 == vertexType)
 | 
			
		||||
				{
 | 
			
		||||
					buffer = new CDynamicMeshBuffer(irr::video::EVT_2TCOORDS, itype);
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				if (vertexTypeName3 == vertexType)
 | 
			
		||||
				{
 | 
			
		||||
					buffer = new CDynamicMeshBuffer(irr::video::EVT_TANGENTS, itype);
 | 
			
		||||
				}
 | 
			
		||||
				buffer->getVertexBuffer().reallocate(vertexCount);
 | 
			
		||||
				buffer->Material = material;
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (indicesSectionName == nodeName)
 | 
			
		||||
			{
 | 
			
		||||
				// indices section
 | 
			
		||||
 | 
			
		||||
				indexCount = reader->getAttributeValueAsInt(L"indexCount");
 | 
			
		||||
				insideIndexSection = true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		} // end if node type is element
 | 
			
		||||
		else
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_TEXT)
 | 
			
		||||
		{
 | 
			
		||||
			// read vertex data
 | 
			
		||||
			if (insideVertexSection)
 | 
			
		||||
			{
 | 
			
		||||
				readMeshBuffer(reader, vertexCount, buffer);
 | 
			
		||||
				insideVertexSection = false;
 | 
			
		||||
 | 
			
		||||
			} // end reading vertex array
 | 
			
		||||
			else
 | 
			
		||||
			if (insideIndexSection)
 | 
			
		||||
			{
 | 
			
		||||
				readIndices(reader, indexCount, buffer->getIndexBuffer());
 | 
			
		||||
				insideIndexSection = false;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		} // end if node type is text
 | 
			
		||||
		else
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT_END)
 | 
			
		||||
		{
 | 
			
		||||
			if (bufferSectionName == reader->getNodeName())
 | 
			
		||||
			{
 | 
			
		||||
				// end of buffer section reached, cancel out
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	} // end while reader->read();
 | 
			
		||||
 | 
			
		||||
	if (buffer)
 | 
			
		||||
		buffer->recalculateBoundingBox();
 | 
			
		||||
 | 
			
		||||
	return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! read indices
 | 
			
		||||
void CIrrMeshFileLoader::readIndices(io::IXMLReader* reader, int indexCount, IIndexBuffer& indices)
 | 
			
		||||
{
 | 
			
		||||
	indices.reallocate(indexCount);
 | 
			
		||||
 | 
			
		||||
	core::stringc data = reader->getNodeData();
 | 
			
		||||
	const c8* p = &data[0];
 | 
			
		||||
 | 
			
		||||
	for (int i=0; i<indexCount && *p; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		findNextNoneWhiteSpace(&p);
 | 
			
		||||
		indices.push_back(readInt(&p));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CIrrMeshFileLoader::readMeshBuffer(io::IXMLReader* reader, int vertexCount, CDynamicMeshBuffer* sbuffer)
 | 
			
		||||
{
 | 
			
		||||
	core::stringc data = reader->getNodeData();
 | 
			
		||||
	const c8* p = &data[0];
 | 
			
		||||
	scene::IVertexBuffer& Vertices = sbuffer->getVertexBuffer();
 | 
			
		||||
	video::E_VERTEX_TYPE vType = Vertices.getType();
 | 
			
		||||
 | 
			
		||||
	if (sbuffer)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<vertexCount && *p; ++i)
 | 
			
		||||
		{
 | 
			
		||||
			switch(vType)
 | 
			
		||||
			{
 | 
			
		||||
			case video::EVT_STANDARD:
 | 
			
		||||
			{
 | 
			
		||||
				video::S3DVertex vtx;
 | 
			
		||||
				// position
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// normal
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// color
 | 
			
		||||
 | 
			
		||||
				u32 col;
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				sscanf(p, "%08x", &col);
 | 
			
		||||
				vtx.Color.set(col);
 | 
			
		||||
				skipCurrentNoneWhiteSpace(&p);
 | 
			
		||||
 | 
			
		||||
				// tcoord1
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.Y = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				Vertices.push_back(vtx);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
			case video::EVT_2TCOORDS:
 | 
			
		||||
			{
 | 
			
		||||
				video::S3DVertex2TCoords vtx;
 | 
			
		||||
				// position
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// normal
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// color
 | 
			
		||||
 | 
			
		||||
				u32 col;
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				sscanf(p, "%08x", &col);
 | 
			
		||||
				vtx.Color.set(col);
 | 
			
		||||
				skipCurrentNoneWhiteSpace(&p);
 | 
			
		||||
 | 
			
		||||
				// tcoord1
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.Y = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// tcoord2
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords2.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords2.Y = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				Vertices.push_back(vtx);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
			case video::EVT_TANGENTS:
 | 
			
		||||
			{
 | 
			
		||||
				video::S3DVertexTangents vtx;
 | 
			
		||||
				// position
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Pos.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// normal
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Normal.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// color
 | 
			
		||||
 | 
			
		||||
				u32 col;
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				sscanf(p, "%08x", &col);
 | 
			
		||||
				vtx.Color.set(col);
 | 
			
		||||
				skipCurrentNoneWhiteSpace(&p);
 | 
			
		||||
 | 
			
		||||
				// tcoord1
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.TCoords.Y = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// tangent
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Tangent.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Tangent.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Tangent.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				// binormal
 | 
			
		||||
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Binormal.X = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Binormal.Y = readFloat(&p);
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				vtx.Binormal.Z = readFloat(&p);
 | 
			
		||||
 | 
			
		||||
				Vertices.push_back(vtx);
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
			};
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! skips an (unknown) section in the irrmesh document
 | 
			
		||||
void CIrrMeshFileLoader::skipSection(io::IXMLReader* reader, bool reportSkipping)
 | 
			
		||||
{
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
	os::Printer::log("irrMesh skipping section", core::stringc(reader->getNodeName()).c_str());
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	// skip if this element is empty anyway.
 | 
			
		||||
	if (reader->isEmptyElement())
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	// read until we've reached the last element in this section
 | 
			
		||||
	u32 tagCounter = 1;
 | 
			
		||||
 | 
			
		||||
	while(tagCounter && reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT &&
 | 
			
		||||
			!reader->isEmptyElement())
 | 
			
		||||
		{
 | 
			
		||||
			#ifdef _DEBUG
 | 
			
		||||
			if (reportSkipping)
 | 
			
		||||
				os::Printer::log("irrMesh unknown element:", core::stringc(reader->getNodeName()).c_str());
 | 
			
		||||
			#endif
 | 
			
		||||
 | 
			
		||||
			++tagCounter;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT_END)
 | 
			
		||||
			--tagCounter;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! parses a float from a char pointer and moves the pointer
 | 
			
		||||
//! to the end of the parsed float
 | 
			
		||||
inline f32 CIrrMeshFileLoader::readFloat(const c8** p)
 | 
			
		||||
{
 | 
			
		||||
	f32 ftmp;
 | 
			
		||||
	*p = core::fast_atof_move(*p, ftmp);
 | 
			
		||||
	return ftmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! parses an int from a char pointer and moves the pointer to
 | 
			
		||||
//! the end of the parsed float
 | 
			
		||||
inline s32 CIrrMeshFileLoader::readInt(const c8** p)
 | 
			
		||||
{
 | 
			
		||||
	return (s32)readFloat(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! places pointer to next begin of a token
 | 
			
		||||
void CIrrMeshFileLoader::skipCurrentNoneWhiteSpace(const c8** start)
 | 
			
		||||
{
 | 
			
		||||
	const c8* p = *start;
 | 
			
		||||
 | 
			
		||||
	while(*p && !(*p==' ' || *p=='\n' || *p=='\r' || *p=='\t'))
 | 
			
		||||
		++p;
 | 
			
		||||
 | 
			
		||||
	// TODO: skip comments <!-- -->
 | 
			
		||||
 | 
			
		||||
	*start = p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! places pointer to next begin of a token
 | 
			
		||||
void CIrrMeshFileLoader::findNextNoneWhiteSpace(const c8** start)
 | 
			
		||||
{
 | 
			
		||||
	const c8* p = *start;
 | 
			
		||||
 | 
			
		||||
	while(*p && (*p==' ' || *p=='\n' || *p=='\r' || *p=='\t'))
 | 
			
		||||
		++p;
 | 
			
		||||
 | 
			
		||||
	// TODO: skip comments <!-- -->
 | 
			
		||||
 | 
			
		||||
	*start = p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads floats from inside of xml element until end of xml element
 | 
			
		||||
void CIrrMeshFileLoader::readFloatsInsideElement(io::IXMLReader* reader, f32* floats, u32 count)
 | 
			
		||||
{
 | 
			
		||||
	if (reader->isEmptyElement())
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		// TODO: check for comments inside the element
 | 
			
		||||
		// and ignore them.
 | 
			
		||||
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_TEXT)
 | 
			
		||||
		{
 | 
			
		||||
			// parse float data
 | 
			
		||||
			core::stringc data = reader->getNodeData();
 | 
			
		||||
			const c8* p = &data[0];
 | 
			
		||||
 | 
			
		||||
			for (u32 i=0; i<count; ++i)
 | 
			
		||||
			{
 | 
			
		||||
				findNextNoneWhiteSpace(&p);
 | 
			
		||||
				if (*p)
 | 
			
		||||
					floats[i] = readFloat(&p);
 | 
			
		||||
				else
 | 
			
		||||
					floats[i] = 0.0f;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (reader->getNodeType() == io::EXN_ELEMENT_END)
 | 
			
		||||
			break; // end parsing text
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace scene
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
@@ -1,90 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __C_IRR_MESH_FILE_LOADER_H_INCLUDED__
 | 
			
		||||
#define __C_IRR_MESH_FILE_LOADER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IMeshLoader.h"
 | 
			
		||||
#include "IFileSystem.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "SMesh.h"
 | 
			
		||||
#include "SMeshBuffer.h"
 | 
			
		||||
#include "CDynamicMeshBuffer.h"
 | 
			
		||||
#include "ISceneManager.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Meshloader capable of loading .irrmesh meshes, the Irrlicht Engine mesh format for static meshes
 | 
			
		||||
class CIrrMeshFileLoader : public IMeshLoader
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! Constructor
 | 
			
		||||
	CIrrMeshFileLoader(scene::ISceneManager* smgr, io::IFileSystem* fs);
 | 
			
		||||
 | 
			
		||||
	//! returns true if the file maybe is able to be loaded by this class
 | 
			
		||||
	//! based on the file extension (e.g. ".cob")
 | 
			
		||||
	virtual bool isALoadableFileExtension(const io::path& filename) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! creates/loads an animated mesh from the file.
 | 
			
		||||
	//! \return Pointer to the created mesh. Returns 0 if loading failed.
 | 
			
		||||
	//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
 | 
			
		||||
	//! See IReferenceCounted::drop() for more information.
 | 
			
		||||
	virtual IAnimatedMesh* createMesh(io::IReadFile* file) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	//! reads a mesh sections and creates a mesh from it
 | 
			
		||||
	IAnimatedMesh* readMesh(io::IXMLReader* reader);
 | 
			
		||||
 | 
			
		||||
	//! reads a mesh sections and creates a mesh buffer from it
 | 
			
		||||
	IMeshBuffer* readMeshBuffer(io::IXMLReader* reader);
 | 
			
		||||
 | 
			
		||||
	//! skips an (unknown) section in the irrmesh file
 | 
			
		||||
	void skipSection(io::IXMLReader* reader, bool reportSkipping);
 | 
			
		||||
 | 
			
		||||
	//! reads a <material> element and stores it in the material section
 | 
			
		||||
	void readMaterial(io::IXMLReader* reader);
 | 
			
		||||
 | 
			
		||||
	//! parses a float from a char pointer and moves the pointer to
 | 
			
		||||
	//! the end of the parsed float
 | 
			
		||||
	inline f32 readFloat(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! parses an int from a char pointer and moves the pointer to
 | 
			
		||||
	//! the end of the parsed float
 | 
			
		||||
	inline s32 readInt(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! places pointer to next begin of a token
 | 
			
		||||
	void findNextNoneWhiteSpace(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! places pointer to next begin of a token
 | 
			
		||||
	void skipCurrentNoneWhiteSpace(const c8** p);
 | 
			
		||||
 | 
			
		||||
	//! reads floats from inside of xml element until end of xml element
 | 
			
		||||
	void readFloatsInsideElement(io::IXMLReader* reader, f32* floats, u32 count);
 | 
			
		||||
 | 
			
		||||
	//! read the mesh buffers
 | 
			
		||||
	void readMeshBuffer(io::IXMLReader* reader, int vertexCount, CDynamicMeshBuffer* sbuffer);
 | 
			
		||||
 | 
			
		||||
	//! read indices
 | 
			
		||||
	void readIndices(io::IXMLReader* reader, int indexCount, IIndexBuffer& indices);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// member variables
 | 
			
		||||
 | 
			
		||||
	scene::ISceneManager* SceneManager;
 | 
			
		||||
	io::IFileSystem* FileSystem;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace scene
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,312 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#include "IrrCompileConfig.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
 | 
			
		||||
#include "CIrrMeshWriter.h"
 | 
			
		||||
#include "os.h"
 | 
			
		||||
#include "IWriteFile.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "IMesh.h"
 | 
			
		||||
#include "IAttributes.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CIrrMeshWriter::CIrrMeshWriter(video::IVideoDriver* driver,
 | 
			
		||||
				io::IFileSystem* fs)
 | 
			
		||||
	: FileSystem(fs), VideoDriver(driver), Writer(0)
 | 
			
		||||
{
 | 
			
		||||
	#ifdef _DEBUG
 | 
			
		||||
	setDebugName("CIrrMeshWriter");
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	if (VideoDriver)
 | 
			
		||||
		VideoDriver->grab();
 | 
			
		||||
 | 
			
		||||
	if (FileSystem)
 | 
			
		||||
		FileSystem->grab();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CIrrMeshWriter::~CIrrMeshWriter()
 | 
			
		||||
{
 | 
			
		||||
	if (VideoDriver)
 | 
			
		||||
		VideoDriver->drop();
 | 
			
		||||
 | 
			
		||||
	if (FileSystem)
 | 
			
		||||
		FileSystem->drop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Returns the type of the mesh writer
 | 
			
		||||
EMESH_WRITER_TYPE CIrrMeshWriter::getType() const
 | 
			
		||||
{
 | 
			
		||||
	return EMWT_IRR_MESH;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! writes a mesh
 | 
			
		||||
bool CIrrMeshWriter::writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags)
 | 
			
		||||
{
 | 
			
		||||
	if (!file)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	Writer = FileSystem->createXMLWriter(file);
 | 
			
		||||
 | 
			
		||||
	if (!Writer)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("Could not write file", file->getFileName());
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	os::Printer::log("Writing mesh", file->getFileName());
 | 
			
		||||
 | 
			
		||||
	// write IRR MESH header
 | 
			
		||||
 | 
			
		||||
	Writer->writeXMLHeader();
 | 
			
		||||
 | 
			
		||||
	Writer->writeElement(L"mesh", false,
 | 
			
		||||
		L"xmlns", L"http://irrlicht.sourceforge.net/IRRMESH_09_2007",
 | 
			
		||||
		L"version", L"1.0");
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// add some informational comment. Add a space after and before the comment
 | 
			
		||||
	// tags so that some braindead xml parsers (AS anyone?) are able to parse this too.
 | 
			
		||||
 | 
			
		||||
	core::stringw infoComment = L" This file contains a static mesh in the Irrlicht Engine format with ";
 | 
			
		||||
	infoComment += core::stringw(mesh->getMeshBufferCount());
 | 
			
		||||
	infoComment += L" materials.";
 | 
			
		||||
 | 
			
		||||
	Writer->writeComment(infoComment.c_str());
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write mesh bounding box
 | 
			
		||||
 | 
			
		||||
	writeBoundingBox(mesh->getBoundingBox());
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write mesh buffers
 | 
			
		||||
 | 
			
		||||
	for (int i=0; i<(int)mesh->getMeshBufferCount(); ++i)
 | 
			
		||||
	{
 | 
			
		||||
		scene::IMeshBuffer* buffer = mesh->getMeshBuffer(i);
 | 
			
		||||
		if (buffer)
 | 
			
		||||
		{
 | 
			
		||||
			writeMeshBuffer(buffer);
 | 
			
		||||
			Writer->writeLineBreak();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Writer->writeClosingTag(L"mesh");
 | 
			
		||||
 | 
			
		||||
	Writer->drop();
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CIrrMeshWriter::writeBoundingBox(const core::aabbox3df& box)
 | 
			
		||||
{
 | 
			
		||||
	Writer->writeElement(L"boundingBox", true,
 | 
			
		||||
		L"minEdge", getVectorAsStringLine(box.MinEdge).c_str(),
 | 
			
		||||
		L"maxEdge", getVectorAsStringLine(box.MaxEdge).c_str());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
core::stringw CIrrMeshWriter::getVectorAsStringLine(const core::vector3df& v) const
 | 
			
		||||
{
 | 
			
		||||
	core::stringw str;
 | 
			
		||||
 | 
			
		||||
	str = core::stringw(v.X);
 | 
			
		||||
	str += L" ";
 | 
			
		||||
	str += core::stringw(v.Y);
 | 
			
		||||
	str += L" ";
 | 
			
		||||
	str += core::stringw(v.Z);
 | 
			
		||||
 | 
			
		||||
	return str;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
core::stringw CIrrMeshWriter::getVectorAsStringLine(const core::vector2df& v) const
 | 
			
		||||
{
 | 
			
		||||
	core::stringw str;
 | 
			
		||||
 | 
			
		||||
	str = core::stringw(v.X);
 | 
			
		||||
	str += L" ";
 | 
			
		||||
	str += core::stringw(v.Y);
 | 
			
		||||
 | 
			
		||||
	return str;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CIrrMeshWriter::writeMeshBuffer(const scene::IMeshBuffer* buffer)
 | 
			
		||||
{
 | 
			
		||||
	Writer->writeElement(L"buffer", false);
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write bounding box
 | 
			
		||||
 | 
			
		||||
	writeBoundingBox(buffer->getBoundingBox());
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write material
 | 
			
		||||
 | 
			
		||||
	writeMaterial(buffer->getMaterial());
 | 
			
		||||
 | 
			
		||||
	// write vertices
 | 
			
		||||
 | 
			
		||||
	const core::stringw vertexTypeStr = video::sBuiltInVertexTypeNames[buffer->getVertexType()];
 | 
			
		||||
 | 
			
		||||
	Writer->writeElement(L"vertices", false,
 | 
			
		||||
		L"type", vertexTypeStr.c_str(),
 | 
			
		||||
		L"vertexCount", core::stringw(buffer->getVertexCount()).c_str());
 | 
			
		||||
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	u32 vertexCount = buffer->getVertexCount();
 | 
			
		||||
 | 
			
		||||
	switch(buffer->getVertexType())
 | 
			
		||||
	{
 | 
			
		||||
	case video::EVT_STANDARD:
 | 
			
		||||
		{
 | 
			
		||||
			video::S3DVertex* vtx = (video::S3DVertex*)buffer->getVertices();
 | 
			
		||||
			for (u32 j=0; j<vertexCount; ++j)
 | 
			
		||||
			{
 | 
			
		||||
				core::stringw str = getVectorAsStringLine(vtx[j].Pos);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].Normal);
 | 
			
		||||
 | 
			
		||||
				char tmp[12];
 | 
			
		||||
				sprintf(tmp, " %02x%02x%02x%02x ", vtx[j].Color.getAlpha(), vtx[j].Color.getRed(), vtx[j].Color.getGreen(), vtx[j].Color.getBlue());
 | 
			
		||||
				str += tmp;
 | 
			
		||||
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].TCoords);
 | 
			
		||||
 | 
			
		||||
				Writer->writeText(str.c_str());
 | 
			
		||||
				Writer->writeLineBreak();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case video::EVT_2TCOORDS:
 | 
			
		||||
		{
 | 
			
		||||
			video::S3DVertex2TCoords* vtx = (video::S3DVertex2TCoords*)buffer->getVertices();
 | 
			
		||||
			for (u32 j=0; j<vertexCount; ++j)
 | 
			
		||||
			{
 | 
			
		||||
				core::stringw str = getVectorAsStringLine(vtx[j].Pos);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].Normal);
 | 
			
		||||
 | 
			
		||||
				char tmp[12];
 | 
			
		||||
				sprintf(tmp, " %02x%02x%02x%02x ", vtx[j].Color.getAlpha(), vtx[j].Color.getRed(), vtx[j].Color.getGreen(), vtx[j].Color.getBlue());
 | 
			
		||||
				str += tmp;
 | 
			
		||||
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].TCoords);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].TCoords2);
 | 
			
		||||
 | 
			
		||||
				Writer->writeText(str.c_str());
 | 
			
		||||
				Writer->writeLineBreak();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case video::EVT_TANGENTS:
 | 
			
		||||
		{
 | 
			
		||||
			video::S3DVertexTangents* vtx = (video::S3DVertexTangents*)buffer->getVertices();
 | 
			
		||||
			for (u32 j=0; j<vertexCount; ++j)
 | 
			
		||||
			{
 | 
			
		||||
				core::stringw str = getVectorAsStringLine(vtx[j].Pos);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].Normal);
 | 
			
		||||
 | 
			
		||||
				char tmp[12];
 | 
			
		||||
				sprintf(tmp, " %02x%02x%02x%02x ", vtx[j].Color.getAlpha(), vtx[j].Color.getRed(), vtx[j].Color.getGreen(), vtx[j].Color.getBlue());
 | 
			
		||||
				str += tmp;
 | 
			
		||||
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].TCoords);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].Tangent);
 | 
			
		||||
				str += L" ";
 | 
			
		||||
				str += getVectorAsStringLine(vtx[j].Binormal);
 | 
			
		||||
 | 
			
		||||
				Writer->writeText(str.c_str());
 | 
			
		||||
				Writer->writeLineBreak();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Writer->writeClosingTag(L"vertices");
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write indices
 | 
			
		||||
 | 
			
		||||
	Writer->writeElement(L"indices", false,
 | 
			
		||||
		L"indexCount", core::stringw(buffer->getIndexCount()).c_str());
 | 
			
		||||
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	int indexCount = (int)buffer->getIndexCount();
 | 
			
		||||
 | 
			
		||||
	video::E_INDEX_TYPE iType = buffer->getIndexType();
 | 
			
		||||
 | 
			
		||||
	const u16* idx16 = buffer->getIndices();
 | 
			
		||||
	const u32* idx32 = (u32*) buffer->getIndices();
 | 
			
		||||
	const int maxIndicesPerLine = 25;
 | 
			
		||||
 | 
			
		||||
	for (int i=0; i<indexCount; ++i)
 | 
			
		||||
	{
 | 
			
		||||
		if(iType == video::EIT_16BIT)
 | 
			
		||||
		{
 | 
			
		||||
			core::stringw str((int)idx16[i]);
 | 
			
		||||
			Writer->writeText(str.c_str());
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			core::stringw str((int)idx32[i]);
 | 
			
		||||
			Writer->writeText(str.c_str());
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (i % maxIndicesPerLine == maxIndicesPerLine-1)
 | 
			
		||||
			Writer->writeLineBreak();
 | 
			
		||||
		else
 | 
			
		||||
			Writer->writeText(L" ");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((indexCount-1) % maxIndicesPerLine != maxIndicesPerLine-1)
 | 
			
		||||
		Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	Writer->writeClosingTag(L"indices");
 | 
			
		||||
	Writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// close buffer tag
 | 
			
		||||
 | 
			
		||||
	Writer->writeClosingTag(L"buffer");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CIrrMeshWriter::writeMaterial(const video::SMaterial& material)
 | 
			
		||||
{
 | 
			
		||||
	// simply use irrlichts built-in attribute serialization capabilities here:
 | 
			
		||||
 | 
			
		||||
	io::IAttributes* attributes =
 | 
			
		||||
		VideoDriver->createAttributesFromMaterial(material);
 | 
			
		||||
 | 
			
		||||
	if (attributes)
 | 
			
		||||
	{
 | 
			
		||||
		attributes->write(Writer, false, L"material");
 | 
			
		||||
		attributes->drop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRR_IRR_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
#define __IRR_IRR_MESH_WRITER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IMeshWriter.h"
 | 
			
		||||
#include "S3DVertex.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "IFileSystem.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
	class IMeshBuffer;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! class to write meshes, implementing a IrrMesh (.irrmesh, .xml) writer
 | 
			
		||||
	/** This writer implementation has been originally developed for irrEdit and then
 | 
			
		||||
	merged out to the Irrlicht Engine */
 | 
			
		||||
	class CIrrMeshWriter : public IMeshWriter
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		CIrrMeshWriter(video::IVideoDriver* driver, io::IFileSystem* fs);
 | 
			
		||||
		virtual ~CIrrMeshWriter();
 | 
			
		||||
 | 
			
		||||
		//! Returns the type of the mesh writer
 | 
			
		||||
		virtual EMESH_WRITER_TYPE getType() const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! writes a mesh
 | 
			
		||||
		virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags=EMWF_NONE) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
 | 
			
		||||
		void writeBoundingBox(const core::aabbox3df& box);
 | 
			
		||||
 | 
			
		||||
		void writeMeshBuffer(const scene::IMeshBuffer* buffer);
 | 
			
		||||
 | 
			
		||||
		void writeMaterial(const video::SMaterial& material);
 | 
			
		||||
 | 
			
		||||
		core::stringw getVectorAsStringLine(const core::vector3df& v) const;
 | 
			
		||||
 | 
			
		||||
		core::stringw getVectorAsStringLine(const core::vector2df& v) const;
 | 
			
		||||
 | 
			
		||||
		// member variables:
 | 
			
		||||
 | 
			
		||||
		io::IFileSystem* FileSystem;
 | 
			
		||||
		video::IVideoDriver* VideoDriver;
 | 
			
		||||
		io::IXMLWriter* Writer;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -110,14 +110,12 @@ set(IRRMESHLOADER
 | 
			
		||||
	C3DSMeshFileLoader.cpp
 | 
			
		||||
	COgreMeshFileLoader.cpp
 | 
			
		||||
	COBJMeshFileLoader.cpp
 | 
			
		||||
	CColladaFileLoader.cpp
 | 
			
		||||
	CCSMLoader.cpp
 | 
			
		||||
	CDMFLoader.cpp
 | 
			
		||||
	CLMTSMeshFileLoader.cpp
 | 
			
		||||
	CMY3DMeshFileLoader.cpp
 | 
			
		||||
	COCTLoader.cpp
 | 
			
		||||
	CXMeshFileLoader.cpp
 | 
			
		||||
	CIrrMeshFileLoader.cpp
 | 
			
		||||
	CSTLMeshFileLoader.cpp
 | 
			
		||||
	CLWOMeshFileLoader.cpp
 | 
			
		||||
	CPLYMeshFileLoader.cpp
 | 
			
		||||
@@ -126,8 +124,6 @@ set(IRRMESHLOADER
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set(IRRMESHWRITER
 | 
			
		||||
	CColladaMeshWriter.cpp
 | 
			
		||||
	CIrrMeshWriter.cpp
 | 
			
		||||
	CSTLMeshWriter.cpp
 | 
			
		||||
	COBJMeshWriter.cpp
 | 
			
		||||
	CPLYMeshWriter.cpp
 | 
			
		||||
@@ -176,7 +172,6 @@ add_library(IRROBJ OBJECT
 | 
			
		||||
	CMeshCache.cpp
 | 
			
		||||
	CDefaultSceneNodeAnimatorFactory.cpp
 | 
			
		||||
	CDefaultSceneNodeFactory.cpp
 | 
			
		||||
	CSceneLoaderIrr.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_library(IRRPARTICLEOBJ OBJECT
 | 
			
		||||
@@ -318,15 +313,12 @@ add_library(IRRIOOBJ OBJECT
 | 
			
		||||
	CMemoryFile.cpp
 | 
			
		||||
	CReadFile.cpp
 | 
			
		||||
	CWriteFile.cpp
 | 
			
		||||
	CXMLReader.cpp
 | 
			
		||||
	CXMLWriter.cpp
 | 
			
		||||
	CWADReader.cpp
 | 
			
		||||
	CZipReader.cpp
 | 
			
		||||
	CPakReader.cpp
 | 
			
		||||
	CNPKReader.cpp
 | 
			
		||||
	CTarReader.cpp
 | 
			
		||||
	CMountPointReader.cpp
 | 
			
		||||
	irrXML.cpp
 | 
			
		||||
	CAttributes.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,284 +0,0 @@
 | 
			
		||||
// Copyright (C) 2010-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#include "CSceneLoaderIrr.h"
 | 
			
		||||
#include "ISceneNodeAnimatorFactory.h"
 | 
			
		||||
#include "ISceneUserDataSerializer.h"
 | 
			
		||||
#include "ISceneManager.h"
 | 
			
		||||
#include "IVideoDriver.h"
 | 
			
		||||
#include "IFileSystem.h"
 | 
			
		||||
#include "os.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//! Constructor
 | 
			
		||||
CSceneLoaderIrr::CSceneLoaderIrr(ISceneManager *smgr, io::IFileSystem* fs)
 | 
			
		||||
 : SceneManager(smgr), FileSystem(fs),
 | 
			
		||||
   IRR_XML_FORMAT_SCENE(L"irr_scene"), IRR_XML_FORMAT_NODE(L"node"), IRR_XML_FORMAT_NODE_ATTR_TYPE(L"type"),
 | 
			
		||||
   IRR_XML_FORMAT_ATTRIBUTES(L"attributes"), IRR_XML_FORMAT_MATERIALS(L"materials"),
 | 
			
		||||
   IRR_XML_FORMAT_ANIMATORS(L"animators"), IRR_XML_FORMAT_USERDATA(L"userData")
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Destructor
 | 
			
		||||
CSceneLoaderIrr::~CSceneLoaderIrr()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Returns true if the class might be able to load this file.
 | 
			
		||||
bool CSceneLoaderIrr::isALoadableFileExtension(const io::path& filename) const
 | 
			
		||||
{
 | 
			
		||||
	return core::hasFileExtension(filename, "irr");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Returns true if the class might be able to load this file.
 | 
			
		||||
bool CSceneLoaderIrr::isALoadableFileFormat(io::IReadFile *file) const
 | 
			
		||||
{
 | 
			
		||||
	// todo: check inside the file
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Loads the scene into the scene manager.
 | 
			
		||||
bool CSceneLoaderIrr::loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer,
 | 
			
		||||
	ISceneNode* rootNode)
 | 
			
		||||
{
 | 
			
		||||
	if (!file)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("Unable to open scene file", ELL_ERROR);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	io::IXMLReader* reader = FileSystem->createXMLReader(file);
 | 
			
		||||
	if (!reader)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("Scene is not a valid XML file", file->getFileName().c_str(), ELL_ERROR);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: COLLADA_CREATE_SCENE_INSTANCES can be removed when the COLLADA loader is a scene loader
 | 
			
		||||
	bool oldColladaSingleMesh = SceneManager->getParameters()->getAttributeAsBool(COLLADA_CREATE_SCENE_INSTANCES);
 | 
			
		||||
	SceneManager->getParameters()->setAttribute(COLLADA_CREATE_SCENE_INSTANCES, false);
 | 
			
		||||
 | 
			
		||||
	// read file
 | 
			
		||||
	while (reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		readSceneNode(reader, rootNode, userDataSerializer);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// restore old collada parameters
 | 
			
		||||
	SceneManager->getParameters()->setAttribute(COLLADA_CREATE_SCENE_INSTANCES, oldColladaSingleMesh);
 | 
			
		||||
 | 
			
		||||
	// clean up
 | 
			
		||||
	reader->drop();
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Reads the next node
 | 
			
		||||
void CSceneLoaderIrr::readSceneNode(io::IXMLReader* reader, ISceneNode* parent,
 | 
			
		||||
	ISceneUserDataSerializer* userDataSerializer)
 | 
			
		||||
{
 | 
			
		||||
	if (!reader)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	scene::ISceneNode* node = 0;
 | 
			
		||||
 | 
			
		||||
	if (!parent && IRR_XML_FORMAT_SCENE==reader->getNodeName())
 | 
			
		||||
		node = SceneManager->getRootSceneNode();
 | 
			
		||||
	else if (parent && IRR_XML_FORMAT_NODE==reader->getNodeName())
 | 
			
		||||
	{
 | 
			
		||||
		// find node type and create it
 | 
			
		||||
		core::stringc attrName = reader->getAttributeValue(IRR_XML_FORMAT_NODE_ATTR_TYPE.c_str());
 | 
			
		||||
 | 
			
		||||
		node = SceneManager->addSceneNode(attrName.c_str(), parent);
 | 
			
		||||
 | 
			
		||||
		if (!node)
 | 
			
		||||
			os::Printer::log("Could not create scene node of unknown type", attrName.c_str());
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		node=parent;
 | 
			
		||||
 | 
			
		||||
	// read attributes
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		bool endreached = false;
 | 
			
		||||
 | 
			
		||||
		const wchar_t* name = reader->getNodeName();
 | 
			
		||||
 | 
			
		||||
		switch (reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if ((IRR_XML_FORMAT_NODE  == name) ||
 | 
			
		||||
				(IRR_XML_FORMAT_SCENE == name))
 | 
			
		||||
			{
 | 
			
		||||
				endreached = true;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			if (IRR_XML_FORMAT_ATTRIBUTES == name)
 | 
			
		||||
			{
 | 
			
		||||
				// read attributes
 | 
			
		||||
				io::IAttributes* attr = FileSystem->createEmptyAttributes(SceneManager->getVideoDriver());
 | 
			
		||||
				attr->read(reader, true);
 | 
			
		||||
 | 
			
		||||
				if (node)
 | 
			
		||||
					node->deserializeAttributes(attr);
 | 
			
		||||
 | 
			
		||||
				attr->drop();
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			if (IRR_XML_FORMAT_MATERIALS == name)
 | 
			
		||||
				readMaterials(reader, node);
 | 
			
		||||
			else
 | 
			
		||||
			if (IRR_XML_FORMAT_ANIMATORS == name)
 | 
			
		||||
				readAnimators(reader, node);
 | 
			
		||||
			else
 | 
			
		||||
			if (IRR_XML_FORMAT_USERDATA  == name)
 | 
			
		||||
				readUserData(reader, node, userDataSerializer);
 | 
			
		||||
			else
 | 
			
		||||
			if ((IRR_XML_FORMAT_NODE  == name) ||
 | 
			
		||||
				(IRR_XML_FORMAT_SCENE == name))
 | 
			
		||||
			{
 | 
			
		||||
				readSceneNode(reader, node, userDataSerializer);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				os::Printer::log("Found unknown element in irrlicht scene file",
 | 
			
		||||
						core::stringc(name).c_str());
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (endreached)
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	if (node && userDataSerializer)
 | 
			
		||||
		userDataSerializer->OnCreateNode(node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! reads materials of a node
 | 
			
		||||
void CSceneLoaderIrr::readMaterials(io::IXMLReader* reader, ISceneNode* node)
 | 
			
		||||
{
 | 
			
		||||
	u32 nr = 0;
 | 
			
		||||
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		const wchar_t* name = reader->getNodeName();
 | 
			
		||||
 | 
			
		||||
		switch(reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if (IRR_XML_FORMAT_MATERIALS == name)
 | 
			
		||||
				return;
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			if (IRR_XML_FORMAT_ATTRIBUTES == name)
 | 
			
		||||
			{
 | 
			
		||||
				// read materials from attribute list
 | 
			
		||||
				io::IAttributes* attr = FileSystem->createEmptyAttributes(SceneManager->getVideoDriver());
 | 
			
		||||
				attr->read(reader);
 | 
			
		||||
 | 
			
		||||
				if (node && node->getMaterialCount() > nr)
 | 
			
		||||
				{
 | 
			
		||||
					SceneManager->getVideoDriver()->fillMaterialStructureFromAttributes(
 | 
			
		||||
						node->getMaterial(nr), attr);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				attr->drop();
 | 
			
		||||
				++nr;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads animators of a node
 | 
			
		||||
void CSceneLoaderIrr::readAnimators(io::IXMLReader* reader, ISceneNode* node)
 | 
			
		||||
{
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		const wchar_t* name = reader->getNodeName();
 | 
			
		||||
 | 
			
		||||
		switch(reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if (IRR_XML_FORMAT_ANIMATORS == name)
 | 
			
		||||
				return;
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			if (IRR_XML_FORMAT_ATTRIBUTES == name)
 | 
			
		||||
			{
 | 
			
		||||
				// read animator data from attribute list
 | 
			
		||||
				io::IAttributes* attr = FileSystem->createEmptyAttributes(SceneManager->getVideoDriver());
 | 
			
		||||
				attr->read(reader);
 | 
			
		||||
 | 
			
		||||
				if (node)
 | 
			
		||||
				{
 | 
			
		||||
					core::stringc typeName = attr->getAttributeAsString("Type");
 | 
			
		||||
					ISceneNodeAnimator* anim = SceneManager->createSceneNodeAnimator(typeName.c_str(), node);
 | 
			
		||||
 | 
			
		||||
					if (anim)
 | 
			
		||||
					{
 | 
			
		||||
						anim->deserializeAttributes(attr);
 | 
			
		||||
						anim->drop();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				attr->drop();
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! reads user data of a node
 | 
			
		||||
void CSceneLoaderIrr::readUserData(io::IXMLReader* reader, ISceneNode* node, ISceneUserDataSerializer* userDataSerializer)
 | 
			
		||||
{
 | 
			
		||||
	while(reader->read())
 | 
			
		||||
	{
 | 
			
		||||
		const wchar_t* name = reader->getNodeName();
 | 
			
		||||
 | 
			
		||||
		switch(reader->getNodeType())
 | 
			
		||||
		{
 | 
			
		||||
		case io::EXN_ELEMENT_END:
 | 
			
		||||
			if (IRR_XML_FORMAT_USERDATA == name)
 | 
			
		||||
				return;
 | 
			
		||||
			break;
 | 
			
		||||
		case io::EXN_ELEMENT:
 | 
			
		||||
			if (IRR_XML_FORMAT_ATTRIBUTES == name)
 | 
			
		||||
			{
 | 
			
		||||
				// read user data from attribute list
 | 
			
		||||
				io::IAttributes* attr = FileSystem->createEmptyAttributes(SceneManager->getVideoDriver());
 | 
			
		||||
				attr->read(reader);
 | 
			
		||||
 | 
			
		||||
				if (node && userDataSerializer)
 | 
			
		||||
				{
 | 
			
		||||
					userDataSerializer->OnReadUserData(node, attr);
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				attr->drop();
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // scene
 | 
			
		||||
} // irr
 | 
			
		||||
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
// Copyright (C) 2010-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __C_SCENE_LOADER_IRR_H_INCLUDED__
 | 
			
		||||
#define __C_SCENE_LOADER_IRR_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ISceneLoader.h"
 | 
			
		||||
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	class IFileSystem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace scene
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
class ISceneManager;
 | 
			
		||||
 | 
			
		||||
//! Class which can load a scene into the scene manager.
 | 
			
		||||
class CSceneLoaderIrr : public virtual ISceneLoader
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! Constructor
 | 
			
		||||
	CSceneLoaderIrr(ISceneManager *smgr, io::IFileSystem* fs);
 | 
			
		||||
 | 
			
		||||
	//! Destructor
 | 
			
		||||
	virtual ~CSceneLoaderIrr();
 | 
			
		||||
 | 
			
		||||
	//! Returns true if the class might be able to load this file.
 | 
			
		||||
	virtual bool isALoadableFileExtension(const io::path& filename) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Returns true if the class might be able to load this file.
 | 
			
		||||
	virtual bool isALoadableFileFormat(io::IReadFile *file) const _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	//! Loads the scene into the scene manager.
 | 
			
		||||
	virtual bool loadScene(io::IReadFile* file,
 | 
			
		||||
		ISceneUserDataSerializer* userDataSerializer=0,
 | 
			
		||||
		ISceneNode* rootNode=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	//! Recursively reads nodes from the xml file
 | 
			
		||||
	void readSceneNode(io::IXMLReader* reader, ISceneNode* parent,
 | 
			
		||||
		ISceneUserDataSerializer* userDataSerializer);
 | 
			
		||||
 | 
			
		||||
	//! read a node's materials
 | 
			
		||||
	void readMaterials(io::IXMLReader* reader, ISceneNode* node);
 | 
			
		||||
 | 
			
		||||
	//! read a node's animators
 | 
			
		||||
	void readAnimators(io::IXMLReader* reader, ISceneNode* node);
 | 
			
		||||
 | 
			
		||||
	//! read any other data into the user serializer
 | 
			
		||||
	void readUserData(io::IXMLReader* reader, ISceneNode* node,
 | 
			
		||||
		ISceneUserDataSerializer* userDataSerializer);
 | 
			
		||||
 | 
			
		||||
	ISceneManager   *SceneManager;
 | 
			
		||||
	io::IFileSystem *FileSystem;
 | 
			
		||||
 | 
			
		||||
	//! constants for reading and writing XML.
 | 
			
		||||
	//! Not made static due to portability problems.
 | 
			
		||||
	// TODO: move to own header
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_SCENE;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_NODE;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_NODE_ATTR_TYPE;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_ATTRIBUTES;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_MATERIALS;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_ANIMATORS;
 | 
			
		||||
	const core::stringw IRR_XML_FORMAT_USERDATA;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace scene
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -8,7 +8,6 @@
 | 
			
		||||
#include "IFileSystem.h"
 | 
			
		||||
#include "SAnimatedMesh.h"
 | 
			
		||||
#include "CMeshCache.h"
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
#include "ISceneUserDataSerializer.h"
 | 
			
		||||
#include "IGUIEnvironment.h"
 | 
			
		||||
#include "IMaterialRenderer.h"
 | 
			
		||||
@@ -26,10 +25,6 @@
 | 
			
		||||
#include "CSkinnedMesh.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
#include "CIrrMeshFileLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_BSP_LOADER_
 | 
			
		||||
#include "CBSPMeshFileLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
@@ -70,10 +65,6 @@
 | 
			
		||||
#include "CMY3DMeshFileLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
#include "CColladaFileLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_DMF_LOADER_
 | 
			
		||||
#include "CDMFLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
@@ -110,18 +101,6 @@
 | 
			
		||||
#include "CSMFMeshFileLoader.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_SCENE_LOADER_
 | 
			
		||||
#include "CSceneLoaderIrr.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
#include "CColladaMeshWriter.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
#include "CIrrMeshWriter.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_STL_WRITER_
 | 
			
		||||
#include "CSTLMeshWriter.h"
 | 
			
		||||
#endif
 | 
			
		||||
@@ -219,8 +198,7 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
 | 
			
		||||
: ISceneNode(0, 0), Driver(driver), FileSystem(fs), GUIEnvironment(gui),
 | 
			
		||||
	CursorControl(cursorControl), CollisionManager(0),
 | 
			
		||||
	ActiveCamera(0), ShadowColor(150,0,0,0), AmbientLight(0,0,0,0), Parameters(0),
 | 
			
		||||
	MeshCache(cache), CurrentRenderPass(ESNRP_NONE), LightManager(0),
 | 
			
		||||
	IRR_XML_FORMAT_SCENE(L"irr_scene"), IRR_XML_FORMAT_NODE(L"node"), IRR_XML_FORMAT_NODE_ATTR_TYPE(L"type")
 | 
			
		||||
	MeshCache(cache), CurrentRenderPass(ESNRP_NONE), LightManager(0)
 | 
			
		||||
{
 | 
			
		||||
	#ifdef _DEBUG
 | 
			
		||||
	ISceneManager::setDebugName("CSceneManager ISceneManager");
 | 
			
		||||
@@ -304,15 +282,9 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_MD2_LOADER_
 | 
			
		||||
	MeshLoaderList.push_back(new CMD2MeshFileLoader());
 | 
			
		||||
	#endif
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_IRR_MESH_LOADER_
 | 
			
		||||
	MeshLoaderList.push_back(new CIrrMeshFileLoader(this, FileSystem));
 | 
			
		||||
	#endif
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_BSP_LOADER_
 | 
			
		||||
	MeshLoaderList.push_back(new CBSPMeshFileLoader(this, FileSystem));
 | 
			
		||||
	#endif
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_COLLADA_LOADER_
 | 
			
		||||
	MeshLoaderList.push_back(new CColladaFileLoader(this, FileSystem));
 | 
			
		||||
	#endif
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_3DS_LOADER_
 | 
			
		||||
	MeshLoaderList.push_back(new C3DSMeshFileLoader(this, FileSystem));
 | 
			
		||||
	#endif
 | 
			
		||||
@@ -329,11 +301,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs,
 | 
			
		||||
	MeshLoaderList.push_back(new CB3DMeshFileLoader(this));
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	// scene loaders
 | 
			
		||||
	#ifdef _IRR_COMPILE_WITH_IRR_SCENE_LOADER_
 | 
			
		||||
	SceneLoaderList.push_back(new CSceneLoaderIrr(this, FileSystem));
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
	// factories
 | 
			
		||||
	ISceneNodeFactory* factory = new CDefaultSceneNodeFactory(this);
 | 
			
		||||
	registerSceneNodeFactory(factory);
 | 
			
		||||
@@ -2298,44 +2265,7 @@ bool CSceneManager::saveScene(const io::path& filename, ISceneUserDataSerializer
 | 
			
		||||
//! Saves the current scene into a file.
 | 
			
		||||
bool CSceneManager::saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer, ISceneNode* node)
 | 
			
		||||
{
 | 
			
		||||
	if (!file)
 | 
			
		||||
	{
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bool result=false;
 | 
			
		||||
	io::IXMLWriter* writer = FileSystem->createXMLWriter(file);
 | 
			
		||||
	if (!writer)
 | 
			
		||||
	{
 | 
			
		||||
		os::Printer::log("Unable to create XML writer", file->getFileName(), ELL_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		result = saveScene(writer, FileSystem->getFileDir(FileSystem->getAbsolutePath(file->getFileName())), userDataSerializer, node);
 | 
			
		||||
		writer->drop();
 | 
			
		||||
	}
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Saves the current scene into a file.
 | 
			
		||||
bool CSceneManager::saveScene(io::IXMLWriter* writer, const io::path& currentPath, ISceneUserDataSerializer* userDataSerializer, ISceneNode* node)
 | 
			
		||||
{
 | 
			
		||||
	if (!writer)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (!node)
 | 
			
		||||
		node=this;
 | 
			
		||||
 | 
			
		||||
	char* oldLocale = setlocale(LC_NUMERIC, NULL);
 | 
			
		||||
	setlocale(LC_NUMERIC, "C");	// float number should to be saved with dots in this format independent of current locale settings.
 | 
			
		||||
 | 
			
		||||
	writer->writeXMLHeader();
 | 
			
		||||
	writeSceneNode(writer, node, userDataSerializer, currentPath.c_str(), true);
 | 
			
		||||
 | 
			
		||||
	setlocale(LC_NUMERIC, oldLocale);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -2380,139 +2310,6 @@ bool CSceneManager::loadScene(io::IReadFile* file, ISceneUserDataSerializer* use
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! writes a scene node
 | 
			
		||||
void CSceneManager::writeSceneNode(io::IXMLWriter* writer, ISceneNode* node, ISceneUserDataSerializer* userDataSerializer,
 | 
			
		||||
		const fschar_t* currentPath, bool init)
 | 
			
		||||
{
 | 
			
		||||
	if (!writer || !node || node->isDebugObject())
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	const wchar_t* name;
 | 
			
		||||
	ISceneNode* tmpNode=node;
 | 
			
		||||
 | 
			
		||||
	if (init)
 | 
			
		||||
	{
 | 
			
		||||
		name = IRR_XML_FORMAT_SCENE.c_str();
 | 
			
		||||
		writer->writeElement(name, false);
 | 
			
		||||
		node=this;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		name = IRR_XML_FORMAT_NODE.c_str();
 | 
			
		||||
		writer->writeElement(name, false, IRR_XML_FORMAT_NODE_ATTR_TYPE.c_str(),
 | 
			
		||||
			core::stringw(getSceneNodeTypeName(node->getType())).c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
	// write properties
 | 
			
		||||
 | 
			
		||||
	io::IAttributes* attr = FileSystem->createEmptyAttributes(Driver);
 | 
			
		||||
	io::SAttributeReadWriteOptions options;
 | 
			
		||||
	if (currentPath)
 | 
			
		||||
	{
 | 
			
		||||
		options.Filename=currentPath;
 | 
			
		||||
		options.Flags|=io::EARWF_USE_RELATIVE_PATHS;
 | 
			
		||||
	}
 | 
			
		||||
	node->serializeAttributes(attr, &options);
 | 
			
		||||
 | 
			
		||||
	if (attr->getAttributeCount() != 0)
 | 
			
		||||
	{
 | 
			
		||||
		attr->write(writer);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write materials
 | 
			
		||||
 | 
			
		||||
	if (node->getMaterialCount() && Driver)
 | 
			
		||||
	{
 | 
			
		||||
		const wchar_t* materialElement = L"materials";
 | 
			
		||||
 | 
			
		||||
		writer->writeElement(materialElement);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
		for (u32 i=0; i < node->getMaterialCount(); ++i)
 | 
			
		||||
		{
 | 
			
		||||
			io::IAttributes* tmp_attr =
 | 
			
		||||
				Driver->createAttributesFromMaterial(node->getMaterial(i), &options);
 | 
			
		||||
			tmp_attr->write(writer);
 | 
			
		||||
			tmp_attr->drop();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		writer->writeClosingTag(materialElement);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write animators
 | 
			
		||||
 | 
			
		||||
	if (!node->getAnimators().empty())
 | 
			
		||||
	{
 | 
			
		||||
		const wchar_t* animatorElement = L"animators";
 | 
			
		||||
		writer->writeElement(animatorElement);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
		ISceneNodeAnimatorList::ConstIterator it = node->getAnimators().begin();
 | 
			
		||||
		for (; it != node->getAnimators().end(); ++it)
 | 
			
		||||
		{
 | 
			
		||||
			attr->clear();
 | 
			
		||||
			attr->addString("Type", getAnimatorTypeName((*it)->getType()));
 | 
			
		||||
 | 
			
		||||
			(*it)->serializeAttributes(attr);
 | 
			
		||||
 | 
			
		||||
			attr->write(writer);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		writer->writeClosingTag(animatorElement);
 | 
			
		||||
		writer->writeLineBreak();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write possible user data
 | 
			
		||||
 | 
			
		||||
	if (userDataSerializer)
 | 
			
		||||
	{
 | 
			
		||||
		io::IAttributes* userData = userDataSerializer->createUserData(node);
 | 
			
		||||
		if (userData)
 | 
			
		||||
		{
 | 
			
		||||
			const wchar_t* userDataElement = L"userData";
 | 
			
		||||
 | 
			
		||||
			writer->writeLineBreak();
 | 
			
		||||
			writer->writeElement(userDataElement);
 | 
			
		||||
			writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
			userData->write(writer);
 | 
			
		||||
 | 
			
		||||
			writer->writeClosingTag(userDataElement);
 | 
			
		||||
			writer->writeLineBreak();
 | 
			
		||||
			writer->writeLineBreak();
 | 
			
		||||
 | 
			
		||||
			userData->drop();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	// reset to actual root node
 | 
			
		||||
	if (init)
 | 
			
		||||
		node=tmpNode;
 | 
			
		||||
 | 
			
		||||
	// write children once root node is written
 | 
			
		||||
	// if parent is not scene manager, we need to write out node first
 | 
			
		||||
	if (init && (node != this))
 | 
			
		||||
	{
 | 
			
		||||
		writeSceneNode(writer, node, userDataSerializer, currentPath);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		ISceneNodeList::ConstIterator it = node->getChildren().begin();
 | 
			
		||||
		for (; it != node->getChildren().end(); ++it)
 | 
			
		||||
			writeSceneNode(writer, (*it), userDataSerializer, currentPath);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	attr->drop();
 | 
			
		||||
 | 
			
		||||
	writer->writeClosingTag(name);
 | 
			
		||||
	writer->writeLineBreak();
 | 
			
		||||
	writer->writeLineBreak();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Returns a typename from a scene node type or null if not found
 | 
			
		||||
const c8* CSceneManager::getSceneNodeTypeName(ESCENE_NODE_TYPE type)
 | 
			
		||||
{
 | 
			
		||||
@@ -2648,17 +2445,8 @@ IMeshWriter* CSceneManager::createMeshWriter(EMESH_WRITER_TYPE type)
 | 
			
		||||
	switch(type)
 | 
			
		||||
	{
 | 
			
		||||
	case EMWT_IRR_MESH:
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_IRR_WRITER_
 | 
			
		||||
		return new CIrrMeshWriter(Driver, FileSystem);
 | 
			
		||||
#else
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	case EMWT_COLLADA:
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_COLLADA_WRITER_
 | 
			
		||||
		return new CColladaMeshWriter(this, Driver, FileSystem);
 | 
			
		||||
#else
 | 
			
		||||
		return 0;
 | 
			
		||||
#endif
 | 
			
		||||
	case EMWT_STL:
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_STL_WRITER_
 | 
			
		||||
		return new CSTLMeshWriter(this);
 | 
			
		||||
 
 | 
			
		||||
@@ -492,9 +492,6 @@ namespace scene
 | 
			
		||||
		//! Saves the current scene into a file.
 | 
			
		||||
		virtual bool saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Saves the current scene into a file.
 | 
			
		||||
		virtual bool saveScene(io::IXMLWriter* writer, const io::path& currentPath, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Loads a scene. Note that the current scene is not cleared before.
 | 
			
		||||
		virtual bool loadScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
@@ -542,9 +539,6 @@ namespace scene
 | 
			
		||||
		//! clears the deletion list
 | 
			
		||||
		void clearDeletionList();
 | 
			
		||||
 | 
			
		||||
		//! writes a scene node
 | 
			
		||||
		void writeSceneNode(io::IXMLWriter* writer, ISceneNode* node, ISceneUserDataSerializer* userDataSerializer, const fschar_t* currentPath=0, bool init=false);
 | 
			
		||||
 | 
			
		||||
		struct DefaultNodeEntry
 | 
			
		||||
		{
 | 
			
		||||
			DefaultNodeEntry(ISceneNode* n) :
 | 
			
		||||
@@ -660,12 +654,6 @@ namespace scene
 | 
			
		||||
		//! over the scene lighting and rendering.
 | 
			
		||||
		ILightManager* LightManager;
 | 
			
		||||
 | 
			
		||||
		//! constants for reading and writing XML.
 | 
			
		||||
		//! Not made static due to portability problems.
 | 
			
		||||
		const core::stringw IRR_XML_FORMAT_SCENE;
 | 
			
		||||
		const core::stringw IRR_XML_FORMAT_NODE;
 | 
			
		||||
		const core::stringw IRR_XML_FORMAT_NODE_ATTR_TYPE;
 | 
			
		||||
 | 
			
		||||
		IGeometryCreator* GeometryCreator;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,84 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#include "CXMLReader.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
#include "CXMLReaderImpl.h"
 | 
			
		||||
#include "IReadFile.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	//! Irrlicht implementation of the file read callback for the xml parser
 | 
			
		||||
	class CIrrXMLFileReadCallBack : public IFileReadCallBack
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! construct from FILE pointer
 | 
			
		||||
		CIrrXMLFileReadCallBack(IReadFile* file)
 | 
			
		||||
			: ReadFile(file)
 | 
			
		||||
		{
 | 
			
		||||
			ReadFile->grab();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! destructor
 | 
			
		||||
		virtual ~CIrrXMLFileReadCallBack()
 | 
			
		||||
		{
 | 
			
		||||
			ReadFile->drop();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Reads an amount of bytes from the file.
 | 
			
		||||
		virtual int read(void* buffer, int sizeToRead) _IRR_OVERRIDE_
 | 
			
		||||
		{
 | 
			
		||||
			return (int)ReadFile->read(buffer, sizeToRead);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Returns size of file in bytes
 | 
			
		||||
		virtual long getSize() const _IRR_OVERRIDE_
 | 
			
		||||
		{
 | 
			
		||||
			return ReadFile->getSize();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
 | 
			
		||||
		IReadFile* ReadFile;
 | 
			
		||||
	}; // end class CMyXMLFileReadCallBack
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// now create an implementation for IXMLReader using irrXML.
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of a wide character xml parser.
 | 
			
		||||
	IXMLReader* createIXMLReader(IReadFile* file)
 | 
			
		||||
	{
 | 
			
		||||
		if (!file)
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return new CXMLReaderImpl<wchar_t, IReferenceCounted>(new CIrrXMLFileReadCallBack(file));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
	IXMLReaderUTF8* createIXMLReaderUTF8(IReadFile* file)
 | 
			
		||||
	{
 | 
			
		||||
		if (!file)
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return new CXMLReaderImpl<char, IReferenceCounted>(new CIrrXMLFileReadCallBack(file));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
#else // not _IRR_COMPILE_WITH_XML_
 | 
			
		||||
#include "os.h"
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
void noXML()
 | 
			
		||||
{
 | 
			
		||||
	irr::os::Printer::log("XML support disabled in IrrCompileConfig.", irr::ELL_ERROR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __C_XML_READER_H_INCLUDED__
 | 
			
		||||
#define __C_XML_READER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IXMLReader.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
	class IReadFile;
 | 
			
		||||
 | 
			
		||||
	//! creates an IXMLReader
 | 
			
		||||
	IXMLReader* createIXMLReader(IReadFile* file);
 | 
			
		||||
 | 
			
		||||
	//! creates an IXMLReader
 | 
			
		||||
	IXMLReaderUTF8* createIXMLReaderUTF8(IReadFile* file);
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
#else // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	//! print a message that Irrlicht is compiled without _IRR_COMPILE_WITH_XML_
 | 
			
		||||
	void noXML();
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
} // end namespace io
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,821 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h
 | 
			
		||||
 | 
			
		||||
#ifndef __ICXML_READER_IMPL_H_INCLUDED__
 | 
			
		||||
#define __ICXML_READER_IMPL_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "irrXML.h"
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "irrArray.h"
 | 
			
		||||
#include "fast_atof.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
#define IRR_DEBUGPRINT(x) printf((x));
 | 
			
		||||
#else // _DEBUG
 | 
			
		||||
#define IRR_DEBUGPRINT(x)
 | 
			
		||||
#endif // _DEBUG
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! implementation of the IrrXMLReader
 | 
			
		||||
template<class char_type, class superclass>
 | 
			
		||||
class CXMLReaderImpl : public IIrrXMLReader<char_type, superclass>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! Constructor
 | 
			
		||||
	CXMLReaderImpl(IFileReadCallBack* callback, bool deleteCallBack = true)
 | 
			
		||||
		: IgnoreWhitespaceText(true), TextData(0), P(0), TextBegin(0), TextSize(0), CurrentNodeType(EXN_NONE),
 | 
			
		||||
		SourceFormat(ETF_ASCII), TargetFormat(ETF_ASCII), IsEmptyElement(false)
 | 
			
		||||
	{
 | 
			
		||||
		if (!callback)
 | 
			
		||||
			return;
 | 
			
		||||
 | 
			
		||||
		storeTargetFormat();
 | 
			
		||||
 | 
			
		||||
		// read whole xml file
 | 
			
		||||
 | 
			
		||||
		readFile(callback);
 | 
			
		||||
 | 
			
		||||
		// clean up
 | 
			
		||||
 | 
			
		||||
		if (deleteCallBack)
 | 
			
		||||
			delete callback;
 | 
			
		||||
 | 
			
		||||
		// create list with special characters
 | 
			
		||||
 | 
			
		||||
		createSpecialCharacterList();
 | 
			
		||||
 | 
			
		||||
		// set pointer to text begin
 | 
			
		||||
		P = TextBegin;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Destructor
 | 
			
		||||
	virtual ~CXMLReaderImpl()
 | 
			
		||||
	{
 | 
			
		||||
		delete [] TextData;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Reads forward to the next xml node.
 | 
			
		||||
	//! \return Returns false, if there was no further node.
 | 
			
		||||
	virtual bool read() _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		// if not end reached, parse the node
 | 
			
		||||
		if (P && ((unsigned int)(P - TextBegin) < TextSize - 1) && (*P != 0))
 | 
			
		||||
		{
 | 
			
		||||
			return parseCurrentNode();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the type of the current XML node.
 | 
			
		||||
	virtual EXML_NODE getNodeType() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return CurrentNodeType;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns attribute count of the current XML node.
 | 
			
		||||
	virtual unsigned int getAttributeCount() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return Attributes.size();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns name of an attribute.
 | 
			
		||||
	virtual const char_type* getAttributeName(int idx) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		if ((u32)idx >= Attributes.size())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return Attributes[idx].Name.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute.
 | 
			
		||||
	virtual const char_type* getAttributeValue(int idx) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		if ((unsigned int)idx >= Attributes.size())
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return Attributes[idx].Value.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute.
 | 
			
		||||
	virtual const char_type* getAttributeValue(const char_type* name) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const SAttribute* attr = getAttributeByName(name);
 | 
			
		||||
		if (!attr)
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return attr->Value.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute
 | 
			
		||||
	virtual const char_type* getAttributeValueSafe(const char_type* name) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const SAttribute* attr = getAttributeByName(name);
 | 
			
		||||
		if (!attr)
 | 
			
		||||
			return EmptyString.c_str();
 | 
			
		||||
 | 
			
		||||
		return attr->Value.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute as integer.
 | 
			
		||||
	virtual int getAttributeValueAsInt(const char_type* name, int defaultNotFound) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const SAttribute* attr = getAttributeByName(name);
 | 
			
		||||
		if (!attr)
 | 
			
		||||
			return defaultNotFound;
 | 
			
		||||
 | 
			
		||||
		core::stringc c(attr->Value.c_str());
 | 
			
		||||
		return core::strtol10(c.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute as integer.
 | 
			
		||||
	virtual int getAttributeValueAsInt(int idx, int defaultNotFound) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const char_type* attrvalue = getAttributeValue(idx);
 | 
			
		||||
		if (!attrvalue)
 | 
			
		||||
			return defaultNotFound;
 | 
			
		||||
 | 
			
		||||
		core::stringc c(attrvalue);
 | 
			
		||||
		return core::strtol10(c.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute as float.
 | 
			
		||||
	virtual float getAttributeValueAsFloat(const char_type* name, float defaultNotFound) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const SAttribute* attr = getAttributeByName(name);
 | 
			
		||||
		if (!attr)
 | 
			
		||||
			return defaultNotFound;
 | 
			
		||||
 | 
			
		||||
		core::stringc c = attr->Value.c_str();
 | 
			
		||||
		return core::fast_atof(c.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the value of an attribute as float.
 | 
			
		||||
	virtual float getAttributeValueAsFloat(int idx, float defaultNotFound) const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		const char_type* attrvalue = getAttributeValue(idx);
 | 
			
		||||
		if (!attrvalue)
 | 
			
		||||
			return defaultNotFound;
 | 
			
		||||
 | 
			
		||||
		core::stringc c = attrvalue;
 | 
			
		||||
		return core::fast_atof(c.c_str());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns the name of the current node.
 | 
			
		||||
	virtual const char_type* getNodeName() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return NodeName.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns data of the current node.
 | 
			
		||||
	virtual const char_type* getNodeData() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return NodeName.c_str();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Returns if an element is an empty element, like <foo />
 | 
			
		||||
	virtual bool isEmptyElement() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return IsEmptyElement;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! Returns format of the source xml file.
 | 
			
		||||
	virtual ETEXT_FORMAT getSourceFormat() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return SourceFormat;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! Returns format of the strings returned by the parser.
 | 
			
		||||
	virtual ETEXT_FORMAT getParserFormat() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return TargetFormat;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	// Reads the current xml node
 | 
			
		||||
	// return false if no further node is found
 | 
			
		||||
	bool parseCurrentNode()
 | 
			
		||||
	{
 | 
			
		||||
		char_type* start = P;
 | 
			
		||||
 | 
			
		||||
		// more forward until '<' found
 | 
			
		||||
		while(*P != L'<' && *P)
 | 
			
		||||
			++P;
 | 
			
		||||
 | 
			
		||||
		// not a node, so return false
 | 
			
		||||
		if (!*P)
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		if (P - start > 0)
 | 
			
		||||
		{
 | 
			
		||||
			// we found some text, store it
 | 
			
		||||
			if (setText(start, P))
 | 
			
		||||
				return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		++P;
 | 
			
		||||
 | 
			
		||||
		// based on current token, parse and report next element
 | 
			
		||||
		switch(*P)
 | 
			
		||||
		{
 | 
			
		||||
		case L'/':
 | 
			
		||||
			parseClosingXMLElement();
 | 
			
		||||
			break;
 | 
			
		||||
		case L'?':
 | 
			
		||||
			ignoreDefinition();
 | 
			
		||||
			break;
 | 
			
		||||
		case L'!':
 | 
			
		||||
			if (!parseCDATA())
 | 
			
		||||
				parseComment();
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			parseOpeningXMLElement();
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! sets the state that text was found. Returns true if set should be set
 | 
			
		||||
	bool setText(char_type* start, char_type* end)
 | 
			
		||||
	{
 | 
			
		||||
		// By default xml preserves all whitespace. But Irrlicht dropped some whitespace by default
 | 
			
		||||
		// in the past which did lead to OS dependent behavior. We just ignore all whitespace for now
 | 
			
		||||
		// as it's the closest to fixing behavior without breaking downward compatibility too much.
 | 
			
		||||
		if ( IgnoreWhitespaceText )
 | 
			
		||||
		{
 | 
			
		||||
			char_type* p = start;
 | 
			
		||||
			for(; p != end; ++p)
 | 
			
		||||
				if (!isWhiteSpace(*p))
 | 
			
		||||
					break;
 | 
			
		||||
 | 
			
		||||
			if (p == end)
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// set current text to the parsed text, and replace xml special characters
 | 
			
		||||
		core::string<char_type> s(start, (int)(end - start));
 | 
			
		||||
		NodeName = replaceSpecialCharacters(s);
 | 
			
		||||
 | 
			
		||||
		// current XML node type is text
 | 
			
		||||
		CurrentNodeType = EXN_TEXT;
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! ignores an xml definition like <?xml something />
 | 
			
		||||
	void ignoreDefinition()
 | 
			
		||||
	{
 | 
			
		||||
		CurrentNodeType = EXN_UNKNOWN;
 | 
			
		||||
 | 
			
		||||
		// move until end marked with '>' reached
 | 
			
		||||
		while(*P != L'>')
 | 
			
		||||
			++P;
 | 
			
		||||
 | 
			
		||||
		++P;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! parses a comment
 | 
			
		||||
	void parseComment()
 | 
			
		||||
	{
 | 
			
		||||
		CurrentNodeType = EXN_COMMENT;
 | 
			
		||||
		P += 1;
 | 
			
		||||
 | 
			
		||||
		char_type *pCommentBegin = P;
 | 
			
		||||
 | 
			
		||||
		int count = 1;
 | 
			
		||||
 | 
			
		||||
		// move until end of comment reached
 | 
			
		||||
		while(count)
 | 
			
		||||
		{
 | 
			
		||||
			if (*P == L'>')
 | 
			
		||||
				--count;
 | 
			
		||||
			else
 | 
			
		||||
			if (*P == L'<')
 | 
			
		||||
				++count;
 | 
			
		||||
 | 
			
		||||
			++P;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		P -= 3;
 | 
			
		||||
		NodeName = core::string<char_type>(pCommentBegin+2, (int)(P - pCommentBegin-2));
 | 
			
		||||
		P += 3;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! parses an opening xml element and reads attributes
 | 
			
		||||
	void parseOpeningXMLElement()
 | 
			
		||||
	{
 | 
			
		||||
		CurrentNodeType = EXN_ELEMENT;
 | 
			
		||||
		IsEmptyElement = false;
 | 
			
		||||
		Attributes.clear();
 | 
			
		||||
 | 
			
		||||
		// find name
 | 
			
		||||
		const char_type* startName = P;
 | 
			
		||||
 | 
			
		||||
		// find end of element
 | 
			
		||||
		while(*P != L'>' && !isWhiteSpace(*P))
 | 
			
		||||
			++P;
 | 
			
		||||
 | 
			
		||||
		const char_type* endName = P;
 | 
			
		||||
 | 
			
		||||
		// find Attributes
 | 
			
		||||
		while(*P != L'>')
 | 
			
		||||
		{
 | 
			
		||||
			if (isWhiteSpace(*P))
 | 
			
		||||
				++P;
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				if (*P != L'/')
 | 
			
		||||
				{
 | 
			
		||||
					// we've got an attribute
 | 
			
		||||
 | 
			
		||||
					// read the attribute names
 | 
			
		||||
					const char_type* attributeNameBegin = P;
 | 
			
		||||
 | 
			
		||||
					while(!isWhiteSpace(*P) && *P != L'=')
 | 
			
		||||
						++P;
 | 
			
		||||
 | 
			
		||||
					const char_type* attributeNameEnd = P;
 | 
			
		||||
					++P;
 | 
			
		||||
 | 
			
		||||
					// read the attribute value
 | 
			
		||||
					// check for quotes and single quotes, thx to murphy
 | 
			
		||||
					while( (*P != L'\"') && (*P != L'\'') && *P)
 | 
			
		||||
						++P;
 | 
			
		||||
 | 
			
		||||
					if (!*P) // malformatted xml file
 | 
			
		||||
						return;
 | 
			
		||||
 | 
			
		||||
					const char_type attributeQuoteChar = *P;
 | 
			
		||||
 | 
			
		||||
					++P;
 | 
			
		||||
					const char_type* attributeValueBegin = P;
 | 
			
		||||
 | 
			
		||||
					while(*P != attributeQuoteChar && *P)
 | 
			
		||||
						++P;
 | 
			
		||||
 | 
			
		||||
					if (!*P) // malformatted xml file
 | 
			
		||||
						return;
 | 
			
		||||
 | 
			
		||||
					const char_type* attributeValueEnd = P;
 | 
			
		||||
					++P;
 | 
			
		||||
 | 
			
		||||
					SAttribute attr;
 | 
			
		||||
					attr.Name = core::string<char_type>(attributeNameBegin,
 | 
			
		||||
						(int)(attributeNameEnd - attributeNameBegin));
 | 
			
		||||
 | 
			
		||||
					core::string<char_type> s(attributeValueBegin,
 | 
			
		||||
						(int)(attributeValueEnd - attributeValueBegin));
 | 
			
		||||
 | 
			
		||||
					attr.Value = replaceSpecialCharacters(s);
 | 
			
		||||
					Attributes.push_back(attr);
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					// tag is closed directly
 | 
			
		||||
					++P;
 | 
			
		||||
					IsEmptyElement = true;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// check if this tag is closing directly
 | 
			
		||||
		if (endName > startName && *(endName-1) == L'/')
 | 
			
		||||
		{
 | 
			
		||||
			// directly closing tag
 | 
			
		||||
			IsEmptyElement = true;
 | 
			
		||||
			endName--;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		NodeName = core::string<char_type>(startName, (int)(endName - startName));
 | 
			
		||||
 | 
			
		||||
		++P;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! parses an closing xml tag
 | 
			
		||||
	void parseClosingXMLElement()
 | 
			
		||||
	{
 | 
			
		||||
		CurrentNodeType = EXN_ELEMENT_END;
 | 
			
		||||
		IsEmptyElement = false;
 | 
			
		||||
		Attributes.clear();
 | 
			
		||||
 | 
			
		||||
		++P;
 | 
			
		||||
		const char_type* pBeginClose = P;
 | 
			
		||||
 | 
			
		||||
		while(*P != L'>')
 | 
			
		||||
			++P;
 | 
			
		||||
 | 
			
		||||
		NodeName = core::string<char_type>(pBeginClose, (int)(P - pBeginClose));
 | 
			
		||||
		++P;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! parses a possible CDATA section, returns false if begin was not a CDATA section
 | 
			
		||||
	bool parseCDATA()
 | 
			
		||||
	{
 | 
			
		||||
		if (*(P+1) != L'[')
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		CurrentNodeType = EXN_CDATA;
 | 
			
		||||
 | 
			
		||||
		// skip '<![CDATA['
 | 
			
		||||
		int count=0;
 | 
			
		||||
		while( *P && count<8 )
 | 
			
		||||
		{
 | 
			
		||||
			++P;
 | 
			
		||||
			++count;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!*P)
 | 
			
		||||
			return true;
 | 
			
		||||
 | 
			
		||||
		char_type *cDataBegin = P;
 | 
			
		||||
		char_type *cDataEnd = 0;
 | 
			
		||||
 | 
			
		||||
		// find end of CDATA
 | 
			
		||||
		while(*P && !cDataEnd)
 | 
			
		||||
		{
 | 
			
		||||
			if (*P == L'>' &&
 | 
			
		||||
				(*(P-1) == L']') &&
 | 
			
		||||
				(*(P-2) == L']'))
 | 
			
		||||
			{
 | 
			
		||||
				cDataEnd = P - 2;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			++P;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( cDataEnd )
 | 
			
		||||
			NodeName = core::string<char_type>(cDataBegin, (int)(cDataEnd - cDataBegin));
 | 
			
		||||
		else
 | 
			
		||||
			NodeName = "";
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// structure for storing attribute-name pairs
 | 
			
		||||
	struct SAttribute
 | 
			
		||||
	{
 | 
			
		||||
		core::string<char_type> Name;
 | 
			
		||||
		core::string<char_type> Value;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// finds a current attribute by name, returns 0 if not found
 | 
			
		||||
	const SAttribute* getAttributeByName(const char_type* name) const
 | 
			
		||||
	{
 | 
			
		||||
		if (!name)
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		core::string<char_type> n = name;
 | 
			
		||||
 | 
			
		||||
		for (int i=0; i<(int)Attributes.size(); ++i)
 | 
			
		||||
			if (Attributes[i].Name == n)
 | 
			
		||||
				return &Attributes[i];
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// replaces xml special characters in a string and creates a new one
 | 
			
		||||
	core::string<char_type> replaceSpecialCharacters(
 | 
			
		||||
		const core::string<char_type>& origstr)
 | 
			
		||||
	{
 | 
			
		||||
		int pos = origstr.findFirst(L'&');
 | 
			
		||||
		int oldPos = 0;
 | 
			
		||||
 | 
			
		||||
		if (pos == -1)
 | 
			
		||||
			return origstr;
 | 
			
		||||
 | 
			
		||||
		core::string<char_type> newstr;
 | 
			
		||||
 | 
			
		||||
		while(pos != -1 && pos < (int)origstr.size()-2)
 | 
			
		||||
		{
 | 
			
		||||
			// check if it is one of the special characters
 | 
			
		||||
 | 
			
		||||
			int specialChar = -1;
 | 
			
		||||
			for (int i=0; i<(int)SpecialCharacters.size(); ++i)
 | 
			
		||||
			{
 | 
			
		||||
				const char_type* p = &origstr.c_str()[pos]+1;
 | 
			
		||||
 | 
			
		||||
				if (equalsn(&SpecialCharacters[i][1], p, SpecialCharacters[i].size()-1))
 | 
			
		||||
				{
 | 
			
		||||
					specialChar = i;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (specialChar != -1)
 | 
			
		||||
			{
 | 
			
		||||
				newstr.append(origstr.subString(oldPos, pos - oldPos));
 | 
			
		||||
				newstr.append(SpecialCharacters[specialChar][0]);
 | 
			
		||||
				pos += SpecialCharacters[specialChar].size();
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				newstr.append(origstr.subString(oldPos, pos - oldPos + 1));
 | 
			
		||||
				pos += 1;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// find next &
 | 
			
		||||
			oldPos = pos;
 | 
			
		||||
			pos = origstr.findNext(L'&', pos);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (oldPos < (int)origstr.size()-1)
 | 
			
		||||
			newstr.append(origstr.subString(oldPos, origstr.size()-oldPos));
 | 
			
		||||
 | 
			
		||||
		return newstr;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! reads the xml file and converts it into the wanted character format.
 | 
			
		||||
	bool readFile(IFileReadCallBack* callback)
 | 
			
		||||
	{
 | 
			
		||||
		long size = callback->getSize();
 | 
			
		||||
		if (size<0)
 | 
			
		||||
			return false;
 | 
			
		||||
		// We need four terminating 0's at the end.
 | 
			
		||||
		// For ASCII we need 1 0's, for UTF-16 2, for UTF-32 4.
 | 
			
		||||
		size += 4;
 | 
			
		||||
 | 
			
		||||
		char* data8 = new char[size];
 | 
			
		||||
 | 
			
		||||
		if (!callback->read(data8, size-4))
 | 
			
		||||
		{
 | 
			
		||||
			delete [] data8;
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// add zeros at end
 | 
			
		||||
 | 
			
		||||
		memset(data8+size-4, 0, 4);
 | 
			
		||||
 | 
			
		||||
		char16* data16 = reinterpret_cast<char16*>(data8);
 | 
			
		||||
		char32* data32 = reinterpret_cast<char32*>(data8);
 | 
			
		||||
 | 
			
		||||
		// now we need to convert the data to the desired target format
 | 
			
		||||
		// based on the byte order mark.
 | 
			
		||||
 | 
			
		||||
		const unsigned char UTF8[] = {0xEF, 0xBB, 0xBF}; // 0xEFBBBF;
 | 
			
		||||
		const u16 UTF16_BE = 0xFFFE;
 | 
			
		||||
		const u16 UTF16_LE = 0xFEFF;
 | 
			
		||||
		const u32 UTF32_BE = 0xFFFE0000;
 | 
			
		||||
		const u32 UTF32_LE = 0x0000FEFF;
 | 
			
		||||
 | 
			
		||||
		// check source for all utf versions and convert to target data format
 | 
			
		||||
 | 
			
		||||
		if (size >= 4 && data32[0]
 | 
			
		||||
			== static_cast<char32>(UTF32_BE))
 | 
			
		||||
		{
 | 
			
		||||
			// UTF-32, big endian
 | 
			
		||||
			SourceFormat = ETF_UTF32_BE;
 | 
			
		||||
			convertTextData(data32+1, data8, (size/4)-1); // data32+1 because we need to skip the header
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (size >= 4 && data32[0] == static_cast<char32>(UTF32_LE))
 | 
			
		||||
		{
 | 
			
		||||
			// UTF-32, little endian
 | 
			
		||||
			SourceFormat = ETF_UTF32_LE;
 | 
			
		||||
			convertTextData(data32+1, data8, (size/4)-1); // data32+1 because we need to skip the header
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (size >= 2 && data16[0] == UTF16_BE)
 | 
			
		||||
		{
 | 
			
		||||
			// UTF-16, big endian
 | 
			
		||||
			SourceFormat = ETF_UTF16_BE;
 | 
			
		||||
			convertTextData(data16+1, data8, (size/2)-1); // data16+1 because we need to skip the header
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (size >= 2 && data16[0] == UTF16_LE)
 | 
			
		||||
		{
 | 
			
		||||
			// UTF-16, little endian
 | 
			
		||||
			SourceFormat = ETF_UTF16_LE;
 | 
			
		||||
			convertTextData(data16+1, data8, (size/2)-1); // data16+1 because we need to skip the header
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		if (size >= 3 && memcmp(data8,UTF8,3)==0)
 | 
			
		||||
		{
 | 
			
		||||
			// UTF-8
 | 
			
		||||
			SourceFormat = ETF_UTF8;
 | 
			
		||||
			convertTextData(data8+3, data8, size-3); // data8+3 because we need to skip the header
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// ASCII
 | 
			
		||||
			SourceFormat = ETF_ASCII;
 | 
			
		||||
			convertTextData(data8, data8, size);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! converts the text file into the desired format.
 | 
			
		||||
	/** \param source: begin of the text (without byte order mark)
 | 
			
		||||
	\param pointerToStore: pointer to text data block which can be
 | 
			
		||||
	stored or deleted based on the nesessary conversion.
 | 
			
		||||
	\param sizeWithoutHeader: Text size in characters without header
 | 
			
		||||
	*/
 | 
			
		||||
	template<class src_char_type>
 | 
			
		||||
	void convertTextData(src_char_type* source, char* pointerToStore, int sizeWithoutHeader)
 | 
			
		||||
	{
 | 
			
		||||
		// convert little to big endian if necessary
 | 
			
		||||
		if (sizeof(src_char_type) > 1 &&
 | 
			
		||||
			isLittleEndian(TargetFormat) != isLittleEndian(SourceFormat))
 | 
			
		||||
			convertToLittleEndian(source);
 | 
			
		||||
 | 
			
		||||
		// check if conversion is necessary:
 | 
			
		||||
		if (sizeof(src_char_type) == sizeof(char_type))
 | 
			
		||||
		{
 | 
			
		||||
			// no need to convert
 | 
			
		||||
			TextBegin = (char_type*)source;
 | 
			
		||||
			TextData = (char_type*)pointerToStore;
 | 
			
		||||
			TextSize = sizeWithoutHeader;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// convert source into target data format.
 | 
			
		||||
			// TODO: implement a real conversion. This one just
 | 
			
		||||
			// copies bytes. This is a problem when there are
 | 
			
		||||
			// unicode symbols using more than one character.
 | 
			
		||||
 | 
			
		||||
			TextData = new char_type[sizeWithoutHeader];
 | 
			
		||||
 | 
			
		||||
			if ( sizeof(src_char_type) == 1 )
 | 
			
		||||
			{
 | 
			
		||||
				// we have to cast away negative numbers or results might add the sign instead of just doing a copy
 | 
			
		||||
				for (int i=0; i<sizeWithoutHeader; ++i)
 | 
			
		||||
				{
 | 
			
		||||
					TextData[i] = static_cast<char_type>(static_cast<unsigned char>(source[i]));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				for (int i=0; i<sizeWithoutHeader; ++i)
 | 
			
		||||
					TextData[i] = static_cast<char_type>(source[i]);
 | 
			
		||||
			}
 | 
			
		||||
			TextBegin = TextData;
 | 
			
		||||
			TextSize = sizeWithoutHeader;
 | 
			
		||||
 | 
			
		||||
			// delete original data because no longer needed
 | 
			
		||||
			delete [] pointerToStore;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! converts whole text buffer to little endian
 | 
			
		||||
	template<class src_char_type>
 | 
			
		||||
	void convertToLittleEndian(src_char_type* t)
 | 
			
		||||
	{
 | 
			
		||||
		if (sizeof(src_char_type) == 4)
 | 
			
		||||
		{
 | 
			
		||||
			// 32 bit
 | 
			
		||||
 | 
			
		||||
			while(*t)
 | 
			
		||||
			{
 | 
			
		||||
				*t = ((*t & 0xff000000) >> 24) |
 | 
			
		||||
					((*t & 0x00ff0000) >> 8)  |
 | 
			
		||||
					((*t & 0x0000ff00) << 8)  |
 | 
			
		||||
					((*t & 0x000000ff) << 24);
 | 
			
		||||
				++t;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			// 16 bit
 | 
			
		||||
 | 
			
		||||
			while(*t)
 | 
			
		||||
			{
 | 
			
		||||
				*t = (*t >> 8) | (*t << 8);
 | 
			
		||||
				++t;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! returns if a format is little endian
 | 
			
		||||
	inline bool isLittleEndian(ETEXT_FORMAT f)
 | 
			
		||||
	{
 | 
			
		||||
		return f == ETF_ASCII ||
 | 
			
		||||
			f == ETF_UTF8 ||
 | 
			
		||||
			f == ETF_UTF16_LE ||
 | 
			
		||||
			f == ETF_UTF32_LE;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! returns true if a character is whitespace
 | 
			
		||||
	inline bool isWhiteSpace(char_type c)
 | 
			
		||||
	{
 | 
			
		||||
		return (c==' ' || c=='\t' || c=='\n' || c=='\r');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! generates a list with xml special characters
 | 
			
		||||
	void createSpecialCharacterList()
 | 
			
		||||
	{
 | 
			
		||||
		// list of strings containing special symbols,
 | 
			
		||||
		// the first character is the special character,
 | 
			
		||||
		// the following is the symbol string without trailing &.
 | 
			
		||||
 | 
			
		||||
		SpecialCharacters.push_back("&");
 | 
			
		||||
		SpecialCharacters.push_back("<lt;");
 | 
			
		||||
		SpecialCharacters.push_back(">gt;");
 | 
			
		||||
		SpecialCharacters.push_back("\"quot;");
 | 
			
		||||
		SpecialCharacters.push_back("'apos;");
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! compares the first n characters of the strings
 | 
			
		||||
	bool equalsn(const char_type* str1, const char_type* str2, int len)
 | 
			
		||||
	{
 | 
			
		||||
		int i;
 | 
			
		||||
		for(i=0; str1[i] && str2[i] && i < len; ++i)
 | 
			
		||||
			if (str1[i] != str2[i])
 | 
			
		||||
				return false;
 | 
			
		||||
 | 
			
		||||
		// if one (or both) of the strings was smaller then they
 | 
			
		||||
		// are only equal if they have the same length
 | 
			
		||||
		return (i == len) || (str1[i] == 0 && str2[i] == 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! stores the target text format
 | 
			
		||||
	void storeTargetFormat()
 | 
			
		||||
	{
 | 
			
		||||
		// get target format. We could have done this using template specialization,
 | 
			
		||||
		// but VisualStudio 6 don't like it and we want to support it.
 | 
			
		||||
 | 
			
		||||
		switch(sizeof(char_type))
 | 
			
		||||
		{
 | 
			
		||||
		case 1:
 | 
			
		||||
			TargetFormat = ETF_UTF8;
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:
 | 
			
		||||
			TargetFormat = ETF_UTF16_LE;
 | 
			
		||||
			break;
 | 
			
		||||
		case 4:
 | 
			
		||||
			TargetFormat = ETF_UTF32_LE;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			TargetFormat = ETF_ASCII; // should never happen.
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// instance variables:
 | 
			
		||||
	bool IgnoreWhitespaceText;   // do not return EXN_TEXT nodes for pure whitespace
 | 
			
		||||
	char_type* TextData;         // data block of the text file
 | 
			
		||||
	char_type* P;                // current point in text to parse
 | 
			
		||||
	char_type* TextBegin;        // start of text to parse
 | 
			
		||||
	unsigned int TextSize;       // size of text to parse in characters, not bytes
 | 
			
		||||
 | 
			
		||||
	EXML_NODE CurrentNodeType;   // type of the currently parsed node
 | 
			
		||||
	ETEXT_FORMAT SourceFormat;   // source format of the xml file
 | 
			
		||||
	ETEXT_FORMAT TargetFormat;   // output format of this parser
 | 
			
		||||
 | 
			
		||||
	core::string<char_type> NodeName;    // name of the node currently in - also used for text
 | 
			
		||||
	core::string<char_type> EmptyString; // empty string to be returned by getSafe() methods
 | 
			
		||||
 | 
			
		||||
	bool IsEmptyElement;       // is the currently parsed node empty?
 | 
			
		||||
 | 
			
		||||
	core::array< core::string<char_type> > SpecialCharacters; // see createSpecialCharacterList()
 | 
			
		||||
 | 
			
		||||
	core::array<SAttribute> Attributes; // attributes of current element
 | 
			
		||||
 | 
			
		||||
}; // end CXMLReaderImpl
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace
 | 
			
		||||
} // end namespace
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1,472 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#include "CXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
#include <wchar.h>
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "IrrCompileConfig.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//! creates an IXMLReader
 | 
			
		||||
IXMLWriter* createIXMLWriter(IWriteFile* file)
 | 
			
		||||
{
 | 
			
		||||
	return new CXMLWriter(file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! creates an IXMLReader
 | 
			
		||||
IXMLWriterUTF8* createIXMLWriterUTF8(IWriteFile* file)
 | 
			
		||||
{
 | 
			
		||||
	return new CXMLWriterUTF8(file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Constructor
 | 
			
		||||
CXMLWriter::CXMLWriter(IWriteFile* file)
 | 
			
		||||
: CXMLWriterCommon(file) 
 | 
			
		||||
{
 | 
			
		||||
	#ifdef _DEBUG
 | 
			
		||||
	setDebugName("CXMLWriter");
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a xml 1.0 header like <?xml version="1.0"?>
 | 
			
		||||
void CXMLWriter::writeXMLHeader()
 | 
			
		||||
{
 | 
			
		||||
	if (!File)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (sizeof(wchar_t)==2)
 | 
			
		||||
	{
 | 
			
		||||
		const u16 h = 0xFEFF;
 | 
			
		||||
		File->write(&h, 2);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		const u32 h = 0x0000FEFF;
 | 
			
		||||
		File->write(&h, sizeof(wchar_t));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const wchar_t* const p = L"<?xml version=\"1.0\"?>";
 | 
			
		||||
	File->write(p, wcslen(p)*sizeof(wchar_t));
 | 
			
		||||
 | 
			
		||||
	writeLineBreak();
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes an xml element with maximal 5 attributes
 | 
			
		||||
void CXMLWriter::writeElement(const wchar_t* name, bool empty,
 | 
			
		||||
	const wchar_t* attr1Name, const wchar_t* attr1Value,
 | 
			
		||||
	const wchar_t* attr2Name, const wchar_t* attr2Value,
 | 
			
		||||
	const wchar_t* attr3Name, const wchar_t* attr3Value,
 | 
			
		||||
	const wchar_t* attr4Name, const wchar_t* attr4Value,
 | 
			
		||||
	const wchar_t* attr5Name, const wchar_t* attr5Value)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write(L"\t", sizeof(wchar_t));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write name
 | 
			
		||||
 | 
			
		||||
	File->write(L"<", sizeof(wchar_t));
 | 
			
		||||
	File->write(name, wcslen(name)*sizeof(wchar_t));
 | 
			
		||||
 | 
			
		||||
	// write attributes
 | 
			
		||||
 | 
			
		||||
	writeAttribute(attr1Name, attr1Value);
 | 
			
		||||
	writeAttribute(attr2Name, attr2Value);
 | 
			
		||||
	writeAttribute(attr3Name, attr3Value);
 | 
			
		||||
	writeAttribute(attr4Name, attr4Value);
 | 
			
		||||
	writeAttribute(attr5Name, attr5Value);
 | 
			
		||||
 | 
			
		||||
	// write closing tag
 | 
			
		||||
	if (empty)
 | 
			
		||||
		File->write(L" />", 3*sizeof(wchar_t));
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		File->write(L">", sizeof(wchar_t));
 | 
			
		||||
		++Tabs;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Writes an xml element with any number of attributes
 | 
			
		||||
void CXMLWriter::writeElement(const wchar_t* name, bool empty,
 | 
			
		||||
				  core::array<core::stringw> &names,
 | 
			
		||||
				  core::array<core::stringw> &values)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write(L"\t", sizeof(wchar_t));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write name
 | 
			
		||||
 | 
			
		||||
	File->write(L"<", sizeof(wchar_t));
 | 
			
		||||
	File->write(name, wcslen(name)*sizeof(wchar_t));
 | 
			
		||||
 | 
			
		||||
	// write attributes
 | 
			
		||||
	u32 i=0;
 | 
			
		||||
	for (; i < names.size() && i < values.size(); ++i)
 | 
			
		||||
		writeAttribute(names[i].c_str(), values[i].c_str());
 | 
			
		||||
 | 
			
		||||
	// write closing tag
 | 
			
		||||
	if (empty)
 | 
			
		||||
		File->write(L" />", 3*sizeof(wchar_t));
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		File->write(L">", sizeof(wchar_t));
 | 
			
		||||
		++Tabs;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CXMLWriter::writeAttribute(const wchar_t* name, const wchar_t* value)
 | 
			
		||||
{
 | 
			
		||||
	if (!name || !value)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	File->write(L" ", sizeof(wchar_t));
 | 
			
		||||
	File->write(name, wcslen(name)*sizeof(wchar_t));
 | 
			
		||||
	File->write(L"=\"", 2*sizeof(wchar_t));
 | 
			
		||||
	writeText(value);
 | 
			
		||||
	File->write(L"\"", sizeof(wchar_t));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a comment into the xml file
 | 
			
		||||
void CXMLWriter::writeComment(const wchar_t* comment)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !comment)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	File->write(L"<!--", 4*sizeof(wchar_t));
 | 
			
		||||
	writeText(comment);
 | 
			
		||||
	File->write(L"-->", 3*sizeof(wchar_t));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes the closing tag for an element. Like </foo>
 | 
			
		||||
void CXMLWriter::writeClosingTag(const wchar_t* name)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	--Tabs;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0 && !TextWrittenLast)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write(L"\t", sizeof(wchar_t));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	File->write(L"</", 2*sizeof(wchar_t));
 | 
			
		||||
	File->write(name, wcslen(name)*sizeof(wchar_t));
 | 
			
		||||
	File->write(L">", sizeof(wchar_t));
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Writes a text into the file. All occurrences of special characters like
 | 
			
		||||
//! & (&), < (<), > (>), and " (") are automatically replaced.
 | 
			
		||||
void CXMLWriter::writeText(const wchar_t* text)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !text)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	static const CXMLWriter::XMLSpecialCharacters XMLWSChar[] =
 | 
			
		||||
	{
 | 
			
		||||
		{ L'&', L"&" },
 | 
			
		||||
		{ L'<', L"<" },
 | 
			
		||||
		{ L'>', L">" },
 | 
			
		||||
		{ L'"', L""" },
 | 
			
		||||
		{ L'\0', 0 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// TODO: we have to get rid of that reserve call as well as it slows down xml-writing seriously.
 | 
			
		||||
	// Making a member-variable would work, but a lot of memory would stay around after writing.
 | 
			
		||||
	// So the correct solution is probably using fixed block here and always write when that is full.
 | 
			
		||||
	core::stringw s;
 | 
			
		||||
	s.reserve(wcslen(text)+1);
 | 
			
		||||
	const wchar_t* p = text;
 | 
			
		||||
 | 
			
		||||
	while(*p)
 | 
			
		||||
	{
 | 
			
		||||
		// check if it is matching
 | 
			
		||||
		bool found = false;
 | 
			
		||||
		for (s32 i=0; XMLWSChar[i].Character != '\0'; ++i)
 | 
			
		||||
			if (*p == XMLWSChar[i].Character)
 | 
			
		||||
			{
 | 
			
		||||
				s.append(XMLWSChar[i].Symbol);
 | 
			
		||||
				found = true;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!found)
 | 
			
		||||
			s.append(*p);
 | 
			
		||||
		++p;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write new string
 | 
			
		||||
	File->write(s.c_str(), s.size()*sizeof(wchar_t));
 | 
			
		||||
	TextWrittenLast = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a line break
 | 
			
		||||
void CXMLWriter::writeLineBreak()
 | 
			
		||||
{
 | 
			
		||||
	if (!File)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
#if defined(_IRR_OSX_PLATFORM_)
 | 
			
		||||
	File->write(L"\r", sizeof(wchar_t));
 | 
			
		||||
#elif defined(_IRR_WINDOWS_API_)
 | 
			
		||||
	File->write(L"\r\n", 2*sizeof(wchar_t));
 | 
			
		||||
#else
 | 
			
		||||
	File->write(L"\n", sizeof(wchar_t));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Constructor
 | 
			
		||||
CXMLWriterUTF8::CXMLWriterUTF8(IWriteFile* file)
 | 
			
		||||
: CXMLWriterCommon(file) 
 | 
			
		||||
{
 | 
			
		||||
	#ifdef _DEBUG
 | 
			
		||||
	setDebugName("CXMLWriter");
 | 
			
		||||
	#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a xml 1.0 header like <?xml version="1.0"?>
 | 
			
		||||
void CXMLWriterUTF8::writeXMLHeader()
 | 
			
		||||
{
 | 
			
		||||
	if (!File)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	// No BOM as it's not necessarily utf8
 | 
			
		||||
 | 
			
		||||
	const c8* const p = "<?xml version=\"1.0\"?>";
 | 
			
		||||
	File->write(p, strlen(p) * sizeof(c8));
 | 
			
		||||
 | 
			
		||||
	writeLineBreak();
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes an xml element with maximal 5 attributes
 | 
			
		||||
void CXMLWriterUTF8::writeElement(const c8* name, bool empty,
 | 
			
		||||
	const c8* attr1Name, const c8* attr1Value,
 | 
			
		||||
	const c8* attr2Name, const c8* attr2Value,
 | 
			
		||||
	const c8* attr3Name, const c8* attr3Value,
 | 
			
		||||
	const c8* attr4Name, const c8* attr4Value,
 | 
			
		||||
	const c8* attr5Name, const c8* attr5Value)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write("\t", sizeof(c8));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write name
 | 
			
		||||
 | 
			
		||||
	File->write("<", sizeof(c8));
 | 
			
		||||
	File->write(name, strlen(name)*sizeof(c8));
 | 
			
		||||
 | 
			
		||||
	// write attributes
 | 
			
		||||
 | 
			
		||||
	writeAttribute(attr1Name, attr1Value);
 | 
			
		||||
	writeAttribute(attr2Name, attr2Value);
 | 
			
		||||
	writeAttribute(attr3Name, attr3Value);
 | 
			
		||||
	writeAttribute(attr4Name, attr4Value);
 | 
			
		||||
	writeAttribute(attr5Name, attr5Value);
 | 
			
		||||
 | 
			
		||||
	// write closing tag
 | 
			
		||||
	if (empty)
 | 
			
		||||
		File->write(" />", 3*sizeof(c8));
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		File->write(">", sizeof(c8));
 | 
			
		||||
		++Tabs;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Writes an xml element with any number of attributes
 | 
			
		||||
void CXMLWriterUTF8::writeElement(const c8* name, bool empty,
 | 
			
		||||
				  core::array<core::stringc> &names,
 | 
			
		||||
				  core::array<core::stringc> &values)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write("\t", sizeof(c8));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write name
 | 
			
		||||
 | 
			
		||||
	File->write("<", sizeof(c8));
 | 
			
		||||
	File->write(name, strlen(name)*sizeof(c8));
 | 
			
		||||
 | 
			
		||||
	// write attributes
 | 
			
		||||
	u32 i=0;
 | 
			
		||||
	for (; i < names.size() && i < values.size(); ++i)
 | 
			
		||||
		writeAttribute(names[i].c_str(), values[i].c_str());
 | 
			
		||||
 | 
			
		||||
	// write closing tag
 | 
			
		||||
	if (empty)
 | 
			
		||||
		File->write(" />", 3*sizeof(c8));
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		File->write(">", sizeof(c8));
 | 
			
		||||
		++Tabs;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void CXMLWriterUTF8::writeAttribute(const c8* name, const c8* value)
 | 
			
		||||
{
 | 
			
		||||
	if (!name || !value)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	File->write(" ", sizeof(c8));
 | 
			
		||||
	File->write(name, strlen(name)*sizeof(c8));
 | 
			
		||||
	File->write("=\"", 2*sizeof(c8));
 | 
			
		||||
	writeText(value);
 | 
			
		||||
	File->write("\"", sizeof(c8));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a comment into the xml file
 | 
			
		||||
void CXMLWriterUTF8::writeComment(const c8* comment)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !comment)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	File->write("<!--", 4*sizeof(c8));
 | 
			
		||||
	writeText(comment);
 | 
			
		||||
	File->write("-->", 3*sizeof(c8));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes the closing tag for an element. Like </foo>
 | 
			
		||||
void CXMLWriterUTF8::writeClosingTag(const c8* name)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !name)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	--Tabs;
 | 
			
		||||
 | 
			
		||||
	if (Tabs > 0 && !TextWrittenLast)
 | 
			
		||||
	{
 | 
			
		||||
		for (int i=0; i<Tabs; ++i)
 | 
			
		||||
			File->write("\t", sizeof(c8));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	File->write("</", 2*sizeof(c8));
 | 
			
		||||
	File->write(name, strlen(name)*sizeof(c8));
 | 
			
		||||
	File->write(">", sizeof(c8));
 | 
			
		||||
	TextWrittenLast = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a text into the file. All occurrences of special characters like
 | 
			
		||||
//! & (&), < (<), > (>), and " (") are automatically replaced.
 | 
			
		||||
void CXMLWriterUTF8::writeText(const c8* text)
 | 
			
		||||
{
 | 
			
		||||
	if (!File || !text)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	static const CXMLWriterUTF8::XMLSpecialCharacters XMLWSChar[] =
 | 
			
		||||
	{
 | 
			
		||||
		{ '&', "&" },
 | 
			
		||||
		{ '<', "<" },
 | 
			
		||||
		{ '>', ">" },
 | 
			
		||||
		{ '"', """ },
 | 
			
		||||
		{ '\0', 0 }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// TODO: we have to get rid of that reserve call as well as it slows down xml-writing seriously.
 | 
			
		||||
	// Making a member-variable would work, but a lot of memory would stay around after writing.
 | 
			
		||||
	// So the correct solution is probably using fixed block here and always write when that is full.
 | 
			
		||||
	core::stringc s;
 | 
			
		||||
	s.reserve(strlen(text)+1);
 | 
			
		||||
	const c8* p = text;
 | 
			
		||||
 | 
			
		||||
	while(*p)
 | 
			
		||||
	{
 | 
			
		||||
		// check if it is matching
 | 
			
		||||
		bool found = false;
 | 
			
		||||
		for (s32 i=0; XMLWSChar[i].Character != '\0'; ++i)
 | 
			
		||||
			if (*p == XMLWSChar[i].Character)
 | 
			
		||||
			{
 | 
			
		||||
				s.append(XMLWSChar[i].Symbol);
 | 
			
		||||
				found = true;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		if (!found)
 | 
			
		||||
			s.append(*p);
 | 
			
		||||
		++p;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// write new string
 | 
			
		||||
	File->write(s.c_str(), s.size()*sizeof(c8));
 | 
			
		||||
	TextWrittenLast = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Writes a line break
 | 
			
		||||
void CXMLWriterUTF8::writeLineBreak()
 | 
			
		||||
{
 | 
			
		||||
	if (!File)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
#if defined(_IRR_OSX_PLATFORM_)
 | 
			
		||||
	File->write("\r", sizeof(c8));
 | 
			
		||||
#elif defined(_IRR_WINDOWS_API_)
 | 
			
		||||
	File->write("\r\n", 2*sizeof(c8));
 | 
			
		||||
#else
 | 
			
		||||
	File->write("\n", sizeof(c8));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
} // end namespace io
 | 
			
		||||
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
@@ -1,156 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine".
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h
 | 
			
		||||
 | 
			
		||||
#ifndef __C_XML_WRITER_H_INCLUDED__
 | 
			
		||||
#define __C_XML_WRITER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "IXMLWriter.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
#include <wchar.h>
 | 
			
		||||
#include "IWriteFile.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! creates an IXMLReader
 | 
			
		||||
	IXMLWriter* createIXMLWriter(IWriteFile* file);
 | 
			
		||||
 | 
			
		||||
	//! creates an IXMLReader
 | 
			
		||||
	IXMLWriterUTF8* createIXMLWriterUTF8(IWriteFile* file);
 | 
			
		||||
 | 
			
		||||
	// Stuff needed by implementations for all character types
 | 
			
		||||
	// TODO: With some more work it could maybe become a pure template based thing like CXMLReaderImpl
 | 
			
		||||
	//		and replace the type based writer implementations. Sorry, too lazy for now :-/
 | 
			
		||||
	template<class char_type>
 | 
			
		||||
	class CXMLWriterCommon
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
		//! Constructor
 | 
			
		||||
		CXMLWriterCommon(IWriteFile* file): File(file), Tabs(0), TextWrittenLast(false)
 | 
			
		||||
		{
 | 
			
		||||
			if (File)
 | 
			
		||||
				File->grab();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~CXMLWriterCommon()
 | 
			
		||||
		{
 | 
			
		||||
			if (File)
 | 
			
		||||
				File->drop();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		struct XMLSpecialCharacters
 | 
			
		||||
		{
 | 
			
		||||
			char_type Character;
 | 
			
		||||
			const char_type* Symbol;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
		IWriteFile* File;
 | 
			
		||||
		s32 Tabs;
 | 
			
		||||
 | 
			
		||||
		bool TextWrittenLast;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Implementation providing methods for making it easier to write XML files.
 | 
			
		||||
	class CXMLWriter : public IXMLWriter, public CXMLWriterCommon<wchar_t>
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Constructor
 | 
			
		||||
		CXMLWriter(IWriteFile* file);
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~CXMLWriter() {}
 | 
			
		||||
 | 
			
		||||
		//! Writes a xml 1.0 header like <?xml version="1.0"?>
 | 
			
		||||
		virtual void writeXMLHeader() _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with maximal 5 attributes
 | 
			
		||||
		virtual void writeElement(const wchar_t* name, bool empty=false,
 | 
			
		||||
			const wchar_t* attr1Name = 0, const wchar_t* attr1Value = 0,
 | 
			
		||||
			const wchar_t* attr2Name = 0, const wchar_t* attr2Value = 0,
 | 
			
		||||
			const wchar_t* attr3Name = 0, const wchar_t* attr3Value = 0,
 | 
			
		||||
			const wchar_t* attr4Name = 0, const wchar_t* attr4Value = 0,
 | 
			
		||||
			const wchar_t* attr5Name = 0, const wchar_t* attr5Value = 0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with any number of attributes
 | 
			
		||||
		virtual void writeElement(const wchar_t* name, bool empty,
 | 
			
		||||
				core::array<core::stringw> &names, core::array<core::stringw> &values) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a comment into the xml file
 | 
			
		||||
		virtual void writeComment(const wchar_t* comment) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes the closing tag for an element. Like </foo>
 | 
			
		||||
		virtual void writeClosingTag(const wchar_t* name) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a text into the file. All occurrences of special characters like
 | 
			
		||||
		//! & (&), < (<), > (>), and " (") are automatically replaced.
 | 
			
		||||
		virtual void writeText(const wchar_t* text) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a line break
 | 
			
		||||
		virtual void writeLineBreak() _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
 | 
			
		||||
		void writeAttribute(const wchar_t* att, const wchar_t* name);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	//! Implementation providing methods for making it easier to write XML files.
 | 
			
		||||
	class CXMLWriterUTF8 : public IXMLWriterUTF8, public CXMLWriterCommon<c8>
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Constructor
 | 
			
		||||
		CXMLWriterUTF8(IWriteFile* file);
 | 
			
		||||
 | 
			
		||||
		//! Destructor
 | 
			
		||||
		virtual ~CXMLWriterUTF8() {}
 | 
			
		||||
 | 
			
		||||
		//! Writes a xml 1.0 header like <?xml version="1.0"?>
 | 
			
		||||
		virtual void writeXMLHeader() _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with maximal 5 attributes
 | 
			
		||||
		virtual void writeElement(const c8* name, bool empty=false,
 | 
			
		||||
			const c8* attr1Name = 0, const c8* attr1Value = 0,
 | 
			
		||||
			const c8* attr2Name = 0, const c8* attr2Value = 0,
 | 
			
		||||
			const c8* attr3Name = 0, const c8* attr3Value = 0,
 | 
			
		||||
			const c8* attr4Name = 0, const c8* attr4Value = 0,
 | 
			
		||||
			const c8* attr5Name = 0, const c8* attr5Value = 0) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes an xml element with any number of attributes
 | 
			
		||||
		virtual void writeElement(const c8* name, bool empty,
 | 
			
		||||
				core::array<core::stringc> &names, core::array<core::stringc> &values) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a comment into the xml file
 | 
			
		||||
		virtual void writeComment(const c8* comment) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes the closing tag for an element. Like </foo>
 | 
			
		||||
		virtual void writeClosingTag(const c8* name) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a text into the file. All occurrences of special characters like
 | 
			
		||||
		//! & (&), < (<), > (>), and " (") are automatically replaced.
 | 
			
		||||
		virtual void writeText(const c8* text) _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
		//! Writes a line break
 | 
			
		||||
		virtual void writeLineBreak() _IRR_OVERRIDE_;
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
 | 
			
		||||
		void writeAttribute(const c8* att, const c8* name);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
} // end namespace io
 | 
			
		||||
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1,185 +0,0 @@
 | 
			
		||||
// Copyright (C) 2002-2012 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "Irrlicht Engine" and the "irrXML" project.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h
 | 
			
		||||
 | 
			
		||||
#include "irrXML.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _IRR_COMPILE_WITH_XML_
 | 
			
		||||
 | 
			
		||||
#include "irrString.h"
 | 
			
		||||
#include "irrArray.h"
 | 
			
		||||
#include "fast_atof.h"
 | 
			
		||||
#include "CXMLReaderImpl.h"
 | 
			
		||||
 | 
			
		||||
namespace irr
 | 
			
		||||
{
 | 
			
		||||
namespace io
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//! Implementation of the file read callback for ordinary files
 | 
			
		||||
class CFileReadCallBack : public IFileReadCallBack
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! construct from filename
 | 
			
		||||
	CFileReadCallBack(const char* filename)
 | 
			
		||||
		: File(0), Size(-1), Close(true)
 | 
			
		||||
	{
 | 
			
		||||
		// open file
 | 
			
		||||
		File = fopen(filename, "rb");
 | 
			
		||||
 | 
			
		||||
		if (File)
 | 
			
		||||
			getFileSize();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! construct from FILE pointer
 | 
			
		||||
	CFileReadCallBack(FILE* file)
 | 
			
		||||
		: File(file), Size(-1), Close(false)
 | 
			
		||||
	{
 | 
			
		||||
		if (File)
 | 
			
		||||
			getFileSize();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~CFileReadCallBack()
 | 
			
		||||
	{
 | 
			
		||||
		if (Close && File)
 | 
			
		||||
			fclose(File);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! Reads an amount of bytes from the file.
 | 
			
		||||
	virtual int read(void* buffer, int sizeToRead) _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		if (!File)
 | 
			
		||||
			return 0;
 | 
			
		||||
 | 
			
		||||
		return (int)fread(buffer, 1, sizeToRead, File);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//! Returns size of file in bytes
 | 
			
		||||
	virtual long getSize() const _IRR_OVERRIDE_
 | 
			
		||||
	{
 | 
			
		||||
		return Size;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
	//! retrieves the file size of the open file
 | 
			
		||||
	void getFileSize()
 | 
			
		||||
	{
 | 
			
		||||
		fseek(File, 0, SEEK_END);
 | 
			
		||||
		Size = ftell(File);
 | 
			
		||||
		fseek(File, 0, SEEK_SET);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	FILE* File;
 | 
			
		||||
	long Size;
 | 
			
		||||
	bool Close;
 | 
			
		||||
 | 
			
		||||
}; // end class CFileReadCallBack
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// FACTORY FUNCTIONS:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(const char* filename)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReader(new CFileReadCallBack(filename), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(FILE* file)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReader(new CFileReadCallBack(file), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UFT-8 or ASCII character xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(IFileReadCallBack* callback,
 | 
			
		||||
														  bool deleteCallback)
 | 
			
		||||
{
 | 
			
		||||
	if (callback && (callback->getSize() >= 0))
 | 
			
		||||
	{
 | 
			
		||||
		return new CXMLReaderImpl<char, IXMLBase>(callback, deleteCallback);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if(callback && deleteCallback)
 | 
			
		||||
			delete callback;
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-16 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(const char* filename)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReaderUTF16(new CFileReadCallBack(filename), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-16 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(FILE* file)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReaderUTF16(new CFileReadCallBack(file), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-16 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(IFileReadCallBack* callback,
 | 
			
		||||
																	bool deleteCallback)
 | 
			
		||||
{
 | 
			
		||||
	if (callback && (callback->getSize() >= 0))
 | 
			
		||||
	{
 | 
			
		||||
		return new CXMLReaderImpl<char16, IXMLBase>(callback, deleteCallback);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if(callback && deleteCallback)
 | 
			
		||||
			delete callback;
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-32 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(const char* filename)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReaderUTF32(new CFileReadCallBack(filename), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-32 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(FILE* file)
 | 
			
		||||
{
 | 
			
		||||
	return createIrrXMLReaderUTF32(new CFileReadCallBack(file), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Creates an instance of an UTF-32 xml parser.
 | 
			
		||||
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(
 | 
			
		||||
		IFileReadCallBack* callback, bool deleteCallback)
 | 
			
		||||
{
 | 
			
		||||
	if (callback && (callback->getSize() >= 0))
 | 
			
		||||
	{
 | 
			
		||||
		return new CXMLReaderImpl<char32, IXMLBase>(callback, deleteCallback);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		if(callback && deleteCallback)
 | 
			
		||||
			delete callback;
 | 
			
		||||
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace io
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif // _IRR_COMPILE_WITH_XML_
 | 
			
		||||
		Reference in New Issue
	
	Block a user